@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
package/esm/model/commandHandlers/filterContext/dateFilter/changeDateFilterSelectionHandler.js
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
// (C) 2021-2026 GoodData Corporation
|
|
2
2
|
import { toNumber } from "lodash-es";
|
|
3
|
-
import { call,
|
|
3
|
+
import { call, select } from "redux-saga/effects";
|
|
4
4
|
import { newAbsoluteDashboardDateFilter, newAllTimeDashboardDateFilter, newRelativeDashboardDateFilter, } from "@gooddata/sdk-model";
|
|
5
5
|
import { dateFilterChanged } from "../../../events/filters.js";
|
|
6
6
|
import { invalidArgumentsProvided } from "../../../events/general.js";
|
|
7
7
|
import { dispatchDashboardEvent } from "../../../store/_infra/eventDispatcher.js";
|
|
8
8
|
import { selectIsApplyFiltersAllAtOnceEnabledAndSet } from "../../../store/config/configSelectors.js";
|
|
9
9
|
import { selectIsCrossFiltering } from "../../../store/drill/drillSelectors.js";
|
|
10
|
-
import { selectEnablePersistentFiltersAcrossTabs } from "../../../store/meta/metaSelectors.js";
|
|
11
10
|
import { selectFilterContextDateFilter, selectFilterContextDateFilterByDataSet, } from "../../../store/tabs/filterContext/filterContextSelectors.js";
|
|
12
11
|
import { tabsActions } from "../../../store/tabs/index.js";
|
|
13
|
-
import { canApplyDateFilter,
|
|
12
|
+
import { canApplyDateFilter, resetCrossFiltering } from "../common.js";
|
|
13
|
+
import { beginTabSync, endTabSync, putTabSynced } from "../tabSync/tabSyncSaga.js";
|
|
14
14
|
export function* changeDateFilterSelectionHandler(ctx, cmd) {
|
|
15
15
|
const isAllTime = cmd.payload.type === "relative" &&
|
|
16
16
|
cmd.payload.granularity === "GDC.time.date" &&
|
|
@@ -20,38 +20,37 @@ export function* changeDateFilterSelectionHandler(ctx, cmd) {
|
|
|
20
20
|
if (!canApply) {
|
|
21
21
|
throw invalidArgumentsProvided(ctx, cmd, `Cannot apply a date filter that is invalid by the current dateFilterConfig.`);
|
|
22
22
|
}
|
|
23
|
-
const
|
|
24
|
-
const enablePersistentFiltersAcrossTabs = yield select(selectEnablePersistentFiltersAcrossTabs);
|
|
23
|
+
const session = yield call(beginTabSync);
|
|
25
24
|
const isApplyAllAtOnceEnabledAndSet = yield select(selectIsApplyFiltersAllAtOnceEnabledAndSet);
|
|
26
25
|
const isWorkingSelectionChange = cmd.payload.isWorkingSelectionChange && isApplyAllAtOnceEnabledAndSet;
|
|
27
26
|
const localIdentifierObj = cmd.payload.localIdentifier
|
|
28
27
|
? { localIdentifier: cmd.payload.localIdentifier }
|
|
29
28
|
: {};
|
|
30
|
-
yield
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
29
|
+
yield call(putTabSynced, session, [
|
|
30
|
+
tabsActions.upsertDateFilter(isAllTime
|
|
31
|
+
? {
|
|
32
|
+
type: "allTime",
|
|
33
|
+
dataSet: cmd.payload.dataSet,
|
|
34
|
+
isWorkingSelectionChange,
|
|
35
|
+
...localIdentifierObj,
|
|
36
|
+
...(cmd.payload.emptyValueHandling
|
|
37
|
+
? { emptyValueHandling: cmd.payload.emptyValueHandling }
|
|
38
|
+
: {}),
|
|
39
|
+
}
|
|
40
|
+
: {
|
|
41
|
+
type: cmd.payload.type,
|
|
42
|
+
granularity: cmd.payload.granularity,
|
|
43
|
+
from: cmd.payload.from,
|
|
44
|
+
to: cmd.payload.to,
|
|
45
|
+
dataSet: cmd.payload.dataSet,
|
|
46
|
+
isWorkingSelectionChange,
|
|
47
|
+
...localIdentifierObj,
|
|
48
|
+
...(cmd.payload.boundedFilter ? { boundedFilter: cmd.payload.boundedFilter } : {}),
|
|
49
|
+
...(cmd.payload.emptyValueHandling
|
|
50
|
+
? { emptyValueHandling: cmd.payload.emptyValueHandling }
|
|
51
|
+
: {}),
|
|
52
|
+
}),
|
|
53
|
+
]);
|
|
55
54
|
if (!isWorkingSelectionChange) {
|
|
56
55
|
const isCrossFiltering = yield select(selectIsCrossFiltering);
|
|
57
56
|
if (isCrossFiltering) {
|
|
@@ -62,12 +61,7 @@ export function* changeDateFilterSelectionHandler(ctx, cmd) {
|
|
|
62
61
|
? yield select(selectFilterContextDateFilterByDataSet(cmd.payload.dataSet))
|
|
63
62
|
: yield select(selectFilterContextDateFilter);
|
|
64
63
|
yield dispatchDashboardEvent(dateFilterChanged(ctx, affectedFilter, cmd.payload.dateFilterOptionLocalId, cmd.correlationId));
|
|
65
|
-
|
|
66
|
-
yield call(dispatchFilterContextChangedForMutatedTabs, ctx, cmd, filterContextSnapshot);
|
|
67
|
-
}
|
|
68
|
-
else {
|
|
69
|
-
yield call(dispatchFilterContextChanged, ctx, cmd);
|
|
70
|
-
}
|
|
64
|
+
yield call(endTabSync, ctx, cmd, session);
|
|
71
65
|
}
|
|
72
66
|
function dateFilterSelectionToDateFilter(dateFilterSelection) {
|
|
73
67
|
if (dateFilterSelection.type === "absolute" && dateFilterSelection.from && dateFilterSelection.to) {
|
|
@@ -1,9 +1,19 @@
|
|
|
1
1
|
import { type SagaIterator } from "redux-saga";
|
|
2
2
|
import { type IApplyFilterView, type IDeleteFilterView, type ISaveFilterView, type ISetFilterViewAsDefault } from "../../commands/filters.js";
|
|
3
|
+
import { type ISwitchDashboardTab } from "../../commands/tabs.js";
|
|
3
4
|
import { type DashboardContext } from "../../types/commonTypes.js";
|
|
4
5
|
export declare function saveFilterViewHandler(ctx: DashboardContext, cmd: ISaveFilterView): SagaIterator<void>;
|
|
5
6
|
export declare function deleteFilterViewHandler(ctx: DashboardContext, cmd: IDeleteFilterView): SagaIterator<void>;
|
|
6
7
|
export declare function applyFilterViewHandler(ctx: DashboardContext, cmd: IApplyFilterView): SagaIterator<void>;
|
|
8
|
+
/**
|
|
9
|
+
* While filters persist across tabs, the dashboard opens with the default view of its active tab as
|
|
10
|
+
* the shared state. Every other tab applies its own default view, to all tabs, on its first visit in
|
|
11
|
+
* the session. Later visits keep the shared state. A drill to the tab sets the shared state itself, so
|
|
12
|
+
* it counts as the first visit without applying the view.
|
|
13
|
+
*
|
|
14
|
+
* @internal
|
|
15
|
+
*/
|
|
16
|
+
export declare function applyDefaultFilterViewOnFirstTabVisit(ctx: DashboardContext, cmd: ISwitchDashboardTab, tabLocalIdentifier: string): SagaIterator<void>;
|
|
7
17
|
export declare function setFilterViewAsDefaultHandler(ctx: DashboardContext, cmd: ISetFilterViewAsDefault): SagaIterator<void>;
|
|
8
18
|
export declare function reloadFilterViewsHandler(ctx: DashboardContext): SagaIterator<void>;
|
|
9
19
|
//# sourceMappingURL=filterViewHandler.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filterViewHandler.d.ts","sourceRoot":"","sources":["../../../../src/model/commandHandlers/filterContext/filterViewHandler.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"filterViewHandler.d.ts","sourceRoot":"","sources":["../../../../src/model/commandHandlers/filterContext/filterViewHandler.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAe/C,OAAO,EACH,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,EACtB,KAAK,eAAe,EACpB,KAAK,uBAAuB,EAE/B,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAoClE,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAiBnE,wBAAiB,qBAAqB,CAAC,GAAG,EAAE,gBAAgB,EAAE,GAAG,EAAE,eAAe,GAAG,YAAY,CAAC,IAAI,CAAC,CAqEtG;AAMD,wBAAiB,uBAAuB,CAAC,GAAG,EAAE,gBAAgB,EAAE,GAAG,EAAE,iBAAiB,GAAG,YAAY,CAAC,IAAI,CAAC,CAsB1G;AAOD,wBAAiB,sBAAsB,CAAC,GAAG,EAAE,gBAAgB,EAAE,GAAG,EAAE,gBAAgB,GAAG,YAAY,CAAC,IAAI,CAAC,CAYxG;AA6DD;;;;;;;GAOG;AACH,wBAAiB,qCAAqC,CAClD,GAAG,EAAE,gBAAgB,EACrB,GAAG,EAAE,mBAAmB,EACxB,kBAAkB,EAAE,MAAM,GAC3B,YAAY,CAAC,IAAI,CAAC,CAyCpB;AAMD,wBAAiB,6BAA6B,CAC1C,GAAG,EAAE,gBAAgB,EACrB,GAAG,EAAE,uBAAuB,GAC7B,YAAY,CAAC,IAAI,CAAC,CAuBpB;AAED,wBAAiB,wBAAwB,CAAC,GAAG,EAAE,gBAAgB,GAAG,YAAY,CAAC,IAAI,CAAC,CAcnF"}
|
|
@@ -8,16 +8,20 @@ import { filterViewApplicationFailed, filterViewApplicationSucceeded, filterView
|
|
|
8
8
|
import { selectCatalogParameters } from "../../store/catalog/catalogSelectors.js";
|
|
9
9
|
import { selectIsApplyFiltersAllAtOnceEnabledAndSet } from "../../store/config/configSelectors.js";
|
|
10
10
|
import { selectCrossFilteringFiltersLocalIdentifiers } from "../../store/drill/drillSelectors.js";
|
|
11
|
-
import { selectFilterViews } from "../../store/filterViews/filterViewsReducersSelectors.js";
|
|
11
|
+
import { selectDashboardFilterViews, selectDefaultFilterViewAppliedTabs, selectFilterViews, } from "../../store/filterViews/filterViewsReducersSelectors.js";
|
|
12
12
|
import { filterViewsActions } from "../../store/filterViews/index.js";
|
|
13
|
+
import { selectEnablePersistentFiltersAcrossTabs } from "../../store/meta/metaSelectors.js";
|
|
14
|
+
import { selectIsInEditMode } from "../../store/renderMode/renderModeSelectors.js";
|
|
13
15
|
import { selectAttributeFilterConfigsOverrides } from "../../store/tabs/attributeFilterConfigs/attributeFilterConfigsSelectors.js";
|
|
14
16
|
import { selectFilterContextDefinition, selectWorkingFilterContextDefinition, } from "../../store/tabs/filterContext/filterContextSelectors.js";
|
|
15
17
|
import { tabsActions } from "../../store/tabs/index.js";
|
|
16
18
|
import { selectDashboardParameterEntries, selectFilterViewDisplayParameters, } from "../../store/tabs/parameters/parametersSelectors.js";
|
|
17
|
-
import { selectActiveTabLocalIdentifier } from "../../store/tabs/tabsSelectors.js";
|
|
19
|
+
import { selectActiveTabLocalIdentifier, selectFirstTabLocalIdentifier, } from "../../store/tabs/tabsSelectors.js";
|
|
20
|
+
import { findTabDefaultFilterView } from "../dashboard/common/filterViews.js";
|
|
18
21
|
import { resolveParameterValuesForFilterView } from "../dashboard/common/parameterHydration.js";
|
|
19
22
|
import { loadFilterViews } from "../dashboard/initializeDashboardHandler/loadFilterViews.js";
|
|
20
23
|
import { changeParameterValuesHandler } from "../parameters/changeParameterValuesHandler.js";
|
|
24
|
+
import { changeFilterContextSelectionHandler } from "./changeFilterContextSelectionHandler.js";
|
|
21
25
|
import { resetCrossFiltering } from "./common.js";
|
|
22
26
|
function createFilterView(ctx, filterView) {
|
|
23
27
|
return ctx.backend.workspace(ctx.workspace).dashboards().createFilterView(filterView);
|
|
@@ -93,35 +97,86 @@ function* findFilterView(ref) {
|
|
|
93
97
|
}
|
|
94
98
|
export function* applyFilterViewHandler(ctx, cmd) {
|
|
95
99
|
const filterView = yield call(findFilterView, cmd.payload.ref);
|
|
96
|
-
const attributeFilterConfigs = yield select(selectAttributeFilterConfigsOverrides);
|
|
97
100
|
if (filterView) {
|
|
98
|
-
yield call(
|
|
99
|
-
const isApplyAllAtOnceEnabledAndSet = yield select(selectIsApplyFiltersAllAtOnceEnabledAndSet);
|
|
100
|
-
if (isApplyAllAtOnceEnabledAndSet) {
|
|
101
|
-
yield put(tabsActions.resetWorkingSelection());
|
|
102
|
-
}
|
|
103
|
-
yield put(changeFilterContextSelectionByParams({
|
|
104
|
-
filters: filterView.filterContext.filters,
|
|
105
|
-
attributeFilterConfigs,
|
|
106
|
-
resetOthers: true,
|
|
107
|
-
correlationId: cmd.correlationId,
|
|
108
|
-
// a filter view snapshots this dashboard's own filter context, so its localIdentifiers
|
|
109
|
-
// are authoritative; display form matching alone cannot tell apart filters that share
|
|
110
|
-
// a display form
|
|
111
|
-
matchByLocalIdentifier: true,
|
|
112
|
-
}));
|
|
113
|
-
const parameterEntries = yield select(selectDashboardParameterEntries);
|
|
114
|
-
const workspaceParameters = yield select(selectCatalogParameters);
|
|
115
|
-
yield call(changeParameterValuesHandler, ctx, changeParameterValues({
|
|
116
|
-
parameters: resolveParameterValuesForFilterView(parameterEntries, filterView.parameters ?? [], workspaceParameters),
|
|
117
|
-
correlationId: cmd.correlationId,
|
|
118
|
-
}));
|
|
101
|
+
yield call(applyFilterViewSelection, ctx, cmd, filterView);
|
|
119
102
|
yield put(filterViewApplicationSucceeded(ctx, filterView, cmd.correlationId));
|
|
120
103
|
}
|
|
121
104
|
else {
|
|
122
105
|
yield put(filterViewApplicationFailed(ctx));
|
|
123
106
|
}
|
|
124
107
|
}
|
|
108
|
+
/**
|
|
109
|
+
* Applies the filters and parameters of `filterView` to the active tab. While filters persist across
|
|
110
|
+
* tabs, the filter and parameter handlers mirror the values to every other tab, so the view sets the
|
|
111
|
+
* shared state.
|
|
112
|
+
*/
|
|
113
|
+
function* applyFilterViewSelection(ctx, cmd, filterView, options) {
|
|
114
|
+
const attributeFilterConfigs = yield select(selectAttributeFilterConfigsOverrides);
|
|
115
|
+
yield call(resetCrossFiltering, cmd);
|
|
116
|
+
const isApplyAllAtOnceEnabledAndSet = yield select(selectIsApplyFiltersAllAtOnceEnabledAndSet);
|
|
117
|
+
if (isApplyAllAtOnceEnabledAndSet) {
|
|
118
|
+
yield put(tabsActions.resetWorkingSelection());
|
|
119
|
+
}
|
|
120
|
+
const parameterEntries = yield select(selectDashboardParameterEntries);
|
|
121
|
+
const workspaceParameters = yield select(selectCatalogParameters);
|
|
122
|
+
yield call(changeParameterValuesHandler, ctx, changeParameterValues({
|
|
123
|
+
parameters: resolveParameterValuesForFilterView(parameterEntries, filterView.parameters ?? [], workspaceParameters),
|
|
124
|
+
correlationId: cmd.correlationId,
|
|
125
|
+
adoptAsOriginal: options?.adoptAsOriginal,
|
|
126
|
+
}));
|
|
127
|
+
// inline, so the view is applied before the caller continues: a queued command would run after
|
|
128
|
+
// the caller's own filter changes (e.g. automation filters after a tab switch) and overwrite them
|
|
129
|
+
yield call(changeFilterContextSelectionHandler, ctx, changeFilterContextSelectionByParams({
|
|
130
|
+
filters: filterView.filterContext.filters,
|
|
131
|
+
attributeFilterConfigs,
|
|
132
|
+
resetOthers: true,
|
|
133
|
+
correlationId: cmd.correlationId,
|
|
134
|
+
// a default view initializes the shared state, so the applied values are what a reset restores
|
|
135
|
+
adoptAsOriginal: options?.adoptAsOriginal,
|
|
136
|
+
// a filter view snapshots this dashboard's own filter context, so its localIdentifiers
|
|
137
|
+
// are authoritative; display form matching alone cannot tell apart filters that share
|
|
138
|
+
// a display form
|
|
139
|
+
matchByLocalIdentifier: true,
|
|
140
|
+
}));
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* While filters persist across tabs, the dashboard opens with the default view of its active tab as
|
|
144
|
+
* the shared state. Every other tab applies its own default view, to all tabs, on its first visit in
|
|
145
|
+
* the session. Later visits keep the shared state. A drill to the tab sets the shared state itself, so
|
|
146
|
+
* it counts as the first visit without applying the view.
|
|
147
|
+
*
|
|
148
|
+
* @internal
|
|
149
|
+
*/
|
|
150
|
+
export function* applyDefaultFilterViewOnFirstTabVisit(ctx, cmd, tabLocalIdentifier) {
|
|
151
|
+
const persistFiltersAcrossTabs = yield select(selectEnablePersistentFiltersAcrossTabs);
|
|
152
|
+
// edit mode starts from the saved filters, same as on load
|
|
153
|
+
const isInEditMode = yield select(selectIsInEditMode);
|
|
154
|
+
if (!persistFiltersAcrossTabs || isInEditMode) {
|
|
155
|
+
return;
|
|
156
|
+
}
|
|
157
|
+
const appliedTabs = yield select(selectDefaultFilterViewAppliedTabs);
|
|
158
|
+
if (appliedTabs.includes(tabLocalIdentifier)) {
|
|
159
|
+
return;
|
|
160
|
+
}
|
|
161
|
+
if (cmd.payload.source === "drillToSelf") {
|
|
162
|
+
yield put(filterViewsActions.markDefaultFilterViewApplied(tabLocalIdentifier));
|
|
163
|
+
return;
|
|
164
|
+
}
|
|
165
|
+
const filterViews = yield select(selectDashboardFilterViews);
|
|
166
|
+
const firstTabLocalIdentifier = yield select(selectFirstTabLocalIdentifier);
|
|
167
|
+
const defaultFilterView = findTabDefaultFilterView(filterViews, tabLocalIdentifier, tabLocalIdentifier === firstTabLocalIdentifier);
|
|
168
|
+
// A failed view must not fail the caller (the tab is already switched, a save already persisted).
|
|
169
|
+
// The tab stays unmarked, so its next visit retries the view.
|
|
170
|
+
try {
|
|
171
|
+
if (defaultFilterView) {
|
|
172
|
+
yield call(applyFilterViewSelection, ctx, cmd, defaultFilterView, { adoptAsOriginal: true });
|
|
173
|
+
}
|
|
174
|
+
yield put(filterViewsActions.markDefaultFilterViewApplied(tabLocalIdentifier));
|
|
175
|
+
}
|
|
176
|
+
catch (error) {
|
|
177
|
+
defaultErrorHandler(error);
|
|
178
|
+
}
|
|
179
|
+
}
|
|
125
180
|
function setFilterViewAsDefault(ctx, ref, isDefault) {
|
|
126
181
|
return ctx.backend.workspace(ctx.workspace).dashboards().setFilterViewAsDefault(ref, isDefault);
|
|
127
182
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"changeMeasureValueFilterConditionHandler.d.ts","sourceRoot":"","sources":["../../../../../src/model/commandHandlers/filterContext/measureValueFilter/changeMeasureValueFilterConditionHandler.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAI/C,OAAO,EAAE,KAAK,kCAAkC,EAAE,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"changeMeasureValueFilterConditionHandler.d.ts","sourceRoot":"","sources":["../../../../../src/model/commandHandlers/filterContext/measureValueFilter/changeMeasureValueFilterConditionHandler.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAI/C,OAAO,EAAE,KAAK,kCAAkC,EAAE,MAAM,8BAA8B,CAAC;AASvF,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAGtE,wBAAiB,wCAAwC,CACrD,GAAG,EAAE,gBAAgB,EACrB,GAAG,EAAE,kCAAkC,GACxC,YAAY,CAAC,IAAI,CAAC,CA2CpB"}
|
|
@@ -1,37 +1,31 @@
|
|
|
1
1
|
// (C) 2026 GoodData Corporation
|
|
2
|
-
import { call,
|
|
2
|
+
import { call, select } from "redux-saga/effects";
|
|
3
3
|
import { invariant } from "ts-invariant";
|
|
4
4
|
import { measureValueFilterConditionChanged } from "../../../events/filters.js";
|
|
5
5
|
import { invalidArgumentsProvided } from "../../../events/general.js";
|
|
6
6
|
import { dispatchDashboardEvent } from "../../../store/_infra/eventDispatcher.js";
|
|
7
|
-
import { selectEnablePersistentFiltersAcrossTabs } from "../../../store/meta/metaSelectors.js";
|
|
8
7
|
import { selectFilterContextMeasureValueFilterByLocalId, selectWorkingFilterContextMeasureValueFilterByLocalId, } from "../../../store/tabs/filterContext/filterContextSelectors.js";
|
|
9
8
|
import { tabsActions } from "../../../store/tabs/index.js";
|
|
10
|
-
import {
|
|
9
|
+
import { beginTabSync, endTabSync, putTabSynced } from "../tabSync/tabSyncSaga.js";
|
|
11
10
|
export function* changeMeasureValueFilterConditionHandler(ctx, cmd) {
|
|
12
11
|
const { localIdentifier, conditions, isWorkingSelectionChange } = cmd.payload;
|
|
13
12
|
const existingFilter = yield select(selectFilterContextMeasureValueFilterByLocalId(localIdentifier));
|
|
14
|
-
const
|
|
15
|
-
const filterContextSnapshot = yield call(captureFilterContextByTabSnapshot);
|
|
13
|
+
const session = yield call(beginTabSync);
|
|
16
14
|
if (!existingFilter) {
|
|
17
15
|
throw invalidArgumentsProvided(ctx, cmd, `Attempting to change condition of measure value filter ${localIdentifier} that does not exist on the dashboard.`);
|
|
18
16
|
}
|
|
19
|
-
yield
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
17
|
+
yield call(putTabSynced, session, [
|
|
18
|
+
tabsActions.changeMeasureValueFilterCondition({
|
|
19
|
+
localIdentifier,
|
|
20
|
+
conditions,
|
|
21
|
+
...(isWorkingSelectionChange === undefined ? {} : { isWorkingSelectionChange }),
|
|
22
|
+
}),
|
|
23
|
+
]);
|
|
25
24
|
const updatedFilterSelector = isWorkingSelectionChange
|
|
26
25
|
? selectWorkingFilterContextMeasureValueFilterByLocalId(localIdentifier)
|
|
27
26
|
: selectFilterContextMeasureValueFilterByLocalId(localIdentifier);
|
|
28
27
|
const updatedFilter = yield select(updatedFilterSelector);
|
|
29
28
|
invariant(updatedFilter, "Inconsistent state in changeMeasureValueFilterConditionHandler");
|
|
30
29
|
yield dispatchDashboardEvent(measureValueFilterConditionChanged(ctx, localIdentifier, updatedFilter, conditions, cmd.correlationId));
|
|
31
|
-
|
|
32
|
-
yield call(dispatchFilterContextChangedForMutatedTabs, ctx, cmd, filterContextSnapshot);
|
|
33
|
-
}
|
|
34
|
-
else {
|
|
35
|
-
yield call(dispatchFilterContextChanged, ctx, cmd);
|
|
36
|
-
}
|
|
30
|
+
yield call(endTabSync, ctx, cmd, session);
|
|
37
31
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"changeMeasureValueFilterDimensionalityHandler.d.ts","sourceRoot":"","sources":["../../../../../src/model/commandHandlers/filterContext/measureValueFilter/changeMeasureValueFilterDimensionalityHandler.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAI/C,OAAO,EAAE,KAAK,oCAAoC,EAAE,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"changeMeasureValueFilterDimensionalityHandler.d.ts","sourceRoot":"","sources":["../../../../../src/model/commandHandlers/filterContext/measureValueFilter/changeMeasureValueFilterDimensionalityHandler.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAI/C,OAAO,EAAE,KAAK,oCAAoC,EAAE,MAAM,8BAA8B,CAAC;AAMzF,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAGtE,wBAAiB,6CAA6C,CAC1D,GAAG,EAAE,gBAAgB,EACrB,GAAG,EAAE,oCAAoC,GAC1C,YAAY,CAAC,IAAI,CAAC,CAmCpB"}
|
|
@@ -1,27 +1,24 @@
|
|
|
1
1
|
// (C) 2026 GoodData Corporation
|
|
2
|
-
import { call,
|
|
2
|
+
import { call, select } from "redux-saga/effects";
|
|
3
3
|
import { invariant } from "ts-invariant";
|
|
4
4
|
import { measureValueFilterDimensionalityChanged } from "../../../events/filters.js";
|
|
5
5
|
import { invalidArgumentsProvided } from "../../../events/general.js";
|
|
6
6
|
import { dispatchDashboardEvent } from "../../../store/_infra/eventDispatcher.js";
|
|
7
|
-
import { selectEnablePersistentFiltersAcrossTabs } from "../../../store/meta/metaSelectors.js";
|
|
8
7
|
import { selectFilterContextMeasureValueFilterByLocalId } from "../../../store/tabs/filterContext/filterContextSelectors.js";
|
|
9
8
|
import { tabsActions } from "../../../store/tabs/index.js";
|
|
10
|
-
import {
|
|
9
|
+
import { beginTabSync, endTabSync, putTabSynced } from "../tabSync/tabSyncSaga.js";
|
|
11
10
|
export function* changeMeasureValueFilterDimensionalityHandler(ctx, cmd) {
|
|
12
11
|
const { localIdentifier, dimensionality } = cmd.payload;
|
|
13
12
|
const existingFilter = yield select(selectFilterContextMeasureValueFilterByLocalId(localIdentifier));
|
|
14
|
-
const
|
|
13
|
+
const session = yield call(beginTabSync);
|
|
15
14
|
if (!existingFilter) {
|
|
16
15
|
throw invalidArgumentsProvided(ctx, cmd, `Attempting to change dimensionality of measure value filter ${localIdentifier} that does not exist on the dashboard.`);
|
|
17
16
|
}
|
|
18
|
-
yield
|
|
19
|
-
localIdentifier,
|
|
20
|
-
|
|
21
|
-
enablePersistentFiltersAcrossTabs,
|
|
22
|
-
}));
|
|
17
|
+
yield call(putTabSynced, session, [
|
|
18
|
+
tabsActions.setMeasureValueFilterDimensionality({ localIdentifier, dimensionality }),
|
|
19
|
+
]);
|
|
23
20
|
const updatedFilter = yield select(selectFilterContextMeasureValueFilterByLocalId(localIdentifier));
|
|
24
21
|
invariant(updatedFilter, "Inconsistent state in changeMeasureValueFilterDimensionalityHandler");
|
|
25
22
|
yield dispatchDashboardEvent(measureValueFilterDimensionalityChanged(ctx, localIdentifier, updatedFilter, dimensionality, cmd.correlationId));
|
|
26
|
-
yield call(
|
|
23
|
+
yield call(endTabSync, ctx, cmd, session);
|
|
27
24
|
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { type Action } from "@reduxjs/toolkit";
|
|
2
|
+
import { type ITabsState } from "../../../store/tabs/tabsState.js";
|
|
3
|
+
import { type ITabSyncScope } from "./tabSyncScope.js";
|
|
4
|
+
/**
|
|
5
|
+
* Returns `actions` followed, after each one, by its copies for the other tabs.
|
|
6
|
+
*
|
|
7
|
+
* Every action is planned against the state that the preceding actions and their copies produce,
|
|
8
|
+
* so e.g. removing an ignore-list entry after removing the filter sees which tabs still use it.
|
|
9
|
+
* Actions with a sync rule but without a tab are addressed to the scope source tab, so that they
|
|
10
|
+
* are applied to the tab they are planned for. Nothing is mirrored when the scope is disabled.
|
|
11
|
+
*
|
|
12
|
+
* @internal
|
|
13
|
+
*/
|
|
14
|
+
export declare function expandActionsForTabSync(state: ITabsState, actions: readonly Action[], scope: ITabSyncScope): Action[];
|
|
15
|
+
//# sourceMappingURL=expandActionsForTabSync.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"expandActionsForTabSync.d.ts","sourceRoot":"","sources":["../../../../../src/model/commandHandlers/filterContext/tabSync/expandActionsForTabSync.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,MAAM,EAAsB,MAAM,kBAAkB,CAAC;AAInE,OAAO,EAAE,KAAK,UAAU,EAAkB,MAAM,kCAAkC,CAAC;AAGnF,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAIvD;;;;;;;;;GASG;AACH,wBAAgB,uBAAuB,CACnC,KAAK,EAAE,UAAU,EACjB,OAAO,EAAE,SAAS,MAAM,EAAE,EAC1B,KAAK,EAAE,aAAa,GACrB,MAAM,EAAE,CAiBV"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
// (C) 2026 GoodData Corporation
|
|
2
|
+
import { BATCH } from "redux-batched-actions";
|
|
3
|
+
import { tabsActions, tabsSliceReducer } from "../../../store/tabs/index.js";
|
|
4
|
+
import { getTabOrActive } from "../../../store/tabs/tabsState.js";
|
|
5
|
+
import { tabSyncRules } from "./tabSyncRules.js";
|
|
6
|
+
/**
|
|
7
|
+
* Returns `actions` followed, after each one, by its copies for the other tabs.
|
|
8
|
+
*
|
|
9
|
+
* Every action is planned against the state that the preceding actions and their copies produce,
|
|
10
|
+
* so e.g. removing an ignore-list entry after removing the filter sees which tabs still use it.
|
|
11
|
+
* Actions with a sync rule but without a tab are addressed to the scope source tab, so that they
|
|
12
|
+
* are applied to the tab they are planned for. Nothing is mirrored when the scope is disabled.
|
|
13
|
+
*
|
|
14
|
+
* @internal
|
|
15
|
+
*/
|
|
16
|
+
export function expandActionsForTabSync(state, actions, scope) {
|
|
17
|
+
const sourceActions = actions
|
|
18
|
+
.flatMap(unbatched)
|
|
19
|
+
.map((action) => addressedToSourceTab(action, scope.sourceTabLocalIdentifier));
|
|
20
|
+
if (!scope.enabled) {
|
|
21
|
+
return sourceActions;
|
|
22
|
+
}
|
|
23
|
+
const result = [];
|
|
24
|
+
let current = state;
|
|
25
|
+
for (const action of sourceActions) {
|
|
26
|
+
const after = tabsSliceReducer(current, action);
|
|
27
|
+
const mirrored = mirrorAction(current, after, action, scope);
|
|
28
|
+
result.push(action, ...mirrored);
|
|
29
|
+
current = mirrored.reduce(tabsSliceReducer, after);
|
|
30
|
+
}
|
|
31
|
+
return result;
|
|
32
|
+
}
|
|
33
|
+
function mirrorAction(state, after, action, scope) {
|
|
34
|
+
const rule = tabSyncRules.get(action.type);
|
|
35
|
+
if (!rule) {
|
|
36
|
+
return [];
|
|
37
|
+
}
|
|
38
|
+
const payload = action.payload;
|
|
39
|
+
const sourceTabLocalIdentifier = payload?.tabLocalIdentifier ?? scope.sourceTabLocalIdentifier;
|
|
40
|
+
const source = getTabOrActive(state, sourceTabLocalIdentifier);
|
|
41
|
+
const sourceAfter = getTabOrActive(after, sourceTabLocalIdentifier);
|
|
42
|
+
if (!source || !sourceAfter) {
|
|
43
|
+
return [];
|
|
44
|
+
}
|
|
45
|
+
const ctx = { scope, state, source, sourceAfter };
|
|
46
|
+
return (state.tabs ?? []).flatMap((target) => {
|
|
47
|
+
if (target.localIdentifier === source.localIdentifier) {
|
|
48
|
+
return [];
|
|
49
|
+
}
|
|
50
|
+
return rule(payload, target, ctx).map((targetAction) => ({
|
|
51
|
+
...targetAction,
|
|
52
|
+
payload: { ...targetAction.payload, tabLocalIdentifier: target.localIdentifier },
|
|
53
|
+
}));
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Reducers of actions without a tab apply them to the active tab, which is not the source tab
|
|
58
|
+
* when a handler works on another tab.
|
|
59
|
+
*/
|
|
60
|
+
function addressedToSourceTab(action, sourceTabLocalIdentifier) {
|
|
61
|
+
if (!sourceTabLocalIdentifier || !tabSyncRules.has(action.type)) {
|
|
62
|
+
return action;
|
|
63
|
+
}
|
|
64
|
+
if (tabsActions.addAttributeFilterDisplayForm.match(action)) {
|
|
65
|
+
const { payload } = action;
|
|
66
|
+
return "displayForm" in payload
|
|
67
|
+
? tabsActions.addAttributeFilterDisplayForm({
|
|
68
|
+
...payload,
|
|
69
|
+
tabLocalIdentifier: payload.tabLocalIdentifier ?? sourceTabLocalIdentifier,
|
|
70
|
+
})
|
|
71
|
+
: tabsActions.addAttributeFilterDisplayForm({
|
|
72
|
+
displayForm: payload,
|
|
73
|
+
tabLocalIdentifier: sourceTabLocalIdentifier,
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
const payload = action.payload;
|
|
77
|
+
if (payload?.tabLocalIdentifier) {
|
|
78
|
+
return action;
|
|
79
|
+
}
|
|
80
|
+
return { ...action, payload: { ...payload, tabLocalIdentifier: sourceTabLocalIdentifier } };
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* The tabs slice reducer ignores batch actions, which the store unpacks, so planning
|
|
84
|
+
* works on their inner actions.
|
|
85
|
+
*/
|
|
86
|
+
function unbatched(action) {
|
|
87
|
+
return action.type === BATCH ? action.payload.flatMap(unbatched) : [action];
|
|
88
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { type TabSyncActionsRule } from "./tabSyncScope.js";
|
|
2
|
+
type AnyTabSyncRule = TabSyncActionsRule<any>;
|
|
3
|
+
/**
|
|
4
|
+
* Tabs slice actions that are mirrored to other tabs when filters persist across tabs, keyed by action type.
|
|
5
|
+
* Actions without a rule apply to their own tab only, which includes every filter configuration change.
|
|
6
|
+
*
|
|
7
|
+
* @internal
|
|
8
|
+
*/
|
|
9
|
+
export declare const tabSyncRules: ReadonlyMap<string, AnyTabSyncRule>;
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=tabSyncRules.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tabSyncRules.d.ts","sourceRoot":"","sources":["../../../../../src/model/commandHandlers/filterContext/tabSync/tabSyncRules.ts"],"names":[],"mappings":"AAoCA,OAAO,EAA4B,KAAK,kBAAkB,EAAoB,MAAM,mBAAmB,CAAC;AAExG,KAAK,cAAc,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC;AAuZ9C;;;;;GAKG;AACH,eAAO,MAAM,YAAY,EAAE,WAAW,CAAC,MAAM,EAAE,cAAc,CAG3D,CAAC"}
|