@gooddata/sdk-ui-dashboard 11.9.0 → 11.10.0-alpha.1
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/esm/__version.d.ts +1 -1
- package/esm/__version.d.ts.map +1 -1
- package/esm/__version.js +1 -1
- package/esm/__version.js.map +1 -1
- package/esm/model/commandHandlers/common/validateDrillToCustomUrlParams.d.ts.map +1 -1
- package/esm/model/commandHandlers/common/validateDrillToCustomUrlParams.js +3 -2
- package/esm/model/commandHandlers/common/validateDrillToCustomUrlParams.js.map +1 -1
- package/esm/model/commandHandlers/dashboard/changeAttributeFilterDisplayAsLabelHandler.d.ts.map +1 -1
- package/esm/model/commandHandlers/dashboard/changeAttributeFilterDisplayAsLabelHandler.js +4 -3
- package/esm/model/commandHandlers/dashboard/changeAttributeFilterDisplayAsLabelHandler.js.map +1 -1
- package/esm/model/commandHandlers/dashboard/changeAttributeFilterLimitingItemsHandler.js +3 -3
- package/esm/model/commandHandlers/dashboard/changeAttributeFilterLimitingItemsHandler.js.map +1 -1
- package/esm/model/commandHandlers/dashboard/changeAttributeFilterModeHandler.d.ts.map +1 -1
- package/esm/model/commandHandlers/dashboard/changeAttributeFilterModeHandler.js +4 -3
- package/esm/model/commandHandlers/dashboard/changeAttributeFilterModeHandler.js.map +1 -1
- package/esm/model/commandHandlers/dashboard/changeDateFilterTitleHandler.d.ts.map +1 -1
- package/esm/model/commandHandlers/dashboard/changeDateFilterTitleHandler.js +7 -7
- package/esm/model/commandHandlers/dashboard/changeDateFilterTitleHandler.js.map +1 -1
- package/esm/model/commandHandlers/dashboard/changeDateFilterWithDimensionModeHandler.d.ts.map +1 -1
- package/esm/model/commandHandlers/dashboard/changeDateFilterWithDimensionModeHandler.js +5 -4
- package/esm/model/commandHandlers/dashboard/changeDateFilterWithDimensionModeHandler.js.map +1 -1
- package/esm/model/commandHandlers/dashboard/common/stateInitializers.d.ts +2 -2
- package/esm/model/commandHandlers/dashboard/common/stateInitializers.d.ts.map +1 -1
- package/esm/model/commandHandlers/dashboard/common/stateInitializers.js +234 -106
- package/esm/model/commandHandlers/dashboard/common/stateInitializers.js.map +1 -1
- package/esm/model/commandHandlers/dashboard/dateFilterConfigHandler.d.ts.map +1 -1
- package/esm/model/commandHandlers/dashboard/dateFilterConfigHandler.js +2 -2
- package/esm/model/commandHandlers/dashboard/dateFilterConfigHandler.js.map +1 -1
- package/esm/model/commandHandlers/dashboard/exportDashboardToPdfHandler.d.ts.map +1 -1
- package/esm/model/commandHandlers/dashboard/exportDashboardToPdfHandler.js +2 -1
- package/esm/model/commandHandlers/dashboard/exportDashboardToPdfHandler.js.map +1 -1
- package/esm/model/commandHandlers/dashboard/exportDashboardToPdfPresentationHandler.d.ts.map +1 -1
- package/esm/model/commandHandlers/dashboard/exportDashboardToPdfPresentationHandler.js +2 -1
- package/esm/model/commandHandlers/dashboard/exportDashboardToPdfPresentationHandler.js.map +1 -1
- package/esm/model/commandHandlers/dashboard/exportDashboardToPptPresentationHandler.d.ts.map +1 -1
- package/esm/model/commandHandlers/dashboard/exportDashboardToPptPresentationHandler.js +2 -1
- package/esm/model/commandHandlers/dashboard/exportDashboardToPptPresentationHandler.js.map +1 -1
- package/esm/model/commandHandlers/dashboard/exportToTabularHandler.js +1 -1
- package/esm/model/commandHandlers/dashboard/exportToTabularHandler.js.map +1 -1
- package/esm/model/commandHandlers/dashboard/initializeDashboardHandler/index.d.ts +1 -1
- package/esm/model/commandHandlers/dashboard/initializeDashboardHandler/index.d.ts.map +1 -1
- package/esm/model/commandHandlers/dashboard/initializeDashboardHandler/index.js +47 -20
- package/esm/model/commandHandlers/dashboard/initializeDashboardHandler/index.js.map +1 -1
- package/esm/model/commandHandlers/dashboard/initializeDashboardHandler/onDateFilterConfigValidationError.d.ts +1 -1
- package/esm/model/commandHandlers/dashboard/initializeDashboardHandler/onDateFilterConfigValidationError.d.ts.map +1 -1
- package/esm/model/commandHandlers/dashboard/initializeDashboardHandler/onDateFilterConfigValidationError.js +2 -2
- package/esm/model/commandHandlers/dashboard/initializeDashboardHandler/onDateFilterConfigValidationError.js.map +1 -1
- package/esm/model/commandHandlers/dashboard/initializeDashboardHandler/preloadAttributeFiltersData.d.ts.map +1 -1
- package/esm/model/commandHandlers/dashboard/initializeDashboardHandler/preloadAttributeFiltersData.js +10 -5
- package/esm/model/commandHandlers/dashboard/initializeDashboardHandler/preloadAttributeFiltersData.js.map +1 -1
- package/esm/model/commandHandlers/dashboard/initializeDashboardHandler/resolveDashboardConfig.js +2 -2
- package/esm/model/commandHandlers/dashboard/initializeDashboardHandler/resolveDashboardConfig.js.map +1 -1
- package/esm/model/commandHandlers/dashboard/resetDashboardHandler.d.ts.map +1 -1
- package/esm/model/commandHandlers/dashboard/resetDashboardHandler.js +62 -22
- package/esm/model/commandHandlers/dashboard/resetDashboardHandler.js.map +1 -1
- package/esm/model/commandHandlers/dashboard/saveAsDashboardHandler.js +6 -6
- package/esm/model/commandHandlers/dashboard/saveAsDashboardHandler.js.map +1 -1
- package/esm/model/commandHandlers/dashboard/saveDashboardHandler.d.ts.map +1 -1
- package/esm/model/commandHandlers/dashboard/saveDashboardHandler.js +39 -14
- package/esm/model/commandHandlers/dashboard/saveDashboardHandler.js.map +1 -1
- package/esm/model/commandHandlers/drill/crossFilteringHandler.js +2 -2
- package/esm/model/commandHandlers/drill/crossFilteringHandler.js.map +1 -1
- package/esm/model/commandHandlers/drill/drillToDashboardHandler.js +2 -2
- package/esm/model/commandHandlers/drill/drillToDashboardHandler.js.map +1 -1
- package/esm/model/commandHandlers/drill/resolveDrillToCustomUrl.d.ts.map +1 -1
- package/esm/model/commandHandlers/drill/resolveDrillToCustomUrl.js +2 -2
- package/esm/model/commandHandlers/drill/resolveDrillToCustomUrl.js.map +1 -1
- package/esm/model/commandHandlers/filterContext/attributeFilter/addAttributeFilterHandler.d.ts.map +1 -1
- package/esm/model/commandHandlers/filterContext/attributeFilter/addAttributeFilterHandler.js +6 -7
- package/esm/model/commandHandlers/filterContext/attributeFilter/addAttributeFilterHandler.js.map +1 -1
- package/esm/model/commandHandlers/filterContext/attributeFilter/changeAttributeDisplayFormHandler.js +4 -4
- package/esm/model/commandHandlers/filterContext/attributeFilter/changeAttributeDisplayFormHandler.js.map +1 -1
- package/esm/model/commandHandlers/filterContext/attributeFilter/changeAttributeFilterSelectionHandler.d.ts.map +1 -1
- package/esm/model/commandHandlers/filterContext/attributeFilter/changeAttributeFilterSelectionHandler.js +5 -4
- package/esm/model/commandHandlers/filterContext/attributeFilter/changeAttributeFilterSelectionHandler.js.map +1 -1
- package/esm/model/commandHandlers/filterContext/attributeFilter/changeAttributeSelectionModeHandler.d.ts.map +1 -1
- package/esm/model/commandHandlers/filterContext/attributeFilter/changeAttributeSelectionModeHandler.js +4 -3
- package/esm/model/commandHandlers/filterContext/attributeFilter/changeAttributeSelectionModeHandler.js.map +1 -1
- package/esm/model/commandHandlers/filterContext/attributeFilter/changeAttributeTitleHandler.d.ts.map +1 -1
- package/esm/model/commandHandlers/filterContext/attributeFilter/changeAttributeTitleHandler.js +4 -3
- package/esm/model/commandHandlers/filterContext/attributeFilter/changeAttributeTitleHandler.js.map +1 -1
- package/esm/model/commandHandlers/filterContext/attributeFilter/moveAttributeFilterHandler.d.ts.map +1 -1
- package/esm/model/commandHandlers/filterContext/attributeFilter/moveAttributeFilterHandler.js +4 -3
- package/esm/model/commandHandlers/filterContext/attributeFilter/moveAttributeFilterHandler.js.map +1 -1
- package/esm/model/commandHandlers/filterContext/attributeFilter/removeAttributeFiltersHandler.d.ts.map +1 -1
- package/esm/model/commandHandlers/filterContext/attributeFilter/removeAttributeFiltersHandler.js +6 -7
- package/esm/model/commandHandlers/filterContext/attributeFilter/removeAttributeFiltersHandler.js.map +1 -1
- package/esm/model/commandHandlers/filterContext/attributeFilter/setAttributeFilterDependentDateFilterHandler.d.ts.map +1 -1
- package/esm/model/commandHandlers/filterContext/attributeFilter/setAttributeFilterDependentDateFilterHandler.js +4 -3
- package/esm/model/commandHandlers/filterContext/attributeFilter/setAttributeFilterDependentDateFilterHandler.js.map +1 -1
- package/esm/model/commandHandlers/filterContext/attributeFilter/setAttributeFilterParentHandler.d.ts.map +1 -1
- package/esm/model/commandHandlers/filterContext/attributeFilter/setAttributeFilterParentHandler.js +4 -3
- package/esm/model/commandHandlers/filterContext/attributeFilter/setAttributeFilterParentHandler.js.map +1 -1
- package/esm/model/commandHandlers/filterContext/changeFilterContextSelectionHandler.d.ts.map +1 -1
- package/esm/model/commandHandlers/filterContext/changeFilterContextSelectionHandler.js +13 -14
- package/esm/model/commandHandlers/filterContext/changeFilterContextSelectionHandler.js.map +1 -1
- package/esm/model/commandHandlers/filterContext/common.d.ts +3 -3
- package/esm/model/commandHandlers/filterContext/common.d.ts.map +1 -1
- package/esm/model/commandHandlers/filterContext/common.js +6 -6
- package/esm/model/commandHandlers/filterContext/common.js.map +1 -1
- package/esm/model/commandHandlers/filterContext/dateFilter/addDateFilterHandler.js +3 -3
- package/esm/model/commandHandlers/filterContext/dateFilter/addDateFilterHandler.js.map +1 -1
- package/esm/model/commandHandlers/filterContext/dateFilter/changeDateFilterSelectionHandler.d.ts.map +1 -1
- package/esm/model/commandHandlers/filterContext/dateFilter/changeDateFilterSelectionHandler.js +3 -3
- package/esm/model/commandHandlers/filterContext/dateFilter/changeDateFilterSelectionHandler.js.map +1 -1
- package/esm/model/commandHandlers/filterContext/dateFilter/moveDateFilterHandler.d.ts.map +1 -1
- package/esm/model/commandHandlers/filterContext/dateFilter/moveDateFilterHandler.js +4 -3
- package/esm/model/commandHandlers/filterContext/dateFilter/moveDateFilterHandler.js.map +1 -1
- package/esm/model/commandHandlers/filterContext/dateFilter/removeDateFiltersHandler.d.ts.map +1 -1
- package/esm/model/commandHandlers/filterContext/dateFilter/removeDateFiltersHandler.js +5 -6
- package/esm/model/commandHandlers/filterContext/dateFilter/removeDateFiltersHandler.js.map +1 -1
- package/esm/model/commandHandlers/filterContext/filterViewHandler.js +4 -4
- package/esm/model/commandHandlers/filterContext/filterViewHandler.js.map +1 -1
- package/esm/model/commandHandlers/layout/validation/itemValidation.js +2 -2
- package/esm/model/commandHandlers/layout/validation/itemValidation.js.map +1 -1
- package/esm/model/commandHandlers/scheduledEmail/initializeAutomationsHandler.d.ts.map +1 -1
- package/esm/model/commandHandlers/scheduledEmail/initializeAutomationsHandler.js +1 -1
- package/esm/model/commandHandlers/scheduledEmail/initializeAutomationsHandler.js.map +1 -1
- package/esm/model/commandHandlers/tabs/createDashboardTabHandler.d.ts.map +1 -1
- package/esm/model/commandHandlers/tabs/createDashboardTabHandler.js +26 -4
- package/esm/model/commandHandlers/tabs/createDashboardTabHandler.js.map +1 -1
- package/esm/model/commandHandlers/tabs/switchDashboardTabHandler.d.ts.map +1 -1
- package/esm/model/commandHandlers/tabs/switchDashboardTabHandler.js +1 -93
- package/esm/model/commandHandlers/tabs/switchDashboardTabHandler.js.map +1 -1
- package/esm/model/commandHandlers/widgets/common/filterOperations.js +2 -2
- package/esm/model/commandHandlers/widgets/common/filterOperations.js.map +1 -1
- package/esm/model/commandHandlers/widgets/exportImageInsightWidgetHandler.d.ts.map +1 -1
- package/esm/model/commandHandlers/widgets/exportImageInsightWidgetHandler.js +2 -1
- package/esm/model/commandHandlers/widgets/exportImageInsightWidgetHandler.js.map +1 -1
- package/esm/model/commandHandlers/widgets/exportRawInsightWidgetHandler.d.ts.map +1 -1
- package/esm/model/commandHandlers/widgets/exportRawInsightWidgetHandler.js +2 -1
- package/esm/model/commandHandlers/widgets/exportRawInsightWidgetHandler.js.map +1 -1
- package/esm/model/commandHandlers/widgets/exportSlidesInsightWidgetHandler.d.ts.map +1 -1
- package/esm/model/commandHandlers/widgets/exportSlidesInsightWidgetHandler.js +2 -1
- package/esm/model/commandHandlers/widgets/exportSlidesInsightWidgetHandler.js.map +1 -1
- package/esm/model/commandHandlers/widgets/validation/filterValidation.js +2 -2
- package/esm/model/commandHandlers/widgets/validation/filterValidation.js.map +1 -1
- package/esm/model/queryServices/queryWidgetFilters.d.ts.map +1 -1
- package/esm/model/queryServices/queryWidgetFilters.js +1 -1
- package/esm/model/queryServices/queryWidgetFilters.js.map +1 -1
- package/esm/model/store/dashboardStore.d.ts.map +1 -1
- package/esm/model/store/dashboardStore.js +0 -8
- package/esm/model/store/dashboardStore.js.map +1 -1
- package/esm/model/store/index.d.ts +12 -10
- package/esm/model/store/index.d.ts.map +1 -1
- package/esm/model/store/index.js +6 -5
- package/esm/model/store/index.js.map +1 -1
- package/esm/model/store/keyDriverAnalysis/const.d.ts +14 -0
- package/esm/model/store/keyDriverAnalysis/const.d.ts.map +1 -0
- package/esm/model/store/keyDriverAnalysis/const.js +32 -0
- package/esm/model/store/keyDriverAnalysis/const.js.map +1 -0
- package/esm/model/store/layout/layoutSelectors.d.ts.map +1 -1
- package/esm/model/store/layout/layoutSelectors.js +1 -1
- package/esm/model/store/layout/layoutSelectors.js.map +1 -1
- package/esm/model/store/meta/metaSelectors.d.ts +76 -20
- package/esm/model/store/meta/metaSelectors.d.ts.map +1 -1
- package/esm/model/store/meta/metaSelectors.js +234 -140
- package/esm/model/store/meta/metaSelectors.js.map +1 -1
- package/esm/model/store/{attributeFilterConfigs → tabs/attributeFilterConfigs}/attributeFilterConfigsReducers.d.ts +7 -6
- package/esm/model/store/tabs/attributeFilterConfigs/attributeFilterConfigsReducers.d.ts.map +1 -0
- package/esm/model/store/tabs/attributeFilterConfigs/attributeFilterConfigsReducers.js +83 -0
- package/esm/model/store/tabs/attributeFilterConfigs/attributeFilterConfigsReducers.js.map +1 -0
- package/esm/model/store/{attributeFilterConfigs → tabs/attributeFilterConfigs}/attributeFilterConfigsSelectors.d.ts +7 -1
- package/esm/model/store/tabs/attributeFilterConfigs/attributeFilterConfigsSelectors.d.ts.map +1 -0
- package/esm/model/store/{attributeFilterConfigs → tabs/attributeFilterConfigs}/attributeFilterConfigsSelectors.js +24 -4
- package/esm/model/store/tabs/attributeFilterConfigs/attributeFilterConfigsSelectors.js.map +1 -0
- package/esm/model/store/{attributeFilterConfigs/attributeFilterConfigsState.d.ts → tabs/attributeFilterConfigs/attrtibuteFilterConfigsState.d.ts} +1 -1
- package/esm/model/store/tabs/attributeFilterConfigs/attrtibuteFilterConfigsState.d.ts.map +1 -0
- package/esm/model/store/tabs/attributeFilterConfigs/attrtibuteFilterConfigsState.js +5 -0
- package/esm/model/store/tabs/attributeFilterConfigs/attrtibuteFilterConfigsState.js.map +1 -0
- package/esm/model/store/{dateFilterConfig → tabs/dateFilterConfig}/dateFilterConfigReducers.d.ts +3 -3
- package/esm/model/store/tabs/dateFilterConfig/dateFilterConfigReducers.d.ts.map +1 -0
- package/esm/model/store/tabs/dateFilterConfig/dateFilterConfigReducers.js +117 -0
- package/esm/model/store/tabs/dateFilterConfig/dateFilterConfigReducers.js.map +1 -0
- package/esm/model/store/{dateFilterConfig → tabs/dateFilterConfig}/dateFilterConfigSelectors.d.ts +8 -2
- package/esm/model/store/tabs/dateFilterConfig/dateFilterConfigSelectors.d.ts.map +1 -0
- package/esm/model/store/{dateFilterConfig → tabs/dateFilterConfig}/dateFilterConfigSelectors.js +36 -13
- package/esm/model/store/tabs/dateFilterConfig/dateFilterConfigSelectors.js.map +1 -0
- package/esm/model/store/{dateFilterConfig → tabs/dateFilterConfig}/dateFilterConfigState.d.ts +1 -1
- package/esm/model/store/tabs/dateFilterConfig/dateFilterConfigState.d.ts.map +1 -0
- package/esm/model/store/tabs/dateFilterConfig/dateFilterConfigState.js.map +1 -0
- package/esm/model/store/{dateFilterConfigs → tabs/dateFilterConfigs}/dateFilterConfigsReducers.d.ts +7 -7
- package/esm/model/store/tabs/dateFilterConfigs/dateFilterConfigsReducers.d.ts.map +1 -0
- package/esm/model/store/tabs/dateFilterConfigs/dateFilterConfigsReducers.js +105 -0
- package/esm/model/store/tabs/dateFilterConfigs/dateFilterConfigsReducers.js.map +1 -0
- package/esm/model/store/{dateFilterConfigs → tabs/dateFilterConfigs}/dateFilterConfigsSelectors.d.ts +7 -1
- package/esm/model/store/tabs/dateFilterConfigs/dateFilterConfigsSelectors.d.ts.map +1 -0
- package/esm/model/store/{dateFilterConfigs → tabs/dateFilterConfigs}/dateFilterConfigsSelectors.js +24 -4
- package/esm/model/store/tabs/dateFilterConfigs/dateFilterConfigsSelectors.js.map +1 -0
- package/esm/model/store/tabs/dateFilterConfigs/dateFilterConfigsState.d.ts.map +1 -0
- package/esm/model/store/tabs/dateFilterConfigs/dateFilterConfigsState.js +5 -0
- package/esm/model/store/tabs/dateFilterConfigs/dateFilterConfigsState.js.map +1 -0
- package/esm/model/store/{filterContext → tabs/filterContext}/filterContextReducers.d.ts +54 -3
- package/esm/model/store/tabs/filterContext/filterContextReducers.d.ts.map +1 -0
- package/esm/model/store/{filterContext → tabs/filterContext}/filterContextReducers.js +237 -92
- package/esm/model/store/tabs/filterContext/filterContextReducers.js.map +1 -0
- package/esm/model/store/{filterContext → tabs/filterContext}/filterContextSelectors.d.ts +182 -2
- package/esm/model/store/tabs/filterContext/filterContextSelectors.d.ts.map +1 -0
- package/esm/model/store/{filterContext → tabs/filterContext}/filterContextSelectors.js +55 -8
- package/esm/model/store/tabs/filterContext/filterContextSelectors.js.map +1 -0
- package/esm/model/store/tabs/filterContext/filterContextState.d.ts.map +1 -0
- package/esm/model/store/tabs/filterContext/filterContextState.js.map +1 -0
- package/esm/model/store/tabs/filterContext/filterContextUtils.d.ts +35 -0
- package/esm/model/store/tabs/filterContext/filterContextUtils.d.ts.map +1 -0
- package/esm/model/store/{filterContext → tabs/filterContext}/filterContextUtils.js +55 -0
- package/esm/model/store/tabs/filterContext/filterContextUtils.js.map +1 -0
- package/esm/model/store/tabs/index.d.ts +175 -12
- package/esm/model/store/tabs/index.d.ts.map +1 -1
- package/esm/model/store/tabs/index.js +15 -3
- package/esm/model/store/tabs/index.js.map +1 -1
- package/esm/model/store/tabs/tabsReducers.d.ts +22 -6
- package/esm/model/store/tabs/tabsReducers.d.ts.map +1 -1
- package/esm/model/store/tabs/tabsReducers.js +37 -3
- package/esm/model/store/tabs/tabsReducers.js.map +1 -1
- package/esm/model/store/tabs/tabsSelectors.d.ts +31 -6
- package/esm/model/store/tabs/tabsSelectors.d.ts.map +1 -1
- package/esm/model/store/tabs/tabsSelectors.js +6 -0
- package/esm/model/store/tabs/tabsSelectors.js.map +1 -1
- package/esm/model/store/tabs/tabsState.d.ts +30 -3
- package/esm/model/store/tabs/tabsState.d.ts.map +1 -1
- package/esm/model/store/tabs/tabsState.js +13 -0
- package/esm/model/store/tabs/tabsState.js.map +1 -1
- package/esm/model/store/types.d.ts +0 -11
- package/esm/model/store/types.d.ts.map +1 -1
- package/esm/model/store/widgetDrills/widgetDrillSelectors.d.ts.map +1 -1
- package/esm/model/store/widgetDrills/widgetDrillSelectors.js +3 -11
- package/esm/model/store/widgetDrills/widgetDrillSelectors.js.map +1 -1
- package/esm/presentation/drill/utils/kdaUtils.d.ts.map +1 -1
- package/esm/presentation/drill/utils/kdaUtils.js +7 -1
- package/esm/presentation/drill/utils/kdaUtils.js.map +1 -1
- package/esm/sdk-ui-dashboard.d.ts +365 -22
- package/package.json +18 -18
- package/styles/css/main.css +5 -5
- package/esm/model/store/attributeFilterConfigs/attributeFilterConfigsReducers.d.ts.map +0 -1
- package/esm/model/store/attributeFilterConfigs/attributeFilterConfigsReducers.js +0 -43
- package/esm/model/store/attributeFilterConfigs/attributeFilterConfigsReducers.js.map +0 -1
- package/esm/model/store/attributeFilterConfigs/attributeFilterConfigsSelectors.d.ts.map +0 -1
- package/esm/model/store/attributeFilterConfigs/attributeFilterConfigsSelectors.js.map +0 -1
- package/esm/model/store/attributeFilterConfigs/attributeFilterConfigsState.d.ts.map +0 -1
- package/esm/model/store/attributeFilterConfigs/attributeFilterConfigsState.js +0 -4
- package/esm/model/store/attributeFilterConfigs/attributeFilterConfigsState.js.map +0 -1
- package/esm/model/store/attributeFilterConfigs/index.d.ts +0 -10
- package/esm/model/store/attributeFilterConfigs/index.d.ts.map +0 -1
- package/esm/model/store/attributeFilterConfigs/index.js +0 -13
- package/esm/model/store/attributeFilterConfigs/index.js.map +0 -1
- package/esm/model/store/dateFilterConfig/dateFilterConfigReducers.d.ts.map +0 -1
- package/esm/model/store/dateFilterConfig/dateFilterConfigReducers.js +0 -55
- package/esm/model/store/dateFilterConfig/dateFilterConfigReducers.js.map +0 -1
- package/esm/model/store/dateFilterConfig/dateFilterConfigSelectors.d.ts.map +0 -1
- package/esm/model/store/dateFilterConfig/dateFilterConfigSelectors.js.map +0 -1
- package/esm/model/store/dateFilterConfig/dateFilterConfigState.d.ts.map +0 -1
- package/esm/model/store/dateFilterConfig/dateFilterConfigState.js.map +0 -1
- package/esm/model/store/dateFilterConfig/index.d.ts +0 -16
- package/esm/model/store/dateFilterConfig/index.d.ts.map +0 -1
- package/esm/model/store/dateFilterConfig/index.js +0 -13
- package/esm/model/store/dateFilterConfig/index.js.map +0 -1
- package/esm/model/store/dateFilterConfigs/dateFilterConfigsReducers.d.ts.map +0 -1
- package/esm/model/store/dateFilterConfigs/dateFilterConfigsReducers.js +0 -63
- package/esm/model/store/dateFilterConfigs/dateFilterConfigsReducers.js.map +0 -1
- package/esm/model/store/dateFilterConfigs/dateFilterConfigsSelectors.d.ts.map +0 -1
- package/esm/model/store/dateFilterConfigs/dateFilterConfigsSelectors.js.map +0 -1
- package/esm/model/store/dateFilterConfigs/dateFilterConfigsState.d.ts.map +0 -1
- package/esm/model/store/dateFilterConfigs/dateFilterConfigsState.js +0 -4
- package/esm/model/store/dateFilterConfigs/dateFilterConfigsState.js.map +0 -1
- package/esm/model/store/dateFilterConfigs/index.d.ts +0 -10
- package/esm/model/store/dateFilterConfigs/index.d.ts.map +0 -1
- package/esm/model/store/dateFilterConfigs/index.js +0 -13
- package/esm/model/store/dateFilterConfigs/index.js.map +0 -1
- package/esm/model/store/filterContext/filterContextReducers.d.ts.map +0 -1
- package/esm/model/store/filterContext/filterContextReducers.js.map +0 -1
- package/esm/model/store/filterContext/filterContextSelectors.d.ts.map +0 -1
- package/esm/model/store/filterContext/filterContextSelectors.js.map +0 -1
- package/esm/model/store/filterContext/filterContextState.d.ts.map +0 -1
- package/esm/model/store/filterContext/filterContextState.js.map +0 -1
- package/esm/model/store/filterContext/filterContextUtils.d.ts +0 -14
- package/esm/model/store/filterContext/filterContextUtils.d.ts.map +0 -1
- package/esm/model/store/filterContext/filterContextUtils.js.map +0 -1
- package/esm/model/store/filterContext/index.d.ts +0 -36
- package/esm/model/store/filterContext/index.d.ts.map +0 -1
- package/esm/model/store/filterContext/index.js +0 -13
- package/esm/model/store/filterContext/index.js.map +0 -1
- /package/esm/model/store/{dateFilterConfig → tabs/dateFilterConfig}/dateFilterConfigState.js +0 -0
- /package/esm/model/store/{dateFilterConfigs → tabs/dateFilterConfigs}/dateFilterConfigsState.d.ts +0 -0
- /package/esm/model/store/{filterContext → tabs/filterContext}/filterContextState.d.ts +0 -0
- /package/esm/model/store/{filterContext → tabs/filterContext}/filterContextState.js +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { IAccessControlAware, IDashboard, IDashboardDateFilterConfig, IDashboardDefinition, IDashboardWidget, IFilterContext, IFilterContextDefinition, ITempFilterContext, IdentifierRef, ObjRef, ShareStatus, UriRef } from "@gooddata/sdk-model";
|
|
1
|
+
import { IAccessControlAware, IDashboard, IDashboardAttributeFilterConfig, IDashboardDateFilterConfig, IDashboardDateFilterConfigItem, IDashboardDefinition, IDashboardTab, IDashboardWidget, IFilterContext, IFilterContextDefinition, ITempFilterContext, IdentifierRef, ObjRef, ShareStatus, UriRef } from "@gooddata/sdk-model";
|
|
2
2
|
import { DashboardDescriptor } from "./metaState.js";
|
|
3
|
-
import { DashboardSelector } from "../types.js";
|
|
3
|
+
import { DashboardSelector, DashboardState } from "../types.js";
|
|
4
4
|
/**
|
|
5
5
|
* Selects dashboard's descriptor.
|
|
6
6
|
*
|
|
@@ -17,27 +17,89 @@ export declare const selectDashboardDescriptor: DashboardSelector<DashboardDescr
|
|
|
17
17
|
* @internal
|
|
18
18
|
*/
|
|
19
19
|
export declare const selectPersistedDashboard: DashboardSelector<IDashboard | undefined>;
|
|
20
|
+
export declare const selectPersistedDashboardTabs: ((state: DashboardState) => IDashboardTab<IDashboardWidget>[]) & {
|
|
21
|
+
clearCache: () => void;
|
|
22
|
+
resultsCount: () => number;
|
|
23
|
+
resetResultsCount: () => void;
|
|
24
|
+
} & {
|
|
25
|
+
resultFunc: (resultFuncArgs_0: import("./metaState.js").DashboardMetaState, resultFuncArgs_1: boolean) => IDashboardTab<IDashboardWidget>[];
|
|
26
|
+
memoizedResultFunc: ((resultFuncArgs_0: import("./metaState.js").DashboardMetaState, resultFuncArgs_1: boolean) => IDashboardTab<IDashboardWidget>[]) & {
|
|
27
|
+
clearCache: () => void;
|
|
28
|
+
resultsCount: () => number;
|
|
29
|
+
resetResultsCount: () => void;
|
|
30
|
+
};
|
|
31
|
+
lastResult: () => IDashboardTab<IDashboardWidget>[];
|
|
32
|
+
dependencies: [((state: DashboardState) => import("./metaState.js").DashboardMetaState) & {
|
|
33
|
+
clearCache: () => void;
|
|
34
|
+
resultsCount: () => number;
|
|
35
|
+
resetResultsCount: () => void;
|
|
36
|
+
} & {
|
|
37
|
+
resultFunc: (resultFuncArgs_0: DashboardState) => import("./metaState.js").DashboardMetaState;
|
|
38
|
+
memoizedResultFunc: ((resultFuncArgs_0: DashboardState) => import("./metaState.js").DashboardMetaState) & {
|
|
39
|
+
clearCache: () => void;
|
|
40
|
+
resultsCount: () => number;
|
|
41
|
+
resetResultsCount: () => void;
|
|
42
|
+
};
|
|
43
|
+
lastResult: () => import("./metaState.js").DashboardMetaState;
|
|
44
|
+
dependencies: [(state: DashboardState) => DashboardState];
|
|
45
|
+
recomputations: () => number;
|
|
46
|
+
resetRecomputations: () => void;
|
|
47
|
+
dependencyRecomputations: () => number;
|
|
48
|
+
resetDependencyRecomputations: () => void;
|
|
49
|
+
} & {
|
|
50
|
+
argsMemoize: typeof import("@reduxjs/toolkit").weakMapMemoize;
|
|
51
|
+
memoize: typeof import("@reduxjs/toolkit").weakMapMemoize;
|
|
52
|
+
}, DashboardSelector<boolean>];
|
|
53
|
+
recomputations: () => number;
|
|
54
|
+
resetRecomputations: () => void;
|
|
55
|
+
dependencyRecomputations: () => number;
|
|
56
|
+
resetDependencyRecomputations: () => void;
|
|
57
|
+
} & {
|
|
58
|
+
argsMemoize: typeof import("@reduxjs/toolkit").weakMapMemoize;
|
|
59
|
+
memoize: typeof import("@reduxjs/toolkit").weakMapMemoize;
|
|
60
|
+
};
|
|
61
|
+
/**
|
|
62
|
+
* Returns raw persisted filter contexts keyed by tab identifier.
|
|
63
|
+
*
|
|
64
|
+
* @internal
|
|
65
|
+
*/
|
|
66
|
+
export declare const selectPersistedDashboardFilterContextsByTab: DashboardSelector<Record<string, IFilterContext | ITempFilterContext | undefined>>;
|
|
20
67
|
/**
|
|
21
|
-
*
|
|
22
|
-
* was used to initialize the original filters of the dashboard component during the initial load of the
|
|
23
|
-
* dashboard.
|
|
68
|
+
* Returns persisted filter context definitions keyed by tab identifier.
|
|
24
69
|
*
|
|
25
|
-
*
|
|
26
|
-
|
|
70
|
+
* @internal
|
|
71
|
+
*/
|
|
72
|
+
export declare const selectPersistedDashboardFilterContextDefinitionsByTab: DashboardSelector<Record<string, IFilterContextDefinition | undefined>>;
|
|
73
|
+
/**
|
|
74
|
+
* Returns persisted attribute filter configs keyed by tab identifier.
|
|
75
|
+
*
|
|
76
|
+
* @internal
|
|
77
|
+
*/
|
|
78
|
+
export declare const selectPersistedDashboardAttributeFilterConfigsByTab: DashboardSelector<Record<string, IDashboardAttributeFilterConfig[]>>;
|
|
79
|
+
/**
|
|
80
|
+
* Returns persisted date filter config overrides keyed by tab identifier.
|
|
81
|
+
*
|
|
82
|
+
* @internal
|
|
83
|
+
*/
|
|
84
|
+
export declare const selectPersistedDashboardDateFilterConfigByTab: DashboardSelector<Record<string, IDashboardDateFilterConfig | undefined>>;
|
|
85
|
+
/**
|
|
86
|
+
* Returns persisted date filter configs keyed by tab identifier.
|
|
87
|
+
*
|
|
88
|
+
* @internal
|
|
89
|
+
*/
|
|
90
|
+
export declare const selectPersistedDashboardDateFilterConfigsByTab: DashboardSelector<Record<string, IDashboardDateFilterConfigItem[]>>;
|
|
91
|
+
/**
|
|
92
|
+
* Selects persisted filter context for the active tab (legacy selector).
|
|
27
93
|
*/
|
|
28
94
|
export declare const selectPersistedDashboardFilterContext: DashboardSelector<IFilterContext | ITempFilterContext | undefined>;
|
|
29
95
|
/**
|
|
96
|
+
* Selects persisted date filter config for the active tab (legacy selector).
|
|
97
|
+
*
|
|
30
98
|
* @internal
|
|
31
99
|
*/
|
|
32
100
|
export declare const selectPersistedDashboardFilterContextDateFilterConfig: DashboardSelector<IDashboardDateFilterConfig | undefined>;
|
|
33
101
|
/**
|
|
34
|
-
* Selects persisted
|
|
35
|
-
* was used to initialize the original filters of the dashboard component during the initial load of the
|
|
36
|
-
* dashboard but removes ref, uri and identifier, effectively creating a clone of the stored value
|
|
37
|
-
* that can be used independently.
|
|
38
|
-
*
|
|
39
|
-
* Note that this may be undefined when the dashboard component works with a dashboard that has not yet
|
|
40
|
-
* been persisted (typically newly created dashboard being edited).
|
|
102
|
+
* Selects persisted filter context definition for the active tab (legacy selector).
|
|
41
103
|
*/
|
|
42
104
|
export declare const selectPersistedDashboardFilterContextAsFilterContextDefinition: DashboardSelector<IFilterContextDefinition | undefined>;
|
|
43
105
|
/**
|
|
@@ -258,12 +320,6 @@ export declare const selectEvaluationFrequencyChanged: DashboardSelector<boolean
|
|
|
258
320
|
* @internal
|
|
259
321
|
*/
|
|
260
322
|
export declare const selectIsSectionHeadersDateDataSetChanged: DashboardSelector<boolean>;
|
|
261
|
-
/**
|
|
262
|
-
* Selects a boolean indication if the dashboard has any changes to the tabs compared to the persisted version (if any)
|
|
263
|
-
*
|
|
264
|
-
* @internal
|
|
265
|
-
*/
|
|
266
|
-
export declare const selectIsTabsChanged: DashboardSelector<boolean>;
|
|
267
323
|
/**
|
|
268
324
|
* Selects a boolean indication if he dashboard has any changes to the title compared to the persisted version (if any)
|
|
269
325
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metaSelectors.d.ts","sourceRoot":"","sources":["../../../../src/model/store/meta/metaSelectors.ts"],"names":[],"mappings":"AAOA,OAAO,
|
|
1
|
+
{"version":3,"file":"metaSelectors.d.ts","sourceRoot":"","sources":["../../../../src/model/store/meta/metaSelectors.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,13 +4,13 @@ import { isEqual } from "lodash-es";
|
|
|
4
4
|
import { invariant } from "ts-invariant";
|
|
5
5
|
import { isDashboardLayoutEmpty } from "@gooddata/sdk-backend-spi";
|
|
6
6
|
import { idRef, isDashboardAttributeFilter, isDashboardCommonDateFilter, isDashboardDateFilterWithDimension, isTempFilterContext, uriRef, } from "@gooddata/sdk-model";
|
|
7
|
-
import { selectAttributeFilterConfigsOverrides } from "../attributeFilterConfigs/attributeFilterConfigsSelectors.js";
|
|
8
7
|
import { selectEnableDashboardTabs } from "../config/configSelectors.js";
|
|
9
|
-
import { selectDateFilterConfigOverrides } from "../dateFilterConfig/dateFilterConfigSelectors.js";
|
|
10
|
-
import { selectDateFilterConfigsOverrides } from "../dateFilterConfigs/dateFilterConfigsSelectors.js";
|
|
11
|
-
import { selectFilterContextAttributeFilters, selectFilterContextDateFilter, selectFilterContextDefinition, selectFilterContextDraggableFilters, selectFilterContextIdentity, } from "../filterContext/filterContextSelectors.js";
|
|
12
8
|
import { selectBasicLayout } from "../layout/layoutSelectors.js";
|
|
13
|
-
import {
|
|
9
|
+
import { selectAttributeFilterConfigsOverridesByTab } from "../tabs/attributeFilterConfigs/attributeFilterConfigsSelectors.js";
|
|
10
|
+
import { selectDateFilterConfigOverrides, selectDateFilterConfigOverridesByTab, } from "../tabs/dateFilterConfig/dateFilterConfigSelectors.js";
|
|
11
|
+
import { selectDateFilterConfigsOverridesByTab } from "../tabs/dateFilterConfigs/dateFilterConfigsSelectors.js";
|
|
12
|
+
import { selectFilterContextDefinition, selectFilterContextDefinitionsByTab, selectFilterContextIdentity, } from "../tabs/filterContext/filterContextSelectors.js";
|
|
13
|
+
import { DEFAULT_TAB_ID, selectActiveTabId, selectTabs } from "../tabs/index.js";
|
|
14
14
|
const selectSelf = createSelector((state) => state, (state) => state.meta);
|
|
15
15
|
/**
|
|
16
16
|
* Selects dashboard's descriptor.
|
|
@@ -34,61 +34,184 @@ export const selectPersistedDashboard = createSelector(selectSelf, (state) => {
|
|
|
34
34
|
return state.persistedDashboard ?? undefined;
|
|
35
35
|
});
|
|
36
36
|
/**
|
|
37
|
-
*
|
|
38
|
-
* was used to initialize the original filters of the dashboard component during the initial load of the
|
|
39
|
-
* dashboard.
|
|
40
|
-
*
|
|
41
|
-
* Note that this may be undefined when the dashboard component works with a dashboard that has not yet
|
|
42
|
-
* been persisted (typically newly created dashboard being edited).
|
|
37
|
+
* Snapshot of persisted dashboard tab data relevant for dirty checking.
|
|
43
38
|
*/
|
|
44
|
-
|
|
39
|
+
const toFilterContextDefinition = (filterContext) => {
|
|
40
|
+
if (!filterContext) {
|
|
41
|
+
return undefined;
|
|
42
|
+
}
|
|
43
|
+
if (isTempFilterContext(filterContext)) {
|
|
44
|
+
const { ref: _, uri: __, ...definition } = filterContext;
|
|
45
|
+
return {
|
|
46
|
+
...definition,
|
|
47
|
+
title: "filterContext",
|
|
48
|
+
description: "",
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
const { identifier: _, ref: __, uri: ___, ...definition } = filterContext;
|
|
52
|
+
return definition;
|
|
53
|
+
};
|
|
54
|
+
export const selectPersistedDashboardTabs = createSelector(selectSelf, selectEnableDashboardTabs, (state, enableDashboardTabs) => {
|
|
45
55
|
const persistedDashboard = state.persistedDashboard;
|
|
46
56
|
if (!persistedDashboard) {
|
|
47
|
-
return
|
|
57
|
+
return [];
|
|
48
58
|
}
|
|
49
|
-
// If tabs are enabled and dashboard has tabs, get filter context from the active tab
|
|
50
59
|
if (enableDashboardTabs && persistedDashboard.tabs && persistedDashboard.tabs.length > 0) {
|
|
51
|
-
|
|
52
|
-
const activeTab = persistedActiveTabId
|
|
53
|
-
? persistedDashboard.tabs.find((tab) => tab.identifier === persistedActiveTabId)
|
|
54
|
-
: undefined;
|
|
55
|
-
const effectiveTab = activeTab ?? persistedDashboard.tabs[0];
|
|
56
|
-
return effectiveTab.filterContext ?? undefined;
|
|
60
|
+
return persistedDashboard.tabs;
|
|
57
61
|
}
|
|
58
|
-
|
|
59
|
-
|
|
62
|
+
return [
|
|
63
|
+
{
|
|
64
|
+
identifier: DEFAULT_TAB_ID,
|
|
65
|
+
title: "",
|
|
66
|
+
filterContext: persistedDashboard.filterContext,
|
|
67
|
+
attributeFilterConfigs: persistedDashboard.attributeFilterConfigs,
|
|
68
|
+
dateFilterConfig: persistedDashboard.dateFilterConfig,
|
|
69
|
+
dateFilterConfigs: persistedDashboard.dateFilterConfigs,
|
|
70
|
+
},
|
|
71
|
+
];
|
|
72
|
+
});
|
|
73
|
+
const selectPersistedDashboardActiveTabId = createSelector(selectSelf, selectPersistedDashboardTabs, selectEnableDashboardTabs, (state, tabs, enableDashboardTabs) => {
|
|
74
|
+
const persistedDashboard = state.persistedDashboard;
|
|
75
|
+
if (!persistedDashboard) {
|
|
76
|
+
return undefined;
|
|
77
|
+
}
|
|
78
|
+
if (enableDashboardTabs) {
|
|
79
|
+
const persistedActiveTabId = persistedDashboard.activeTabId ?? tabs[0]?.identifier;
|
|
80
|
+
return persistedActiveTabId ?? DEFAULT_TAB_ID;
|
|
81
|
+
}
|
|
82
|
+
return DEFAULT_TAB_ID;
|
|
60
83
|
});
|
|
61
84
|
/**
|
|
85
|
+
* Returns raw persisted filter contexts keyed by tab identifier.
|
|
86
|
+
*
|
|
62
87
|
* @internal
|
|
63
88
|
*/
|
|
64
|
-
export const
|
|
65
|
-
return
|
|
89
|
+
export const selectPersistedDashboardFilterContextsByTab = createSelector(selectPersistedDashboardTabs, (tabSnapshots) => {
|
|
90
|
+
return tabSnapshots.reduce((acc, snapshot) => {
|
|
91
|
+
acc[snapshot.identifier] = snapshot.filterContext;
|
|
92
|
+
return acc;
|
|
93
|
+
}, {});
|
|
66
94
|
});
|
|
67
95
|
/**
|
|
68
|
-
*
|
|
69
|
-
* was used to initialize the original filters of the dashboard component during the initial load of the
|
|
70
|
-
* dashboard but removes ref, uri and identifier, effectively creating a clone of the stored value
|
|
71
|
-
* that can be used independently.
|
|
96
|
+
* Returns persisted filter context definitions keyed by tab identifier.
|
|
72
97
|
*
|
|
73
|
-
*
|
|
74
|
-
* been persisted (typically newly created dashboard being edited).
|
|
98
|
+
* @internal
|
|
75
99
|
*/
|
|
76
|
-
export const
|
|
77
|
-
|
|
100
|
+
export const selectPersistedDashboardFilterContextDefinitionsByTab = createSelector(selectPersistedDashboardTabs, (tabSnapshots) => {
|
|
101
|
+
return tabSnapshots.reduce((acc, snapshot) => {
|
|
102
|
+
acc[snapshot.identifier] = toFilterContextDefinition(snapshot.filterContext);
|
|
103
|
+
return acc;
|
|
104
|
+
}, {});
|
|
105
|
+
});
|
|
106
|
+
/**
|
|
107
|
+
* Returns persisted attribute filter configs keyed by tab identifier.
|
|
108
|
+
*
|
|
109
|
+
* @internal
|
|
110
|
+
*/
|
|
111
|
+
export const selectPersistedDashboardAttributeFilterConfigsByTab = createSelector(selectPersistedDashboardTabs, (tabSnapshots) => {
|
|
112
|
+
return tabSnapshots.reduce((acc, snapshot) => {
|
|
113
|
+
acc[snapshot.identifier] = snapshot.attributeFilterConfigs ?? [];
|
|
114
|
+
return acc;
|
|
115
|
+
}, {});
|
|
116
|
+
});
|
|
117
|
+
/**
|
|
118
|
+
* Returns persisted date filter config overrides keyed by tab identifier.
|
|
119
|
+
*
|
|
120
|
+
* @internal
|
|
121
|
+
*/
|
|
122
|
+
export const selectPersistedDashboardDateFilterConfigByTab = createSelector(selectPersistedDashboardTabs, (tabSnapshots) => {
|
|
123
|
+
return tabSnapshots.reduce((acc, snapshot) => {
|
|
124
|
+
acc[snapshot.identifier] = snapshot.dateFilterConfig ?? undefined;
|
|
125
|
+
return acc;
|
|
126
|
+
}, {});
|
|
127
|
+
});
|
|
128
|
+
/**
|
|
129
|
+
* Returns persisted date filter configs keyed by tab identifier.
|
|
130
|
+
*
|
|
131
|
+
* @internal
|
|
132
|
+
*/
|
|
133
|
+
export const selectPersistedDashboardDateFilterConfigsByTab = createSelector(selectPersistedDashboardTabs, (tabSnapshots) => {
|
|
134
|
+
return tabSnapshots.reduce((acc, snapshot) => {
|
|
135
|
+
acc[snapshot.identifier] = snapshot.dateFilterConfigs ?? [];
|
|
136
|
+
return acc;
|
|
137
|
+
}, {});
|
|
138
|
+
});
|
|
139
|
+
const selectPersistedDashboardFilterContextFiltersByTab = createSelector(selectPersistedDashboardFilterContextDefinitionsByTab, (definitionsByTab) => {
|
|
140
|
+
return Object.entries(definitionsByTab).reduce((acc, [identifier, definition]) => {
|
|
141
|
+
acc[identifier] = definition?.filters ?? [];
|
|
142
|
+
return acc;
|
|
143
|
+
}, {});
|
|
144
|
+
});
|
|
145
|
+
const selectWorkingFilterContextFiltersByTab = createSelector(selectFilterContextDefinitionsByTab, (definitionsByTab) => {
|
|
146
|
+
return Object.entries(definitionsByTab).reduce((acc, [identifier, definition]) => {
|
|
147
|
+
acc[identifier] = definition?.filters ?? [];
|
|
148
|
+
return acc;
|
|
149
|
+
}, {});
|
|
150
|
+
});
|
|
151
|
+
const collectTabIdentifiers = (...maps) => {
|
|
152
|
+
const identifiers = new Set();
|
|
153
|
+
maps.forEach((map) => {
|
|
154
|
+
Object.keys(map ?? {}).forEach((identifier) => identifiers.add(identifier));
|
|
155
|
+
});
|
|
156
|
+
return Array.from(identifiers);
|
|
157
|
+
};
|
|
158
|
+
const selectPersistedDashboardAttributeFiltersByTab = createSelector(selectPersistedDashboardFilterContextFiltersByTab, (filtersByTab) => {
|
|
159
|
+
return Object.entries(filtersByTab).reduce((acc, [identifier, filters]) => {
|
|
160
|
+
acc[identifier] = filters.filter(isDashboardAttributeFilter);
|
|
161
|
+
return acc;
|
|
162
|
+
}, {});
|
|
163
|
+
});
|
|
164
|
+
const selectWorkingAttributeFiltersByTab = createSelector(selectWorkingFilterContextFiltersByTab, (filtersByTab) => {
|
|
165
|
+
return Object.entries(filtersByTab).reduce((acc, [identifier, filters]) => {
|
|
166
|
+
acc[identifier] = filters.filter(isDashboardAttributeFilter);
|
|
167
|
+
return acc;
|
|
168
|
+
}, {});
|
|
169
|
+
});
|
|
170
|
+
const selectPersistedDashboardDraggableFiltersByTab = createSelector(selectPersistedDashboardFilterContextFiltersByTab, (filtersByTab) => {
|
|
171
|
+
return Object.entries(filtersByTab).reduce((acc, [identifier, filters]) => {
|
|
172
|
+
acc[identifier] = filters.filter((filter) => isDashboardDateFilterWithDimension(filter) || isDashboardAttributeFilter(filter));
|
|
173
|
+
return acc;
|
|
174
|
+
}, {});
|
|
175
|
+
});
|
|
176
|
+
const selectWorkingDraggableFiltersByTab = createSelector(selectWorkingFilterContextFiltersByTab, (filtersByTab) => {
|
|
177
|
+
return Object.entries(filtersByTab).reduce((acc, [identifier, filters]) => {
|
|
178
|
+
acc[identifier] = filters.filter((filter) => isDashboardDateFilterWithDimension(filter) || isDashboardAttributeFilter(filter));
|
|
179
|
+
return acc;
|
|
180
|
+
}, {});
|
|
181
|
+
});
|
|
182
|
+
/**
|
|
183
|
+
* Selects persisted filter context for the active tab (legacy selector).
|
|
184
|
+
*/
|
|
185
|
+
export const selectPersistedDashboardFilterContext = createSelector(selectPersistedDashboardFilterContextsByTab, selectPersistedDashboardActiveTabId, (filterContextsByTab, activeTabId) => {
|
|
186
|
+
if (!filterContextsByTab || Object.keys(filterContextsByTab).length === 0) {
|
|
78
187
|
return undefined;
|
|
79
188
|
}
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
189
|
+
const resolvedActiveTabId = activeTabId ?? Object.keys(filterContextsByTab)[0];
|
|
190
|
+
return (filterContextsByTab[resolvedActiveTabId] ??
|
|
191
|
+
filterContextsByTab[Object.keys(filterContextsByTab)[0]]);
|
|
192
|
+
});
|
|
193
|
+
/**
|
|
194
|
+
* Selects persisted date filter config for the active tab (legacy selector).
|
|
195
|
+
*
|
|
196
|
+
* @internal
|
|
197
|
+
*/
|
|
198
|
+
export const selectPersistedDashboardFilterContextDateFilterConfig = createSelector(selectPersistedDashboardDateFilterConfigByTab, selectPersistedDashboardActiveTabId, (dateFilterConfigByTab, activeTabId) => {
|
|
199
|
+
if (!dateFilterConfigByTab || Object.keys(dateFilterConfigByTab).length === 0) {
|
|
200
|
+
return undefined;
|
|
87
201
|
}
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
202
|
+
const resolvedActiveTabId = activeTabId ?? Object.keys(dateFilterConfigByTab)[0];
|
|
203
|
+
return (dateFilterConfigByTab[resolvedActiveTabId] ??
|
|
204
|
+
dateFilterConfigByTab[Object.keys(dateFilterConfigByTab)[0]]);
|
|
205
|
+
});
|
|
206
|
+
/**
|
|
207
|
+
* Selects persisted filter context definition for the active tab (legacy selector).
|
|
208
|
+
*/
|
|
209
|
+
export const selectPersistedDashboardFilterContextAsFilterContextDefinition = createSelector(selectPersistedDashboardFilterContextDefinitionsByTab, selectPersistedDashboardActiveTabId, (definitionsByTab, activeTabId) => {
|
|
210
|
+
if (!definitionsByTab || Object.keys(definitionsByTab).length === 0) {
|
|
211
|
+
return undefined;
|
|
91
212
|
}
|
|
213
|
+
const resolvedActiveTabId = activeTabId ?? Object.keys(definitionsByTab)[0];
|
|
214
|
+
return definitionsByTab[resolvedActiveTabId] ?? definitionsByTab[Object.keys(definitionsByTab)[0]];
|
|
92
215
|
});
|
|
93
216
|
/**
|
|
94
217
|
* Selects ref of the persisted dashboard object that backs and is rendered-by the dashboard component.
|
|
@@ -277,46 +400,6 @@ export const selectEvaluationFrequency = createSelector(selectDashboardDescripto
|
|
|
277
400
|
//
|
|
278
401
|
//
|
|
279
402
|
//
|
|
280
|
-
/**
|
|
281
|
-
* Selects persisted FilterContextItems - that is the FilterContextItems that were used to initialize
|
|
282
|
-
* the original filters of the dashboard component during the initial load of the dashboard.
|
|
283
|
-
*
|
|
284
|
-
* Note that this may be undefined when the dashboard component works with a dashboard that has not yet
|
|
285
|
-
* been persisted (typically newly created dashboard being edited).
|
|
286
|
-
*/
|
|
287
|
-
const selectPersistedDashboardFilterContextFilters = createSelector(selectPersistedDashboardFilterContext, (persistedFilterContext) => {
|
|
288
|
-
return persistedFilterContext?.filters;
|
|
289
|
-
});
|
|
290
|
-
/**
|
|
291
|
-
* Selects persisted IDashboardDateFilter - that is the IDashboardDateFilter that were used to initialize
|
|
292
|
-
* the original filters of the dashboard component during the initial load of the dashboard.
|
|
293
|
-
*
|
|
294
|
-
* Note that this may be undefined when the dashboard component works with a dashboard that has not yet
|
|
295
|
-
* been persisted (typically newly created dashboard being edited).
|
|
296
|
-
*/
|
|
297
|
-
const selectPersistedDashboardFilterContextDateFilter = createSelector(selectPersistedDashboardFilterContextFilters, (persistedFilters) => {
|
|
298
|
-
return (persistedFilters ?? []).find(isDashboardCommonDateFilter);
|
|
299
|
-
});
|
|
300
|
-
/**
|
|
301
|
-
* Selects persisted IDashboardAttributeFilters - that is the IDashboardAttributeFilters that were used to initialize
|
|
302
|
-
* the original filters of the dashboard component during the initial load of the dashboard.
|
|
303
|
-
*
|
|
304
|
-
* Note that this may be undefined when the dashboard component works with a dashboard that has not yet
|
|
305
|
-
* been persisted (typically newly created dashboard being edited).
|
|
306
|
-
*/
|
|
307
|
-
const selectPersistedDashboardFilterContextAttributeFilters = createSelector(selectPersistedDashboardFilterContextFilters, (persistedFilters) => {
|
|
308
|
-
return (persistedFilters ?? []).filter(isDashboardAttributeFilter);
|
|
309
|
-
});
|
|
310
|
-
/**
|
|
311
|
-
* Selects persisted draggable filters (date filters with dimension and attribute filters) - that is the filters that were used to initialize
|
|
312
|
-
* the original filters of the dashboard component during the initial load of the dashboard.
|
|
313
|
-
*
|
|
314
|
-
* Note that this may be undefined when the dashboard component works with a dashboard that has not yet
|
|
315
|
-
* been persisted (typically newly created dashboard being edited).
|
|
316
|
-
*/
|
|
317
|
-
const selectPersistedDashboardFilterContextDraggableFilters = createSelector(selectPersistedDashboardFilterContextFilters, (persistedFilters) => {
|
|
318
|
-
return (persistedFilters ?? []).filter((f) => isDashboardDateFilterWithDimension(f) || isDashboardAttributeFilter(f));
|
|
319
|
-
});
|
|
320
403
|
/**
|
|
321
404
|
* Selects persisted title - that is the title that was used to initialize the rest
|
|
322
405
|
* of the dashboard state of the dashboard component during the initial load of the dashboard.
|
|
@@ -387,32 +470,17 @@ const selectPersistedDashboardEvaluationFrequency = createSelector(selectSelf, (
|
|
|
387
470
|
const selectPersistedDashboardLayout = createSelector(selectSelf, (state) => {
|
|
388
471
|
return state.persistedDashboard?.layout;
|
|
389
472
|
});
|
|
390
|
-
/**
|
|
391
|
-
* Selects persisted attribute filter configs - that is the attribute filter configs array object that was used to initialize the rest
|
|
392
|
-
* of the dashboard state of the dashboard component during the initial load of the dashboard.
|
|
393
|
-
*
|
|
394
|
-
* Note that this may be undefined when the dashboard component works with a dashboard that has not yet
|
|
395
|
-
* been persisted (typically newly created dashboard being edited).
|
|
396
|
-
*/
|
|
397
|
-
const selectPersistedDashboardAttributeFilterConfigs = createSelector(selectSelf, (state) => {
|
|
398
|
-
return state.persistedDashboard?.attributeFilterConfigs || [];
|
|
399
|
-
});
|
|
400
473
|
/**
|
|
401
474
|
* Selects a boolean indication if he dashboard has any changes to the dashboard filter compared to the persisted version (if any)
|
|
402
475
|
*
|
|
403
476
|
*/
|
|
404
|
-
export const selectIsAttributeFilterConfigsChanged = createSelector(
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
* Note that this may be undefined when the dashboard component works with a dashboard that has not yet
|
|
412
|
-
* been persisted (typically newly created dashboard being edited).
|
|
413
|
-
*/
|
|
414
|
-
const selectPersistedDashboardDateFilterConfigs = createSelector(selectSelf, (state) => {
|
|
415
|
-
return state.persistedDashboard?.dateFilterConfigs || [];
|
|
477
|
+
export const selectIsAttributeFilterConfigsChanged = createSelector(selectPersistedDashboardAttributeFilterConfigsByTab, selectAttributeFilterConfigsOverridesByTab, (persistedAttributeFilterConfigsByTab, currentAttributeFilterConfigsByTab) => {
|
|
478
|
+
const tabIdentifiers = collectTabIdentifiers(persistedAttributeFilterConfigsByTab, currentAttributeFilterConfigsByTab);
|
|
479
|
+
return tabIdentifiers.some((tabId) => {
|
|
480
|
+
const persistedConfigs = persistedAttributeFilterConfigsByTab[tabId] ?? [];
|
|
481
|
+
const currentConfigs = currentAttributeFilterConfigsByTab[tabId] ?? [];
|
|
482
|
+
return !isEqual(persistedConfigs, currentConfigs);
|
|
483
|
+
});
|
|
416
484
|
});
|
|
417
485
|
/**
|
|
418
486
|
* Selects the date dataset to use for filtering metrics in section header rich text.
|
|
@@ -429,59 +497,66 @@ export const selectSectionHeadersDateDataSet = createSelector(selectDashboardDes
|
|
|
429
497
|
const selectPersistedDashboardSectionHeadersDateDataSet = createSelector(selectSelf, (state) => {
|
|
430
498
|
return state.persistedDashboard?.sectionHeadersDateDataSet;
|
|
431
499
|
});
|
|
432
|
-
/**
|
|
433
|
-
* Selects persisted tabs - that is the tabs array that was used to initialize the rest
|
|
434
|
-
* of the dashboard state of the dashboard component during the initial load of the dashboard.
|
|
435
|
-
*
|
|
436
|
-
* Note that this may be undefined when the dashboard component works with a dashboard that has not yet
|
|
437
|
-
* been persisted (typically newly created dashboard being edited).
|
|
438
|
-
*/
|
|
439
|
-
const selectPersistedDashboardTabs = createSelector(selectSelf, (state) => {
|
|
440
|
-
return state.persistedDashboard?.tabs;
|
|
441
|
-
});
|
|
442
|
-
/**
|
|
443
|
-
* Selects persisted active tab ID - that is the active tab ID that was used to initialize the rest
|
|
444
|
-
* of the dashboard state of the dashboard component during the initial load of the dashboard.
|
|
445
|
-
*
|
|
446
|
-
* Note that this may be undefined when the dashboard component works with a dashboard that has not yet
|
|
447
|
-
* been persisted (typically newly created dashboard being edited).
|
|
448
|
-
*/
|
|
449
|
-
const selectPersistedDashboardActiveTabId = createSelector(selectSelf, (state) => {
|
|
450
|
-
return state.persistedDashboard?.activeTabId;
|
|
451
|
-
});
|
|
452
500
|
/**
|
|
453
501
|
* Selects a boolean indication if the dashboard has any changes to the dashboard date filter configs compared to the persisted version (if any)
|
|
454
502
|
*
|
|
455
503
|
*/
|
|
456
|
-
export const selectIsDateFilterConfigsChanged = createSelector(
|
|
457
|
-
|
|
504
|
+
export const selectIsDateFilterConfigsChanged = createSelector(selectPersistedDashboardDateFilterConfigsByTab, selectDateFilterConfigsOverridesByTab, (persistedDateFilterConfigsByTab, currentDateFilterConfigsByTab) => {
|
|
505
|
+
const tabIdentifiers = collectTabIdentifiers(persistedDateFilterConfigsByTab, currentDateFilterConfigsByTab);
|
|
506
|
+
return tabIdentifiers.some((tabId) => {
|
|
507
|
+
const persistedConfigs = persistedDateFilterConfigsByTab[tabId] ?? [];
|
|
508
|
+
const currentConfigs = currentDateFilterConfigsByTab[tabId] ?? [];
|
|
509
|
+
return !isEqual(persistedConfigs, currentConfigs);
|
|
510
|
+
});
|
|
458
511
|
});
|
|
459
512
|
/**
|
|
460
513
|
* Selects a boolean indication if the dashboard has any changes to the dashboard filter compared to the persisted version (if any)
|
|
461
514
|
*
|
|
462
515
|
* @internal
|
|
463
516
|
*/
|
|
464
|
-
export const selectIsDateFilterChanged = createSelector(
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
517
|
+
export const selectIsDateFilterChanged = createSelector(selectPersistedDashboardFilterContextFiltersByTab, selectWorkingFilterContextFiltersByTab, (persistedFiltersByTab, workingFiltersByTab) => {
|
|
518
|
+
const tabIdentifiers = collectTabIdentifiers(persistedFiltersByTab, workingFiltersByTab);
|
|
519
|
+
return tabIdentifiers.some((tabId) => {
|
|
520
|
+
const persistedFilters = persistedFiltersByTab[tabId] ?? [];
|
|
521
|
+
const workingFilters = workingFiltersByTab[tabId] ?? [];
|
|
522
|
+
const persistedDateFilter = persistedFilters.find(isDashboardCommonDateFilter);
|
|
523
|
+
const workingDateFilter = workingFilters.find(isDashboardCommonDateFilter);
|
|
524
|
+
return !isEqual(persistedDateFilter, workingDateFilter);
|
|
525
|
+
});
|
|
526
|
+
});
|
|
527
|
+
export const selectIsDateFilterConfigChanged = createSelector(selectPersistedDashboardDateFilterConfigByTab, selectDateFilterConfigOverridesByTab, (persistedDateFilterConfigByTab, currentDateFilterConfigByTab) => {
|
|
528
|
+
const tabIdentifiers = collectTabIdentifiers(persistedDateFilterConfigByTab, currentDateFilterConfigByTab);
|
|
529
|
+
return tabIdentifiers.some((tabId) => {
|
|
530
|
+
const persistedConfig = persistedDateFilterConfigByTab[tabId];
|
|
531
|
+
const currentConfig = currentDateFilterConfigByTab[tabId];
|
|
532
|
+
return !isEqual(persistedConfig, currentConfig);
|
|
533
|
+
});
|
|
469
534
|
});
|
|
470
535
|
/**
|
|
471
536
|
* Selects a boolean indication if the dashboard has any changes to the attribute filters compared to the persisted version (if any)
|
|
472
537
|
*
|
|
473
538
|
* @internal
|
|
474
539
|
*/
|
|
475
|
-
export const selectIsAttributeFiltersChanged = createSelector(
|
|
476
|
-
|
|
540
|
+
export const selectIsAttributeFiltersChanged = createSelector(selectPersistedDashboardAttributeFiltersByTab, selectWorkingAttributeFiltersByTab, (persistedAttributeFiltersByTab, workingAttributeFiltersByTab) => {
|
|
541
|
+
const tabIdentifiers = collectTabIdentifiers(persistedAttributeFiltersByTab, workingAttributeFiltersByTab);
|
|
542
|
+
return tabIdentifiers.some((tabId) => {
|
|
543
|
+
const persistedFilters = persistedAttributeFiltersByTab[tabId] ?? [];
|
|
544
|
+
const workingFilters = workingAttributeFiltersByTab[tabId] ?? [];
|
|
545
|
+
return !isEqual(persistedFilters, workingFilters);
|
|
546
|
+
});
|
|
477
547
|
});
|
|
478
548
|
/**
|
|
479
549
|
* Selects a boolean indication if the dashboard has any changes to the date filters with dimension compared to the persisted version (if any)
|
|
480
550
|
*
|
|
481
551
|
* @internal
|
|
482
552
|
*/
|
|
483
|
-
export const selectIsOtherFiltersChanged = createSelector(
|
|
484
|
-
|
|
553
|
+
export const selectIsOtherFiltersChanged = createSelector(selectPersistedDashboardDraggableFiltersByTab, selectWorkingDraggableFiltersByTab, (persistedDraggableFiltersByTab, workingDraggableFiltersByTab) => {
|
|
554
|
+
const tabIdentifiers = collectTabIdentifiers(persistedDraggableFiltersByTab, workingDraggableFiltersByTab);
|
|
555
|
+
return tabIdentifiers.some((tabId) => {
|
|
556
|
+
const persistedFilters = persistedDraggableFiltersByTab[tabId] ?? [];
|
|
557
|
+
const workingFilters = workingDraggableFiltersByTab[tabId] ?? [];
|
|
558
|
+
return !isEqual(persistedFilters, workingFilters);
|
|
559
|
+
});
|
|
485
560
|
});
|
|
486
561
|
/**
|
|
487
562
|
* Selects a boolean indication if the dashboard has any changes to any of the filters compared to the persisted version (if any)
|
|
@@ -544,16 +619,35 @@ export const selectIsSectionHeadersDateDataSetChanged = createSelector(selectPer
|
|
|
544
619
|
});
|
|
545
620
|
/**
|
|
546
621
|
* Selects a boolean indication if the dashboard has any changes to the tabs compared to the persisted version (if any)
|
|
622
|
+
* Compares only the tabs identifiers and titles.
|
|
547
623
|
*
|
|
548
|
-
* @internal
|
|
549
624
|
*/
|
|
550
|
-
|
|
551
|
-
// Check if active tab ID changed
|
|
625
|
+
const selectIsTabsChanged = createSelector(selectPersistedDashboardTabs, selectPersistedDashboardActiveTabId, selectTabs, selectActiveTabId, (persistedTabs, persistedActiveTabId, currentTabs, currentActiveTabId) => {
|
|
626
|
+
// Check if active tab ID changed (only if persisted dashboard has tabs)
|
|
552
627
|
if (persistedActiveTabId !== currentActiveTabId) {
|
|
553
628
|
return true;
|
|
554
629
|
}
|
|
555
|
-
//
|
|
556
|
-
|
|
630
|
+
// Both have tabs - compare them
|
|
631
|
+
// Normalize tabs for comparison - compare all common properties including filter configs
|
|
632
|
+
// Layout is compared separately via selectIsLayoutChanged
|
|
633
|
+
const normalizeTabsForComparison = (tabs) => {
|
|
634
|
+
if (!tabs || tabs.length === 0) {
|
|
635
|
+
return [];
|
|
636
|
+
}
|
|
637
|
+
return tabs
|
|
638
|
+
.map((tab) => {
|
|
639
|
+
return {
|
|
640
|
+
identifier: tab.identifier,
|
|
641
|
+
title: tab.title,
|
|
642
|
+
// all other props are dirty checked separately
|
|
643
|
+
};
|
|
644
|
+
})
|
|
645
|
+
.sort((a, b) => a.identifier.localeCompare(b.identifier));
|
|
646
|
+
};
|
|
647
|
+
const normalizedPersistedTabs = normalizeTabsForComparison(persistedTabs);
|
|
648
|
+
const normalizedCurrentTabs = normalizeTabsForComparison(currentTabs);
|
|
649
|
+
// Compare normalized tabs arrays
|
|
650
|
+
return !isEqual(normalizedPersistedTabs, normalizedCurrentTabs);
|
|
557
651
|
});
|
|
558
652
|
/**
|
|
559
653
|
* Selects a boolean indication if he dashboard has any changes to the title compared to the persisted version (if any)
|