@gooddata/sdk-ui-dashboard 11.65.0-alpha.8 → 11.65.0
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.
- package/NOTICE +622 -2311
- package/README.md +1 -1
- package/esm/__version.d.ts +1 -1
- package/esm/__version.d.ts.map +1 -1
- package/esm/__version.js +1 -1
- package/esm/index.d.ts +8 -5
- package/esm/index.d.ts.map +1 -1
- package/esm/index.js +3 -2
- package/esm/model/commandHandlers/dashboard/common/filterViews.d.ts +36 -3
- package/esm/model/commandHandlers/dashboard/common/filterViews.d.ts.map +1 -1
- package/esm/model/commandHandlers/dashboard/common/filterViews.js +138 -26
- package/esm/model/commandHandlers/dashboard/initializeDashboardHandler/index.d.ts +15 -4
- package/esm/model/commandHandlers/dashboard/initializeDashboardHandler/index.d.ts.map +1 -1
- package/esm/model/commandHandlers/dashboard/initializeDashboardHandler/index.js +55 -11
- package/esm/model/commandHandlers/dashboard/initializeDashboardHandler/preloadAttributeFiltersData.d.ts +6 -1
- package/esm/model/commandHandlers/dashboard/initializeDashboardHandler/preloadAttributeFiltersData.d.ts.map +1 -1
- package/esm/model/commandHandlers/dashboard/initializeDashboardHandler/preloadAttributeFiltersData.js +14 -6
- package/esm/model/commandHandlers/dashboard/initializeDashboardHandler/resolveDashboardConfig.d.ts.map +1 -1
- package/esm/model/commandHandlers/dashboard/initializeDashboardHandler/resolveDashboardConfig.js +1 -0
- package/esm/model/commandHandlers/dashboard/resetDashboardHandler.d.ts.map +1 -1
- package/esm/model/commandHandlers/dashboard/resetDashboardHandler.js +21 -8
- package/esm/model/commandHandlers/filterContext/attributeFilter/changeAttributeDisplayFormHandler.d.ts.map +1 -1
- package/esm/model/commandHandlers/filterContext/attributeFilter/changeAttributeDisplayFormHandler.js +8 -7
- package/esm/model/commandHandlers/filterContext/attributeFilter/changeAttributeFilterSelectionHandler.d.ts.map +1 -1
- package/esm/model/commandHandlers/filterContext/attributeFilter/changeAttributeFilterSelectionHandler.js +19 -28
- package/esm/model/commandHandlers/filterContext/attributeFilter/removeAttributeFiltersHandler.d.ts.map +1 -1
- package/esm/model/commandHandlers/filterContext/attributeFilter/removeAttributeFiltersHandler.js +4 -5
- package/esm/model/commandHandlers/filterContext/attributeFilter/replaceAttributeFilterItemSelectionHandler.d.ts.map +1 -1
- package/esm/model/commandHandlers/filterContext/attributeFilter/replaceAttributeFilterItemSelectionHandler.js +14 -15
- package/esm/model/commandHandlers/filterContext/attributeFilter/resolveDisplayFormMetadata.d.ts +4 -1
- package/esm/model/commandHandlers/filterContext/attributeFilter/resolveDisplayFormMetadata.d.ts.map +1 -1
- package/esm/model/commandHandlers/filterContext/attributeFilter/resolveDisplayFormMetadata.js +11 -2
- package/esm/model/commandHandlers/filterContext/changeFilterContextSelectionHandler.d.ts.map +1 -1
- package/esm/model/commandHandlers/filterContext/changeFilterContextSelectionHandler.js +28 -44
- package/esm/model/commandHandlers/filterContext/common.d.ts +6 -5
- package/esm/model/commandHandlers/filterContext/common.d.ts.map +1 -1
- package/esm/model/commandHandlers/filterContext/common.js +12 -18
- package/esm/model/commandHandlers/filterContext/dateFilter/changeDateFilterSelectionHandler.d.ts.map +1 -1
- package/esm/model/commandHandlers/filterContext/dateFilter/changeDateFilterSelectionHandler.js +30 -36
- package/esm/model/commandHandlers/filterContext/filterViewHandler.d.ts +10 -0
- package/esm/model/commandHandlers/filterContext/filterViewHandler.d.ts.map +1 -1
- package/esm/model/commandHandlers/filterContext/filterViewHandler.js +79 -24
- package/esm/model/commandHandlers/filterContext/measureValueFilter/changeMeasureValueFilterConditionHandler.d.ts.map +1 -1
- package/esm/model/commandHandlers/filterContext/measureValueFilter/changeMeasureValueFilterConditionHandler.js +11 -17
- package/esm/model/commandHandlers/filterContext/measureValueFilter/changeMeasureValueFilterDimensionalityHandler.d.ts.map +1 -1
- package/esm/model/commandHandlers/filterContext/measureValueFilter/changeMeasureValueFilterDimensionalityHandler.js +7 -10
- package/esm/model/commandHandlers/filterContext/tabSync/expandActionsForTabSync.d.ts +15 -0
- package/esm/model/commandHandlers/filterContext/tabSync/expandActionsForTabSync.d.ts.map +1 -0
- package/esm/model/commandHandlers/filterContext/tabSync/expandActionsForTabSync.js +88 -0
- package/esm/model/commandHandlers/filterContext/tabSync/tabSyncRules.d.ts +11 -0
- package/esm/model/commandHandlers/filterContext/tabSync/tabSyncRules.d.ts.map +1 -0
- package/esm/model/commandHandlers/filterContext/tabSync/tabSyncRules.js +335 -0
- package/esm/model/commandHandlers/filterContext/tabSync/tabSyncSaga.d.ts +52 -0
- package/esm/model/commandHandlers/filterContext/tabSync/tabSyncSaga.d.ts.map +1 -0
- package/esm/model/commandHandlers/filterContext/tabSync/tabSyncSaga.js +60 -0
- package/esm/model/commandHandlers/filterContext/tabSync/tabSyncScope.d.ts +69 -0
- package/esm/model/commandHandlers/filterContext/tabSync/tabSyncScope.d.ts.map +1 -0
- package/esm/model/commandHandlers/filterContext/tabSync/tabSyncScope.js +2 -0
- package/esm/model/commandHandlers/filterContext/tabSync/writtenTargets.d.ts +17 -0
- package/esm/model/commandHandlers/filterContext/tabSync/writtenTargets.d.ts.map +1 -0
- package/esm/model/commandHandlers/filterContext/tabSync/writtenTargets.js +79 -0
- package/esm/model/commandHandlers/parameters/changeParameterValuesHandler.d.ts +2 -1
- package/esm/model/commandHandlers/parameters/changeParameterValuesHandler.d.ts.map +1 -1
- package/esm/model/commandHandlers/parameters/changeParameterValuesHandler.js +44 -9
- package/esm/model/commandHandlers/tabs/switchDashboardTabHandler.d.ts.map +1 -1
- package/esm/model/commandHandlers/tabs/switchDashboardTabHandler.js +3 -1
- package/esm/model/commands/filters.d.ts +16 -1
- package/esm/model/commands/filters.d.ts.map +1 -1
- package/esm/model/commands/filters.js +2 -1
- package/esm/model/commands/parameters.d.ts +20 -1
- package/esm/model/commands/parameters.d.ts.map +1 -1
- package/esm/model/commands/parameters.js +3 -1
- package/esm/model/events/base.d.ts +1 -1
- package/esm/model/events/base.d.ts.map +1 -1
- package/esm/model/events/index.d.ts +2 -1
- package/esm/model/events/index.d.ts.map +1 -1
- package/esm/model/events/insightEditor.d.ts +128 -0
- package/esm/model/events/insightEditor.d.ts.map +1 -0
- package/esm/model/events/insightEditor.js +74 -0
- package/esm/model/store/config/configSelectors.d.ts +12 -0
- package/esm/model/store/config/configSelectors.d.ts.map +1 -1
- package/esm/model/store/config/configSelectors.js +12 -0
- package/esm/model/store/filterViews/filterViewsReducers.d.ts +8 -0
- package/esm/model/store/filterViews/filterViewsReducers.d.ts.map +1 -1
- package/esm/model/store/filterViews/filterViewsReducers.js +11 -0
- package/esm/model/store/filterViews/filterViewsReducersSelectors.d.ts +6 -0
- package/esm/model/store/filterViews/filterViewsReducersSelectors.d.ts.map +1 -1
- package/esm/model/store/filterViews/filterViewsReducersSelectors.js +6 -0
- package/esm/model/store/filterViews/filterViewsState.d.ts +6 -0
- package/esm/model/store/filterViews/filterViewsState.d.ts.map +1 -1
- package/esm/model/store/filterViews/index.d.ts +2 -0
- package/esm/model/store/filterViews/index.d.ts.map +1 -1
- package/esm/model/store/meta/metaSelectors.d.ts +7 -0
- package/esm/model/store/meta/metaSelectors.d.ts.map +1 -1
- package/esm/model/store/meta/metaSelectors.js +10 -0
- package/esm/model/store/tabs/attributeFilterConfigs/attributeFilterConfigsReducers.d.ts +75 -5
- package/esm/model/store/tabs/attributeFilterConfigs/attributeFilterConfigsReducers.d.ts.map +1 -1
- package/esm/model/store/tabs/attributeFilterConfigs/attributeFilterConfigsReducers.js +35 -60
- package/esm/model/store/tabs/dateFilterConfigs/dateFilterConfigsReducers.js +1 -1
- package/esm/model/store/tabs/filterContext/filterContextReducers.d.ts +163 -31
- package/esm/model/store/tabs/filterContext/filterContextReducers.d.ts.map +1 -1
- package/esm/model/store/tabs/filterContext/filterContextReducers.js +389 -529
- package/esm/model/store/tabs/filterContext/filterSync.d.ts +35 -13
- package/esm/model/store/tabs/filterContext/filterSync.d.ts.map +1 -1
- package/esm/model/store/tabs/filterContext/filterSync.js +79 -58
- package/esm/model/store/tabs/index.d.ts +18 -12
- package/esm/model/store/tabs/index.d.ts.map +1 -1
- package/esm/model/store/tabs/layout/layoutReducers.d.ts +1 -0
- package/esm/model/store/tabs/layout/layoutReducers.d.ts.map +1 -1
- package/esm/model/store/tabs/measureValueFilterConfigs/measureValueFilterConfigsReducers.d.ts.map +1 -1
- package/esm/model/store/tabs/parameters/parametersReducers.d.ts +16 -5
- package/esm/model/store/tabs/parameters/parametersReducers.d.ts.map +1 -1
- package/esm/model/store/tabs/parameters/parametersReducers.js +33 -7
- package/esm/model/store/tabs/parameters/parametersSelectors.d.ts +7 -0
- package/esm/model/store/tabs/parameters/parametersSelectors.d.ts.map +1 -1
- package/esm/model/store/tabs/parameters/parametersSelectors.js +16 -0
- package/esm/model/store/tabs/tabsReducers.d.ts +8 -4
- package/esm/model/store/tabs/tabsReducers.d.ts.map +1 -1
- package/esm/model/store/tabs/tabsReducers.js +15 -18
- package/esm/model/store/tabs/tabsState.d.ts +0 -10
- package/esm/model/store/tabs/tabsState.d.ts.map +1 -1
- package/esm/model/store/tabs/tabsState.js +0 -20
- package/esm/model/store/ui/index.d.ts +2 -0
- package/esm/model/store/ui/index.d.ts.map +1 -1
- package/esm/model/store/ui/uiReducers.d.ts +6 -0
- package/esm/model/store/ui/uiReducers.d.ts.map +1 -1
- package/esm/model/store/ui/uiReducers.js +8 -0
- package/esm/model/store/ui/uiSelectors.d.ts +7 -0
- package/esm/model/store/ui/uiSelectors.d.ts.map +1 -1
- package/esm/model/store/ui/uiSelectors.js +6 -0
- package/esm/model/store/ui/uiState.d.ts +5 -0
- package/esm/model/store/ui/uiState.d.ts.map +1 -1
- package/esm/model/store/ui/uiState.js +1 -0
- package/esm/model/types/commonTypes.d.ts +18 -0
- package/esm/model/types/commonTypes.d.ts.map +1 -1
- package/esm/model/types/insightEditorTypes.d.ts +43 -0
- package/esm/model/types/insightEditorTypes.d.ts.map +1 -0
- package/esm/model/types/insightEditorTypes.js +2 -0
- package/esm/model/utils/attributeFilterMatching.d.ts +10 -0
- package/esm/model/utils/attributeFilterMatching.d.ts.map +1 -1
- package/esm/model/utils/attributeFilterMatching.js +14 -3
- package/esm/model/utils/attributeFilterSelectionTypeCompatibility.d.ts +8 -0
- package/esm/model/utils/attributeFilterSelectionTypeCompatibility.d.ts.map +1 -1
- package/esm/model/utils/attributeFilterSelectionTypeCompatibility.js +14 -4
- package/esm/presentation/automations/alerting/DefaultAlertingManagementDialog/DefaultAlertingManagementDialogContent.d.ts.map +1 -1
- package/esm/presentation/automations/alerting/DefaultAlertingManagementDialog/DefaultAlertingManagementDialogContent.js +1 -4
- package/esm/presentation/automations/connectors/hooks/useAutomationManagementEditRouting.d.ts.map +1 -1
- package/esm/presentation/automations/connectors/hooks/useAutomationManagementEditRouting.js +2 -6
- package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/components/RecipientsSelect/RecipientsSelectRenderer.d.ts.map +1 -1
- package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/components/RecipientsSelect/RecipientsSelectRenderer.js +6 -1
- package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailManagementDialog/DefaultScheduledEmailManagementDialogContent.d.ts.map +1 -1
- package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailManagementDialog/DefaultScheduledEmailManagementDialogContent.js +2 -5
- package/esm/presentation/automations/shared/automationFilters/utils.d.ts +4 -0
- package/esm/presentation/automations/shared/automationFilters/utils.d.ts.map +1 -1
- package/esm/presentation/automations/shared/automationFilters/utils.js +12 -5
- package/esm/presentation/automations/shared/utils/automationUtils.d.ts +1 -2
- package/esm/presentation/automations/shared/utils/automationUtils.d.ts.map +1 -1
- package/esm/presentation/automations/shared/utils/automationUtils.js +0 -1
- package/esm/presentation/dashboard/DashboardHeader/DashboardHeader.d.ts +1 -1
- package/esm/presentation/dashboard/DashboardHeader/DashboardHeader.d.ts.map +1 -1
- package/esm/presentation/dashboard/DashboardHeader/DashboardHeader.js +0 -10
- package/esm/presentation/dashboard/DashboardSidebar/CreationPanel.d.ts.map +1 -1
- package/esm/presentation/dashboard/DashboardSidebar/CreationPanel.js +10 -1
- package/esm/presentation/dashboard/DefaultDashboardContent/DashboardContentLoader.d.ts +5 -0
- package/esm/presentation/dashboard/DefaultDashboardContent/DashboardContentLoader.d.ts.map +1 -0
- package/esm/presentation/dashboard/DefaultDashboardContent/DashboardContentLoader.js +27 -0
- package/esm/presentation/dashboard/DefaultDashboardContent/DefaultDashboardMainContent.d.ts.map +1 -1
- package/esm/presentation/dashboard/DefaultDashboardContent/DefaultDashboardMainContent.js +7 -2
- package/esm/presentation/dashboard/components/DashboardInner.d.ts.map +1 -1
- package/esm/presentation/dashboard/components/DashboardInner.js +13 -9
- package/esm/presentation/dashboard/components/DashboardInteractionComposing.d.ts +2 -1
- package/esm/presentation/dashboard/components/DashboardInteractionComposing.d.ts.map +1 -1
- package/esm/presentation/dashboard/components/DashboardInteractionComposing.js +9 -4
- package/esm/presentation/dashboard/hooks/useDashboard.d.ts.map +1 -1
- package/esm/presentation/dashboard/hooks/useDashboard.js +3 -2
- package/esm/presentation/dashboard/types.d.ts +5 -0
- package/esm/presentation/dashboard/types.d.ts.map +1 -1
- package/esm/presentation/filterBar/filterBar/hooks/useResetFiltersButton.d.ts.map +1 -1
- package/esm/presentation/filterBar/filterBar/hooks/useResetFiltersButton.js +4 -1
- package/esm/presentation/insightEditor/InsightEditorContent.d.ts +26 -0
- package/esm/presentation/insightEditor/InsightEditorContent.d.ts.map +1 -0
- package/esm/presentation/insightEditor/InsightEditorContent.js +179 -0
- package/esm/presentation/insightEditor/InsightEditorCreatePanelItem.d.ts +7 -0
- package/esm/presentation/insightEditor/InsightEditorCreatePanelItem.d.ts.map +1 -0
- package/esm/presentation/insightEditor/InsightEditorCreatePanelItem.js +25 -0
- package/esm/presentation/insightEditor/InsightEditorOverlay.d.ts +6 -0
- package/esm/presentation/insightEditor/InsightEditorOverlay.d.ts.map +1 -0
- package/esm/presentation/insightEditor/InsightEditorOverlay.js +110 -0
- package/esm/presentation/insightEditor/InsightEditorPermissionsContext.d.ts +10 -0
- package/esm/presentation/insightEditor/InsightEditorPermissionsContext.d.ts.map +1 -0
- package/esm/presentation/insightEditor/InsightEditorPermissionsContext.js +18 -0
- package/esm/presentation/insightEditor/InsightEditorPlaceholder.d.ts +7 -0
- package/esm/presentation/insightEditor/InsightEditorPlaceholder.d.ts.map +1 -0
- package/esm/presentation/insightEditor/InsightEditorPlaceholder.js +15 -0
- package/esm/presentation/insightEditor/filterContext/attributeFilters.d.ts +4 -0
- package/esm/presentation/insightEditor/filterContext/attributeFilters.d.ts.map +1 -0
- package/esm/presentation/insightEditor/filterContext/attributeFilters.js +115 -0
- package/esm/presentation/insightEditor/filterContext/dateFilters.d.ts +5 -0
- package/esm/presentation/insightEditor/filterContext/dateFilters.d.ts.map +1 -0
- package/esm/presentation/insightEditor/filterContext/dateFilters.js +117 -0
- package/esm/presentation/insightEditor/filterContext/filterIntersection.d.ts +7 -0
- package/esm/presentation/insightEditor/filterContext/filterIntersection.d.ts.map +1 -0
- package/esm/presentation/insightEditor/filterContext/filterIntersection.js +149 -0
- package/esm/presentation/insightEditor/filterContext/insightFilterContext.d.ts +26 -0
- package/esm/presentation/insightEditor/filterContext/insightFilterContext.d.ts.map +1 -0
- package/esm/presentation/insightEditor/filterContext/insightFilterContext.js +72 -0
- package/esm/presentation/insightEditor/filterContext/measureValueFilters.d.ts +20 -0
- package/esm/presentation/insightEditor/filterContext/measureValueFilters.d.ts.map +1 -0
- package/esm/presentation/insightEditor/filterContext/measureValueFilters.js +76 -0
- package/esm/presentation/insightEditor/filterContext/objQualifiers.d.ts +11 -0
- package/esm/presentation/insightEditor/filterContext/objQualifiers.d.ts.map +1 -0
- package/esm/presentation/insightEditor/filterContext/objQualifiers.js +18 -0
- package/esm/presentation/insightEditor/insightEditorEscapeGuard.d.ts +18 -0
- package/esm/presentation/insightEditor/insightEditorEscapeGuard.d.ts.map +1 -0
- package/esm/presentation/insightEditor/insightEditorEscapeGuard.js +24 -0
- package/esm/presentation/insightEditor/insightEditorRoute.d.ts +34 -0
- package/esm/presentation/insightEditor/insightEditorRoute.d.ts.map +1 -0
- package/esm/presentation/insightEditor/insightEditorRoute.js +48 -0
- package/esm/presentation/insightEditor/types.d.ts +7 -0
- package/esm/presentation/insightEditor/types.d.ts.map +1 -0
- package/esm/presentation/insightEditor/types.js +2 -0
- package/esm/presentation/insightEditor/useCanCreateInsightInEditor.d.ts +5 -0
- package/esm/presentation/insightEditor/useCanCreateInsightInEditor.d.ts.map +1 -0
- package/esm/presentation/insightEditor/useCanCreateInsightInEditor.js +14 -0
- package/esm/presentation/insightEditor/useExploreFilterTransfer.d.ts +23 -0
- package/esm/presentation/insightEditor/useExploreFilterTransfer.d.ts.map +1 -0
- package/esm/presentation/insightEditor/useExploreFilterTransfer.js +194 -0
- package/esm/presentation/insightEditor/useInsightEditPermissions.d.ts +17 -0
- package/esm/presentation/insightEditor/useInsightEditPermissions.d.ts.map +1 -0
- package/esm/presentation/insightEditor/useInsightEditPermissions.js +42 -0
- package/esm/presentation/insightEditor/useInsightEditorMenuItems.d.ts +23 -0
- package/esm/presentation/insightEditor/useInsightEditorMenuItems.d.ts.map +1 -0
- package/esm/presentation/insightEditor/useInsightEditorMenuItems.js +126 -0
- package/esm/presentation/insightEditor/useInsightEditorSession.d.ts +19 -0
- package/esm/presentation/insightEditor/useInsightEditorSession.d.ts.map +1 -0
- package/esm/presentation/insightEditor/useInsightEditorSession.js +141 -0
- package/esm/presentation/insightList/InsightList.d.ts.map +1 -1
- package/esm/presentation/insightList/InsightList.js +10 -5
- package/esm/presentation/localization/bundles/de-DE.localization-bundle.d.ts +10 -0
- package/esm/presentation/localization/bundles/de-DE.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/de-DE.localization-bundle.js +11 -1
- package/esm/presentation/localization/bundles/en-AU.localization-bundle.d.ts +10 -0
- package/esm/presentation/localization/bundles/en-AU.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/en-AU.localization-bundle.js +11 -1
- package/esm/presentation/localization/bundles/en-GB.localization-bundle.d.ts +10 -0
- package/esm/presentation/localization/bundles/en-GB.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/en-GB.localization-bundle.js +16 -6
- package/esm/presentation/localization/bundles/en-US.localization-bundle.d.ts +36 -0
- package/esm/presentation/localization/bundles/en-US.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/en-US.localization-bundle.js +36 -0
- package/esm/presentation/localization/bundles/es-419.localization-bundle.d.ts +10 -0
- package/esm/presentation/localization/bundles/es-419.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/es-419.localization-bundle.js +11 -1
- package/esm/presentation/localization/bundles/es-ES.localization-bundle.d.ts +10 -0
- package/esm/presentation/localization/bundles/es-ES.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/es-ES.localization-bundle.js +50 -40
- package/esm/presentation/localization/bundles/fi-FI.localization-bundle.d.ts +10 -0
- package/esm/presentation/localization/bundles/fi-FI.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/fi-FI.localization-bundle.js +11 -1
- package/esm/presentation/localization/bundles/fr-CA.localization-bundle.d.ts +10 -0
- package/esm/presentation/localization/bundles/fr-CA.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/fr-CA.localization-bundle.js +12 -2
- package/esm/presentation/localization/bundles/fr-FR.localization-bundle.d.ts +10 -0
- package/esm/presentation/localization/bundles/fr-FR.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/fr-FR.localization-bundle.js +186 -176
- package/esm/presentation/localization/bundles/id-ID.localization-bundle.d.ts +10 -0
- package/esm/presentation/localization/bundles/id-ID.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/id-ID.localization-bundle.js +11 -1
- package/esm/presentation/localization/bundles/it-IT.localization-bundle.d.ts +10 -0
- package/esm/presentation/localization/bundles/it-IT.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/it-IT.localization-bundle.js +11 -1
- package/esm/presentation/localization/bundles/ja-JP.localization-bundle.d.ts +10 -0
- package/esm/presentation/localization/bundles/ja-JP.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/ja-JP.localization-bundle.js +11 -1
- package/esm/presentation/localization/bundles/ko-KR.localization-bundle.d.ts +10 -0
- package/esm/presentation/localization/bundles/ko-KR.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/ko-KR.localization-bundle.js +11 -1
- package/esm/presentation/localization/bundles/nl-NL.localization-bundle.d.ts +10 -0
- package/esm/presentation/localization/bundles/nl-NL.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/nl-NL.localization-bundle.js +11 -1
- package/esm/presentation/localization/bundles/pl-PL.localization-bundle.d.ts +10 -0
- package/esm/presentation/localization/bundles/pl-PL.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/pl-PL.localization-bundle.js +11 -1
- package/esm/presentation/localization/bundles/pt-BR.localization-bundle.d.ts +10 -0
- package/esm/presentation/localization/bundles/pt-BR.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/pt-BR.localization-bundle.js +11 -1
- package/esm/presentation/localization/bundles/pt-PT.localization-bundle.d.ts +10 -0
- package/esm/presentation/localization/bundles/pt-PT.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/pt-PT.localization-bundle.js +11 -1
- package/esm/presentation/localization/bundles/ru-RU.localization-bundle.d.ts +10 -0
- package/esm/presentation/localization/bundles/ru-RU.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/ru-RU.localization-bundle.js +11 -1
- package/esm/presentation/localization/bundles/sl-SI.localization-bundle.d.ts +10 -0
- package/esm/presentation/localization/bundles/sl-SI.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/sl-SI.localization-bundle.js +11 -1
- package/esm/presentation/localization/bundles/th-TH.localization-bundle.d.ts +10 -0
- package/esm/presentation/localization/bundles/th-TH.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/th-TH.localization-bundle.js +11 -1
- package/esm/presentation/localization/bundles/tr-TR.localization-bundle.d.ts +10 -0
- package/esm/presentation/localization/bundles/tr-TR.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/tr-TR.localization-bundle.js +11 -1
- package/esm/presentation/localization/bundles/uk-UA.localization-bundle.d.ts +10 -0
- package/esm/presentation/localization/bundles/uk-UA.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/uk-UA.localization-bundle.js +11 -1
- package/esm/presentation/localization/bundles/vi-VN.localization-bundle.d.ts +10 -0
- package/esm/presentation/localization/bundles/vi-VN.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/vi-VN.localization-bundle.js +11 -1
- package/esm/presentation/localization/bundles/zh-HK.localization-bundle.d.ts +10 -0
- package/esm/presentation/localization/bundles/zh-HK.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/zh-HK.localization-bundle.js +11 -1
- package/esm/presentation/localization/bundles/zh-Hans.localization-bundle.d.ts +10 -0
- package/esm/presentation/localization/bundles/zh-Hans.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/zh-Hans.localization-bundle.js +11 -1
- package/esm/presentation/localization/bundles/zh-Hant.localization-bundle.d.ts +10 -0
- package/esm/presentation/localization/bundles/zh-Hant.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/zh-Hant.localization-bundle.js +11 -1
- package/esm/presentation/shareDialog/DefaultShareDialog.d.ts.map +1 -1
- package/esm/presentation/shareDialog/DefaultShareDialog.js +2 -5
- package/esm/presentation/topBar/title/EditableTitle.d.ts.map +1 -1
- package/esm/presentation/topBar/title/EditableTitle.js +6 -0
- package/esm/presentation/widget/insight/DefaultDashboardInsightComponentSetFactory.d.ts +1 -1
- package/esm/presentation/widget/insight/DefaultDashboardInsightComponentSetFactory.d.ts.map +1 -1
- package/esm/presentation/widget/insight/DefaultDashboardInsightComponentSetFactory.js +13 -1
- package/esm/presentation/widget/insightMenu/DefaultDashboardInsightMenu/DashboardInsightMenu/index.d.ts.map +1 -1
- package/esm/presentation/widget/insightMenu/DefaultDashboardInsightMenu/DashboardInsightMenu/index.js +10 -1
- package/esm/presentation/widget/widget/InsightWidget/useEditableInsightMenu.d.ts.map +1 -1
- package/esm/presentation/widget/widget/InsightWidget/useEditableInsightMenu.js +5 -1
- package/esm/presentation/widget/widget/InsightWidget/useInsightMenu.d.ts.map +1 -1
- package/esm/presentation/widget/widget/InsightWidget/useInsightMenu.js +4 -1
- package/esm/sdk-ui-dashboard.d.ts +562 -47
- package/package.json +23 -21
- package/styles/css/dashboard.css +50 -3
- package/styles/css/dashboard.css.map +1 -1
- package/styles/css/dashboardContentLoader.css +45 -0
- package/styles/css/dashboardContentLoader.css.map +1 -0
- package/styles/css/insightEditor.css +46 -0
- package/styles/css/insightEditor.css.map +1 -0
- package/styles/css/main.css +96 -3
- package/styles/css/main.css.map +1 -1
- package/styles/scss/dashboard.scss +13 -3
- package/styles/scss/dashboardContentLoader.scss +45 -0
- package/styles/scss/insightEditor.scss +53 -0
- package/styles/scss/main.scss +1 -0
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
// (C) 2021-2026 GoodData Corporation
|
|
2
|
-
import {
|
|
2
|
+
import { call, select } from "redux-saga/effects";
|
|
3
3
|
import { invariant } from "ts-invariant";
|
|
4
4
|
import { attributeFilterSelectionChanged } from "../../../events/filters.js";
|
|
5
5
|
import { invalidArgumentsProvided } from "../../../events/general.js";
|
|
6
6
|
import { dispatchDashboardEvent } from "../../../store/_infra/eventDispatcher.js";
|
|
7
7
|
import { selectEnableImmediateAttributeFilterDisplayAsLabelMigration, selectIsApplyFiltersAllAtOnceEnabledAndSet, } from "../../../store/config/configSelectors.js";
|
|
8
|
-
import {
|
|
9
|
-
import { selectEnablePersistentFiltersAcrossTabs } from "../../../store/meta/metaSelectors.js";
|
|
8
|
+
import { selectIsCrossFiltering, selectIsFilterFromCrossFilteringByLocalIdentifier, } from "../../../store/drill/drillSelectors.js";
|
|
10
9
|
import { selectAttributeFilterDescendants, selectFilterContextAttributeFilterByLocalId, } from "../../../store/tabs/filterContext/filterContextSelectors.js";
|
|
11
10
|
import { tabsActions } from "../../../store/tabs/index.js";
|
|
12
|
-
import {
|
|
11
|
+
import { resetCrossFiltering } from "../common.js";
|
|
12
|
+
import { beginTabSync, endTabSync, putTabSynced } from "../tabSync/tabSyncSaga.js";
|
|
13
13
|
export function* changeAttributeFilterSelectionHandler(ctx, cmd) {
|
|
14
14
|
const { elements, filterLocalId, selectionType, isWorkingSelectionChange, isResultOfMigration, isSelectionInvalid, } = cmd.payload;
|
|
15
15
|
// validate filterLocalId
|
|
@@ -19,34 +19,30 @@ export function* changeAttributeFilterSelectionHandler(ctx, cmd) {
|
|
|
19
19
|
}
|
|
20
20
|
const isApplyAllAtOnceEnabledAndSet = yield select(selectIsApplyFiltersAllAtOnceEnabledAndSet);
|
|
21
21
|
const enableImmediateAttributeFilterDisplayAsLabelMigration = yield select(selectEnableImmediateAttributeFilterDisplayAsLabelMigration);
|
|
22
|
-
const
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
enablePersistentFiltersAcrossTabs,
|
|
35
|
-
}));
|
|
22
|
+
const session = yield call(beginTabSync, { enabled: !isResultOfMigration });
|
|
23
|
+
yield call(putTabSynced, session, [
|
|
24
|
+
tabsActions.updateAttributeFilterSelection({
|
|
25
|
+
elements,
|
|
26
|
+
filterLocalId,
|
|
27
|
+
negativeSelection: selectionType === "NOT_IN",
|
|
28
|
+
isWorkingSelectionChange: isWorkingSelectionChange && isApplyAllAtOnceEnabledAndSet,
|
|
29
|
+
enableImmediateAttributeFilterDisplayAsLabelMigration,
|
|
30
|
+
isResultOfMigration,
|
|
31
|
+
isSelectionInvalid,
|
|
32
|
+
}),
|
|
33
|
+
]);
|
|
36
34
|
const changedFilter = yield select(selectFilterContextAttributeFilterByLocalId(cmd.payload.filterLocalId));
|
|
37
35
|
invariant(changedFilter, "Inconsistent state in attributeFilterChangeSelectionCommandHandler");
|
|
38
36
|
if (!ctx.backend.capabilities.supportsKeepingDependentFiltersSelection) {
|
|
39
37
|
const childFiltersIds = yield select(selectAttributeFilterDescendants(changedFilter.attributeFilter.localIdentifier));
|
|
40
|
-
yield
|
|
38
|
+
yield call(putTabSynced, session, childFiltersIds.map((childFilterId) => tabsActions.updateAttributeFilterSelection({
|
|
41
39
|
filterLocalId: childFilterId,
|
|
42
40
|
elements: {
|
|
43
41
|
uris: [],
|
|
44
42
|
},
|
|
45
43
|
negativeSelection: true,
|
|
46
44
|
isWorkingSelectionChange: isWorkingSelectionChange && isApplyAllAtOnceEnabledAndSet,
|
|
47
|
-
|
|
48
|
-
enablePersistentFiltersAcrossTabs,
|
|
49
|
-
}))));
|
|
45
|
+
})));
|
|
50
46
|
}
|
|
51
47
|
const isCrossFiltering = yield select(selectIsCrossFiltering);
|
|
52
48
|
const isCurrentFilterCrossFiltering = yield select(selectIsFilterFromCrossFilteringByLocalIdentifier(filterLocalId));
|
|
@@ -56,10 +52,5 @@ export function* changeAttributeFilterSelectionHandler(ctx, cmd) {
|
|
|
56
52
|
yield call(resetCrossFiltering, cmd);
|
|
57
53
|
}
|
|
58
54
|
yield dispatchDashboardEvent(attributeFilterSelectionChanged(ctx, changedFilter, cmd.correlationId));
|
|
59
|
-
|
|
60
|
-
yield call(dispatchFilterContextChangedForMutatedTabs, ctx, cmd, filterContextSnapshot);
|
|
61
|
-
}
|
|
62
|
-
else {
|
|
63
|
-
yield call(dispatchFilterContextChanged, ctx, cmd);
|
|
64
|
-
}
|
|
55
|
+
yield call(endTabSync, ctx, cmd, session);
|
|
65
56
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"removeAttributeFiltersHandler.d.ts","sourceRoot":"","sources":["../../../../../src/model/commandHandlers/filterContext/attributeFilter/removeAttributeFiltersHandler.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAW/C,OAAO,EAAE,KAAK,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAO5E,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAItE,wBAAiB,6BAA6B,CAC1C,GAAG,EAAE,gBAAgB,EACrB,GAAG,EAAE,uBAAuB,GAC7B,YAAY,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"removeAttributeFiltersHandler.d.ts","sourceRoot":"","sources":["../../../../../src/model/commandHandlers/filterContext/attributeFilter/removeAttributeFiltersHandler.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAW/C,OAAO,EAAE,KAAK,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAO5E,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAItE,wBAAiB,6BAA6B,CAC1C,GAAG,EAAE,gBAAgB,EACrB,GAAG,EAAE,uBAAuB,GAC7B,YAAY,CAAC,IAAI,CAAC,CAmFpB"}
|
package/esm/model/commandHandlers/filterContext/attributeFilter/removeAttributeFiltersHandler.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// (C) 2021-2026 GoodData Corporation
|
|
2
|
-
import {
|
|
2
|
+
import { difference, partition } from "lodash-es";
|
|
3
3
|
import { batchActions } from "redux-batched-actions";
|
|
4
4
|
import { call, put, select } from "redux-saga/effects";
|
|
5
5
|
import { areObjRefsEqual, dashboardAttributeFilterItemDisplayForm, dashboardAttributeFilterItemFilterElementsBy, dashboardAttributeFilterItemLocalIdentifier, isInsightWidget, } from "@gooddata/sdk-model";
|
|
@@ -39,7 +39,7 @@ export function* removeAttributeFiltersHandler(ctx, cmd) {
|
|
|
39
39
|
displayFormRefs: [removedDisplayForm],
|
|
40
40
|
}),
|
|
41
41
|
];
|
|
42
|
-
|
|
42
|
+
yield put(batchActions([
|
|
43
43
|
// remove filter from parents for all affected children (standard and arbitrary filters)
|
|
44
44
|
...affectedChildren.map((item) => tabsActions.setAttributeFilterParents({
|
|
45
45
|
filterLocalId: dashboardAttributeFilterItemLocalIdentifier(item),
|
|
@@ -51,13 +51,12 @@ export function* removeAttributeFiltersHandler(ctx, cmd) {
|
|
|
51
51
|
filterLocalId: removedLocalId,
|
|
52
52
|
}),
|
|
53
53
|
// remove filter's display form metadata object
|
|
54
|
-
tabsActions.removeAttributeFilterDisplayForms(removedDisplayForm),
|
|
54
|
+
tabsActions.removeAttributeFilterDisplayForms({ displayForm: removedDisplayForm }),
|
|
55
55
|
// remove reflect dashboard attribute filter config
|
|
56
|
-
tabsActions.removeAttributeFilterConfig(removedLocalId),
|
|
56
|
+
tabsActions.removeAttributeFilterConfig({ localIdentifier: removedLocalId }),
|
|
57
57
|
// house-keeping: ensure the removed attribute filter disappears from widget ignore lists
|
|
58
58
|
...removeIgnoredAttributeFilterActionArray,
|
|
59
59
|
]));
|
|
60
|
-
yield put(batch);
|
|
61
60
|
yield dispatchDashboardEvent(attributeFilterRemoved(ctx, removedFilter, affectedChildren, cmd.correlationId));
|
|
62
61
|
}
|
|
63
62
|
yield call(dispatchFilterContextChanged, ctx, cmd);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"replaceAttributeFilterItemSelectionHandler.d.ts","sourceRoot":"","sources":["../../../../../src/model/commandHandlers/filterContext/attributeFilter/replaceAttributeFilterItemSelectionHandler.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAK/C,OAAO,EAAE,KAAK,mCAAmC,EAAE,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"replaceAttributeFilterItemSelectionHandler.d.ts","sourceRoot":"","sources":["../../../../../src/model/commandHandlers/filterContext/attributeFilter/replaceAttributeFilterItemSelectionHandler.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAK/C,OAAO,EAAE,KAAK,mCAAmC,EAAE,MAAM,8BAA8B,CAAC;AAWxF,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAMtE,wBAAiB,0CAA0C,CACvD,GAAG,EAAE,gBAAgB,EACrB,GAAG,EAAE,mCAAmC,GACzC,YAAY,CAAC,IAAI,CAAC,CAqDpB"}
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
// (C) 2026 GoodData Corporation
|
|
2
|
-
import { call,
|
|
2
|
+
import { call, select } from "redux-saga/effects";
|
|
3
3
|
import { dashboardAttributeFilterItemDisplayForm } from "@gooddata/sdk-model";
|
|
4
4
|
import { attributeFilterItemSelectionReplaced } from "../../../events/filters.js";
|
|
5
5
|
import { invalidArgumentsProvided } from "../../../events/general.js";
|
|
6
6
|
import { dispatchDashboardEvent } from "../../../store/_infra/eventDispatcher.js";
|
|
7
7
|
import { selectIsApplyFiltersAllAtOnceEnabledAndSet } from "../../../store/config/configSelectors.js";
|
|
8
|
-
import {
|
|
9
|
-
import { selectEnablePersistentFiltersAcrossTabs } from "../../../store/meta/metaSelectors.js";
|
|
8
|
+
import { selectIsCrossFiltering, selectIsFilterFromCrossFilteringByLocalIdentifier, } from "../../../store/drill/drillSelectors.js";
|
|
10
9
|
import { selectFilterContextAttributeFilterItemByLocalId } from "../../../store/tabs/filterContext/filterContextSelectors.js";
|
|
11
10
|
import { tabsActions } from "../../../store/tabs/index.js";
|
|
12
|
-
import {
|
|
11
|
+
import { resetCrossFiltering } from "../common.js";
|
|
12
|
+
import { beginTabSync, endTabSync, putTabSynced } from "../tabSync/tabSyncSaga.js";
|
|
13
13
|
import { resolveAndRegisterDisplayFormMetadata } from "./resolveDisplayFormMetadata.js";
|
|
14
14
|
export function* replaceAttributeFilterItemSelectionHandler(ctx, cmd) {
|
|
15
15
|
const { filterLocalId, filter, isWorkingSelectionChange, isSelectionInvalid } = cmd.payload;
|
|
@@ -19,16 +19,15 @@ export function* replaceAttributeFilterItemSelectionHandler(ctx, cmd) {
|
|
|
19
19
|
throw invalidArgumentsProvided(ctx, cmd, `Filter with filterLocalId ${filterLocalId} not found.`);
|
|
20
20
|
}
|
|
21
21
|
const isApplyAllAtOnceEnabledAndSet = yield select(selectIsApplyFiltersAllAtOnceEnabledAndSet);
|
|
22
|
-
const
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
}));
|
|
22
|
+
const session = yield call(beginTabSync);
|
|
23
|
+
yield call(putTabSynced, session, [
|
|
24
|
+
tabsActions.replaceAttributeFilterItem({
|
|
25
|
+
filterLocalId,
|
|
26
|
+
filter,
|
|
27
|
+
isWorkingSelectionChange: isWorkingSelectionChange && isApplyAllAtOnceEnabledAndSet,
|
|
28
|
+
isSelectionInvalid,
|
|
29
|
+
}),
|
|
30
|
+
]);
|
|
32
31
|
// Ensure the new filter's displayForm is registered in the displayFormsMap.
|
|
33
32
|
// This is needed for cross-type migration (e.g. text→list) where the new filter's
|
|
34
33
|
// displayForm (primary label) may not have been registered previously.
|
|
@@ -46,5 +45,5 @@ export function* replaceAttributeFilterItemSelectionHandler(ctx, cmd) {
|
|
|
46
45
|
(!isWorkingSelectionChange || !isApplyAllAtOnceEnabledAndSet)) {
|
|
47
46
|
yield call(resetCrossFiltering, cmd);
|
|
48
47
|
}
|
|
49
|
-
yield call(
|
|
48
|
+
yield call(endTabSync, ctx, cmd, session);
|
|
50
49
|
}
|
package/esm/model/commandHandlers/filterContext/attributeFilter/resolveDisplayFormMetadata.d.ts
CHANGED
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
import { type SagaIterator } from "redux-saga";
|
|
2
2
|
import { type IAttributeDisplayFormMetadataObject, type ObjRef } from "@gooddata/sdk-model";
|
|
3
|
+
import { type ITabSyncSession } from "../tabSync/tabSyncSaga.js";
|
|
3
4
|
/**
|
|
4
5
|
* Resolves display form metadata for the given ObjRef and registers it in the store
|
|
5
6
|
* so that selectors like selectAttributeFilterDisplayFormsMap can resolve it.
|
|
6
7
|
*
|
|
8
|
+
* With a tab sync `session`, the display form is registered on the synced tabs too.
|
|
9
|
+
*
|
|
7
10
|
* @returns the resolved display form metadata, or undefined if not found
|
|
8
11
|
*/
|
|
9
|
-
export declare function resolveAndRegisterDisplayFormMetadata(displayForm: ObjRef): SagaIterator<IAttributeDisplayFormMetadataObject | undefined>;
|
|
12
|
+
export declare function resolveAndRegisterDisplayFormMetadata(displayForm: ObjRef, session?: ITabSyncSession): SagaIterator<IAttributeDisplayFormMetadataObject | undefined>;
|
|
10
13
|
//# sourceMappingURL=resolveDisplayFormMetadata.d.ts.map
|
package/esm/model/commandHandlers/filterContext/attributeFilter/resolveDisplayFormMetadata.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolveDisplayFormMetadata.d.ts","sourceRoot":"","sources":["../../../../../src/model/commandHandlers/filterContext/attributeFilter/resolveDisplayFormMetadata.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAG/C,OAAO,EACH,KAAK,mCAAmC,EAExC,KAAK,MAAM,EACd,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"resolveDisplayFormMetadata.d.ts","sourceRoot":"","sources":["../../../../../src/model/commandHandlers/filterContext/attributeFilter/resolveDisplayFormMetadata.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAG/C,OAAO,EACH,KAAK,mCAAmC,EAExC,KAAK,MAAM,EACd,MAAM,qBAAqB,CAAC;AAO7B,OAAO,EAAE,KAAK,eAAe,EAAgB,MAAM,2BAA2B,CAAC;AAE/E;;;;;;;GAOG;AACH,wBAAiB,qCAAqC,CAClD,WAAW,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE,eAAe,GAC1B,YAAY,CAAC,mCAAmC,GAAG,SAAS,CAAC,CAyB/D"}
|
package/esm/model/commandHandlers/filterContext/attributeFilter/resolveDisplayFormMetadata.js
CHANGED
|
@@ -5,13 +5,16 @@ import { queryAttributeByDisplayForm } from "../../../queries/attributes.js";
|
|
|
5
5
|
import { query } from "../../../store/_infra/queryCall.js";
|
|
6
6
|
import { selectAllCatalogDisplayFormsMap } from "../../../store/catalog/catalogSelectors.js";
|
|
7
7
|
import { tabsActions } from "../../../store/tabs/index.js";
|
|
8
|
+
import { putTabSynced } from "../tabSync/tabSyncSaga.js";
|
|
8
9
|
/**
|
|
9
10
|
* Resolves display form metadata for the given ObjRef and registers it in the store
|
|
10
11
|
* so that selectors like selectAttributeFilterDisplayFormsMap can resolve it.
|
|
11
12
|
*
|
|
13
|
+
* With a tab sync `session`, the display form is registered on the synced tabs too.
|
|
14
|
+
*
|
|
12
15
|
* @returns the resolved display form metadata, or undefined if not found
|
|
13
16
|
*/
|
|
14
|
-
export function* resolveAndRegisterDisplayFormMetadata(displayForm) {
|
|
17
|
+
export function* resolveAndRegisterDisplayFormMetadata(displayForm, session) {
|
|
15
18
|
const catalogDisplayFormsMap = yield select(selectAllCatalogDisplayFormsMap);
|
|
16
19
|
let displayFormData = catalogDisplayFormsMap.get(displayForm);
|
|
17
20
|
if (!displayFormData) {
|
|
@@ -20,7 +23,13 @@ export function* resolveAndRegisterDisplayFormMetadata(displayForm) {
|
|
|
20
23
|
displayFormData = attributeDisplayFormsMap.get(displayForm);
|
|
21
24
|
}
|
|
22
25
|
if (displayFormData) {
|
|
23
|
-
|
|
26
|
+
const action = tabsActions.addAttributeFilterDisplayForm(displayFormData);
|
|
27
|
+
if (session) {
|
|
28
|
+
yield call(putTabSynced, session, [action]);
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
yield put(action);
|
|
32
|
+
}
|
|
24
33
|
}
|
|
25
34
|
return displayFormData;
|
|
26
35
|
}
|
package/esm/model/commandHandlers/filterContext/changeFilterContextSelectionHandler.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"changeFilterContextSelectionHandler.d.ts","sourceRoot":"","sources":["../../../../src/model/commandHandlers/filterContext/changeFilterContextSelectionHandler.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"changeFilterContextSelectionHandler.d.ts","sourceRoot":"","sources":["../../../../src/model/commandHandlers/filterContext/changeFilterContextSelectionHandler.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAyC/C,OAAO,EAAE,KAAK,4BAA4B,EAAE,MAAM,2BAA2B,CAAC;AAuC9E,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAiOnE,wBAAiB,mCAAmC,CAChD,GAAG,EAAE,gBAAgB,EACrB,GAAG,EAAE,4BAA4B,GAClC,YAAY,CAAC,IAAI,CAAC,CA4OpB"}
|
|
@@ -1,16 +1,13 @@
|
|
|
1
1
|
// (C) 2021-2026 GoodData Corporation
|
|
2
2
|
import { compact, partition, uniqBy } from "lodash-es";
|
|
3
|
-
import { batchActions } from "redux-batched-actions";
|
|
4
3
|
import { all, call, put, select } from "redux-saga/effects";
|
|
5
4
|
import { NotSupported } from "@gooddata/sdk-backend-spi";
|
|
6
5
|
import { areObjRefsEqual, attributeElementsIsEmpty, dashboardAttributeFilterItemDisplayForm, dashboardAttributeFilterItemFilterElementsBy, dashboardAttributeFilterItemFilterElementsByDate, dashboardAttributeFilterItemLocalIdentifier, dashboardAttributeFilterItemValidateElementsBy, dashboardFilterLocalIdentifier, dashboardFilterObjRef, dashboardMeasureValueFilterLocalIdentifier, getAttributeElementsItems, isAllTimeDashboardDateFilter, isDashboardArbitraryAttributeFilter, isDashboardAttributeFilter, isDashboardAttributeFilterItem, isDashboardCommonDateFilter, isDashboardDateFilter, isDashboardMeasureValueFilter, isDashboardTextAttributeFilter, isSingleSelectionFilter, isUriRef, objRefToString, serializeObjRef, updateAttributeElementsItems, } from "@gooddata/sdk-model";
|
|
7
6
|
import { dashboardFilterToFilterContextItem } from "../../../_staging/dashboard/dashboardFilterContext.js";
|
|
8
7
|
import { invalidArgumentsProvided } from "../../events/general.js";
|
|
9
8
|
import { dispatchDashboardEvent } from "../../store/_infra/eventDispatcher.js";
|
|
10
|
-
import { selectCrossFilteringFiltersLocalIdentifiersByTab } from "../../store/drill/drillSelectors.js";
|
|
11
9
|
import { selectRestrictedDashboardFilterLocalIdentifiers, selectRestrictedDashboardFilterLocalIdentifiersForTab, } from "../../store/filtering/dashboardFilterSelectors.js";
|
|
12
10
|
import { isDashboardFilterUsingRestrictedObject } from "../../store/filtering/restrictedFilterUtils.js";
|
|
13
|
-
import { selectEnablePersistentFiltersAcrossTabs } from "../../store/meta/metaSelectors.js";
|
|
14
11
|
import { selectAttributeFilterConfigsOverrides, selectAttributeFilterConfigsOverridesByTab, selectAttributeFilterConfigsSelectionTypeMap, selectAttributeFilterConfigsSelectionTypeMapByTab, } from "../../store/tabs/attributeFilterConfigs/attributeFilterConfigsSelectors.js";
|
|
15
12
|
import { isDisplayFormRefOf, selectAttributeFilterDisplayFormsMap, selectFilterContextAttributeFilterItems, selectFilterContextAttributeFilterItemsForTab, selectFilterContextDateFilterByDataSet, selectFilterContextDateFilterByDataSetForTab, selectFilterContextDateFiltersWithDimension, selectFilterContextDateFiltersWithDimensionForTab, selectFilterContextFilters, selectFilterContextMeasureValueFilters, selectFiltersForTab, } from "../../store/tabs/filterContext/filterContextSelectors.js";
|
|
16
13
|
import { tabsActions } from "../../store/tabs/index.js";
|
|
@@ -21,7 +18,9 @@ import { resolveAttributeMetadata } from "../../utils/attributeResolver.js";
|
|
|
21
18
|
import { resolveDisplayFormMetadata, } from "../../utils/displayFormResolver.js";
|
|
22
19
|
import { resolveAndRegisterDisplayFormMetadata } from "./attributeFilter/resolveDisplayFormMetadata.js";
|
|
23
20
|
import { computedAttributesDisabledMessage, findDisabledComputedAttributeRef, } from "./attributeFilter/validation/computedAttributesEnabledValidation.js";
|
|
24
|
-
import { canApplyDateFilter
|
|
21
|
+
import { canApplyDateFilter } from "./common.js";
|
|
22
|
+
import { beginTabSync, endTabSync, putTabSynced } from "./tabSync/tabSyncSaga.js";
|
|
23
|
+
import { writtenFiltersOf } from "./tabSync/writtenTargets.js";
|
|
25
24
|
function classifyRestore(type, restoresOriginal) {
|
|
26
25
|
// A computed key is not inferred as a single-property mapped type.
|
|
27
26
|
return { [type]: restoresOriginal };
|
|
@@ -34,8 +33,8 @@ const RESTORE_TARGET_ORIGINAL = {
|
|
|
34
33
|
...classifyRestore(tabsActions.changeMeasureValueFilterCondition.type, true),
|
|
35
34
|
...classifyRestore(tabsActions.setMeasureValueFilterDimensionality.type, true),
|
|
36
35
|
...classifyRestore(tabsActions.addAttributeFilterDisplayForm.type, false),
|
|
37
|
-
...classifyRestore(tabsActions.changeAttributeDisplayForm.type,
|
|
38
|
-
...classifyRestore(tabsActions.changeDisplayAsLabel.type,
|
|
36
|
+
...classifyRestore(tabsActions.changeAttributeDisplayForm.type, true),
|
|
37
|
+
...classifyRestore(tabsActions.changeDisplayAsLabel.type, true),
|
|
39
38
|
};
|
|
40
39
|
/**
|
|
41
40
|
* Reset persists one payload (the active tab's saved values). Mark the value-writing actions so
|
|
@@ -108,6 +107,13 @@ function* selectFilterContextDateFiltersWithDimensionTabAware(tabLocalIdentifier
|
|
|
108
107
|
? yield select(selectFilterContextDateFiltersWithDimensionForTab(tabLocalIdentifier))
|
|
109
108
|
: yield select(selectFilterContextDateFiltersWithDimension);
|
|
110
109
|
}
|
|
110
|
+
function* selectFilterContextMeasureValueFiltersTabAware(tabLocalIdentifier) {
|
|
111
|
+
if (tabLocalIdentifier) {
|
|
112
|
+
const filters = yield select(selectFiltersForTab(tabLocalIdentifier));
|
|
113
|
+
return filters.filter(isDashboardMeasureValueFilter);
|
|
114
|
+
}
|
|
115
|
+
return yield select(selectFilterContextMeasureValueFilters);
|
|
116
|
+
}
|
|
111
117
|
function* selectAttributeFilterConfigsSelectionTypeMapTabAware(tabLocalIdentifier) {
|
|
112
118
|
if (tabLocalIdentifier) {
|
|
113
119
|
const byTab = yield select(selectAttributeFilterConfigsSelectionTypeMapByTab);
|
|
@@ -116,7 +122,7 @@ function* selectAttributeFilterConfigsSelectionTypeMapTabAware(tabLocalIdentifie
|
|
|
116
122
|
return yield select(selectAttributeFilterConfigsSelectionTypeMap);
|
|
117
123
|
}
|
|
118
124
|
export function* changeFilterContextSelectionHandler(ctx, cmd) {
|
|
119
|
-
const { filters, resetOthers, attributeFilterConfigs = [], tabLocalIdentifier, matchByLocalIdentifier = false, restorePerTabOriginals = false, } = cmd.payload;
|
|
125
|
+
const { filters, resetOthers, attributeFilterConfigs = [], tabLocalIdentifier, matchByLocalIdentifier = false, restorePerTabOriginals = false, adoptAsOriginal = false, } = cmd.payload;
|
|
120
126
|
// Validate that the target tab exists if tabLocalIdentifier is provided
|
|
121
127
|
if (tabLocalIdentifier) {
|
|
122
128
|
const tabs = yield select(selectTabs);
|
|
@@ -214,10 +220,9 @@ export function* changeFilterContextSelectionHandler(ctx, cmd) {
|
|
|
214
220
|
call(getAttributeFiltersUpdateActions, [...attributeFilters].reverse(), textAttributeFilters, attributeFilterConfigs, resetOthers, ctx, tabLocalIdentifier, selectionTypeMap, matchByLocalIdentifier),
|
|
215
221
|
call(getDateFilterUpdateActions, commonDateFilter, resetOthers, tabLocalIdentifier),
|
|
216
222
|
call(getDateFiltersUpdateActions, dateFiltersWithDimension, resetOthers, tabLocalIdentifier),
|
|
217
|
-
call(getMeasureValueFiltersUpdateActions, measureValueFilters, resetOthers),
|
|
223
|
+
call(getMeasureValueFiltersUpdateActions, measureValueFilters, resetOthers, tabLocalIdentifier),
|
|
218
224
|
]);
|
|
219
|
-
const
|
|
220
|
-
const filterContextSnapshot = yield call(captureFilterContextByTabSnapshot);
|
|
225
|
+
const session = yield call(beginTabSync, { tabLocalIdentifier });
|
|
221
226
|
// Ensure display form metadata is loaded for filters that will actually be applied.
|
|
222
227
|
// This handles the case where a default saved view changed filter types (e.g., list→text)
|
|
223
228
|
// and then local storage restores original types whose display forms weren't loaded during init.
|
|
@@ -229,17 +234,17 @@ export function* changeFilterContextSelectionHandler(ctx, cmd) {
|
|
|
229
234
|
}
|
|
230
235
|
}
|
|
231
236
|
}
|
|
232
|
-
yield
|
|
237
|
+
const dispatchedActions = yield call(putTabSynced, session, markRestoreTargetOriginal([
|
|
233
238
|
...attributeFilterResult.actions,
|
|
234
239
|
...commonDateFilterUpdateActions,
|
|
235
240
|
...dateFiltersUpdateActions,
|
|
236
241
|
...measureValueFilterUpdateActions,
|
|
237
|
-
], restorePerTabOriginals))
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
yield
|
|
242
|
+
], restorePerTabOriginals));
|
|
243
|
+
yield call(endTabSync, ctx, cmd, session, tabLocalIdentifier);
|
|
244
|
+
// A default filter view initializes the shared state. The values it wrote are that initial state,
|
|
245
|
+
// on this tab and on every tab they were synced to, so a reset restores them.
|
|
246
|
+
if (adoptAsOriginal) {
|
|
247
|
+
yield put(tabsActions.adoptAppliedFiltersAsOriginal(writtenFiltersOf(dispatchedActions)));
|
|
243
248
|
}
|
|
244
249
|
}
|
|
245
250
|
function* getDashboardFilterByAttributeMatching(filterRef, resolvedDisplayForms, ctx, tabLocalIdentifier, isFilterExcluded, areDisplayFormsEquivalent = areObjRefsEqual) {
|
|
@@ -326,9 +331,7 @@ function* getAttributeFiltersUpdateActions(attributeFilters, textAttributeFilter
|
|
|
326
331
|
const updateActions = [];
|
|
327
332
|
const displayFormsToResolve = [];
|
|
328
333
|
const handledLocalIds = new Set();
|
|
329
|
-
const crossFilteringLocalIdsByTab = yield select(selectCrossFilteringFiltersLocalIdentifiersByTab);
|
|
330
334
|
const resolvedDisplayForms = yield call(resolveDisplayFormMetadata, ctx, attributeFilters.map((af) => dashboardAttributeFilterItemDisplayForm(af)));
|
|
331
|
-
const enablePersistentFiltersAcrossTabs = yield select(selectEnablePersistentFiltersAcrossTabs);
|
|
332
335
|
// A payload can give a display form as a URI ref, and the dashboard can store it as an
|
|
333
336
|
// identifier ref. The two refs are equal when they point to the same display form metadata.
|
|
334
337
|
const displayFormsMap = yield select(selectAttributeFilterDisplayFormsMap);
|
|
@@ -483,8 +486,6 @@ function* getAttributeFiltersUpdateActions(attributeFilters, textAttributeFilter
|
|
|
483
486
|
updateActions.push(tabsActions.updateAttributeFilterSelection({
|
|
484
487
|
...getAttributeFilterSelectionPayload(attributeFilter, dashboardFilter),
|
|
485
488
|
tabLocalIdentifier,
|
|
486
|
-
crossFilteringLocalIdsByTab,
|
|
487
|
-
enablePersistentFiltersAcrossTabs,
|
|
488
489
|
}));
|
|
489
490
|
handledLocalIds.add(dashboardFilterLocalId);
|
|
490
491
|
}
|
|
@@ -529,8 +530,6 @@ function* getAttributeFiltersUpdateActions(attributeFilters, textAttributeFilter
|
|
|
529
530
|
filterLocalId: targetLocalId,
|
|
530
531
|
filter: normalizedListFilter,
|
|
531
532
|
tabLocalIdentifier,
|
|
532
|
-
crossFilteringLocalIdsByTab,
|
|
533
|
-
enablePersistentFiltersAcrossTabs,
|
|
534
533
|
}), tabsActions.changeDisplayAsLabel({
|
|
535
534
|
localIdentifier: targetLocalId,
|
|
536
535
|
displayAsLabel: dashboardAttributeFilterItemDisplayForm(targetTextFilter),
|
|
@@ -588,8 +587,6 @@ function* getAttributeFiltersUpdateActions(attributeFilters, textAttributeFilter
|
|
|
588
587
|
filterLocalId: targetLocalId,
|
|
589
588
|
filter: normalizedTextFilter,
|
|
590
589
|
tabLocalIdentifier,
|
|
591
|
-
crossFilteringLocalIdsByTab,
|
|
592
|
-
enablePersistentFiltersAcrossTabs,
|
|
593
590
|
}));
|
|
594
591
|
const textDisplayForm = dashboardAttributeFilterItemDisplayForm(textFilter);
|
|
595
592
|
// List → text: update displayAsLabel to match the text filter's displayForm
|
|
@@ -613,8 +610,6 @@ function* getAttributeFiltersUpdateActions(attributeFilters, textAttributeFilter
|
|
|
613
610
|
updateActions.push(tabsActions.clearAttributeFiltersSelection({
|
|
614
611
|
filterLocalIds: unhandledFilters.map((filter) => dashboardAttributeFilterItemLocalIdentifier(filter)),
|
|
615
612
|
tabLocalIdentifier,
|
|
616
|
-
crossFilteringLocalIdsByTab,
|
|
617
|
-
enablePersistentFiltersAcrossTabs,
|
|
618
613
|
}));
|
|
619
614
|
}
|
|
620
615
|
// for text filters (arbitrary/match) that have not been handled, reset to All state
|
|
@@ -639,15 +634,12 @@ function* getAttributeFiltersUpdateActions(attributeFilters, textAttributeFilter
|
|
|
639
634
|
filterLocalId: localId,
|
|
640
635
|
filter: resetFilter,
|
|
641
636
|
tabLocalIdentifier,
|
|
642
|
-
crossFilteringLocalIdsByTab,
|
|
643
|
-
enablePersistentFiltersAcrossTabs,
|
|
644
637
|
}));
|
|
645
638
|
}
|
|
646
639
|
}
|
|
647
640
|
return { actions: updateActions, displayFormsToResolve };
|
|
648
641
|
}
|
|
649
642
|
function* getDateFilterUpdateActions(dateFilter, resetOthers, tabLocalIdentifier) {
|
|
650
|
-
const enablePersistentFiltersAcrossTabs = yield select(selectEnablePersistentFiltersAcrossTabs);
|
|
651
643
|
if (dateFilter) {
|
|
652
644
|
const canApply = yield call(canApplyDateFilter, dateFilter);
|
|
653
645
|
if (!canApply) {
|
|
@@ -666,7 +658,6 @@ function* getDateFilterUpdateActions(dateFilter, resetOthers, tabLocalIdentifier
|
|
|
666
658
|
...localIdentifierObj,
|
|
667
659
|
...emptyValueHandlingObj,
|
|
668
660
|
tabLocalIdentifier,
|
|
669
|
-
enablePersistentFiltersAcrossTabs,
|
|
670
661
|
}
|
|
671
662
|
: {
|
|
672
663
|
type: dateFilter.dateFilter.type,
|
|
@@ -680,7 +671,6 @@ function* getDateFilterUpdateActions(dateFilter, resetOthers, tabLocalIdentifier
|
|
|
680
671
|
: {}),
|
|
681
672
|
...emptyValueHandlingObj,
|
|
682
673
|
tabLocalIdentifier,
|
|
683
|
-
enablePersistentFiltersAcrossTabs,
|
|
684
674
|
};
|
|
685
675
|
return [tabsActions.upsertDateFilter(upsertPayload)];
|
|
686
676
|
}
|
|
@@ -689,21 +679,19 @@ function* getDateFilterUpdateActions(dateFilter, resetOthers, tabLocalIdentifier
|
|
|
689
679
|
tabsActions.upsertDateFilter({
|
|
690
680
|
type: "allTime",
|
|
691
681
|
tabLocalIdentifier,
|
|
692
|
-
enablePersistentFiltersAcrossTabs,
|
|
693
682
|
}),
|
|
694
683
|
];
|
|
695
684
|
}
|
|
696
685
|
return [];
|
|
697
686
|
}
|
|
698
|
-
function* getMeasureValueFiltersUpdateActions(measureValueFilters, resetOthers) {
|
|
687
|
+
function* getMeasureValueFiltersUpdateActions(measureValueFilters, resetOthers, tabLocalIdentifier) {
|
|
699
688
|
const updateActions = [];
|
|
700
689
|
const handledLocalIds = new Set();
|
|
701
690
|
// a restricted filter keeps its stored conditions: it is neither matched nor reset
|
|
702
|
-
const allMeasureValueFilters = yield
|
|
703
|
-
const restrictedLocalIdentifiers = yield
|
|
691
|
+
const allMeasureValueFilters = yield call(selectFilterContextMeasureValueFiltersTabAware, tabLocalIdentifier);
|
|
692
|
+
const restrictedLocalIdentifiers = yield call(selectRestrictedDashboardFilterLocalIdentifiersTabAware, tabLocalIdentifier);
|
|
704
693
|
const currentMeasureValueFilters = allMeasureValueFilters.filter((filter) => !restrictedLocalIdentifiers.has(dashboardMeasureValueFilterLocalIdentifier(filter)));
|
|
705
694
|
const currentByLocalId = new Map(currentMeasureValueFilters.map((f) => [dashboardMeasureValueFilterLocalIdentifier(f), f]));
|
|
706
|
-
const enablePersistentFiltersAcrossTabs = yield select(selectEnablePersistentFiltersAcrossTabs);
|
|
707
695
|
for (const incoming of measureValueFilters) {
|
|
708
696
|
const incomingLocalIdentifier = dashboardMeasureValueFilterLocalIdentifier(incoming);
|
|
709
697
|
const currentFilter = currentByLocalId.get(incomingLocalIdentifier) ??
|
|
@@ -719,13 +707,13 @@ function* getMeasureValueFiltersUpdateActions(measureValueFilters, resetOthers)
|
|
|
719
707
|
updateActions.push(tabsActions.changeMeasureValueFilterCondition({
|
|
720
708
|
localIdentifier,
|
|
721
709
|
conditions: incoming.dashboardMeasureValueFilter.conditions,
|
|
722
|
-
|
|
710
|
+
tabLocalIdentifier,
|
|
723
711
|
}));
|
|
724
712
|
if ("dimensionality" in incoming.dashboardMeasureValueFilter) {
|
|
725
713
|
updateActions.push(tabsActions.setMeasureValueFilterDimensionality({
|
|
726
714
|
localIdentifier,
|
|
727
715
|
dimensionality: incoming.dashboardMeasureValueFilter.dimensionality,
|
|
728
|
-
|
|
716
|
+
tabLocalIdentifier,
|
|
729
717
|
}));
|
|
730
718
|
}
|
|
731
719
|
}
|
|
@@ -740,7 +728,7 @@ function* getMeasureValueFiltersUpdateActions(measureValueFilters, resetOthers)
|
|
|
740
728
|
updateActions.push(tabsActions.changeMeasureValueFilterCondition({
|
|
741
729
|
localIdentifier,
|
|
742
730
|
conditions: undefined,
|
|
743
|
-
|
|
731
|
+
tabLocalIdentifier,
|
|
744
732
|
}));
|
|
745
733
|
}
|
|
746
734
|
}
|
|
@@ -749,7 +737,6 @@ function* getMeasureValueFiltersUpdateActions(measureValueFilters, resetOthers)
|
|
|
749
737
|
function* getDateFiltersUpdateActions(dateFilters, resetOthers, tabLocalIdentifier) {
|
|
750
738
|
const updateActions = [];
|
|
751
739
|
const handledDataSets = new Set();
|
|
752
|
-
const enablePersistentFiltersAcrossTabs = yield select(selectEnablePersistentFiltersAcrossTabs);
|
|
753
740
|
for (const dateFilter of dateFilters) {
|
|
754
741
|
const filterRef = dateFilter.dateFilter.dataSet;
|
|
755
742
|
const dashboardFilter = yield call(selectFilterContextDateFilterByDataSetTabAware, filterRef, tabLocalIdentifier);
|
|
@@ -768,7 +755,6 @@ function* getDateFiltersUpdateActions(dateFilters, resetOthers, tabLocalIdentifi
|
|
|
768
755
|
...localIdentifierObj,
|
|
769
756
|
...emptyValueHandlingObj,
|
|
770
757
|
tabLocalIdentifier,
|
|
771
|
-
enablePersistentFiltersAcrossTabs,
|
|
772
758
|
}
|
|
773
759
|
: {
|
|
774
760
|
type: dateFilter.dateFilter.type,
|
|
@@ -782,7 +768,6 @@ function* getDateFiltersUpdateActions(dateFilters, resetOthers, tabLocalIdentifi
|
|
|
782
768
|
: {}),
|
|
783
769
|
...emptyValueHandlingObj,
|
|
784
770
|
tabLocalIdentifier,
|
|
785
|
-
enablePersistentFiltersAcrossTabs,
|
|
786
771
|
};
|
|
787
772
|
updateActions.push(tabsActions.upsertDateFilter(upsertPayload));
|
|
788
773
|
}
|
|
@@ -801,7 +786,6 @@ function* getDateFiltersUpdateActions(dateFilters, resetOthers, tabLocalIdentifi
|
|
|
801
786
|
dataSet: dateFilter.dateFilter.dataSet,
|
|
802
787
|
...localIdentifierObj,
|
|
803
788
|
tabLocalIdentifier,
|
|
804
|
-
enablePersistentFiltersAcrossTabs,
|
|
805
789
|
}));
|
|
806
790
|
}
|
|
807
791
|
}
|
|
@@ -3,6 +3,7 @@ import { type IDashboardAttributeFilterConfig, type IDashboardDateFilter, type I
|
|
|
3
3
|
import { type IDashboardCommand } from "../../commands/base.js";
|
|
4
4
|
import { type IWorkingFilterContextDefinition } from "../../store/tabs/filterContext/filterContextState.js";
|
|
5
5
|
import { type DashboardContext } from "../../types/commonTypes.js";
|
|
6
|
+
import { type ITabSyncSession } from "./tabSync/tabSyncSaga.js";
|
|
6
7
|
/**
|
|
7
8
|
* Applied filter context and attribute filter configs of every tab, taken before a write.
|
|
8
9
|
* Compared with the store afterwards so a mirrored change emits one event per tab updated.
|
|
@@ -13,17 +14,17 @@ export interface IFilterContextByTabSnapshot {
|
|
|
13
14
|
readonly attributeFilterConfigs: Record<string, IDashboardAttributeFilterConfig[]>;
|
|
14
15
|
}
|
|
15
16
|
export declare function captureFilterContextByTabSnapshot(): SagaIterator<IFilterContextByTabSnapshot>;
|
|
16
|
-
|
|
17
|
+
/**
|
|
18
|
+
* Emits a filter context changed event for every tab that differs from `snapshot`, except `skippedTabId`.
|
|
19
|
+
*/
|
|
20
|
+
export declare function dispatchFilterContextChangedForMutatedTabs(ctx: DashboardContext, cmd: IDashboardCommand, snapshot: IFilterContextByTabSnapshot, skippedTabId?: string): SagaIterator<void>;
|
|
17
21
|
export declare function dispatchFilterContextChanged(ctx: DashboardContext, cmd: IDashboardCommand, tabLocalIdentifier?: string): SagaIterator<void>;
|
|
18
22
|
export declare function canApplyDateFilter(dateFilter: IDashboardDateFilter): SagaIterator<boolean>;
|
|
19
23
|
export declare function resetCrossFiltering(cmd: IDashboardCommand): Generator<import("redux-saga/effects").PutEffect<import("../../commands/filters.js").IRemoveAttributeFilters> | import("redux-saga/effects").PutEffect<{
|
|
20
24
|
payload: string | undefined;
|
|
21
25
|
type: "drill/resetCrossFiltering";
|
|
22
26
|
}> | import("redux-saga/effects").SelectEffect, void, string[] & string>;
|
|
23
|
-
export declare function applyWorkingSelectionHandler(ctx: DashboardContext, cmd: IDashboardCommand): Generator<import("redux-saga/effects").CallEffect<void> | import("redux-saga/effects").CallEffect<
|
|
24
|
-
payload: import("../../../index.js").IApplyWorkingSelectionPayload;
|
|
25
|
-
type: "tabs/applyWorkingSelection";
|
|
26
|
-
}> | import("redux-saga/effects").PutEffect<import("../../events/base.js").ICustomDashboardEvent<any> | import("../../events/base.js").IDashboardEvent<any>> | import("redux-saga/effects").SelectEffect, void, never>;
|
|
27
|
+
export declare function applyWorkingSelectionHandler(ctx: DashboardContext, cmd: IDashboardCommand): Generator<import("redux-saga/effects").CallEffect<void> | import("redux-saga/effects").CallEffect<import("redux").Action[]> | import("redux-saga/effects").CallEffect<ITabSyncSession> | import("redux-saga/effects").PutEffect<import("../../events/base.js").ICustomDashboardEvent<any> | import("../../events/base.js").IDashboardEvent<any>> | import("redux-saga/effects").SelectEffect, void, never>;
|
|
27
28
|
export declare function resetWorkingSelectionHandler(): Generator<import("redux-saga/effects").PutEffect<{
|
|
28
29
|
payload: undefined;
|
|
29
30
|
type: "tabs/resetWorkingSelection";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../../../src/model/commandHandlers/filterContext/common.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAI/C,OAAO,EACH,KAAK,+BAA+B,EACpC,KAAK,oBAAoB,EACzB,KAAK,wBAAwB,EAChC,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../../../src/model/commandHandlers/filterContext/common.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAI/C,OAAO,EACH,KAAK,+BAA+B,EACpC,KAAK,oBAAoB,EACzB,KAAK,wBAAwB,EAChC,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAqBhE,OAAO,EAAE,KAAK,+BAA+B,EAAE,MAAM,sDAAsD,CAAC;AAI5G,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAGnE,OAAO,EAAE,KAAK,eAAe,EAA0C,MAAM,0BAA0B,CAAC;AAExG;;;GAGG;AACH,MAAM,WAAW,2BAA2B;IACxC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,wBAAwB,GAAG,SAAS,CAAC,CAAC;IAC9E,QAAQ,CAAC,qBAAqB,EAAE,MAAM,CAAC,MAAM,EAAE,+BAA+B,GAAG,SAAS,CAAC,CAAC;IAC5F,QAAQ,CAAC,sBAAsB,EAAE,MAAM,CAAC,MAAM,EAAE,+BAA+B,EAAE,CAAC,CAAC;CACtF;AAED,wBAAiB,iCAAiC,IAAI,YAAY,CAAC,2BAA2B,CAAC,CAU9F;AAED;;GAEG;AACH,wBAAiB,0CAA0C,CACvD,GAAG,EAAE,gBAAgB,EACrB,GAAG,EAAE,iBAAiB,EACtB,QAAQ,EAAE,2BAA2B,EACrC,YAAY,CAAC,EAAE,MAAM,GACtB,YAAY,CAAC,IAAI,CAAC,CAwBpB;AAED,wBAAiB,4BAA4B,CACzC,GAAG,EAAE,gBAAgB,EACrB,GAAG,EAAE,iBAAiB,EACtB,kBAAkB,CAAC,EAAE,MAAM,GAC5B,YAAY,CAAC,IAAI,CAAC,CAkCpB;AAED,wBAAiB,kBAAkB,CAAC,UAAU,EAAE,oBAAoB,GAAG,YAAY,CAAC,OAAO,CAAC,CAuB3F;AAED,wBAAiB,mBAAmB,CAAC,GAAG,EAAE,iBAAiB;;;yEAU1D;AAED,wBAAiB,4BAA4B,CAAC,GAAG,EAAE,gBAAgB,EAAE,GAAG,EAAE,iBAAiB,8YA4B1F;AAED,wBAAiB,4BAA4B;;;mBAE5C"}
|
|
@@ -7,9 +7,8 @@ import { removeAttributeFilters } from "../../commands/filters.js";
|
|
|
7
7
|
import { filterContextChanged, filterContextWorkingSelectionApplied } from "../../events/filters.js";
|
|
8
8
|
import { dispatchDashboardEvent } from "../../store/_infra/eventDispatcher.js";
|
|
9
9
|
import { selectEnableImmediateAttributeFilterDisplayAsLabelMigration } from "../../store/config/configSelectors.js";
|
|
10
|
-
import { selectCrossFilteringFiltersLocalIdentifiers,
|
|
10
|
+
import { selectCrossFilteringFiltersLocalIdentifiers, selectIsCrossFiltering, } from "../../store/drill/drillSelectors.js";
|
|
11
11
|
import { drillActions } from "../../store/drill/index.js";
|
|
12
|
-
import { selectEnablePersistentFiltersAcrossTabs } from "../../store/meta/metaSelectors.js";
|
|
13
12
|
import { selectAttributeFilterConfigsOverrides, selectAttributeFilterConfigsOverridesByTab, } from "../../store/tabs/attributeFilterConfigs/attributeFilterConfigsSelectors.js";
|
|
14
13
|
import { selectEffectiveDateFilterOptions } from "../../store/tabs/dateFilterConfig/dateFilterConfigSelectors.js";
|
|
15
14
|
import { selectFilterContextDefinition, selectFilterContextDefinitionsByTab, selectIsWorkingFilterContextChanged, selectWorkingFilterContextDefinitionsByTab, } from "../../store/tabs/filterContext/filterContextSelectors.js";
|
|
@@ -17,18 +16,22 @@ import { tabsActions } from "../../store/tabs/index.js";
|
|
|
17
16
|
import { selectParameterValuesByTab } from "../../store/tabs/parameters/parametersSelectors.js";
|
|
18
17
|
import { selectActiveOrDefaultTabLocalIdentifier } from "../../store/tabs/tabsSelectors.js";
|
|
19
18
|
import { dispatchParametersChangedForAffectedTabs } from "../parameters/changeParameterValuesHandler.js";
|
|
19
|
+
import { beginTabSync, endTabSync, putTabSynced } from "./tabSync/tabSyncSaga.js";
|
|
20
20
|
export function* captureFilterContextByTabSnapshot() {
|
|
21
21
|
const filterContexts = yield select(selectFilterContextDefinitionsByTab);
|
|
22
22
|
const workingFilterContexts = yield select(selectWorkingFilterContextDefinitionsByTab);
|
|
23
23
|
const attributeFilterConfigs = yield select(selectAttributeFilterConfigsOverridesByTab);
|
|
24
24
|
return { filterContexts, workingFilterContexts, attributeFilterConfigs };
|
|
25
25
|
}
|
|
26
|
-
|
|
26
|
+
/**
|
|
27
|
+
* Emits a filter context changed event for every tab that differs from `snapshot`, except `skippedTabId`.
|
|
28
|
+
*/
|
|
29
|
+
export function* dispatchFilterContextChangedForMutatedTabs(ctx, cmd, snapshot, skippedTabId) {
|
|
27
30
|
const filterContexts = yield select(selectFilterContextDefinitionsByTab);
|
|
28
31
|
const attributeFilterConfigs = yield select(selectAttributeFilterConfigsOverridesByTab);
|
|
29
32
|
const workingFilterContexts = yield select(selectWorkingFilterContextDefinitionsByTab);
|
|
30
33
|
for (const tabId of Object.keys(filterContexts)) {
|
|
31
|
-
if (!filterContexts[tabId]) {
|
|
34
|
+
if (!filterContexts[tabId] || tabId === skippedTabId) {
|
|
32
35
|
continue;
|
|
33
36
|
}
|
|
34
37
|
const configs = attributeFilterConfigs[tabId] ?? [];
|
|
@@ -89,25 +92,16 @@ export function* applyWorkingSelectionHandler(ctx, cmd) {
|
|
|
89
92
|
const isWorkingFilterContextChanged = yield select(selectIsWorkingFilterContextChanged);
|
|
90
93
|
const tabId = yield select(selectActiveOrDefaultTabLocalIdentifier);
|
|
91
94
|
const valuesBefore = yield select(selectParameterValuesByTab);
|
|
92
|
-
const
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
enableImmediateAttributeFilterDisplayAsLabelMigration,
|
|
97
|
-
crossFilteringLocalIdsByTab,
|
|
98
|
-
enablePersistentFiltersAcrossTabs,
|
|
99
|
-
}));
|
|
95
|
+
const session = yield call(beginTabSync);
|
|
96
|
+
yield call(putTabSynced, session, [
|
|
97
|
+
tabsActions.applyWorkingSelection({ enableImmediateAttributeFilterDisplayAsLabelMigration }),
|
|
98
|
+
]);
|
|
100
99
|
const isCrossFiltering = yield select(selectIsCrossFiltering);
|
|
101
100
|
if (isWorkingFilterContextChanged && isCrossFiltering) {
|
|
102
101
|
yield call(resetCrossFiltering, cmd);
|
|
103
102
|
}
|
|
104
103
|
yield dispatchDashboardEvent(filterContextWorkingSelectionApplied(ctx, cmd.correlationId));
|
|
105
|
-
|
|
106
|
-
yield call(dispatchFilterContextChangedForMutatedTabs, ctx, cmd, filterContextSnapshot);
|
|
107
|
-
}
|
|
108
|
-
else {
|
|
109
|
-
yield call(dispatchFilterContextChanged, ctx, cmd);
|
|
110
|
-
}
|
|
104
|
+
yield call(endTabSync, ctx, cmd, session);
|
|
111
105
|
yield call(dispatchParametersChangedForAffectedTabs, ctx, cmd, valuesBefore, tabId);
|
|
112
106
|
}
|
|
113
107
|
export function* resetWorkingSelectionHandler() {
|
package/esm/model/commandHandlers/filterContext/dateFilter/changeDateFilterSelectionHandler.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"changeDateFilterSelectionHandler.d.ts","sourceRoot":"","sources":["../../../../../src/model/commandHandlers/filterContext/dateFilter/changeDateFilterSelectionHandler.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAU/C,OAAO,EAAE,KAAK,yBAAyB,EAA4B,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"changeDateFilterSelectionHandler.d.ts","sourceRoot":"","sources":["../../../../../src/model/commandHandlers/filterContext/dateFilter/changeDateFilterSelectionHandler.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAU/C,OAAO,EAAE,KAAK,yBAAyB,EAA4B,MAAM,8BAA8B,CAAC;AAWxG,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAItE,wBAAiB,gCAAgC,CAC7C,GAAG,EAAE,gBAAgB,EACrB,GAAG,EAAE,yBAAyB,GAC/B,YAAY,CAAC,IAAI,CAAC,CAsEpB"}
|