'use strict'; function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } /** * Licensed Materials - Property of IBM * IBM Cognos Products: BI Cloud (C) Copyright IBM Corp. 2019, 2020 * US Government Users Restricted Rights - Use, duplication or disclosure restricted by GSA ADP Schedule Contract with IBM Corp. */ 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) { /** * The visualization model is not ready to support brushing (highlight and filters) in R5 * The purpose of the class is to wired off generating brushing as query filters for expanded column in R5v * This is a temporary solution to R5 to wired off expoanded columns brushing support until R6 */ var CrosstabQueryDefinitionModifier = function () { function CrosstabQueryDefinitionModifier(_ref) { var content = _ref.content, dashboardAPI = _ref.dashboardAPI, features = _ref.features; _classCallCheck(this, CrosstabQueryDefinitionModifier); this.content = content; this.dashboard = dashboardAPI; features.DataQueryExecution.registerQueryDefinitionModifier(this.getAPI()); } CrosstabQueryDefinitionModifier.prototype.getAPI = function getAPI() { if (!this.api) { this.api = APIFactory.createAPI(this, [QueryDefinitionModifierAPI]); } return this.api; }; CrosstabQueryDefinitionModifier.prototype.getType = function getType() { return 'main'; }; CrosstabQueryDefinitionModifier.prototype.modifyQueryDefinitionList = function modifyQueryDefinitionList(definitions) { var _this = this; var vis = this.content.getFeature('Visualization'); if (vis.getType() === 'Crosstab') { definitions.forEach(function (definition) { var filters = definition.getFilters(); var brushedFilters = filters.filter(function (filter) { return !!filter.visualizationId; }); definition.removeFilters(brushedFilters); definition.setSupportsNonContextualTopBottom(false); _this._modifyFilters(definition); }); } return definitions; }; CrosstabQueryDefinitionModifier.prototype._modifyFilters = function _modifyFilters(definition) { var _this2 = this; var filterSpecList = []; var visualization = this.content.getFeature('Visualization'); var dataSource = visualization.getDataSource(); var brushedFilters = this._getBrushedFiltersByVisualization(); var unionedDataItemList = this._getUnionedDataItemList(visualization); if (unionedDataItemList.length > 0) { brushedFilters.forEach(function (brushedFilter) { var addFilter = true; var columnIds = brushedFilter.columnId ? [brushedFilter.columnId] : FilterSpecHelper.getSelectedCompoundFilterColumnIds([brushedFilter]); var _loop = function _loop(index) { var brushedColumn = _this2._getHierarchyMetadatColumn(dataSource, dataSource.getMetadataColumn(columnIds[index])); if (brushedColumn) { var expandedColumn = unionedDataItemList.find(function (dataItem) { var column = _this2._getHierarchyMetadatColumn(dataSource, dataItem.getMetadataColumn()); return column && brushedColumn.getId() === column.getId(); }); if (expandedColumn) { //One of the columnId in the brushed filter is defined in the expanded column so do not include it addFilter = false; return 'break'; } } }; for (var index = 0; index < columnIds.length; index++) { var _ret = _loop(index); if (_ret === 'break') break; } if (addFilter) { filterSpecList.push(brushedFilter); } }); } else { filterSpecList.push.apply(filterSpecList, brushedFilters); } var updatedFilterSpecList = DataQueryUtils.convertExcludeEmptyValuesFilters(filterSpecList, visualization.getDataSource()); definition.addFilters(updatedFilterSpecList); }; CrosstabQueryDefinitionModifier.prototype._getBrushedFiltersByVisualization = function _getBrushedFiltersByVisualization() { var eventGroups = this.dashboard.getFeature('EventGroups'); var globalFilters = this.dashboard.getFeature('GlobalFilters'); var visualization = this.content.getFeature('Visualization'); var filterQuerySpecList = []; var dataSource = visualization.getDataSource(); var type = this.dashboard.getAppConfig('pageContainerType'); var page = ContentUtil.getPageContent(this.content, type); var pageId = page && page.getId(); if (dataSource && visualization.getDefinition().getProperty('reactToExternalBrushing') !== false) { var eventGroupId = eventGroups.getGroupId(this.content.getId()); filterQuerySpecList.push.apply(filterQuerySpecList, globalFilters.getFilterList({ origin: 'visualization', sourceId: dataSource.getId(), scope: pageId, eventGroupId: eventGroupId }, this.content.getId())); } // Exclude binning filters since they are not fully supported by query service. return filterQuerySpecList.filter(function (filterSpec) { return !filterSpec.filterBins; }); }; CrosstabQueryDefinitionModifier.prototype._getHierarchyMetadatColumn = function _getHierarchyMetadatColumn(dataSource, column) { return !column || column.isHierarchy() ? column : this._getHierarchyMetadatColumn(dataSource, column.getParent()); }; CrosstabQueryDefinitionModifier.prototype._getUnionedDataItemList = function _getUnionedDataItemList(visualization) { var unionedDataItemList = []; var dataItemList = visualization.getSlots().getDataItemList(); dataItemList.forEach(function (dataItem) { unionedDataItemList.push.apply(unionedDataItemList, dataItem.getUnion().getDataItemList()); }); return unionedDataItemList; }; return CrosstabQueryDefinitionModifier; }(); return CrosstabQueryDefinitionModifier; }); //# sourceMappingURL=CrosstabQueryDefinitionModifier.js.map