CrosstabQueryDefinitionModifier.js 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  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: BI Cloud (C) Copyright IBM Corp. 2019, 2020
  6. * US Government Users Restricted Rights - Use, duplication or disclosure restricted by GSA ADP Schedule Contract with IBM Corp.
  7. */
  8. define(['../../../lib/@waca/dashboard-common/dist/core/APIFactory', '../../../lib/@waca/dashboard-common/dist/utils/ContentUtil', '../../../filters/FilterSpecHelper', './api/QueryDefinitionModifierAPI', './DataQueryUtils'], function (APIFactory, ContentUtil, FilterSpecHelper, QueryDefinitionModifierAPI, DataQueryUtils) {
  9. /**
  10. * The visualization model is not ready to support brushing (highlight and filters) in R5
  11. * The purpose of the class is to wired off generating brushing as query filters for expanded column in R5v
  12. * This is a temporary solution to R5 to wired off expoanded columns brushing support until R6
  13. */
  14. var CrosstabQueryDefinitionModifier = function () {
  15. function CrosstabQueryDefinitionModifier(_ref) {
  16. var content = _ref.content,
  17. dashboardAPI = _ref.dashboardAPI,
  18. features = _ref.features;
  19. _classCallCheck(this, CrosstabQueryDefinitionModifier);
  20. this.content = content;
  21. this.dashboard = dashboardAPI;
  22. features.DataQueryExecution.registerQueryDefinitionModifier(this.getAPI());
  23. }
  24. CrosstabQueryDefinitionModifier.prototype.getAPI = function getAPI() {
  25. if (!this.api) {
  26. this.api = APIFactory.createAPI(this, [QueryDefinitionModifierAPI]);
  27. }
  28. return this.api;
  29. };
  30. CrosstabQueryDefinitionModifier.prototype.getType = function getType() {
  31. return 'main';
  32. };
  33. CrosstabQueryDefinitionModifier.prototype.modifyQueryDefinitionList = function modifyQueryDefinitionList(definitions) {
  34. var _this = this;
  35. var vis = this.content.getFeature('Visualization');
  36. if (vis.getType() === 'Crosstab') {
  37. definitions.forEach(function (definition) {
  38. var filters = definition.getFilters();
  39. var brushedFilters = filters.filter(function (filter) {
  40. return !!filter.visualizationId;
  41. });
  42. definition.removeFilters(brushedFilters);
  43. definition.setSupportsNonContextualTopBottom(false);
  44. _this._modifyFilters(definition);
  45. });
  46. }
  47. return definitions;
  48. };
  49. CrosstabQueryDefinitionModifier.prototype._modifyFilters = function _modifyFilters(definition) {
  50. var _this2 = this;
  51. var filterSpecList = [];
  52. var visualization = this.content.getFeature('Visualization');
  53. var dataSource = visualization.getDataSource();
  54. var brushedFilters = this._getBrushedFiltersByVisualization();
  55. var unionedDataItemList = this._getUnionedDataItemList(visualization);
  56. if (unionedDataItemList.length > 0) {
  57. brushedFilters.forEach(function (brushedFilter) {
  58. var addFilter = true;
  59. var columnIds = brushedFilter.columnId ? [brushedFilter.columnId] : FilterSpecHelper.getSelectedCompoundFilterColumnIds([brushedFilter]);
  60. var _loop = function _loop(index) {
  61. var brushedColumn = _this2._getHierarchyMetadatColumn(dataSource, dataSource.getMetadataColumn(columnIds[index]));
  62. if (brushedColumn) {
  63. var expandedColumn = unionedDataItemList.find(function (dataItem) {
  64. var column = _this2._getHierarchyMetadatColumn(dataSource, dataItem.getMetadataColumn());
  65. return column && brushedColumn.getId() === column.getId();
  66. });
  67. if (expandedColumn) {
  68. //One of the columnId in the brushed filter is defined in the expanded column so do not include it
  69. addFilter = false;
  70. return 'break';
  71. }
  72. }
  73. };
  74. for (var index = 0; index < columnIds.length; index++) {
  75. var _ret = _loop(index);
  76. if (_ret === 'break') break;
  77. }
  78. if (addFilter) {
  79. filterSpecList.push(brushedFilter);
  80. }
  81. });
  82. } else {
  83. filterSpecList.push.apply(filterSpecList, brushedFilters);
  84. }
  85. var updatedFilterSpecList = DataQueryUtils.convertExcludeEmptyValuesFilters(filterSpecList, visualization.getDataSource());
  86. definition.addFilters(updatedFilterSpecList);
  87. };
  88. CrosstabQueryDefinitionModifier.prototype._getBrushedFiltersByVisualization = function _getBrushedFiltersByVisualization() {
  89. var eventGroups = this.dashboard.getFeature('EventGroups');
  90. var globalFilters = this.dashboard.getFeature('GlobalFilters');
  91. var visualization = this.content.getFeature('Visualization');
  92. var filterQuerySpecList = [];
  93. var dataSource = visualization.getDataSource();
  94. var type = this.dashboard.getAppConfig('pageContainerType');
  95. var page = ContentUtil.getPageContent(this.content, type);
  96. var pageId = page && page.getId();
  97. if (dataSource && visualization.getDefinition().getProperty('reactToExternalBrushing') !== false) {
  98. var eventGroupId = eventGroups.getGroupId(this.content.getId());
  99. filterQuerySpecList.push.apply(filterQuerySpecList, globalFilters.getFilterList({
  100. origin: 'visualization',
  101. sourceId: dataSource.getId(),
  102. scope: pageId,
  103. eventGroupId: eventGroupId
  104. }, this.content.getId()));
  105. }
  106. // Exclude binning filters since they are not fully supported by query service.
  107. return filterQuerySpecList.filter(function (filterSpec) {
  108. return !filterSpec.filterBins;
  109. });
  110. };
  111. CrosstabQueryDefinitionModifier.prototype._getHierarchyMetadatColumn = function _getHierarchyMetadatColumn(dataSource, column) {
  112. return !column || column.isHierarchy() ? column : this._getHierarchyMetadatColumn(dataSource, column.getParent());
  113. };
  114. CrosstabQueryDefinitionModifier.prototype._getUnionedDataItemList = function _getUnionedDataItemList(visualization) {
  115. var unionedDataItemList = [];
  116. var dataItemList = visualization.getSlots().getDataItemList();
  117. dataItemList.forEach(function (dataItem) {
  118. unionedDataItemList.push.apply(unionedDataItemList, dataItem.getUnion().getDataItemList());
  119. });
  120. return unionedDataItemList;
  121. };
  122. return CrosstabQueryDefinitionModifier;
  123. }();
  124. return CrosstabQueryDefinitionModifier;
  125. });
  126. //# sourceMappingURL=CrosstabQueryDefinitionModifier.js.map