ActivitiesPane.js 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. "use strict";
  2. /**
  3. * Licensed Materials - Property of IBM
  4. * IBM Cognos Products: Manage
  5. * Copyright IBM Corp. 2015, 2021
  6. * US Government Users Restricted Rights
  7. * Use, duplication or disclosure restricted by GSA ADP Schedule Contract with IBM Corp.
  8. */
  9. define(['rave2', 'bi/admin/common/visualizations/VizBar', 'bi/admin/common/visualizations/VizStackedBar', 'bi/admin/common/utils/CapabilityHelper', 'bi/admin/nls/StringResource', 'react', 'react-dom', 'ba-react-admin/ba-react-admin.min', 'bi/commons/utils/DateTimeUtils', 'bi/commons/ui/AccessibleView', 'bacontentnav/ui/dialogs/OpenDialog', 'doT', 'moment-timezone', 'bacontentnav/utils/ContentStoreObject'], function (rave, VizBar, VizStackedBar, CapabilityHelper, StringResource, React, ReactDOM, AdminReact, DateTimeUtils, AccessibleView, OpenDialog, doT, moment, ContentStoreObject) {
  10. //NOSONAR: needed for amd
  11. var ActivitiesPane = AccessibleView.extend({
  12. init: function init(options) {
  13. ActivitiesPane.inherited('init', this, arguments);
  14. $.extend(this, options);
  15. this.modifiedStamp = '';
  16. if (!ContentStoreObject.glassContext) {
  17. ContentStoreObject.setGlassContext(this.glassContext);
  18. }
  19. },
  20. getTitle: function getTitle() {
  21. return StringResource.get('activities');
  22. },
  23. getIcon: function getIcon() {
  24. return 'common-subscribe_icon';
  25. },
  26. render: function render() {
  27. this.$el.css('height', '100%');
  28. this.$el.css('width', '100%');
  29. this.$el.css('display', 'flex');
  30. this.$el.css('flex-direction', 'column');
  31. this.$el.append('<div class="bi-admin-runAsDialog"></div>');
  32. this.$el.append('<div id="mng-activities-container" style="display: flex; flex-direction: column; height: 100%; position: relative;"></div>');
  33. var activitiesView = React.createElement(AdminReact.ActivitiesView, {
  34. StringResource: StringResource,
  35. glassContext: this.glassContext,
  36. CapabilityHelper: CapabilityHelper,
  37. pane: this,
  38. DateTimeUtils: DateTimeUtils,
  39. doT: doT,
  40. isMyActivities: !!this.isMyActivities,
  41. APICallbacks: {
  42. renderVis: this.renderVis.bind(this),
  43. showScopeDialog: this.showScopeDialog.bind(this),
  44. showRunAsDialog: this.showRunAsDialog.bind(this)
  45. }
  46. });
  47. ReactDOM.render(activitiesView, this.$el.find('#mng-activities-container')[0]);
  48. return Promise.resolve(true);
  49. },
  50. renderVis: function renderVis(container, chartType, chartData) {
  51. var width = container.offsetWidth;
  52. if (chartType === 'vizBar') {
  53. this.vizChart = new VizBar({
  54. el: container,
  55. data: chartData,
  56. parentWidth: width,
  57. legend: true
  58. });
  59. } else if (chartType === 'vizStackedBar') {
  60. this.vizChart = new VizStackedBar({
  61. el: container,
  62. data: this._prepareStackedBarChartData(chartData),
  63. parentWidth: width,
  64. legend: true,
  65. chartMode: 'stacked'
  66. });
  67. }
  68. },
  69. showScopeDialog: function showScopeDialog(rootObjects, onOpenCallback) {
  70. var dialog = new OpenDialog({
  71. glassContext: this.glassContext,
  72. typesToOpen: ['folder', 'package', 'subscriptionFolder', 'adminFolder'],
  73. multiSelect: false,
  74. primaryBtnText: StringResource.get('select'),
  75. filesToOpenTitle: StringResource.get('selectScope'),
  76. rootObjects: rootObjects,
  77. ancestors: [],
  78. onOpenCallback: onOpenCallback
  79. });
  80. dialog.title = StringResource.get('selectScope');
  81. dialog.primaryBtnText = StringResource.get('select');
  82. dialog.open();
  83. },
  84. showRunAsDialog: function showRunAsDialog(report) {
  85. var runAsActionView = React.createElement(AdminReact.RunAsAction, {
  86. StringResource: StringResource,
  87. glassContext: this.glassContext,
  88. objectInfo: report,
  89. slideout: this,
  90. runOnce: true
  91. });
  92. var runAs = this.$el.find('.bi-admin-runAsDialog');
  93. ReactDOM.unmountComponentAtNode(runAs[0]);
  94. ReactDOM.render(runAsActionView, runAs[0]);
  95. },
  96. _prepareStackedBarChartData: function _prepareStackedBarChartData(originalChartData) {
  97. var chartData = [];
  98. chartData = _.map(originalChartData, function (row) {
  99. return {
  100. name: row.label,
  101. total: row.total,
  102. layer: this._createLayer(row.details),
  103. legendName: row.label
  104. };
  105. }.bind(this));
  106. return chartData;
  107. },
  108. _createLayer: function _createLayer(items) {
  109. var range = rave.range(24);
  110. var layer = _.map(range, function (x) {
  111. return {
  112. x: x,
  113. y: this._findGroupValue(items, x)
  114. };
  115. }.bind(this));
  116. return layer;
  117. },
  118. _findGroupValue: function _findGroupValue(items, x) {
  119. var result = _.find(items, function (item) {
  120. var fixedDt = item.use;
  121. if (fixedDt.indexOf('Z') < 0) {
  122. fixedDt += 'Z';
  123. }
  124. var timezone = this.glassContext.services.userProfile.preferences.timeZoneID;
  125. var locale = this.glassContext.services.userProfile.preferences.contentLocale;
  126. var hour = moment(fixedDt).locale(locale).tz(timezone).hour();
  127. return hour === x;
  128. }.bind(this));
  129. return result ? result.total : 0;
  130. }
  131. });
  132. return ActivitiesPane;
  133. });