EventGroups.js 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231
  1. 'use strict';
  2. function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
  3. /*
  4. * Licensed Materials - Property of IBM
  5. * IBM Cognos Products: Dashboard
  6. * (C) Copyright IBM Corp. 2019, 2020
  7. * US Government Users Restricted Rights - Use, duplication or disclosure
  8. * restricted by GSA ADP Schedule Contract with IBM Corp.
  9. */
  10. define(['underscore', '../../../lib/@waca/dashboard-common/dist/core/APIFactory', '../../../lib/@waca/dashboard-common/dist/api/ContentActionsProviderAPI', '../../../api/DashboardAPI', './api/EventGroupsAPI', '../../../lib/@waca/dashboard-common/dist/utils/ContentUtil', '../../../app/nls/StringResources'], function (_, APIFactory, ContentActionsProviderAPI, DashboardAPI, EventGroupsAPI, ContentUtil, stringResources) {
  11. var EventGroups = function () {
  12. function EventGroups(_ref) {
  13. var features = _ref.features;
  14. _classCallCheck(this, EventGroups);
  15. this.dashboard = features.API;
  16. this._dashboardState = features.DashboardState;
  17. this._api = APIFactory.createAPI(this, [EventGroupsAPI, ContentActionsProviderAPI]);
  18. features.ContentActions.registerProvider('EventGroups', this.getAPI());
  19. this._icons = features.Icons;
  20. }
  21. EventGroups.prototype.getAPI = function getAPI() {
  22. return this._api;
  23. };
  24. EventGroups.prototype.initialize = function initialize() {
  25. var _this = this;
  26. // if this promise fails, the system is in really bad shape... therefore not checking for an error case
  27. this.dashboard.getCanvasWhenReady().then(function (canvas) {
  28. // if there is a dashboard, the instance hasn't been destroyed (just in case the instance gets destroyed before initialization is completed)
  29. if (_this.dashboard) {
  30. _this.canvas = canvas;
  31. _this.canvas.on('move:content', _this.onMoveContent, _this);
  32. }
  33. });
  34. return Promise.resolve();
  35. };
  36. EventGroups.prototype.onMoveContent = function onMoveContent(payload) {
  37. var _this2 = this;
  38. var pageId = ContentUtil.getPageContent(this.canvas.getContent(payload.info.containerId)).getId();
  39. var defaultEventGroupId = this.createDefaultGroupId(pageId);
  40. var boardModel = this._getBoardModel();
  41. var eventGroups = boardModel.eventGroups;
  42. var groupsOnPage = _.pluck(eventGroups.getGroupsOnPage(pageId), 'id');
  43. payload.info.contentIdList.forEach(function (id) {
  44. var widgetIds = [];
  45. var widgets = _this2.canvas.getContent(id).findContent('type:widget');
  46. if (widgets.length) {
  47. widgets.forEach(function (content) {
  48. var widgetId = content.getId();
  49. var groupModel = eventGroups.findGroup(widgetId);
  50. if (groupsOnPage.length && groupModel) {
  51. var idx = groupsOnPage.findIndex(function (group) {
  52. return group !== groupModel.id;
  53. });
  54. if (idx !== -1) {
  55. widgetIds.push(widgetId);
  56. }
  57. } else {
  58. widgetIds.push(widgetId);
  59. }
  60. });
  61. } else {
  62. widgetIds.push(id);
  63. }
  64. _this2.addToGroup(defaultEventGroupId, widgetIds, payload.transactionToken);
  65. });
  66. };
  67. EventGroups.prototype.destroy = function destroy() {
  68. if (this.canvas) {
  69. this.canvas.off('move:content', this.onMoveContent, this);
  70. }
  71. this.dashboard = null;
  72. this._dashboardState = null;
  73. this._api = null;
  74. };
  75. EventGroups.prototype.groupExists = function groupExists(groupId) {
  76. var boardModel = this._getBoardModel();
  77. var eventGroups = boardModel.eventGroups;
  78. return !!eventGroups.get(groupId);
  79. };
  80. EventGroups.prototype.getGroupId = function getGroupId(widgetId) {
  81. var boardModel = this._getBoardModel();
  82. var eventGroups = boardModel.eventGroups;
  83. var group = eventGroups.findGroup(widgetId);
  84. if (group) {
  85. return group.getId();
  86. }
  87. return null;
  88. };
  89. EventGroups.prototype.getGroupIdsOnPage = function getGroupIdsOnPage(pageId) {
  90. var boardModel = this._getBoardModel();
  91. var eventGroups = boardModel.eventGroups;
  92. var groups = eventGroups.getGroupsOnPage(pageId);
  93. var groupIds = [];
  94. if (groups && groups.length) {
  95. groups.forEach(function (group) {
  96. groupIds.push(group.id);
  97. });
  98. }
  99. return groupIds;
  100. };
  101. EventGroups.prototype.getContentIdList = function getContentIdList(groupId) {
  102. var boardModel = this._getBoardModel();
  103. var eventGroups = boardModel.eventGroups;
  104. var group = eventGroups.get(groupId);
  105. if (group && group.widgetIds) {
  106. return JSON.parse(JSON.stringify(group.widgetIds));
  107. }
  108. };
  109. EventGroups.prototype.addToGroup = function addToGroup(groupId, widgetIds, transactionToken) {
  110. var boardModel = this._getBoardModel();
  111. var eventGroups = boardModel.eventGroups;
  112. var transaction = this.dashboard.getFeature('Transaction');
  113. var token = transaction.startTransaction(transactionToken);
  114. var options = {
  115. payloadData: {
  116. undoRedoTransactionId: token.transactionId,
  117. transactionToken: token
  118. }
  119. };
  120. if (this.groupExists(groupId)) {
  121. eventGroups.addToGroup(groupId, widgetIds, options);
  122. } else {
  123. // create requires only the id, not the event group id
  124. options.targetPageId = groupId.slice(0, groupId.indexOf(':'));
  125. eventGroups.createGroup(widgetIds, options);
  126. }
  127. transaction.endTransaction(token);
  128. };
  129. EventGroups.prototype.createGroup = function createGroup(widgetIds, transactionToken) {
  130. var boardModel = this._getBoardModel();
  131. var eventGroups = boardModel.eventGroups;
  132. var transaction = this.dashboard.getFeature('Transaction');
  133. var token = transaction.startTransaction(transactionToken);
  134. var options = {
  135. payloadData: {
  136. undoRedoTransactionId: token.transactionId,
  137. transactionToken: token
  138. }
  139. };
  140. var groupId = eventGroups.createGroup(widgetIds, options);
  141. transaction.endTransaction(token);
  142. return groupId;
  143. };
  144. EventGroups.prototype.removeFromGroup = function removeFromGroup(widgetIds, transactionToken) {
  145. var boardModel = this._getBoardModel();
  146. var eventGroups = boardModel.eventGroups;
  147. var transaction = this.dashboard.getFeature('Transaction');
  148. var token = transaction.startTransaction(transactionToken);
  149. var options = {
  150. payloadData: {
  151. undoRedoTransactionId: token.transactionId,
  152. transactionToken: token
  153. }
  154. };
  155. var groupIds = eventGroups.disconnectFromGroup(widgetIds, options);
  156. transaction.endTransaction(token);
  157. return groupIds;
  158. };
  159. EventGroups.prototype._getBoardModel = function _getBoardModel() {
  160. var internal = this.dashboard.getFeature('internal');
  161. return internal.getBoardModel();
  162. };
  163. EventGroups.prototype.createDefaultGroupId = function createDefaultGroupId(pageId) {
  164. var boardModel = this._getBoardModel();
  165. var eventGroups = boardModel.eventGroups;
  166. return eventGroups.createDefaultGroupId(pageId);
  167. };
  168. /**
  169. * @implements ContentActionProviderAPI#getContentActionList
  170. */
  171. EventGroups.prototype.getContentActionList = function getContentActionList(idList) {
  172. var _this3 = this;
  173. var uiState = this._dashboardState.getUiState();
  174. if (idList.length > 0 || uiState.authoring === false) {
  175. return [];
  176. }
  177. return [{
  178. name: 'EventGroups',
  179. type: 'ToggleButton',
  180. baseClass: 'toolbar',
  181. order: 1,
  182. checked: uiState.eventGroups,
  183. disabled: uiState.focus,
  184. label: stringResources.get('eventGroupButtonLabel'),
  185. icon: this._icons.getIcon('connect').id,
  186. action: function action() {
  187. return _this3._dashboardState.setEventGroups(true);
  188. },
  189. offAction: function offAction() {
  190. return _this3._dashboardState.setEventGroups(false);
  191. }
  192. }];
  193. };
  194. return EventGroups;
  195. }();
  196. return EventGroups;
  197. });
  198. //# sourceMappingURL=EventGroups.js.map