ExpandCollapse.js 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  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
  7. * US Government Users Restricted Rights - Use, duplication or disclosure restricted by GSA ADP Schedule Contract with IBM Corp.
  8. */
  9. /**
  10. * @class expandCollapse
  11. * @hideconstructor
  12. */
  13. define(['underscore', '../../../lib/@waca/dashboard-common/dist/core/APIFactory', './api/ExpandCollapseAPI'], function (_, APIFactory, expandCollapseAPI) {
  14. return function () {
  15. function ExpandCollapse(options) {
  16. _classCallCheck(this, ExpandCollapse);
  17. this.dashboard = options.dashboardAPI;
  18. this.content = options.content;
  19. }
  20. ExpandCollapse.prototype.getAPI = function getAPI() {
  21. if (!this._api) {
  22. this._api = APIFactory.createAPI(this, [expandCollapseAPI]);
  23. }
  24. return this._api;
  25. };
  26. ExpandCollapse.prototype.expand = function expand(dataItemId, parentUseValue, currentUseValue) {
  27. var dataItem = this._getDataItem(dataItemId);
  28. var transaction = this.dashboard.getFeature('Transaction');
  29. var transactionToken = transaction.startTransaction();
  30. var nestedDataItem = void 0;
  31. if (!dataItem.getUnion().getDataItemList().length) {
  32. nestedDataItem = dataItem;
  33. } else {
  34. nestedDataItem = this._findNestedDataItem(dataItem.getUnion().getDataItemList(), parentUseValue) || dataItem;
  35. }
  36. if (!nestedDataItem.getUnion().getDataItemList().find(function (dataItem) {
  37. return dataItem.getDrillDownValue() === currentUseValue;
  38. })) {
  39. var addedUnionDataItem = nestedDataItem.getUnion().addDataItem({ itemId: dataItem.getColumnId() }, transactionToken);
  40. addedUnionDataItem.drillDown(currentUseValue, transactionToken);
  41. }
  42. transaction.endTransaction(transactionToken);
  43. };
  44. ExpandCollapse.prototype.collapse = function collapse(dataItemId, parentUseValue, currentUseValue) {
  45. var dataItem = this._getDataItem(dataItemId);
  46. var transaction = this.dashboard.getFeature('Transaction');
  47. var transactionToken = transaction.startTransaction();
  48. //Find nested Parent dataitem, if it's not found assume its the top level
  49. var parentDataItem = this._findNestedDataItem(dataItem.getUnion().getDataItemList(), parentUseValue) || dataItem;
  50. //find Child to remove
  51. var dataItemToRemove = this._findNestedDataItem(parentDataItem.getUnion().getDataItemList(), currentUseValue);
  52. if (parentDataItem && dataItemToRemove) {
  53. dataItemToRemove.clearDrill(transactionToken);
  54. parentDataItem.getUnion().removeDataItem(dataItemToRemove.getId(), transactionToken);
  55. }
  56. transaction.endTransaction(transactionToken);
  57. };
  58. ExpandCollapse.prototype._getDataItem = function _getDataItem(dataItemId) {
  59. var visApi = this.content.getFeature('Visualization');
  60. var dataItem = visApi.getSlots().getDataItemList().find(function (dataItem) {
  61. return dataItem.getId() === dataItemId;
  62. });
  63. if (!dataItem) {
  64. throw new Error('Expand Failed, Invalid DataItem');
  65. }
  66. return dataItem;
  67. };
  68. /*
  69. * private function to find the nested dataitem from the root array provided
  70. *
  71. * @param rootArray Array starting point
  72. * @param useValue the drill down value of the dataItem to find
  73. *
  74. * @return VisDataItemUnionModel
  75. */
  76. ExpandCollapse.prototype._findNestedDataItem = function _findNestedDataItem(rootArray, useValue) {
  77. var queue = Array.from(rootArray);
  78. var found = null;
  79. while (queue.length > 0 && !found) {
  80. var current = queue.shift();
  81. var children = current.getUnion().getDataItemList();
  82. queue.push.apply(queue, children || []);
  83. var currentValue = current.getDrillDownValue();
  84. if (currentValue === useValue) {
  85. found = current;
  86. }
  87. }
  88. return found;
  89. };
  90. return ExpandCollapse;
  91. }();
  92. });
  93. //# sourceMappingURL=ExpandCollapse.js.map