@gooddata/sdk-ui-dashboard 11.65.0-alpha.1 → 11.65.0-alpha.11
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 +72039 -4
- package/esm/__version.d.ts +1 -1
- package/esm/__version.d.ts.map +1 -1
- package/esm/__version.js +1 -1
- package/esm/assets/type-csv-formatted.svg +1 -1
- package/esm/assets/type-csv-raw.svg +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 -3
- 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/react/useInitializeDashboardStore.d.ts.map +1 -1
- package/esm/model/react/useInitializeDashboardStore.js +4 -9
- package/esm/model/store/config/configReducers.d.ts +4 -8
- package/esm/model/store/config/configReducers.d.ts.map +1 -1
- package/esm/model/store/config/configReducers.js +6 -12
- package/esm/model/store/config/configSelectors.d.ts +24 -0
- package/esm/model/store/config/configSelectors.d.ts.map +1 -1
- package/esm/model/store/config/configSelectors.js +30 -4
- package/esm/model/store/config/index.d.ts +2 -3
- package/esm/model/store/config/index.d.ts.map +1 -1
- 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 +38 -22
- 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/scheduledEmail/DefaultScheduledEmailDialog/components/RecipientsSelect/LiveRegionLastSelectContainer.d.ts +9 -0
- package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/components/RecipientsSelect/LiveRegionLastSelectContainer.d.ts.map +1 -0
- package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/components/RecipientsSelect/LiveRegionLastSelectContainer.js +12 -0
- package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/components/RecipientsSelect/RecipientsSelect.d.ts.map +1 -1
- package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/components/RecipientsSelect/RecipientsSelect.js +3 -3
- package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/components/RecipientsSelect/RecipientsSelectRenderer.d.ts.map +1 -1
- package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/components/RecipientsSelect/RecipientsSelectRenderer.js +14 -7
- package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/components/RecipientsSelect/RecipientsSelectionDescription.d.ts +12 -0
- package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/components/RecipientsSelect/RecipientsSelectionDescription.d.ts.map +1 -0
- package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/components/RecipientsSelect/RecipientsSelectionDescription.js +30 -0
- package/esm/presentation/automations/scheduledEmail/utils/users.d.ts +1 -0
- package/esm/presentation/automations/scheduledEmail/utils/users.d.ts.map +1 -1
- package/esm/presentation/automations/scheduledEmail/utils/users.js +3 -0
- 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/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 +2 -11
- 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/DashboardAiComposingOverlay.d.ts +4 -0
- package/esm/presentation/dashboard/components/DashboardAiComposingOverlay.d.ts.map +1 -0
- package/esm/presentation/dashboard/components/DashboardAiComposingOverlay.js +151 -0
- package/esm/presentation/dashboard/components/DashboardInner.d.ts.map +1 -1
- package/esm/presentation/dashboard/components/DashboardInner.js +17 -14
- package/esm/presentation/dashboard/components/DashboardInteractionComposing.d.ts +8 -0
- package/esm/presentation/dashboard/components/DashboardInteractionComposing.d.ts.map +1 -0
- package/esm/presentation/dashboard/components/DashboardInteractionComposing.js +23 -0
- package/esm/presentation/dashboard/components/DashboardInteractionLock.d.ts +8 -0
- package/esm/presentation/dashboard/components/DashboardInteractionLock.d.ts.map +1 -0
- package/esm/presentation/dashboard/components/DashboardInteractionLock.js +29 -0
- 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/dragAndDrop/draggableWidget/AddDashboardLayoutWidgetButton.d.ts.map +1 -1
- package/esm/presentation/dragAndDrop/draggableWidget/AddDashboardLayoutWidgetButton.js +2 -4
- package/esm/presentation/dragAndDrop/draggableWidget/AddRichTextWidgetButton.d.ts.map +1 -1
- package/esm/presentation/dragAndDrop/draggableWidget/AddRichTextWidgetButton.js +3 -3
- package/esm/presentation/dragAndDrop/draggableWidget/AddVisualizationSwitcherWidgetButton.d.ts.map +1 -1
- package/esm/presentation/dragAndDrop/draggableWidget/AddVisualizationSwitcherWidgetButton.js +2 -4
- package/esm/presentation/filterBar/attributeFilter/addAttributeFilter/AddAttributeFilterPlaceholder.d.ts.map +1 -1
- package/esm/presentation/filterBar/attributeFilter/addAttributeFilter/AddAttributeFilterPlaceholder.js +3 -2
- 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 +21 -0
- package/esm/presentation/insightEditor/useExploreFilterTransfer.d.ts.map +1 -0
- package/esm/presentation/insightEditor/useExploreFilterTransfer.js +193 -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 +6 -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 +48 -42
- package/esm/presentation/localization/bundles/en-AU.localization-bundle.d.ts +6 -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 +6 -0
- package/esm/presentation/localization/bundles/en-GB.localization-bundle.d.ts +6 -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 +11 -5
- package/esm/presentation/localization/bundles/en-US.localization-bundle.d.ts +56 -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 +56 -0
- package/esm/presentation/localization/bundles/es-419.localization-bundle.d.ts +6 -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 +6 -0
- package/esm/presentation/localization/bundles/es-ES.localization-bundle.d.ts +6 -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 +6 -0
- package/esm/presentation/localization/bundles/fi-FI.localization-bundle.d.ts +6 -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 +6 -0
- package/esm/presentation/localization/bundles/fr-CA.localization-bundle.d.ts +6 -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 +6 -0
- package/esm/presentation/localization/bundles/fr-FR.localization-bundle.d.ts +6 -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 +187 -181
- package/esm/presentation/localization/bundles/id-ID.localization-bundle.d.ts +6 -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 +6 -0
- package/esm/presentation/localization/bundles/it-IT.localization-bundle.d.ts +6 -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 +6 -0
- package/esm/presentation/localization/bundles/ja-JP.localization-bundle.d.ts +6 -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 +6 -0
- package/esm/presentation/localization/bundles/ko-KR.localization-bundle.d.ts +6 -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 +6 -0
- package/esm/presentation/localization/bundles/nl-NL.localization-bundle.d.ts +6 -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 +6 -0
- package/esm/presentation/localization/bundles/pl-PL.localization-bundle.d.ts +6 -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 +6 -0
- package/esm/presentation/localization/bundles/pt-BR.localization-bundle.d.ts +6 -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 +6 -0
- package/esm/presentation/localization/bundles/pt-PT.localization-bundle.d.ts +6 -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 +6 -0
- package/esm/presentation/localization/bundles/ru-RU.localization-bundle.d.ts +6 -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 +6 -0
- package/esm/presentation/localization/bundles/sl-SI.localization-bundle.d.ts +6 -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 +6 -0
- package/esm/presentation/localization/bundles/th-TH.localization-bundle.d.ts +6 -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 +6 -0
- package/esm/presentation/localization/bundles/tr-TR.localization-bundle.d.ts +6 -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 +6 -0
- package/esm/presentation/localization/bundles/uk-UA.localization-bundle.d.ts +6 -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 +6 -0
- package/esm/presentation/localization/bundles/vi-VN.localization-bundle.d.ts +6 -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 +6 -0
- package/esm/presentation/localization/bundles/zh-HK.localization-bundle.d.ts +6 -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 +6 -0
- package/esm/presentation/localization/bundles/zh-Hans.localization-bundle.d.ts +6 -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 +6 -0
- package/esm/presentation/localization/bundles/zh-Hant.localization-bundle.d.ts +6 -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 +7 -1
- package/esm/presentation/topBar/buttonBar/button/saveAsButton/DefaultSaveAsNewButton.d.ts.map +1 -1
- package/esm/presentation/topBar/buttonBar/button/saveAsButton/DefaultSaveAsNewButton.js +3 -2
- package/esm/presentation/topBar/buttonBar/button/saveButton/DefaultSaveButton.d.ts.map +1 -1
- package/esm/presentation/topBar/buttonBar/button/saveButton/DefaultSaveButton.js +3 -2
- package/esm/presentation/topBar/buttonBar/button/settingButton/DefaultSettingButton.d.ts.map +1 -1
- package/esm/presentation/topBar/buttonBar/button/settingButton/DefaultSettingButton.js +3 -2
- package/esm/presentation/topBar/buttonBar/button/shareButton/DefaultShareButton.d.ts.map +1 -1
- package/esm/presentation/topBar/buttonBar/button/shareButton/DefaultShareButton.js +3 -2
- 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/richText/EditModeDashboardRichText.js +1 -1
- package/esm/presentation/widget/visualizationSwitcher/EditModeDashboardVisualizationSwitcher.js +1 -1
- package/esm/presentation/widget/visualizationSwitcher/configuration/ToolbarTop.js +2 -2
- 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 +596 -69
- package/package.json +23 -21
- package/styles/css/alerting.css +1 -1
- package/styles/css/alerting.css.map +1 -1
- package/styles/css/attributeFilterConfig.css +3 -3
- package/styles/css/automationFilters.css +1 -1
- package/styles/css/configurationPanel.css +2 -2
- package/styles/css/configurationPanel.css.map +1 -1
- package/styles/css/dashboard.css +141 -87
- 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/dashboardNestedLayoutToolbar.css.map +1 -1
- package/styles/css/dashboardNestedLayoutWidget.css +1 -1
- package/styles/css/dashboardSettingsDialog.css +1 -1
- package/styles/css/dragAndDrop.css +0 -8
- package/styles/css/dragAndDrop.css.map +1 -1
- package/styles/css/drillConfigPanel.css +7 -7
- package/styles/css/drillConfigPanel.css.map +1 -1
- package/styles/css/filterBar.css +4 -4
- package/styles/css/filterBar.css.map +1 -1
- package/styles/css/grouped-navigation.css +2 -2
- package/styles/css/grouped-navigation.css.map +1 -1
- package/styles/css/icons.css.map +1 -1
- package/styles/css/insightConfiguration.css +1 -1
- package/styles/css/insightConfiguration.css.map +1 -1
- package/styles/css/insightEditor.css +46 -0
- package/styles/css/insightEditor.css.map +1 -0
- package/styles/css/kpi.css +2 -2
- package/styles/css/kpi.css.map +1 -1
- package/styles/css/kpi_alert_dialog.css +2 -2
- package/styles/css/layout.css +5 -5
- package/styles/css/layout.css.map +1 -1
- package/styles/css/main.css +336 -219
- package/styles/css/main.css.map +1 -1
- package/styles/css/notifications_channels_dialog.css +2 -2
- package/styles/css/notifications_channels_dialog.css.map +1 -1
- package/styles/css/resizing.css.map +1 -1
- package/styles/css/richTextWidget.css.map +1 -1
- package/styles/css/saveAsDialog.css.map +1 -1
- package/styles/css/sidebar.css +35 -10
- package/styles/css/sidebar.css.map +1 -1
- package/styles/css/topBar.css.map +1 -1
- package/styles/css/visualization.css.map +1 -1
- package/styles/css/visualizationSwitcherHeader.css.map +1 -1
- package/styles/css/visualizationSwitcherToolbar.css +1 -1
- package/styles/css/visualizationSwitcherToolbar.css.map +1 -1
- package/styles/css/visualizationSwitcherWidget.css +1 -1
- package/styles/css/visualizationSwitcherWidget.css.map +1 -1
- package/styles/scss/_variables.scss +3 -2
- package/styles/scss/_zIndexes.scss +4 -0
- package/styles/scss/attributeFilterConfig.scss +1 -1
- package/styles/scss/configurationPanel.scss +1 -1
- package/styles/scss/dashboard.scss +104 -96
- package/styles/scss/dashboardContentLoader.scss +45 -0
- package/styles/scss/dragAndDrop.scss +2 -9
- package/styles/scss/drillConfigPanel.scss +3 -3
- package/styles/scss/insightEditor.scss +53 -0
- package/styles/scss/layout.scss +1 -1
- package/styles/scss/main.scss +1 -0
- package/styles/scss/sidebar.scss +47 -12
- package/esm/presentation/dashboard/components/DashboardSkeleton.d.ts +0 -5
- package/esm/presentation/dashboard/components/DashboardSkeleton.d.ts.map +0 -1
- package/esm/presentation/dashboard/components/DashboardSkeleton.js +0 -20
|
@@ -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"}
|