@gooddata/sdk-ui-dashboard 11.62.0-alpha.2 → 11.62.0-alpha.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (179) hide show
  1. package/NOTICE +33 -610
  2. package/esm/__version.d.ts +1 -1
  3. package/esm/__version.js +1 -1
  4. package/esm/_staging/dashboard/dashboardFilterContext.d.ts.map +1 -1
  5. package/esm/_staging/dashboard/dashboardFilterContext.js +4 -2
  6. package/esm/_staging/dashboard/dashboardFilterContextValidation.js +1 -1
  7. package/esm/index.d.ts +5 -3
  8. package/esm/index.d.ts.map +1 -1
  9. package/esm/index.js +1 -1
  10. package/esm/model/commandHandlers/dashboard/common/filterViews.d.ts +3 -2
  11. package/esm/model/commandHandlers/dashboard/common/filterViews.d.ts.map +1 -1
  12. package/esm/model/commandHandlers/dashboard/common/filterViews.js +12 -6
  13. package/esm/model/commandHandlers/dashboard/common/stateInitializers.d.ts.map +1 -1
  14. package/esm/model/commandHandlers/dashboard/common/stateInitializers.js +5 -6
  15. package/esm/model/commandHandlers/dashboard/initializeDashboardHandler/index.d.ts.map +1 -1
  16. package/esm/model/commandHandlers/dashboard/initializeDashboardHandler/index.js +1 -1
  17. package/esm/model/commandHandlers/dashboard/initializeDashboardHandler/loadUnavailableReferences.d.ts.map +1 -1
  18. package/esm/model/commandHandlers/dashboard/initializeDashboardHandler/loadUnavailableReferences.js +2 -0
  19. package/esm/model/commandHandlers/dashboard/resetDashboardHandler.d.ts.map +1 -1
  20. package/esm/model/commandHandlers/dashboard/resetDashboardHandler.js +3 -1
  21. package/esm/model/commandHandlers/dashboard/saveDashboardHandler.d.ts.map +1 -1
  22. package/esm/model/commandHandlers/dashboard/saveDashboardHandler.js +6 -5
  23. package/esm/model/commandHandlers/drill/drillToDashboardHandler.d.ts.map +1 -1
  24. package/esm/model/commandHandlers/drill/drillToDashboardHandler.js +4 -1
  25. package/esm/model/commandHandlers/drill/keyDriverAnalysisHandler.d.ts.map +1 -1
  26. package/esm/model/commandHandlers/drill/keyDriverAnalysisHandler.js +5 -3
  27. package/esm/model/commandHandlers/drill/resolveDrillToCustomUrl.d.ts +21 -1
  28. package/esm/model/commandHandlers/drill/resolveDrillToCustomUrl.d.ts.map +1 -1
  29. package/esm/model/commandHandlers/drill/resolveDrillToCustomUrl.js +56 -54
  30. package/esm/model/commandHandlers/filterContext/attributeFilter/changeAttributeFilterSelectionHandler.d.ts.map +1 -1
  31. package/esm/model/commandHandlers/filterContext/attributeFilter/changeAttributeFilterSelectionHandler.js +17 -4
  32. package/esm/model/commandHandlers/filterContext/attributeFilter/replaceAttributeFilterItemSelectionHandler.d.ts.map +1 -1
  33. package/esm/model/commandHandlers/filterContext/attributeFilter/replaceAttributeFilterItemSelectionHandler.js +6 -1
  34. package/esm/model/commandHandlers/filterContext/changeFilterContextSelectionHandler.d.ts.map +1 -1
  35. package/esm/model/commandHandlers/filterContext/changeFilterContextSelectionHandler.js +188 -70
  36. package/esm/model/commandHandlers/filterContext/common.d.ts +14 -2
  37. package/esm/model/commandHandlers/filterContext/common.d.ts.map +1 -1
  38. package/esm/model/commandHandlers/filterContext/common.js +43 -6
  39. package/esm/model/commandHandlers/filterContext/dateFilter/changeDateFilterSelectionHandler.d.ts.map +1 -1
  40. package/esm/model/commandHandlers/filterContext/dateFilter/changeDateFilterSelectionHandler.js +13 -3
  41. package/esm/model/commandHandlers/filterContext/measureValueFilter/changeMeasureValueFilterConditionHandler.d.ts.map +1 -1
  42. package/esm/model/commandHandlers/filterContext/measureValueFilter/changeMeasureValueFilterConditionHandler.js +11 -2
  43. package/esm/model/commandHandlers/filterContext/measureValueFilter/changeMeasureValueFilterDimensionalityHandler.d.ts.map +1 -1
  44. package/esm/model/commandHandlers/filterContext/measureValueFilter/changeMeasureValueFilterDimensionalityHandler.js +3 -0
  45. package/esm/model/commandHandlers/parameters/changeParameterValuesHandler.d.ts +10 -2
  46. package/esm/model/commandHandlers/parameters/changeParameterValuesHandler.d.ts.map +1 -1
  47. package/esm/model/commandHandlers/parameters/changeParameterValuesHandler.js +20 -3
  48. package/esm/model/commandHandlers/scheduledEmail/initializeAutomationsHandler.d.ts.map +1 -1
  49. package/esm/model/commandHandlers/scheduledEmail/initializeAutomationsHandler.js +21 -4
  50. package/esm/model/commandHandlers/tabs/createDashboardTabHandler.d.ts.map +1 -1
  51. package/esm/model/commandHandlers/tabs/createDashboardTabHandler.js +27 -3
  52. package/esm/model/commands/filters.d.ts +16 -1
  53. package/esm/model/commands/filters.d.ts.map +1 -1
  54. package/esm/model/commands/filters.js +4 -3
  55. package/esm/model/commands/parameters.d.ts +4 -3
  56. package/esm/model/commands/parameters.d.ts.map +1 -1
  57. package/esm/model/commands/parameters.js +3 -2
  58. package/esm/model/store/drill/drillSelectors.d.ts +6 -0
  59. package/esm/model/store/drill/drillSelectors.d.ts.map +1 -1
  60. package/esm/model/store/drill/drillSelectors.js +9 -0
  61. package/esm/model/store/filtering/dashboardFilterSelectors.d.ts +6 -1
  62. package/esm/model/store/filtering/dashboardFilterSelectors.d.ts.map +1 -1
  63. package/esm/model/store/filtering/dashboardFilterSelectors.js +21 -19
  64. package/esm/model/store/filtering/restrictedFilterUtils.d.ts +26 -1
  65. package/esm/model/store/filtering/restrictedFilterUtils.d.ts.map +1 -1
  66. package/esm/model/store/filtering/restrictedFilterUtils.js +74 -6
  67. package/esm/model/store/meta/metaSelectors.d.ts +6 -0
  68. package/esm/model/store/meta/metaSelectors.d.ts.map +1 -1
  69. package/esm/model/store/meta/metaSelectors.js +13 -3
  70. package/esm/model/store/tabs/filterContext/filterContextReducers.d.ts +48 -0
  71. package/esm/model/store/tabs/filterContext/filterContextReducers.d.ts.map +1 -1
  72. package/esm/model/store/tabs/filterContext/filterContextReducers.js +362 -102
  73. package/esm/model/store/tabs/filterContext/filterContextSelectors.d.ts +74 -1
  74. package/esm/model/store/tabs/filterContext/filterContextSelectors.d.ts.map +1 -1
  75. package/esm/model/store/tabs/filterContext/filterContextSelectors.js +27 -21
  76. package/esm/model/store/tabs/filterContext/filterSync.d.ts +101 -0
  77. package/esm/model/store/tabs/filterContext/filterSync.d.ts.map +1 -0
  78. package/esm/model/store/tabs/filterContext/filterSync.js +361 -0
  79. package/esm/model/store/tabs/index.d.ts +2 -0
  80. package/esm/model/store/tabs/index.d.ts.map +1 -1
  81. package/esm/model/store/tabs/parameters/parametersReducers.d.ts +5 -0
  82. package/esm/model/store/tabs/parameters/parametersReducers.d.ts.map +1 -1
  83. package/esm/model/store/tabs/parameters/parametersReducers.js +9 -5
  84. package/esm/model/store/tabs/tabsReducers.d.ts +6 -0
  85. package/esm/model/store/tabs/tabsReducers.d.ts.map +1 -1
  86. package/esm/model/store/tabs/tabsReducers.js +14 -6
  87. package/esm/model/store/tabs/tabsState.d.ts +10 -0
  88. package/esm/model/store/tabs/tabsState.d.ts.map +1 -1
  89. package/esm/model/store/tabs/tabsState.js +20 -0
  90. package/esm/model/store/unavailableObjects/copyBlockingReferences.d.ts +5 -3
  91. package/esm/model/store/unavailableObjects/copyBlockingReferences.d.ts.map +1 -1
  92. package/esm/model/store/unavailableObjects/copyBlockingReferences.js +9 -16
  93. package/esm/model/store/unavailableObjects/unavailableObjectsSelectors.d.ts +0 -16
  94. package/esm/model/store/unavailableObjects/unavailableObjectsSelectors.d.ts.map +1 -1
  95. package/esm/model/store/unavailableObjects/unavailableObjectsSelectors.js +0 -18
  96. package/esm/model/utils/attributeFilterMatching.d.ts +38 -0
  97. package/esm/model/utils/attributeFilterMatching.d.ts.map +1 -0
  98. package/esm/model/utils/attributeFilterMatching.js +110 -0
  99. package/esm/model/utils/attributeFilterSelectionTypeCompatibility.d.ts.map +1 -0
  100. package/esm/presentation/automations/alerting/state/types.d.ts +2 -2
  101. package/esm/presentation/automations/alerting/state/types.d.ts.map +1 -1
  102. package/esm/presentation/automations/connectors/hooks/useBuildAutomationsContext.d.ts.map +1 -1
  103. package/esm/presentation/automations/connectors/hooks/useBuildAutomationsContext.js +7 -3
  104. package/esm/presentation/automations/contexts/AutomationsContext.d.ts +6 -2
  105. package/esm/presentation/automations/contexts/AutomationsContext.d.ts.map +1 -1
  106. package/esm/presentation/automations/scheduledEmail/state/types.d.ts +2 -2
  107. package/esm/presentation/automations/scheduledEmail/state/types.d.ts.map +1 -1
  108. package/esm/presentation/automations/scheduledEmail/types.d.ts +2 -2
  109. package/esm/presentation/automations/scheduledEmail/types.d.ts.map +1 -1
  110. package/esm/presentation/automations/shared/automationFilters/automationParameters.d.ts +11 -1
  111. package/esm/presentation/automations/shared/automationFilters/automationParameters.d.ts.map +1 -1
  112. package/esm/presentation/automations/shared/automationFilters/automationParameters.js +2 -0
  113. package/esm/presentation/automations/shared/automationFilters/components/AutomationFiltersSelect.d.ts +3 -3
  114. package/esm/presentation/automations/shared/automationFilters/components/AutomationFiltersSelect.d.ts.map +1 -1
  115. package/esm/presentation/automations/shared/automationFilters/components/AutomationFiltersSelect.js +3 -13
  116. package/esm/presentation/automations/shared/automationFilters/hooks/useDefaultSelectedFiltersForExistingAutomation.d.ts +1 -1
  117. package/esm/presentation/automations/shared/automationFilters/hooks/useDefaultSelectedFiltersForExistingAutomation.d.ts.map +1 -1
  118. package/esm/presentation/automations/shared/automationFilters/hooks/useDefaultSelectedFiltersForExistingAutomation.js +1 -1
  119. package/esm/presentation/automations/shared/automationFilters/hooks/useValidateExistingAutomationFilters.d.ts.map +1 -1
  120. package/esm/presentation/automations/shared/automationFilters/hooks/useValidateExistingAutomationFilters.js +1 -1
  121. package/esm/presentation/automations/shared/automationFilters/useAutomationAlertParameters.d.ts +2 -2
  122. package/esm/presentation/automations/shared/automationFilters/useAutomationAlertParameters.d.ts.map +1 -1
  123. package/esm/presentation/automations/shared/automationFilters/useAutomationExportParameters.d.ts +6 -2
  124. package/esm/presentation/automations/shared/automationFilters/useAutomationExportParameters.d.ts.map +1 -1
  125. package/esm/presentation/automations/shared/automationFilters/useAutomationFilters.d.ts.map +1 -1
  126. package/esm/presentation/automations/shared/automationFilters/useAutomationFilters.js +2 -2
  127. package/esm/presentation/automations/shared/automationFilters/utils.d.ts.map +1 -1
  128. package/esm/presentation/automations/shared/automationFilters/utils.js +8 -0
  129. package/esm/presentation/automations/shared/filters/conversions.d.ts +1 -1
  130. package/esm/presentation/automations/shared/filters/conversions.d.ts.map +1 -1
  131. package/esm/presentation/automations/shared/filters/conversions.js +5 -3
  132. package/esm/presentation/automations/shared/slots/types.d.ts +2 -2
  133. package/esm/presentation/automations/shared/slots/types.d.ts.map +1 -1
  134. package/esm/presentation/dashboardSettingsDialog/useDialogData.js +1 -1
  135. package/esm/presentation/filterBar/attributeFilter/DefaultDashboardAttributeFilter.d.ts.map +1 -1
  136. package/esm/presentation/filterBar/attributeFilter/DefaultDashboardAttributeFilter.js +1 -4
  137. package/esm/presentation/filterBar/attributeFilter/addAttributeFilter/AttributesDropdown.d.ts +2 -11
  138. package/esm/presentation/filterBar/attributeFilter/addAttributeFilter/AttributesDropdown.d.ts.map +1 -1
  139. package/esm/presentation/filterBar/attributeFilter/addAttributeFilter/AttributesDropdown.js +17 -16
  140. package/esm/presentation/filterBar/attributeFilter/addAttributeFilter/staticListItems.d.ts +11 -0
  141. package/esm/presentation/filterBar/attributeFilter/addAttributeFilter/staticListItems.d.ts.map +1 -0
  142. package/esm/presentation/filterBar/attributeFilter/addAttributeFilter/staticListItems.js +7 -0
  143. package/esm/presentation/filterBar/attributeFilter/addAttributeFilter/useMetricDropdownItems.d.ts +2 -11
  144. package/esm/presentation/filterBar/attributeFilter/addAttributeFilter/useMetricDropdownItems.d.ts.map +1 -1
  145. package/esm/presentation/filterBar/attributeFilter/addAttributeFilter/useMetricDropdownItems.js +0 -6
  146. package/esm/presentation/filterBar/attributeFilter/addAttributeFilter/useParameterDropdownItems.d.ts +34 -0
  147. package/esm/presentation/filterBar/attributeFilter/addAttributeFilter/useParameterDropdownItems.d.ts.map +1 -0
  148. package/esm/presentation/filterBar/attributeFilter/addAttributeFilter/useParameterDropdownItems.js +41 -0
  149. package/esm/presentation/filterBar/attributeFilter/dashboardDropdownBody/configuration/hooks/useLimitingItemsConfiguration.d.ts.map +1 -1
  150. package/esm/presentation/filterBar/attributeFilter/dashboardDropdownBody/configuration/hooks/useLimitingItemsConfiguration.js +4 -17
  151. package/esm/presentation/filterBar/attributeFilter/useDependentDateFilters.d.ts.map +1 -1
  152. package/esm/presentation/filterBar/attributeFilter/useDependentDateFilters.js +4 -13
  153. package/esm/presentation/filterBar/attributeFilter/useParentFilters.d.ts.map +1 -1
  154. package/esm/presentation/filterBar/attributeFilter/useParentFilters.js +3 -10
  155. package/esm/presentation/filterBar/filterBar/DefaultDashboardFilterGroup.d.ts.map +1 -1
  156. package/esm/presentation/filterBar/filterBar/DefaultDashboardFilterGroup.js +0 -9
  157. package/esm/presentation/filterBar/filterBar/DefaultFilterBarItem.d.ts.map +1 -1
  158. package/esm/presentation/filterBar/filterBar/DefaultFilterBarItem.js +15 -3
  159. package/esm/presentation/filterBar/filterBar/hooks/useResetFiltersButton.d.ts.map +1 -1
  160. package/esm/presentation/filterBar/filterBar/hooks/useResetFiltersButton.js +4 -0
  161. package/esm/presentation/localization/bundles/en-US.localization-bundle.d.ts +8 -0
  162. package/esm/presentation/localization/bundles/en-US.localization-bundle.d.ts.map +1 -1
  163. package/esm/presentation/localization/bundles/en-US.localization-bundle.js +8 -0
  164. package/esm/presentation/widget/insight/configuration/DrillFilters/drillFiltersConfigUtils.d.ts +2 -3
  165. package/esm/presentation/widget/insight/configuration/DrillFilters/drillFiltersConfigUtils.d.ts.map +1 -1
  166. package/esm/presentation/widget/insight/configuration/DrillFilters/drillFiltersConfigUtils.js +29 -133
  167. package/esm/presentation/widget/insight/configuration/DrillFilters/optionMappings/mapDashboardFilterToOption.d.ts.map +1 -1
  168. package/esm/presentation/widget/insight/configuration/DrillFilters/optionMappings/mapDashboardFilterToOption.js +1 -1
  169. package/esm/presentation/widget/insight/configuration/DrillFilters/optionMappings/mapSourceInsightFilterToOption.d.ts.map +1 -1
  170. package/esm/presentation/widget/insight/configuration/DrillFilters/optionMappings/mapSourceInsightFilterToOption.js +1 -1
  171. package/esm/presentation/widget/insight/configuration/DrillFilters/optionMappings/mapSourceMeasureFilterToOption.d.ts.map +1 -1
  172. package/esm/presentation/widget/insight/configuration/DrillFilters/optionMappings/mapSourceMeasureFilterToOption.js +1 -1
  173. package/esm/sdk-ui-dashboard.d.ts +135 -13
  174. package/package.json +23 -23
  175. package/styles/css/main.css +4 -0
  176. package/styles/css/main.css.map +1 -1
  177. package/esm/model/commandHandlers/dashboard/common/attributeFilterSelectionTypeCompatibility.d.ts.map +0 -1
  178. /package/esm/model/{commandHandlers/dashboard/common → utils}/attributeFilterSelectionTypeCompatibility.d.ts +0 -0
  179. /package/esm/model/{commandHandlers/dashboard/common → utils}/attributeFilterSelectionTypeCompatibility.js +0 -0
@@ -1,9 +1,9 @@
1
1
  // (C) 2020-2026 GoodData Corporation
2
- import { areObjRefsEqual, dashboardAttributeFilterItemDisplayForm, dashboardAttributeFilterItemLocalIdentifier, isDashboardDateFilterWithDimension, isDashboardMeasureValueFilter, isLocalIdRef, measureAlias, measureFilters, measureLocalId, measureTitle, serializeObjRef, } from "@gooddata/sdk-model";
2
+ import { areObjRefsEqual, isDashboardDateFilterWithDimension, isDashboardMeasureValueFilter, isLocalIdRef, measureAlias, measureFilters, measureLocalId, measureTitle, serializeObjRef, } from "@gooddata/sdk-model";
3
3
  import { buildMeasureTitles } from "@gooddata/sdk-ui/internal";
4
4
  import { sourceInsightFilterObjRefValue } from "../../../../../_staging/drills/drillingUtils.js";
5
- import { canApplyFilterTypeToTarget } from "../../../../../model/commandHandlers/dashboard/common/attributeFilterSelectionTypeCompatibility.js";
6
- import { findDashboardAttributeFilterByAttributeDisplayForms, findDashboardAttributeFilterByDisplayForm, findDashboardAttributeFilterByIncomingDisplayAsLabel, findDashboardAttributeFilterByTargetDisplayAsLabel, } from "../../../../../model/utils/filterContextUtils.js";
5
+ import { findAttributeFilterCounterpart, } from "../../../../../model/utils/attributeFilterMatching.js";
6
+ import { findDashboardAttributeFilterByDisplayForm } from "../../../../../model/utils/filterContextUtils.js";
7
7
  import { messages } from "./messages.js";
8
8
  /**
9
9
  * Strip filter description suffix baked in by AD
@@ -88,23 +88,6 @@ export function getCatalogMeasureTitle(measureRef, allCatalogMeasures) {
88
88
  export function hasMatchingTargetDashboardAttributeFilterDisplayForm(displayFormRef, targetDashboardAttributeFilters) {
89
89
  return !!findDashboardAttributeFilterByDisplayForm(targetDashboardAttributeFilters, displayFormRef);
90
90
  }
91
- export function hasMatchingTargetDashboardAttributeFilter(dashboardFilter, sourceDashboardAttributeFilterConfigs, targetDashboardAttributeFilters, targetDashboardAttributeFilterConfigs, allCatalogDisplayFormsMap) {
92
- const displayFormRef = dashboardFilter.attributeFilter.displayForm;
93
- if (hasMatchingTargetDashboardAttributeFilterDisplayForm(displayFormRef, targetDashboardAttributeFilters)) {
94
- return true;
95
- }
96
- const sourceDisplayForm = allCatalogDisplayFormsMap.get(displayFormRef);
97
- if (sourceDisplayForm) {
98
- const attributeDisplayForms = Array.from(allCatalogDisplayFormsMap.values()).filter((displayForm) => areObjRefsEqual(displayForm.attribute, sourceDisplayForm.attribute));
99
- if (findDashboardAttributeFilterByAttributeDisplayForms(targetDashboardAttributeFilters, attributeDisplayForms)) {
100
- return true;
101
- }
102
- }
103
- if (findDashboardAttributeFilterByIncomingDisplayAsLabel(dashboardFilter, sourceDashboardAttributeFilterConfigs, targetDashboardAttributeFilters)) {
104
- return true;
105
- }
106
- return !!findDashboardAttributeFilterByTargetDisplayAsLabel(displayFormRef, targetDashboardAttributeFilters, targetDashboardAttributeFilterConfigs);
107
- }
108
91
  export function hasMatchingTargetDashboardDateFilter(datasetRef, targetDashboardFilters) {
109
92
  return targetDashboardFilters.some((targetDashboardFilter) => isDashboardDateFilterWithDimension(targetDashboardFilter) &&
110
93
  areObjRefsEqual(datasetRef, targetDashboardFilter.dateFilter.dataSet));
@@ -122,93 +105,26 @@ export function hasCompatibleTargetInsightMeasureValueFilter(measureRef, targetI
122
105
  export function isDateIntersectionAttribute(displayFormRef, allCatalogDateAttributeDisplayForms) {
123
106
  return allCatalogDateAttributeDisplayForms.some((displayForm) => areObjRefsEqual(displayForm.ref, displayFormRef));
124
107
  }
125
- function getConfigSelectionType(targetFilterLocalId, targetDashboardAttributeFilterConfigs) {
126
- return targetDashboardAttributeFilterConfigs.find((c) => c.localIdentifier === targetFilterLocalId)
127
- ?.selectionType;
128
- }
129
- /**
130
- * Finds a matching text filter on the target dashboard by displayForm.
131
- * Checks the source filter's displayForm and optionally its displayAsLabel from config.
132
- */
133
- function findMatchingTargetTextFilter(displayFormRef, sourceDashboardAttributeFilterConfigs, sourceFilterLocalId, targetDashboardTextAttributeFilters) {
134
- // Direct displayForm match
135
- const directMatch = targetDashboardTextAttributeFilters.find((textFilter) => areObjRefsEqual(dashboardAttributeFilterItemDisplayForm(textFilter), displayFormRef));
136
- if (directMatch) {
137
- return directMatch;
138
- }
139
- // Check source's displayAsLabel from config
140
- if (sourceFilterLocalId) {
141
- const sourceConfig = sourceDashboardAttributeFilterConfigs.find((c) => c.localIdentifier === sourceFilterLocalId);
142
- if (sourceConfig?.displayAsLabel) {
143
- return targetDashboardTextAttributeFilters.find((textFilter) => areObjRefsEqual(dashboardAttributeFilterItemDisplayForm(textFilter), sourceConfig.displayAsLabel));
144
- }
145
- }
146
- return undefined;
147
- }
148
- /**
149
- * Finds a matching list filter on the target dashboard for a text source filter.
150
- * Text filter has only displayForm. List filter has primary displayForm + displayAsLabel in config.
151
- * Match if text filter's displayForm equals either of those.
152
- */
153
- function findMatchingTargetListFilterForTextSource(textFilterDisplayFormRef, targetDashboardAttributeFilters, targetDashboardAttributeFilterConfigs) {
154
- // Direct displayForm match
155
- const directMatch = findDashboardAttributeFilterByDisplayForm(targetDashboardAttributeFilters, textFilterDisplayFormRef);
156
- if (directMatch) {
157
- return directMatch;
158
- }
159
- // Check target's displayAsLabel — find a config whose displayAsLabel matches the text filter's displayForm
160
- return findDashboardAttributeFilterByTargetDisplayAsLabel(textFilterDisplayFormRef, targetDashboardAttributeFilters, targetDashboardAttributeFilterConfigs);
161
- }
162
108
  /**
163
109
  * Checks if a list-type dashboard attribute filter can be transferred to the target dashboard,
164
110
  * considering both list and text filters on the target, and selection type config.
165
111
  */
166
112
  export function canTransferDashboardAttributeFilter(sourceFilter, sourceDashboardAttributeFilterConfigs, targetDashboardAttributeFilters, targetDashboardAttributeFilterConfigs, targetDashboardTextAttributeFilters, allCatalogDisplayFormsMap) {
167
- // 1. Same-type match against list filters — always OK
168
- if (hasMatchingTargetDashboardAttributeFilter(sourceFilter, sourceDashboardAttributeFilterConfigs, targetDashboardAttributeFilters, targetDashboardAttributeFilterConfigs, allCatalogDisplayFormsMap)) {
169
- return "transferable";
170
- }
171
- // 2. Cross-type match against text filters on target
172
- const matchingTextFilter = findMatchingTargetTextFilter(sourceFilter.attributeFilter.displayForm, sourceDashboardAttributeFilterConfigs, sourceFilter.attributeFilter.localIdentifier, targetDashboardTextAttributeFilters);
173
- if (!matchingTextFilter) {
174
- return "notFound";
175
- }
176
- // 3. Check if the target text filter's selection type allows list type
177
- const textFilterLocalId = dashboardAttributeFilterItemLocalIdentifier(matchingTextFilter);
178
- if (!textFilterLocalId) {
179
- return "notFound";
180
- }
181
- const configSelectionType = getConfigSelectionType(textFilterLocalId, targetDashboardAttributeFilterConfigs);
182
- return canApplyFilterTypeToTarget("list", configSelectionType, matchingTextFilter)
183
- ? "transferable"
184
- : "notCompatible";
113
+ return toFilterTransferResult(findAttributeFilterCounterpart(sourceFilter, [...targetDashboardAttributeFilters, ...targetDashboardTextAttributeFilters], {
114
+ sourceFilterConfigs: sourceDashboardAttributeFilterConfigs,
115
+ targetFilterConfigs: targetDashboardAttributeFilterConfigs,
116
+ displayForms: Array.from(allCatalogDisplayFormsMap.values()),
117
+ }));
185
118
  }
186
119
  /**
187
120
  * Checks if a text-type dashboard attribute filter can be transferred to the target dashboard,
188
121
  * considering both text and list filters on the target, and selection type config.
189
122
  */
190
- export function canTransferTextAttributeFilter(sourceFilter, targetDashboardAttributeFilters, targetDashboardAttributeFilterConfigs, targetDashboardTextAttributeFilters) {
191
- const sourceDisplayFormRef = dashboardAttributeFilterItemDisplayForm(sourceFilter);
192
- // 1. Same-type match against text filters — always OK
193
- const matchingTextFilter = targetDashboardTextAttributeFilters.find((textFilter) => areObjRefsEqual(dashboardAttributeFilterItemDisplayForm(textFilter), sourceDisplayFormRef));
194
- if (matchingTextFilter) {
195
- return "transferable";
196
- }
197
- // 2. Cross-type match against list filters on target
198
- // Text filter has only displayForm; list filter has primary displayForm + displayAsLabel in config
199
- const matchingListFilter = findMatchingTargetListFilterForTextSource(sourceDisplayFormRef, targetDashboardAttributeFilters, targetDashboardAttributeFilterConfigs);
200
- if (!matchingListFilter) {
201
- return "notFound";
202
- }
203
- // 3. Check if the target list filter's selection type allows text type
204
- const listFilterLocalId = matchingListFilter.attributeFilter.localIdentifier;
205
- if (!listFilterLocalId) {
206
- return "notFound";
207
- }
208
- const configSelectionType = getConfigSelectionType(listFilterLocalId, targetDashboardAttributeFilterConfigs);
209
- return canApplyFilterTypeToTarget("text", configSelectionType, matchingListFilter)
210
- ? "transferable"
211
- : "notCompatible";
123
+ export function canTransferTextAttributeFilter(sourceFilter, targetDashboardAttributeFilters, targetDashboardAttributeFilterConfigs, targetDashboardTextAttributeFilters, allCatalogDisplayFormsMap) {
124
+ return toFilterTransferResult(findAttributeFilterCounterpart(sourceFilter, [...targetDashboardTextAttributeFilters, ...targetDashboardAttributeFilters], {
125
+ targetFilterConfigs: targetDashboardAttributeFilterConfigs,
126
+ displayForms: Array.from(allCatalogDisplayFormsMap.values()),
127
+ }));
212
128
  }
213
129
  /**
214
130
  * Checks if a source insight/measure attribute filter (by displayForm) can be transferred,
@@ -221,40 +137,20 @@ export function canTransferTextAttributeFilter(sourceFilter, targetDashboardAttr
221
137
  * @param targetDashboardAttributeFilterConfigs - attribute filter configs on the target dashboard
222
138
  * @param targetDashboardTextAttributeFilters - text filters on the target dashboard
223
139
  */
224
- export function canTransferAttributeFilterByDisplayForm(displayFormRef, isSourceTextFilter, targetDashboardAttributeFilters, targetDashboardAttributeFilterConfigs, targetDashboardTextAttributeFilters) {
225
- if (isSourceTextFilter) {
226
- // Text source: check text targets first, then list targets with selection type
227
- const matchingTextFilter = targetDashboardTextAttributeFilters.find((textFilter) => areObjRefsEqual(dashboardAttributeFilterItemDisplayForm(textFilter), displayFormRef));
228
- if (matchingTextFilter) {
229
- return "transferable";
230
- }
231
- const matchingListFilter = findMatchingTargetListFilterForTextSource(displayFormRef, targetDashboardAttributeFilters, targetDashboardAttributeFilterConfigs);
232
- if (!matchingListFilter) {
233
- return "notFound";
234
- }
235
- const listFilterLocalId = matchingListFilter.attributeFilter.localIdentifier;
236
- if (!listFilterLocalId) {
237
- return "notFound";
238
- }
239
- const configSelectionType = getConfigSelectionType(listFilterLocalId, targetDashboardAttributeFilterConfigs);
240
- return canApplyFilterTypeToTarget("text", configSelectionType, matchingListFilter)
241
- ? "transferable"
242
- : "notCompatible";
243
- }
244
- // List source: check list targets first, then text targets with selection type
245
- if (hasMatchingTargetDashboardAttributeFilterDisplayForm(displayFormRef, targetDashboardAttributeFilters)) {
246
- return "transferable";
247
- }
248
- const matchingTextFilter = targetDashboardTextAttributeFilters.find((textFilter) => areObjRefsEqual(dashboardAttributeFilterItemDisplayForm(textFilter), displayFormRef));
249
- if (!matchingTextFilter) {
250
- return "notFound";
251
- }
252
- const textFilterLocalId = dashboardAttributeFilterItemLocalIdentifier(matchingTextFilter);
253
- if (!textFilterLocalId) {
254
- return "notFound";
255
- }
256
- const configSelectionType = getConfigSelectionType(textFilterLocalId, targetDashboardAttributeFilterConfigs);
257
- return canApplyFilterTypeToTarget("list", configSelectionType, matchingTextFilter)
258
- ? "transferable"
259
- : "notCompatible";
140
+ export function canTransferAttributeFilterByDisplayForm(displayFormRef, isSourceTextFilter, targetDashboardAttributeFilters, targetDashboardAttributeFilterConfigs, targetDashboardTextAttributeFilters, allCatalogDisplayFormsMap) {
141
+ const source = {
142
+ displayForm: displayFormRef,
143
+ type: isSourceTextFilter ? "text" : "list",
144
+ };
145
+ const targets = [
146
+ ...targetDashboardAttributeFilters,
147
+ ...targetDashboardTextAttributeFilters,
148
+ ];
149
+ return toFilterTransferResult(findAttributeFilterCounterpart(source, targets, {
150
+ targetFilterConfigs: targetDashboardAttributeFilterConfigs,
151
+ displayForms: Array.from(allCatalogDisplayFormsMap.values()),
152
+ }));
153
+ }
154
+ function toFilterTransferResult(result) {
155
+ return result.status === "matched" ? "transferable" : result.status;
260
156
  }
@@ -1 +1 @@
1
- {"version":3,"file":"mapDashboardFilterToOption.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/widget/insight/configuration/DrillFilters/optionMappings/mapDashboardFilterToOption.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,OAAO,EACH,KAAK,4BAA4B,EACjC,KAAK,iBAAiB,EACtB,KAAK,mCAAmC,EACxC,KAAK,eAAe,EACpB,KAAK,yBAAyB,EAC9B,KAAK,+BAA+B,EACpC,KAAK,0BAA0B,EAC/B,KAAK,8BAA8B,EACnC,KAAK,4BAA4B,EACjC,KAAK,MAAM,EAUd,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,kDAAkD,CAAC;AAelF,OAAO,EAAE,KAAK,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAE7D,UAAU,iCAAiC;IACvC,eAAe,EAAE,iBAAiB,CAAC;IACnC,yBAAyB,EAAE,SAAS,CAAC,mCAAmC,CAAC,CAAC;IAC1E,kBAAkB,EAAE,eAAe,EAAE,CAAC;IACtC,sBAAsB,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE;YAAE,GAAG,EAAE,MAAM,CAAC;YAAC,KAAK,CAAC,EAAE,MAAM,CAAA;SAAE,CAAA;KAAE,CAAC,CAAC;IAC5E,wBAAwB,EAAE,0BAA0B,GAAG,SAAS,CAAC;IACjE,6BAA6B,EAAE,8BAA8B,EAAE,CAAC;IAChE,qCAAqC,EAAE,+BAA+B,EAAE,CAAC;IACzE,sBAAsB,EAAE,iBAAiB,EAAE,CAAC;IAC5C,+BAA+B,EAAE,yBAAyB,EAAE,CAAC;IAC7D,mCAAmC,EAAE,4BAA4B,EAAE,CAAC;IACpE,kCAAkC,EAAE,4BAA4B,EAAE,CAAC;IACnE,0CAA0C,EAAE,4BAA4B,EAAE,CAAC;IAC3E,qCAAqC,EAAE,+BAA+B,EAAE,CAAC;IACzE,WAAW,EAAE,OAAO,CAAC;IACrB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,kBAAkB,EAAE,OAAO,CAAC;IAC5B,IAAI,EAAE,SAAS,CAAC;CACnB;AAED,wBAAgB,0BAA0B,CAAC,EACvC,eAAe,EACf,yBAAyB,EACzB,kBAAkB,EAClB,sBAAsB,EACtB,wBAAwB,EACxB,6BAA6B,EAC7B,qCAAqC,EACrC,sBAAsB,EACtB,+BAA+B,EAC/B,mCAAmC,EACnC,kCAAkC,EAClC,0CAA0C,EAC1C,qCAAqC,EACrC,WAAW,EACX,gBAAgB,EAChB,kBAAkB,EAClB,IAAI,GACP,EAAE,iCAAiC,GAAG,yBAAyB,GAAG,SAAS,CAgI3E"}
1
+ {"version":3,"file":"mapDashboardFilterToOption.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/widget/insight/configuration/DrillFilters/optionMappings/mapDashboardFilterToOption.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,OAAO,EACH,KAAK,4BAA4B,EACjC,KAAK,iBAAiB,EACtB,KAAK,mCAAmC,EACxC,KAAK,eAAe,EACpB,KAAK,yBAAyB,EAC9B,KAAK,+BAA+B,EACpC,KAAK,0BAA0B,EAC/B,KAAK,8BAA8B,EACnC,KAAK,4BAA4B,EACjC,KAAK,MAAM,EAUd,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,kDAAkD,CAAC;AAelF,OAAO,EAAE,KAAK,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAE7D,UAAU,iCAAiC;IACvC,eAAe,EAAE,iBAAiB,CAAC;IACnC,yBAAyB,EAAE,SAAS,CAAC,mCAAmC,CAAC,CAAC;IAC1E,kBAAkB,EAAE,eAAe,EAAE,CAAC;IACtC,sBAAsB,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE;YAAE,GAAG,EAAE,MAAM,CAAC;YAAC,KAAK,CAAC,EAAE,MAAM,CAAA;SAAE,CAAA;KAAE,CAAC,CAAC;IAC5E,wBAAwB,EAAE,0BAA0B,GAAG,SAAS,CAAC;IACjE,6BAA6B,EAAE,8BAA8B,EAAE,CAAC;IAChE,qCAAqC,EAAE,+BAA+B,EAAE,CAAC;IACzE,sBAAsB,EAAE,iBAAiB,EAAE,CAAC;IAC5C,+BAA+B,EAAE,yBAAyB,EAAE,CAAC;IAC7D,mCAAmC,EAAE,4BAA4B,EAAE,CAAC;IACpE,kCAAkC,EAAE,4BAA4B,EAAE,CAAC;IACnE,0CAA0C,EAAE,4BAA4B,EAAE,CAAC;IAC3E,qCAAqC,EAAE,+BAA+B,EAAE,CAAC;IACzE,WAAW,EAAE,OAAO,CAAC;IACrB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,kBAAkB,EAAE,OAAO,CAAC;IAC5B,IAAI,EAAE,SAAS,CAAC;CACnB;AAED,wBAAgB,0BAA0B,CAAC,EACvC,eAAe,EACf,yBAAyB,EACzB,kBAAkB,EAClB,sBAAsB,EACtB,wBAAwB,EACxB,6BAA6B,EAC7B,qCAAqC,EACrC,sBAAsB,EACtB,+BAA+B,EAC/B,mCAAmC,EACnC,kCAAkC,EAClC,0CAA0C,EAC1C,qCAAqC,EACrC,WAAW,EACX,gBAAgB,EAChB,kBAAkB,EAClB,IAAI,GACP,EAAE,iCAAiC,GAAG,yBAAyB,GAAG,SAAS,CAiI3E"}
@@ -16,7 +16,7 @@ export function mapDashboardFilterToOption({ dashboardFilter, allCatalogDisplayF
16
16
  // This considers both list and text filters on the target, and selection type config.
17
17
  const transferResult = isDashboardAttributeFilter(dashboardFilter)
18
18
  ? canTransferDashboardAttributeFilter(dashboardFilter, sourceDashboardAttributeFilterConfigs, targetDashboardAttributeFilters, targetDashboardAttributeFilterConfigs, targetDashboardTextAttributeFilters, allCatalogDisplayFormsMap)
19
- : canTransferTextAttributeFilter(dashboardFilter, targetDashboardAttributeFilters, targetDashboardAttributeFilterConfigs, targetDashboardTextAttributeFilters);
19
+ : canTransferTextAttributeFilter(dashboardFilter, targetDashboardAttributeFilters, targetDashboardAttributeFilterConfigs, targetDashboardTextAttributeFilters, allCatalogDisplayFormsMap);
20
20
  return {
21
21
  id: localIdentifier,
22
22
  title: customTitle ??
@@ -1 +1 @@
1
- {"version":3,"file":"mapSourceInsightFilterToOption.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/widget/insight/configuration/DrillFilters/optionMappings/mapSourceInsightFilterToOption.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,OAAO,EACH,KAAK,4BAA4B,EACjC,KAAK,iBAAiB,EACtB,KAAK,mCAAmC,EACxC,KAAK,eAAe,EACpB,KAAK,yBAAyB,EAC9B,KAAK,+BAA+B,EACpC,KAAK,4BAA4B,EACjC,KAAK,OAAO,EACZ,KAAK,QAAQ,EACb,KAAK,MAAM,EAKd,MAAM,qBAAqB,CAAC;AAM7B,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,kDAAkD,CAAC;AAalF,OAAO,EAAE,KAAK,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAE7D,UAAU,qCAAqC;IAC3C,mBAAmB,EAAE,OAAO,CAAC;IAC7B,yBAAyB,EAAE,SAAS,CAAC,mCAAmC,CAAC,CAAC;IAC1E,sBAAsB,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE;YAAE,GAAG,EAAE,MAAM,CAAC;YAAC,KAAK,CAAC,EAAE,MAAM,CAAA;SAAE,CAAA;KAAE,CAAC,CAAC;IAC5E,qBAAqB,EAAE,QAAQ,EAAE,CAAC;IAClC,kBAAkB,EAAE,eAAe,EAAE,CAAC;IACtC,sBAAsB,EAAE,iBAAiB,EAAE,CAAC;IAC5C,+BAA+B,EAAE,yBAAyB,EAAE,CAAC;IAC7D,mCAAmC,EAAE,4BAA4B,EAAE,CAAC;IACpE,kCAAkC,EAAE,4BAA4B,EAAE,CAAC;IACnE,qCAAqC,EAAE,+BAA+B,EAAE,CAAC;IACzE,WAAW,EAAE,OAAO,CAAC;IACrB,kBAAkB,EAAE,OAAO,CAAC;IAC5B,wBAAwB,EAAE,OAAO,CAAC;IAClC,IAAI,EAAE,SAAS,CAAC;CACnB;AAED,wBAAgB,8BAA8B,CAAC,EAC3C,mBAAmB,EACnB,yBAAyB,EACzB,sBAAsB,EACtB,qBAAqB,EACrB,kBAAkB,EAClB,sBAAsB,EACtB,+BAA+B,EAC/B,mCAAmC,EACnC,kCAAkC,EAClC,qCAAqC,EACrC,WAAW,EACX,kBAAkB,EAClB,wBAAwB,EACxB,IAAI,GACP,EAAE,qCAAqC,GAAG,yBAAyB,GAAG,SAAS,CAyI/E"}
1
+ {"version":3,"file":"mapSourceInsightFilterToOption.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/widget/insight/configuration/DrillFilters/optionMappings/mapSourceInsightFilterToOption.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,OAAO,EACH,KAAK,4BAA4B,EACjC,KAAK,iBAAiB,EACtB,KAAK,mCAAmC,EACxC,KAAK,eAAe,EACpB,KAAK,yBAAyB,EAC9B,KAAK,+BAA+B,EACpC,KAAK,4BAA4B,EACjC,KAAK,OAAO,EACZ,KAAK,QAAQ,EACb,KAAK,MAAM,EAKd,MAAM,qBAAqB,CAAC;AAM7B,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,kDAAkD,CAAC;AAalF,OAAO,EAAE,KAAK,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAE7D,UAAU,qCAAqC;IAC3C,mBAAmB,EAAE,OAAO,CAAC;IAC7B,yBAAyB,EAAE,SAAS,CAAC,mCAAmC,CAAC,CAAC;IAC1E,sBAAsB,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE;YAAE,GAAG,EAAE,MAAM,CAAC;YAAC,KAAK,CAAC,EAAE,MAAM,CAAA;SAAE,CAAA;KAAE,CAAC,CAAC;IAC5E,qBAAqB,EAAE,QAAQ,EAAE,CAAC;IAClC,kBAAkB,EAAE,eAAe,EAAE,CAAC;IACtC,sBAAsB,EAAE,iBAAiB,EAAE,CAAC;IAC5C,+BAA+B,EAAE,yBAAyB,EAAE,CAAC;IAC7D,mCAAmC,EAAE,4BAA4B,EAAE,CAAC;IACpE,kCAAkC,EAAE,4BAA4B,EAAE,CAAC;IACnE,qCAAqC,EAAE,+BAA+B,EAAE,CAAC;IACzE,WAAW,EAAE,OAAO,CAAC;IACrB,kBAAkB,EAAE,OAAO,CAAC;IAC5B,wBAAwB,EAAE,OAAO,CAAC;IAClC,IAAI,EAAE,SAAS,CAAC;CACnB;AAED,wBAAgB,8BAA8B,CAAC,EAC3C,mBAAmB,EACnB,yBAAyB,EACzB,sBAAsB,EACtB,qBAAqB,EACrB,kBAAkB,EAClB,sBAAsB,EACtB,+BAA+B,EAC/B,mCAAmC,EACnC,kCAAkC,EAClC,qCAAqC,EACrC,WAAW,EACX,kBAAkB,EAClB,wBAAwB,EACxB,IAAI,GACP,EAAE,qCAAqC,GAAG,yBAAyB,GAAG,SAAS,CA0I/E"}
@@ -20,7 +20,7 @@ export function mapSourceInsightFilterToOption({ sourceInsightFilter, allCatalog
20
20
  return undefined;
21
21
  }
22
22
  const isSourceTextFilter = isArbitraryAttributeFilter(sourceInsightFilter) || isMatchAttributeFilter(sourceInsightFilter);
23
- const transferResult = canTransferAttributeFilterByDisplayForm(displayFormRef, isSourceTextFilter, targetDashboardAttributeFilters, targetDashboardAttributeFilterConfigs, targetDashboardTextAttributeFilters);
23
+ const transferResult = canTransferAttributeFilterByDisplayForm(displayFormRef, isSourceTextFilter, targetDashboardAttributeFilters, targetDashboardAttributeFilterConfigs, targetDashboardTextAttributeFilters, allCatalogDisplayFormsMap);
24
24
  return {
25
25
  id: sourceFilterOptionId(sourceFilterObjRef),
26
26
  title: getDisplayFormTitle({
@@ -1 +1 @@
1
- {"version":3,"file":"mapSourceMeasureFilterToOption.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/widget/insight/configuration/DrillFilters/optionMappings/mapSourceMeasureFilterToOption.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,OAAO,EACH,KAAK,4BAA4B,EACjC,KAAK,iBAAiB,EACtB,KAAK,mCAAmC,EACxC,KAAK,yBAAyB,EAC9B,KAAK,+BAA+B,EACpC,KAAK,OAAO,EACZ,KAAK,MAAM,EAGd,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,kDAAkD,CAAC;AAWlF,OAAO,EAAE,KAAK,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAE7D,UAAU,qCAAqC;IAC3C,mBAAmB,EAAE,OAAO,CAAC;IAC7B,yBAAyB,EAAE,SAAS,CAAC,mCAAmC,CAAC,CAAC;IAC1E,sBAAsB,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE;YAAE,GAAG,EAAE,MAAM,CAAC;YAAC,KAAK,CAAC,EAAE,MAAM,CAAA;SAAE,CAAA;KAAE,CAAC,CAAC;IAC5E,sBAAsB,EAAE,iBAAiB,EAAE,CAAC;IAC5C,+BAA+B,EAAE,yBAAyB,EAAE,CAAC;IAC7D,mCAAmC,EAAE,4BAA4B,EAAE,CAAC;IACpE,qCAAqC,EAAE,+BAA+B,EAAE,CAAC;IACzE,kBAAkB,EAAE,OAAO,CAAC;IAC5B,IAAI,EAAE,SAAS,CAAC;CACnB;AAED,wBAAgB,8BAA8B,CAAC,EAC3C,mBAAmB,EACnB,yBAAyB,EACzB,sBAAsB,EACtB,sBAAsB,EACtB,+BAA+B,EAC/B,mCAAmC,EACnC,qCAAqC,EACrC,kBAAkB,EAClB,IAAI,GACP,EAAE,qCAAqC,GAAG,yBAAyB,GAAG,SAAS,CA2D/E"}
1
+ {"version":3,"file":"mapSourceMeasureFilterToOption.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/widget/insight/configuration/DrillFilters/optionMappings/mapSourceMeasureFilterToOption.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,OAAO,EACH,KAAK,4BAA4B,EACjC,KAAK,iBAAiB,EACtB,KAAK,mCAAmC,EACxC,KAAK,yBAAyB,EAC9B,KAAK,+BAA+B,EACpC,KAAK,OAAO,EACZ,KAAK,MAAM,EAGd,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,kDAAkD,CAAC;AAWlF,OAAO,EAAE,KAAK,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAE7D,UAAU,qCAAqC;IAC3C,mBAAmB,EAAE,OAAO,CAAC;IAC7B,yBAAyB,EAAE,SAAS,CAAC,mCAAmC,CAAC,CAAC;IAC1E,sBAAsB,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE;YAAE,GAAG,EAAE,MAAM,CAAC;YAAC,KAAK,CAAC,EAAE,MAAM,CAAA;SAAE,CAAA;KAAE,CAAC,CAAC;IAC5E,sBAAsB,EAAE,iBAAiB,EAAE,CAAC;IAC5C,+BAA+B,EAAE,yBAAyB,EAAE,CAAC;IAC7D,mCAAmC,EAAE,4BAA4B,EAAE,CAAC;IACpE,qCAAqC,EAAE,+BAA+B,EAAE,CAAC;IACzE,kBAAkB,EAAE,OAAO,CAAC;IAC5B,IAAI,EAAE,SAAS,CAAC;CACnB;AAED,wBAAgB,8BAA8B,CAAC,EAC3C,mBAAmB,EACnB,yBAAyB,EACzB,sBAAsB,EACtB,sBAAsB,EACtB,+BAA+B,EAC/B,mCAAmC,EACnC,qCAAqC,EACrC,kBAAkB,EAClB,IAAI,GACP,EAAE,qCAAqC,GAAG,yBAAyB,GAAG,SAAS,CA4D/E"}
@@ -15,7 +15,7 @@ export function mapSourceMeasureFilterToOption({ sourceMeasureFilter, allCatalog
15
15
  }
16
16
  // Measure filters are always list-type attribute filters (from execution model)
17
17
  const transferResult = canTransferAttributeFilterByDisplayForm(displayFormRef, false, // measure filters are list-type
18
- targetDashboardAttributeFilters, targetDashboardAttributeFilterConfigs, targetDashboardTextAttributeFilters);
18
+ targetDashboardAttributeFilters, targetDashboardAttributeFilterConfigs, targetDashboardTextAttributeFilters, allCatalogDisplayFormsMap);
19
19
  return {
20
20
  id: sourceFilterOptionId(sourceFilterObjRef),
21
21
  title: getDisplayFormTitle({
@@ -1604,7 +1604,7 @@ export declare function changeFilterContextSelection(filters: (IDashboardFilter
1604
1604
  * TODO: next major release can remove ByParams suffix and use this implementation instead of original cmd creator + other creators can be rewritten to use params object
1605
1605
  * https://gooddata.atlassian.net/browse/STL-700
1606
1606
  */
1607
- export declare function changeFilterContextSelectionByParams({ filters, attributeFilterConfigs, resetOthers, correlationId, tabLocalIdentifier, matchByLocalIdentifier, }: ChangeFilterContextSelectionParams): ChangeFilterContextSelection;
1607
+ export declare function changeFilterContextSelectionByParams({ filters, attributeFilterConfigs, resetOthers, correlationId, tabLocalIdentifier, matchByLocalIdentifier, restorePerTabOriginals, }: ChangeFilterContextSelectionParams): ChangeFilterContextSelection;
1608
1608
 
1609
1609
  /**
1610
1610
  * Params for {@link changeFilterContextSelectionByParams} command.
@@ -1628,6 +1628,13 @@ export declare type ChangeFilterContextSelectionParams = {
1628
1628
  * as a fallback. See {@link ChangeFilterContextSelectionPayload}. Defaults to false.
1629
1629
  */
1630
1630
  matchByLocalIdentifier?: boolean;
1631
+ /**
1632
+ * When true, other tabs restore their own saved initial filter values.
1633
+ * See {@link ChangeFilterContextSelectionPayload.restorePerTabOriginals}.
1634
+ *
1635
+ * @internal
1636
+ */
1637
+ restorePerTabOriginals?: boolean;
1631
1638
  };
1632
1639
 
1633
1640
  /**
@@ -1671,6 +1678,14 @@ export declare type ChangeFilterContextSelectionPayload = {
1671
1678
  * payload carries localIdentifiers.
1672
1679
  */
1673
1680
  matchByLocalIdentifier?: boolean;
1681
+ /**
1682
+ * When true, tabs other than the one this command addresses keep their own saved initial
1683
+ * filter values instead of receiving this payload. Used by filter reset when filters are
1684
+ * persisted across tabs.
1685
+ *
1686
+ * @internal
1687
+ */
1688
+ restorePerTabOriginals?: boolean;
1674
1689
  };
1675
1690
 
1676
1691
  /**
@@ -1999,8 +2014,9 @@ export declare function changeNestedLayoutSectionHeader(index: ILayoutSectionPat
1999
2014
  *
2000
2015
  * @remarks
2001
2016
  * Dispatching this command sets the provided parameter values as runtime overrides on the
2002
- * currently active tab. Only parameters already present on the active tab are affected; values
2003
- * for unknown parameter refs are ignored.
2017
+ * target tab, or the active tab when none is named. When persistent filters across tabs are
2018
+ * enabled, the same values are written to every tab that already defines the parameter.
2019
+ * Unknown parameter refs are ignored.
2004
2020
  *
2005
2021
  * Mirrors {@link changeFilterContextSelectionByParams} for parameters, so drill targets can
2006
2022
  * inherit the source dashboard's active parameter overrides.
@@ -2306,6 +2322,14 @@ export declare function createScheduledEmail(scheduledEmail: IAutomationMetadata
2306
2322
  */
2307
2323
  export declare function crossFiltering(insight: IInsight, drillDefinition: ICrossFiltering_2, drillEvent: IDashboardDrillEvent, correlationId?: string): ICrossFiltering;
2308
2324
 
2325
+ /**
2326
+ * Local identifiers of cross-filtering virtual filters keyed by tab local identifier.
2327
+ * Sourced from the drill slice, which reducers of the tabs slice cannot read.
2328
+ *
2329
+ * @internal
2330
+ */
2331
+ export declare type CrossFilteringLocalIdsByTab = Readonly<Record<string, readonly string[]>>;
2332
+
2309
2333
  /**
2310
2334
  * Type of a replacement for the alerting create/edit dialog — the shape expected by the
2311
2335
  * `AlertingDialogComponent` dashboard prop.
@@ -6400,6 +6424,20 @@ export declare interface IAccessibleDashboardsState extends EntityState<IListedD
6400
6424
  isLoaded: boolean;
6401
6425
  }
6402
6426
 
6427
+ /**
6428
+ * Addable workspace parameter the dropdown's "parameters" tab offers (automation dialogs only).
6429
+ * `isFromDashboard` marks the ones with a control on the dashboard tab so they list first, `tags`
6430
+ * drive the tag groups.
6431
+ *
6432
+ * @internal
6433
+ */
6434
+ export declare interface IAddableParameter {
6435
+ ref: IdentifierRef;
6436
+ title: string;
6437
+ isFromDashboard: boolean;
6438
+ tags: string[];
6439
+ }
6440
+
6403
6441
  /**
6404
6442
  * @beta
6405
6443
  */
@@ -6964,7 +7002,7 @@ export declare interface IAlertFiltersContextValue {
6964
7002
  /**
6965
7003
  * Workspace parameters addable via the "+" menu. Empty when the feature is off.
6966
7004
  */
6967
- availableParameters: IAutomationParameter[];
7005
+ availableParameters: IAvailableAutomationParameter[];
6968
7006
  /**
6969
7007
  * Sets a parameter's value.
6970
7008
  */
@@ -7731,6 +7769,11 @@ export declare interface IApplyFilterViewPayload {
7731
7769
  */
7732
7770
  export declare interface IApplyWorkingSelectionPayload {
7733
7771
  readonly enableImmediateAttributeFilterDisplayAsLabelMigration?: boolean;
7772
+ /**
7773
+ * Cross-filtering virtual filters per tab. They are not mirrored to or from other tabs.
7774
+ */
7775
+ readonly crossFilteringLocalIdsByTab?: CrossFilteringLocalIdsByTab;
7776
+ readonly enablePersistentFiltersAcrossTabs?: boolean;
7734
7777
  }
7735
7778
 
7736
7779
  /**
@@ -7835,7 +7878,7 @@ export declare interface IAttributeHierarchyModified extends IDashboardCommand {
7835
7878
  */
7836
7879
  export declare interface IAttributesDropdownProps extends IDashboardAttributeFilterPlaceholderProps {
7837
7880
  /** Addable workspace parameters (automation dialogs only). Renders a "parameters" tab. */
7838
- parameters?: IParameterDropdownListItem[];
7881
+ parameters?: IAddableParameter[];
7839
7882
  onParameterSelect?: (ref: IdentifierRef) => void;
7840
7883
  }
7841
7884
 
@@ -7980,7 +8023,7 @@ export declare interface IAutomationDialogFiltersProps {
7980
8023
  /**
7981
8024
  * Workspace parameters addable via the "+" menu.
7982
8025
  */
7983
- availableParameters?: IAutomationParameter[];
8026
+ availableParameters?: IAvailableAutomationParameter[];
7984
8027
  /**
7985
8028
  * Called when a parameter is added from the "+" menu.
7986
8029
  */
@@ -8246,8 +8289,12 @@ export declare interface IAutomationsContextValue {
8246
8289
  hiddenFilters: FilterContextItem[];
8247
8290
  /** Dashboard's applied filters with cross-filtering filters removed; from selectAllDashboardFiltersWithoutCrossFiltering. */
8248
8291
  availableFilters: FilterContextItem[];
8249
- /** Whether the user may not read the object a filter filters by. Such a filter is kept in the automation, but the filter bar reports it as a count instead of rendering it. */
8250
- isFilterRestricted: (filter: FilterContextItem) => boolean;
8292
+ /**
8293
+ * Whether a filter of the given tab (the active one when omitted) is restricted: it uses an object the
8294
+ * user may not read, or its parent filter is restricted. Such a filter is kept in the automation, but
8295
+ * the filter bar reports it as a count instead of rendering it.
8296
+ */
8297
+ isFilterRestricted: (filter: FilterContextItem, tabId?: string) => boolean;
8251
8298
  /** Automation-available filters structured per dashboard tab, for whole-dashboard automations on a tabbed dashboard; from selectAutomationFiltersByTab. */
8252
8299
  automationFiltersByTab: IAutomationFiltersTab[];
8253
8300
  /** Automation-available filters with empty (all-values) filters removed, except restricted ones; preselects filters for a new automation. From selectAutomationDefaultSelectedFilters. */
@@ -8426,6 +8473,17 @@ export declare interface IAutomationsState {
8426
8473
  allAutomationsCount: number;
8427
8474
  }
8428
8475
 
8476
+ /**
8477
+ * A workspace parameter the "+" menu offers; `isFromDashboard` marks the ones with a control on
8478
+ * the dashboard tab so the menu can list them first, `tags` drive the menu's tag groups.
8479
+ *
8480
+ * @internal
8481
+ */
8482
+ export declare interface IAvailableAutomationParameter extends IAutomationParameter {
8483
+ isFromDashboard: boolean;
8484
+ tags: string[];
8485
+ }
8486
+
8429
8487
  /**
8430
8488
  * @beta
8431
8489
  */
@@ -9038,6 +9096,11 @@ export declare type IChangeMeasureValueFilterConditionReducerPayload = {
9038
9096
  readonly localIdentifier: string;
9039
9097
  readonly conditions?: MeasureValueFilterCondition[];
9040
9098
  readonly isWorkingSelectionChange?: boolean;
9099
+ readonly enablePersistentFiltersAcrossTabs?: boolean;
9100
+ /**
9101
+ * When true, other tabs restore their own saved initial condition instead of this payload.
9102
+ */
9103
+ readonly restoreTargetOriginal?: boolean;
9041
9104
  };
9042
9105
 
9043
9106
  /**
@@ -9049,7 +9112,7 @@ export declare interface IChangeMeasureValueFilterConfigModePayload {
9049
9112
  }
9050
9113
 
9051
9114
  /**
9052
- * Command for setting runtime parameter overrides on the currently active tab.
9115
+ * Command for setting runtime parameter overrides.
9053
9116
  *
9054
9117
  * @remarks
9055
9118
  * See {@link changeParameterValues} for a factory function that will help you create this command.
@@ -9195,6 +9258,15 @@ export declare interface IClearAttributeFiltersSelectionPayload {
9195
9258
  * If not provided, the active tab will be used.
9196
9259
  */
9197
9260
  readonly tabLocalIdentifier?: string;
9261
+ /**
9262
+ * When true, other tabs restore their own saved initial selection instead of clearing to All.
9263
+ */
9264
+ readonly restoreTargetOriginal?: boolean;
9265
+ /**
9266
+ * Cross-filtering virtual filters per tab. They are not mirrored to or from other tabs.
9267
+ */
9268
+ readonly crossFilteringLocalIdsByTab?: CrossFilteringLocalIdsByTab;
9269
+ readonly enablePersistentFiltersAcrossTabs?: boolean;
9198
9270
  }
9199
9271
 
9200
9272
  /**
@@ -18277,7 +18349,7 @@ export declare interface IObjRefMapConfig<T> {
18277
18349
  }
18278
18350
 
18279
18351
  /**
18280
- * Addable workspace parameter offered in the dropdown's "parameters" tab (automation dialogs only).
18352
+ * Parameter row rendered in the dropdown's "parameters" tab.
18281
18353
  *
18282
18354
  * @internal
18283
18355
  */
@@ -19054,11 +19126,20 @@ export declare interface IReplaceAttributeFilterItemPayload {
19054
19126
  readonly filter: DashboardAttributeFilterItem;
19055
19127
  readonly isWorkingSelectionChange?: boolean;
19056
19128
  readonly isSelectionInvalid?: boolean;
19129
+ readonly enablePersistentFiltersAcrossTabs?: boolean;
19057
19130
  /**
19058
19131
  * Optional tab local identifier to target a specific tab.
19059
19132
  * If not provided, the active tab will be used.
19060
19133
  */
19061
19134
  readonly tabLocalIdentifier?: string;
19135
+ /**
19136
+ * When true, other tabs restore their own saved initial filter instead of this payload.
19137
+ */
19138
+ readonly restoreTargetOriginal?: boolean;
19139
+ /**
19140
+ * Cross-filtering virtual filters per tab. They are not mirrored to or from other tabs.
19141
+ */
19142
+ readonly crossFilteringLocalIdsByTab?: CrossFilteringLocalIdsByTab;
19062
19143
  }
19063
19144
 
19064
19145
  /**
@@ -19893,7 +19974,7 @@ export declare interface IScheduledEmailDialogFiltersProps extends IAutomationDi
19893
19974
  /**
19894
19975
  * Addable workspace parameters per tab (by-tab mode).
19895
19976
  */
19896
- availableParametersByTab?: Record<string, IAutomationParameter[]>;
19977
+ availableParametersByTab?: Record<string, IAvailableAutomationParameter[]>;
19897
19978
  /**
19898
19979
  * Called when a parameter is added in a tab section (by-tab mode).
19899
19980
  */
@@ -20682,7 +20763,7 @@ export declare interface IScheduledExportFiltersContextValue {
20682
20763
  /**
20683
20764
  * Per-tab workspace parameters addable via the "+" menu.
20684
20765
  */
20685
- availableParametersByTab: Record<string, IAutomationParameter[]>;
20766
+ availableParametersByTab: Record<string, IAvailableAutomationParameter[]>;
20686
20767
  /**
20687
20768
  * The tab the flat (non-tabbed) UI edits; undefined for multi-tab dashboards or when no
20688
20769
  * parameter context applies.
@@ -22484,8 +22565,13 @@ export declare interface ISetParameterRuntimeValuesPayload {
22484
22565
  values: IParameterValueChange[];
22485
22566
  /**
22486
22567
  * Target tab. When omitted, the active tab is used.
22568
+ * With `enablePersistentFiltersAcrossTabs`, this tab is the source and every other tab is written too.
22487
22569
  */
22488
22570
  tabLocalIdentifier?: string;
22571
+ /**
22572
+ * When true, write the values onto every tab. A tab that does not define the parameter is unchanged.
22573
+ */
22574
+ enablePersistentFiltersAcrossTabs?: boolean;
22489
22575
  }
22490
22576
 
22491
22577
  /**
@@ -23535,6 +23621,15 @@ export declare interface IUpdateAttributeFilterSelectionPayload {
23535
23621
  * If not provided, the active tab will be used.
23536
23622
  */
23537
23623
  readonly tabLocalIdentifier?: string;
23624
+ /**
23625
+ * When true, other tabs restore their own saved initial selection instead of this payload.
23626
+ */
23627
+ readonly restoreTargetOriginal?: boolean;
23628
+ /**
23629
+ * Cross-filtering virtual filters per tab. They are not mirrored to or from other tabs.
23630
+ */
23631
+ readonly crossFilteringLocalIdsByTab?: CrossFilteringLocalIdsByTab;
23632
+ readonly enablePersistentFiltersAcrossTabs?: boolean;
23538
23633
  }
23539
23634
 
23540
23635
  /**
@@ -23569,11 +23664,16 @@ export declare interface IUpsertDateFilterAllTimePayload {
23569
23664
  readonly isWorkingSelectionChange?: boolean;
23570
23665
  readonly localIdentifier?: string;
23571
23666
  readonly emptyValueHandling?: EmptyValues;
23667
+ readonly enablePersistentFiltersAcrossTabs?: boolean;
23572
23668
  /**
23573
23669
  * Optional tab local identifier to target a specific tab.
23574
23670
  * If not provided, the active tab will be used.
23575
23671
  */
23576
23672
  readonly tabLocalIdentifier?: string;
23673
+ /**
23674
+ * When true, other tabs restore their own saved initial date filter instead of this payload.
23675
+ */
23676
+ readonly restoreTargetOriginal?: boolean;
23577
23677
  }
23578
23678
 
23579
23679
  /**
@@ -23589,11 +23689,16 @@ export declare interface IUpsertDateFilterNonAllTimePayload {
23589
23689
  readonly localIdentifier?: string;
23590
23690
  readonly boundedFilter?: IUpperBoundedFilter | ILowerBoundedFilter;
23591
23691
  readonly emptyValueHandling?: EmptyValues;
23692
+ readonly enablePersistentFiltersAcrossTabs?: boolean;
23592
23693
  /**
23593
23694
  * Optional tab local identifier to target a specific tab.
23594
23695
  * If not provided, the active tab will be used.
23595
23696
  */
23596
23697
  readonly tabLocalIdentifier?: string;
23698
+ /**
23699
+ * When true, other tabs restore their own saved initial date filter instead of this payload.
23700
+ */
23701
+ readonly restoreTargetOriginal?: boolean;
23597
23702
  }
23598
23703
 
23599
23704
  /**
@@ -28265,6 +28370,13 @@ export declare const selectDeleteVisible: DashboardSelector<boolean>;
28265
28370
  */
28266
28371
  export declare const selectDisableDashboardCrossFiltering: DashboardSelector<boolean>;
28267
28372
 
28373
+ /**
28374
+ * Selects whether dashboard persisted filters are disabled.
28375
+ *
28376
+ * @alpha
28377
+ */
28378
+ export declare const selectDisableDashboardPersistentFiltersAcrossTabs: DashboardSelector<boolean>;
28379
+
28268
28380
  /**
28269
28381
  * Selects whether user filter reset is disabled.
28270
28382
  *
@@ -28642,6 +28754,13 @@ export declare const selectEnableOrchestratedTabularExports: DashboardSelector<b
28642
28754
  */
28643
28755
  export declare const selectEnableParameters: DashboardSelector<boolean>;
28644
28756
 
28757
+ /**
28758
+ * Selects whether persistent filters across tabs are enabled.
28759
+ *
28760
+ * @alpha
28761
+ */
28762
+ export declare const selectEnablePersistentFiltersAcrossTabs: DashboardSelector<boolean>;
28763
+
28645
28764
  /**
28646
28765
  * Returns whether rich text widget filter configuration is enabled.
28647
28766
  *
@@ -30360,7 +30479,8 @@ export declare const selectRenderMode: DashboardSelector<RenderMode>;
30360
30479
  export declare const selectRestrictedDashboardFilterCount: DashboardSelector<number>;
30361
30480
 
30362
30481
  /**
30363
- * Selects local identifiers of filters the current user is forbidden to access.
30482
+ * Selects local identifiers of filters the current user is forbidden to access: the ones using an object
30483
+ * the user may not read and, transitively, their child filters.
30364
30484
  *
30365
30485
  * @alpha
30366
30486
  */
@@ -31547,6 +31667,8 @@ readonly setMeasureValueFilterDimensionality: (state: WritableDraft<ITabsState>,
31547
31667
  payload: {
31548
31668
  readonly localIdentifier: string;
31549
31669
  readonly dimensionality?: ObjRef[];
31670
+ readonly restoreTargetOriginal?: boolean;
31671
+ readonly enablePersistentFiltersAcrossTabs?: boolean;
31550
31672
  };
31551
31673
  type: string;
31552
31674
  }) => void | ITabsState | WritableDraft<ITabsState>;