@gooddata/sdk-ui-dashboard 11.56.0-alpha.6 → 11.56.0-alpha.8
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 +1 -1
- package/esm/__version.d.ts +1 -1
- package/esm/__version.js +1 -1
- package/esm/_staging/catalog/computedAttributes.d.ts +43 -0
- package/esm/_staging/catalog/computedAttributes.d.ts.map +1 -0
- package/esm/_staging/catalog/computedAttributes.js +93 -0
- package/esm/_staging/catalog/displayFormMap.d.ts +3 -2
- package/esm/_staging/catalog/displayFormMap.d.ts.map +1 -1
- package/esm/_staging/catalog/displayFormMap.js +9 -3
- package/esm/_staging/metadata/objRefMap.d.ts.map +1 -1
- package/esm/_staging/metadata/objRefMap.js +11 -1
- package/esm/index.d.ts +9 -5
- package/esm/index.d.ts.map +1 -1
- package/esm/index.js +7 -3
- package/esm/kdaDialog/composition/hooks/useKdaValidAttributes.js +2 -2
- package/esm/kdaDialog/dialog/hooks/useValidAttributes.d.ts.map +1 -1
- package/esm/kdaDialog/dialog/hooks/useValidAttributes.js +21 -6
- package/esm/kdaDialog/hooks/useAttribute.d.ts.map +1 -1
- package/esm/kdaDialog/hooks/useAttribute.js +16 -8
- package/esm/locales.d.ts +3 -0
- package/esm/locales.d.ts.map +1 -1
- package/esm/locales.js +3 -0
- package/esm/model/commandHandlers/dashboard/common/loadAvailableDisplayFormRefs.d.ts.map +1 -1
- package/esm/model/commandHandlers/dashboard/common/loadAvailableDisplayFormRefs.js +15 -6
- package/esm/model/commandHandlers/dashboard/initializeDashboardHandler/index.d.ts +2 -3
- package/esm/model/commandHandlers/dashboard/initializeDashboardHandler/index.d.ts.map +1 -1
- package/esm/model/commandHandlers/dashboard/initializeDashboardHandler/index.js +26 -17
- package/esm/model/commandHandlers/dashboard/initializeDashboardHandler/loadCatalog.d.ts +6 -1
- package/esm/model/commandHandlers/dashboard/initializeDashboardHandler/loadCatalog.d.ts.map +1 -1
- package/esm/model/commandHandlers/dashboard/initializeDashboardHandler/loadCatalog.js +37 -4
- package/esm/model/commandHandlers/dashboard/initializeDashboardHandler/resolveDashboardConfig.d.ts +7 -2
- package/esm/model/commandHandlers/dashboard/initializeDashboardHandler/resolveDashboardConfig.d.ts.map +1 -1
- package/esm/model/commandHandlers/dashboard/initializeDashboardHandler/resolveDashboardConfig.js +15 -3
- package/esm/model/commandHandlers/filterContext/attributeFilter/validation/filterDisplayFormValidation.d.ts.map +1 -1
- package/esm/model/commandHandlers/filterContext/attributeFilter/validation/filterDisplayFormValidation.js +10 -3
- package/esm/model/commandHandlers/filterContext/attributeFilter/validation/uniqueFiltersValidation.d.ts.map +1 -1
- package/esm/model/commandHandlers/filterContext/attributeFilter/validation/uniqueFiltersValidation.js +24 -14
- package/esm/model/commandHandlers/scheduledEmail/createScheduledEmailHandler.js +2 -2
- package/esm/model/commandHandlers/scheduledEmail/saveScheduledEmailHandler.js +2 -2
- package/esm/model/commandHandlers/widgets/attributeHierarchyModifiedHandler.d.ts.map +1 -1
- package/esm/model/commandHandlers/widgets/attributeHierarchyModifiedHandler.js +6 -0
- package/esm/model/commandHandlers/widgets/exportInsightWidgetHandler.d.ts.map +1 -1
- package/esm/model/commandHandlers/widgets/exportInsightWidgetHandler.js +2 -2
- package/esm/model/commandHandlers/widgets/exportRawInsightWidgetHandler.js +2 -2
- package/esm/model/queries/base.d.ts +1 -1
- package/esm/model/queries/base.d.ts.map +1 -1
- package/esm/model/queries/base.js +1 -1
- package/esm/model/queries/computedAttributeExpression.d.ts +27 -0
- package/esm/model/queries/computedAttributeExpression.d.ts.map +1 -0
- package/esm/model/queries/computedAttributeExpression.js +21 -0
- package/esm/model/queries/connectedAttributes.d.ts +19 -1
- package/esm/model/queries/connectedAttributes.d.ts.map +1 -1
- package/esm/model/queries/connectedAttributes.js +3 -1
- package/esm/model/queries/index.d.ts +2 -1
- package/esm/model/queries/index.d.ts.map +1 -1
- package/esm/model/queryServices/index.d.ts +1 -1
- package/esm/model/queryServices/index.d.ts.map +1 -1
- package/esm/model/queryServices/index.js +2 -0
- package/esm/model/queryServices/queryAttributeByDisplayForm.d.ts.map +1 -1
- package/esm/model/queryServices/queryAttributeByDisplayForm.js +12 -3
- package/esm/model/queryServices/queryAttributeDataset.d.ts.map +1 -1
- package/esm/model/queryServices/queryAttributeDataset.js +9 -1
- package/esm/model/queryServices/queryComputedAttributeExpression.d.ts +4 -0
- package/esm/model/queryServices/queryComputedAttributeExpression.d.ts.map +1 -0
- package/esm/model/queryServices/queryComputedAttributeExpression.js +17 -0
- package/esm/model/queryServices/queryConnectedAttributes.d.ts.map +1 -1
- package/esm/model/queryServices/queryConnectedAttributes.js +20 -5
- package/esm/model/queryServices/queryInsightAttributesMeta.d.ts.map +1 -1
- package/esm/model/queryServices/queryInsightAttributesMeta.js +20 -11
- package/esm/model/react/useIsWidgetRestricted.d.ts +9 -0
- package/esm/model/react/useIsWidgetRestricted.d.ts.map +1 -0
- package/esm/model/react/useIsWidgetRestricted.js +14 -0
- package/esm/model/store/catalog/catalogReducers.d.ts +2 -1
- package/esm/model/store/catalog/catalogReducers.d.ts.map +1 -1
- package/esm/model/store/catalog/catalogReducers.js +2 -1
- package/esm/model/store/catalog/catalogSelectors.d.ts +21 -1
- package/esm/model/store/catalog/catalogSelectors.d.ts.map +1 -1
- package/esm/model/store/catalog/catalogSelectors.js +26 -2
- package/esm/model/store/catalog/catalogState.d.ts +8 -1
- package/esm/model/store/catalog/catalogState.d.ts.map +1 -1
- package/esm/model/store/catalog/catalogState.js +1 -0
- package/esm/model/store/config/configSelectors.d.ts +11 -0
- package/esm/model/store/config/configSelectors.d.ts.map +1 -1
- package/esm/model/store/config/configSelectors.js +13 -0
- package/esm/model/store/insights/insightsSelectors.js +3 -3
- package/esm/model/store/tabs/filterContext/filterContextSelectors.d.ts.map +1 -1
- package/esm/model/store/tabs/filterContext/filterContextSelectors.js +8 -4
- package/esm/model/store/unavailableObjects/unavailableObjectsSelectors.d.ts +8 -0
- package/esm/model/store/unavailableObjects/unavailableObjectsSelectors.d.ts.map +1 -1
- package/esm/model/store/unavailableObjects/unavailableObjectsSelectors.js +8 -0
- package/esm/model/utils/displayFormResolver.d.ts.map +1 -1
- package/esm/model/utils/displayFormResolver.js +11 -1
- package/esm/plugins/customizationApis/customizationBuilder.d.ts.map +1 -1
- package/esm/plugins/customizationApis/customizationBuilder.js +1 -0
- package/esm/plugins/customizationApis/insightCustomizer.d.ts +4 -2
- package/esm/plugins/customizationApis/insightCustomizer.d.ts.map +1 -1
- package/esm/plugins/customizationApis/insightCustomizer.js +43 -3
- package/esm/plugins/customizer.d.ts +14 -1
- package/esm/plugins/customizer.d.ts.map +1 -1
- package/esm/presentation/automations/alerting/AlertingDialog.d.ts +2 -0
- package/esm/presentation/automations/alerting/AlertingDialog.d.ts.map +1 -1
- package/esm/presentation/automations/alerting/AlertingDialog.js +12 -2
- package/esm/presentation/automations/alerting/DefaultAlertingDialog/DefaultAlertingDialog.d.ts.map +1 -1
- package/esm/presentation/automations/alerting/DefaultAlertingDialog/DefaultAlertingDialog.js +1 -1
- package/esm/presentation/automations/alerting/state/AlertingDialogStateProvider.d.ts.map +1 -1
- package/esm/presentation/automations/alerting/state/AlertingDialogStateProvider.js +23 -58
- package/esm/presentation/automations/alerting/state/useAlertDraftFilterWrites.d.ts +33 -0
- package/esm/presentation/automations/alerting/state/useAlertDraftFilterWrites.d.ts.map +1 -0
- package/esm/presentation/automations/alerting/state/useAlertDraftFilterWrites.js +61 -0
- package/esm/presentation/automations/alerting/state/useAlertFiltersModel.d.ts +3 -17
- package/esm/presentation/automations/alerting/state/useAlertFiltersModel.d.ts.map +1 -1
- package/esm/presentation/automations/alerting/state/useAlertFiltersModel.js +3 -52
- package/esm/presentation/automations/alerting/state/useAlertFormState.js +1 -1
- package/esm/presentation/automations/connectors/hooks/useBuildAutomationsContext.js +2 -2
- package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/DefaultScheduledEmailDialog.d.ts.map +1 -1
- package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/DefaultScheduledEmailDialog.js +1 -1
- package/esm/presentation/automations/scheduledEmail/ScheduledEmailDialog.d.ts +3 -1
- package/esm/presentation/automations/scheduledEmail/ScheduledEmailDialog.d.ts.map +1 -1
- package/esm/presentation/automations/scheduledEmail/ScheduledEmailDialog.js +13 -3
- package/esm/presentation/automations/scheduledEmail/blocks/ScheduledEmailDialogShell.js +2 -5
- package/esm/presentation/automations/scheduledEmail/state/ScheduledEmailDialogStateProvider.d.ts.map +1 -1
- package/esm/presentation/automations/scheduledEmail/state/ScheduledEmailDialogStateProvider.js +22 -40
- package/esm/presentation/automations/scheduledEmail/state/useSaveScheduledEmailToBackend.d.ts.map +1 -1
- package/esm/presentation/automations/scheduledEmail/state/useSaveScheduledEmailToBackend.js +14 -3
- package/esm/presentation/automations/scheduledEmail/state/useScheduledEmailDraftFilterWrites.d.ts +27 -0
- package/esm/presentation/automations/scheduledEmail/state/useScheduledEmailDraftFilterWrites.d.ts.map +1 -0
- package/esm/presentation/automations/scheduledEmail/state/useScheduledEmailDraftFilterWrites.js +142 -0
- package/esm/presentation/automations/scheduledEmail/state/useScheduledEmailFiltersModel.d.ts +4 -6
- package/esm/presentation/automations/scheduledEmail/state/useScheduledEmailFiltersModel.d.ts.map +1 -1
- package/esm/presentation/automations/scheduledEmail/state/useScheduledEmailFiltersModel.js +9 -151
- package/esm/presentation/automations/shared/filters/conversions.d.ts +4 -0
- package/esm/presentation/automations/shared/filters/conversions.d.ts.map +1 -1
- package/esm/presentation/automations/shared/filters/conversions.js +28 -24
- package/esm/presentation/automations/shared/hooks/useDecoratorContractCheck.d.ts +16 -0
- package/esm/presentation/automations/shared/hooks/useDecoratorContractCheck.d.ts.map +1 -0
- package/esm/presentation/automations/shared/hooks/useDecoratorContractCheck.js +38 -0
- package/esm/presentation/automations/shared/hooks/useShallowStable.d.ts +10 -0
- package/esm/presentation/automations/shared/hooks/useShallowStable.d.ts.map +1 -0
- package/esm/presentation/automations/shared/hooks/useShallowStable.js +18 -0
- package/esm/presentation/dashboard/DashboardSidebar/CreationPanel.d.ts.map +1 -1
- package/esm/presentation/dashboard/DashboardSidebar/CreationPanel.js +17 -4
- package/esm/presentation/dashboard/DashboardSidebar/SidebarCollapseToggle.d.ts +10 -0
- package/esm/presentation/dashboard/DashboardSidebar/SidebarCollapseToggle.d.ts.map +1 -0
- package/esm/presentation/dashboard/DashboardSidebar/SidebarCollapseToggle.js +19 -0
- package/esm/presentation/dashboard/DashboardSidebar/SidebarConfigurationPanel.d.ts.map +1 -1
- package/esm/presentation/dashboard/DashboardSidebar/SidebarConfigurationPanel.js +8 -2
- package/esm/presentation/dashboard/DashboardSidebar/SidebarResizeChrome.d.ts.map +1 -1
- package/esm/presentation/dashboard/DashboardSidebar/SidebarResizeChrome.js +4 -2
- package/esm/presentation/dashboard/DashboardSidebar/SidebarResizeContext.d.ts +8 -3
- package/esm/presentation/dashboard/DashboardSidebar/SidebarResizeContext.d.ts.map +1 -1
- package/esm/presentation/dashboard/DashboardSidebar/SidebarResizeContext.js +65 -25
- package/esm/presentation/dashboard/components/DashboardInner.d.ts.map +1 -1
- package/esm/presentation/dashboard/components/DashboardInner.js +4 -4
- package/esm/presentation/dashboard/components/DashboardRenderer.d.ts.map +1 -1
- package/esm/presentation/dashboard/components/DashboardRenderer.js +2 -2
- package/esm/presentation/dashboard/hooks/useDashboard.d.ts +2 -1
- package/esm/presentation/dashboard/hooks/useDashboard.d.ts.map +1 -1
- package/esm/presentation/dashboard/hooks/useDashboard.js +7 -1
- package/esm/presentation/dashboard/types.d.ts +14 -1
- package/esm/presentation/dashboard/types.d.ts.map +1 -1
- package/esm/presentation/dashboardContexts/DashboardComponentsContext.d.ts +2 -1
- package/esm/presentation/dashboardContexts/DashboardComponentsContext.d.ts.map +1 -1
- package/esm/presentation/dashboardContexts/DashboardComponentsContext.js +1 -0
- package/esm/presentation/dashboardContexts/types.d.ts +20 -0
- package/esm/presentation/dashboardContexts/types.d.ts.map +1 -1
- package/esm/presentation/dragAndDrop/draggableAttributeFilter/DefaultAttributeFilterDraggingComponent.d.ts.map +1 -1
- package/esm/presentation/dragAndDrop/draggableAttributeFilter/DefaultAttributeFilterDraggingComponent.js +4 -3
- package/esm/presentation/export/useExportData.js +2 -2
- package/esm/presentation/filterBar/attributeFilter/addAttributeFilter/attributeListItemTooltip/AttributeListItemTooltip.d.ts.map +1 -1
- package/esm/presentation/filterBar/attributeFilter/addAttributeFilter/attributeListItemTooltip/AttributeListItemTooltip.js +8 -2
- package/esm/presentation/filterBar/attributeFilter/addAttributeFilter/attributeListItemTooltip/AttributeListItemTooltipContent.d.ts +12 -1
- package/esm/presentation/filterBar/attributeFilter/addAttributeFilter/attributeListItemTooltip/AttributeListItemTooltipContent.d.ts.map +1 -1
- package/esm/presentation/filterBar/attributeFilter/addAttributeFilter/attributeListItemTooltip/AttributeListItemTooltipContent.js +19 -2
- package/esm/presentation/filterBar/attributeFilter/dashboardDropdownBody/configuration/displayForms/AttributeDisplayFormsDropdown.d.ts.map +1 -1
- package/esm/presentation/filterBar/attributeFilter/dashboardDropdownBody/configuration/displayForms/AttributeDisplayFormsDropdown.js +3 -2
- package/esm/presentation/filterBar/attributeFilter/dashboardDropdownBody/configuration/hooks/useComputedAttributeExpression.d.ts +14 -0
- package/esm/presentation/filterBar/attributeFilter/dashboardDropdownBody/configuration/hooks/useComputedAttributeExpression.d.ts.map +1 -0
- package/esm/presentation/filterBar/attributeFilter/dashboardDropdownBody/configuration/hooks/useComputedAttributeExpression.js +28 -0
- package/esm/presentation/filterBar/attributeFilter/dashboardDropdownBody/configuration/hooks/useDisplayFormConfiguration.js +2 -2
- package/esm/presentation/filterBar/attributeFilter/dashboardDropdownBody/configuration/hooks/useValidNeighbourAttributes.d.ts.map +1 -1
- package/esm/presentation/filterBar/attributeFilter/dashboardDropdownBody/configuration/hooks/useValidNeighbourAttributes.js +12 -2
- package/esm/presentation/filterBar/attributeFilter/dashboardDropdownBody/configuration/limitValues/shared/limitingItemsHook.d.ts.map +1 -1
- package/esm/presentation/filterBar/attributeFilter/dashboardDropdownBody/configuration/limitValues/shared/limitingItemsHook.js +6 -5
- package/esm/presentation/filterBar/attributeFilter/dashboardDropdownBody/configuration/parentFilters/ParentFiltersDisabledItem.js +2 -2
- package/esm/presentation/filterBar/filterBar/DefaultFilterBarItem.js +2 -2
- package/esm/presentation/filterBar/filterBar/useFiltersWithAddedPlaceholder.js +2 -2
- package/esm/presentation/filterBar/measureValueFilter/useDashboardMeasureValueFilterData.d.ts.map +1 -1
- package/esm/presentation/filterBar/measureValueFilter/useDashboardMeasureValueFilterData.js +55 -17
- package/esm/presentation/flexibleLayout/DashboardLayoutWidget.d.ts.map +1 -1
- package/esm/presentation/flexibleLayout/DashboardLayoutWidget.js +6 -1
- package/esm/presentation/localization/bundles/de-DE.localization-bundle.d.ts +5 -4
- package/esm/presentation/localization/bundles/de-DE.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/de-DE.localization-bundle.js +5 -4
- package/esm/presentation/localization/bundles/en-AU.localization-bundle.d.ts +5 -4
- package/esm/presentation/localization/bundles/en-AU.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/en-AU.localization-bundle.js +5 -4
- package/esm/presentation/localization/bundles/en-GB.localization-bundle.d.ts +5 -4
- package/esm/presentation/localization/bundles/en-GB.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/en-GB.localization-bundle.js +5 -4
- package/esm/presentation/localization/bundles/en-US.localization-bundle.d.ts +40 -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 +40 -0
- package/esm/presentation/localization/bundles/es-419.localization-bundle.d.ts +5 -4
- package/esm/presentation/localization/bundles/es-419.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/es-419.localization-bundle.js +5 -4
- package/esm/presentation/localization/bundles/es-ES.localization-bundle.d.ts +5 -4
- package/esm/presentation/localization/bundles/es-ES.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/es-ES.localization-bundle.js +5 -4
- package/esm/presentation/localization/bundles/fi-FI.localization-bundle.d.ts +5 -4
- package/esm/presentation/localization/bundles/fi-FI.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/fi-FI.localization-bundle.js +5 -4
- package/esm/presentation/localization/bundles/fr-CA.localization-bundle.d.ts +5 -4
- package/esm/presentation/localization/bundles/fr-CA.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/fr-CA.localization-bundle.js +5 -4
- package/esm/presentation/localization/bundles/fr-FR.localization-bundle.d.ts +5 -4
- package/esm/presentation/localization/bundles/fr-FR.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/fr-FR.localization-bundle.js +5 -4
- package/esm/presentation/localization/bundles/id-ID.localization-bundle.d.ts +5 -4
- package/esm/presentation/localization/bundles/id-ID.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/id-ID.localization-bundle.js +5 -4
- package/esm/presentation/localization/bundles/it-IT.localization-bundle.d.ts +5 -4
- package/esm/presentation/localization/bundles/it-IT.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/it-IT.localization-bundle.js +5 -4
- package/esm/presentation/localization/bundles/ja-JP.localization-bundle.d.ts +5 -4
- package/esm/presentation/localization/bundles/ja-JP.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/ja-JP.localization-bundle.js +33 -32
- package/esm/presentation/localization/bundles/ko-KR.localization-bundle.d.ts +5 -4
- package/esm/presentation/localization/bundles/ko-KR.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/ko-KR.localization-bundle.js +5 -4
- package/esm/presentation/localization/bundles/nl-NL.localization-bundle.d.ts +5 -4
- package/esm/presentation/localization/bundles/nl-NL.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/nl-NL.localization-bundle.js +5 -4
- package/esm/presentation/localization/bundles/pl-PL.localization-bundle.d.ts +5 -4
- package/esm/presentation/localization/bundles/pl-PL.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/pl-PL.localization-bundle.js +5 -4
- package/esm/presentation/localization/bundles/pt-BR.localization-bundle.d.ts +5 -4
- package/esm/presentation/localization/bundles/pt-BR.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/pt-BR.localization-bundle.js +5 -4
- package/esm/presentation/localization/bundles/pt-PT.localization-bundle.d.ts +5 -4
- package/esm/presentation/localization/bundles/pt-PT.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/pt-PT.localization-bundle.js +5 -4
- package/esm/presentation/localization/bundles/ru-RU.localization-bundle.d.ts +5 -4
- package/esm/presentation/localization/bundles/ru-RU.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/ru-RU.localization-bundle.js +5 -4
- package/esm/presentation/localization/bundles/sl-SI.localization-bundle.d.ts +5 -4
- package/esm/presentation/localization/bundles/sl-SI.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/sl-SI.localization-bundle.js +5 -4
- package/esm/presentation/localization/bundles/th-TH.localization-bundle.d.ts +5 -4
- package/esm/presentation/localization/bundles/th-TH.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/th-TH.localization-bundle.js +5 -4
- package/esm/presentation/localization/bundles/tr-TR.localization-bundle.d.ts +5 -4
- package/esm/presentation/localization/bundles/tr-TR.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/tr-TR.localization-bundle.js +5 -4
- package/esm/presentation/localization/bundles/uk-UA.localization-bundle.d.ts +5 -4
- package/esm/presentation/localization/bundles/uk-UA.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/uk-UA.localization-bundle.js +5 -4
- package/esm/presentation/localization/bundles/vi-VN.localization-bundle.d.ts +5 -4
- package/esm/presentation/localization/bundles/vi-VN.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/vi-VN.localization-bundle.js +5 -4
- package/esm/presentation/localization/bundles/zh-HK.localization-bundle.d.ts +5 -4
- package/esm/presentation/localization/bundles/zh-HK.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/zh-HK.localization-bundle.js +5 -4
- package/esm/presentation/localization/bundles/zh-Hans.localization-bundle.d.ts +5 -4
- package/esm/presentation/localization/bundles/zh-Hans.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/zh-Hans.localization-bundle.js +5 -4
- package/esm/presentation/localization/bundles/zh-Hant.localization-bundle.d.ts +5 -4
- package/esm/presentation/localization/bundles/zh-Hant.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/zh-Hant.localization-bundle.js +5 -4
- package/esm/presentation/widget/common/RestrictedPlaceholder.d.ts +54 -0
- package/esm/presentation/widget/common/RestrictedPlaceholder.d.ts.map +1 -0
- package/esm/presentation/widget/common/RestrictedPlaceholder.js +49 -0
- package/esm/presentation/widget/common/configuration/DateDatasetFilter.d.ts +6 -1
- package/esm/presentation/widget/common/configuration/DateDatasetFilter.d.ts.map +1 -1
- package/esm/presentation/widget/common/configuration/DateDatasetFilter.js +2 -2
- package/esm/presentation/widget/common/configuration/DateFilterCheckbox.d.ts +6 -1
- package/esm/presentation/widget/common/configuration/DateFilterCheckbox.d.ts.map +1 -1
- package/esm/presentation/widget/common/configuration/DateFilterCheckbox.js +10 -3
- package/esm/presentation/widget/insight/DefaultInsightBody/DefaultInsightBody.js +2 -2
- package/esm/presentation/widget/insight/ViewModeDashboardInsight/InsightDrillDialog/DrillDialogInsight.js +2 -2
- package/esm/presentation/widget/insight/configuration/InsightDateDataSetFilter.d.ts.map +1 -1
- package/esm/presentation/widget/insight/configuration/InsightDateDataSetFilter.js +1 -1
- package/esm/presentation/widget/insight/configuration/InsightDrillConfigList.d.ts +6 -1
- package/esm/presentation/widget/insight/configuration/InsightDrillConfigList.d.ts.map +1 -1
- package/esm/presentation/widget/insight/configuration/InsightDrillConfigList.js +13 -2
- package/esm/presentation/widget/insight/configuration/InsightDrillConfigPanel/InsightDrillConfigPanel.d.ts.map +1 -1
- package/esm/presentation/widget/insight/configuration/InsightDrillConfigPanel/InsightDrillConfigPanel.js +5 -1
- package/esm/presentation/widget/insight/configuration/useDrillTargetTypeItems.d.ts +1 -1
- package/esm/presentation/widget/insight/configuration/useDrillTargetTypeItems.d.ts.map +1 -1
- package/esm/presentation/widget/insight/configuration/useDrillTargetTypeItems.js +2 -2
- package/esm/presentation/widget/richText/configuration/RichTextDateDataSetFilter.d.ts.map +1 -1
- package/esm/presentation/widget/richText/configuration/RichTextDateDataSetFilter.js +1 -1
- package/esm/presentation/widget/visualizationSwitcher/ViewModeDashboardVisualizationSwitcher.d.ts.map +1 -1
- package/esm/presentation/widget/visualizationSwitcher/ViewModeDashboardVisualizationSwitcher.js +8 -0
- package/esm/presentation/widget/visualizationSwitcher/ViewModeDashboardVisualizationSwitcherRestricted.d.ts +16 -0
- package/esm/presentation/widget/visualizationSwitcher/ViewModeDashboardVisualizationSwitcherRestricted.d.ts.map +1 -0
- package/esm/presentation/widget/visualizationSwitcher/ViewModeDashboardVisualizationSwitcherRestricted.js +19 -0
- package/esm/presentation/widget/widget/InsightWidget/DashboardWidgetInsightGuard.d.ts.map +1 -1
- package/esm/presentation/widget/widget/InsightWidget/DashboardWidgetInsightGuard.js +11 -1
- package/esm/presentation/widget/widget/InsightWidget/DefaultDashboardInsightWidget.js +2 -2
- package/esm/presentation/widget/widget/VisualizationSwitcherWidget/VisualizationSwitcherNavigationHeader.d.ts.map +1 -1
- package/esm/presentation/widget/widget/VisualizationSwitcherWidget/VisualizationSwitcherNavigationHeader.js +25 -12
- package/esm/sdk-ui-dashboard.d.ts +206 -4
- package/package.json +22 -22
- package/styles/css/alerting.css +3 -1
- package/styles/css/alerting.css.map +1 -1
- package/styles/css/configurationPanel.css +1 -5
- package/styles/css/configurationPanel.css.map +1 -1
- package/styles/css/dashboard.css +5 -3
- package/styles/css/dashboard.css.map +1 -1
- package/styles/css/export.css +10 -8
- package/styles/css/export.css.map +1 -1
- package/styles/css/filterBar.css +29 -0
- package/styles/css/filterBar.css.map +1 -1
- package/styles/css/main.css +230 -22
- package/styles/css/main.css.map +1 -1
- package/styles/css/sidebar.css +165 -0
- package/styles/css/sidebar.css.map +1 -1
- package/styles/css/visualizationSwitcherWidget.css +8 -0
- package/styles/css/visualizationSwitcherWidget.css.map +1 -1
- package/styles/scss/configurationPanel.scss +1 -7
- package/styles/scss/filterBar.scss +38 -0
- package/styles/scss/sidebar.scss +215 -0
- package/styles/scss/visualizationSwitcherWidget.scss +9 -0
|
@@ -66,18 +66,7 @@ export const getAppliedWidgetFilters = (selectedAutomationFilters, dashboardHidd
|
|
|
66
66
|
// alert executions (which have empty attributes) don't contain dangling refs.
|
|
67
67
|
const resolvedFilters = resolveFilterDimensionalityLocalRefs(filtersToUse, insight);
|
|
68
68
|
// Strip noop filters - they have no effect on execution.
|
|
69
|
-
return resolvedFilters.filter((filter) =>
|
|
70
|
-
// Strip noop "All time" date filters (implicit default with no extra configuration).
|
|
71
|
-
if (isDateFilter(filter)) {
|
|
72
|
-
return !isNoopAllTimeDateFilterFixed(filter);
|
|
73
|
-
}
|
|
74
|
-
// Strip noop "All" measure value filters (no conditions).
|
|
75
|
-
if (isMeasureValueFilter(filter)) {
|
|
76
|
-
return hasMeasureValueFilterConditions(filter);
|
|
77
|
-
}
|
|
78
|
-
// Strip noop "All values" attribute filters (negative filter with empty exclusion list).
|
|
79
|
-
return !isAllValuesAttributeFilter(filter);
|
|
80
|
-
});
|
|
69
|
+
return resolvedFilters.filter((filter) => !isNoopExecutionFilter(filter));
|
|
81
70
|
};
|
|
82
71
|
/**
|
|
83
72
|
* Get final filters for the dashboard scheduled export.
|
|
@@ -90,18 +79,7 @@ export const getAppliedDashboardFilters = (selectedAutomationFilters, dashboardH
|
|
|
90
79
|
// but we need them to construct proper execution filters, so merge them.
|
|
91
80
|
const selectedFiltersWithHiddenFilters = [...selectedAutomationFilters, ...dashboardHiddenFilters];
|
|
92
81
|
// Strip noop filters - they have no effect on execution.
|
|
93
|
-
return selectedFiltersWithHiddenFilters.filter((filter) =>
|
|
94
|
-
// Strip noop "All time" date filters (implicit default with no extra configuration).
|
|
95
|
-
if (isDashboardDateFilter(filter)) {
|
|
96
|
-
return !isNoopAllTimeDashboardDateFilter(filter);
|
|
97
|
-
}
|
|
98
|
-
// Strip noop "All" measure value filters (no/empty conditions).
|
|
99
|
-
if (isDashboardMeasureValueFilter(filter)) {
|
|
100
|
-
return !isAllDashboardMeasureValueFilter(filter);
|
|
101
|
-
}
|
|
102
|
-
// Strip noop "All values" attribute filters.
|
|
103
|
-
return !isAllValuesDashboardAttributeFilter(filter);
|
|
104
|
-
});
|
|
82
|
+
return selectedFiltersWithHiddenFilters.filter((filter) => !isNoopDashboardFilter(filter));
|
|
105
83
|
};
|
|
106
84
|
export function dashboardFilterToFilterContextItem(filter, keepDatasets) {
|
|
107
85
|
if (isAttributeFilterWithSelection(filter)) {
|
|
@@ -230,6 +208,32 @@ function resolveDimensionalityItems(dimensionality, attributeLocalIdToDisplayFor
|
|
|
230
208
|
const changed = dimensionality.some((item, i) => item !== resolved[i]);
|
|
231
209
|
return changed ? resolved : undefined;
|
|
232
210
|
}
|
|
211
|
+
/** A filter with no effect on a widget execution: all-time date, condition-less MVF, all-values attribute. */
|
|
212
|
+
export function isNoopExecutionFilter(filter) {
|
|
213
|
+
// Strip noop "All time" date filters (implicit default with no extra configuration).
|
|
214
|
+
if (isDateFilter(filter)) {
|
|
215
|
+
return isNoopAllTimeDateFilterFixed(filter);
|
|
216
|
+
}
|
|
217
|
+
// Strip noop "All" measure value filters (no conditions).
|
|
218
|
+
if (isMeasureValueFilter(filter)) {
|
|
219
|
+
return !hasMeasureValueFilterConditions(filter);
|
|
220
|
+
}
|
|
221
|
+
// Strip noop "All values" attribute filters (negative filter with empty exclusion list).
|
|
222
|
+
return isAllValuesAttributeFilter(filter);
|
|
223
|
+
}
|
|
224
|
+
/** The FilterContextItem form of {@link isNoopExecutionFilter}. */
|
|
225
|
+
export function isNoopDashboardFilter(filter) {
|
|
226
|
+
// Strip noop "All time" date filters (implicit default with no extra configuration).
|
|
227
|
+
if (isDashboardDateFilter(filter)) {
|
|
228
|
+
return isNoopAllTimeDashboardDateFilter(filter);
|
|
229
|
+
}
|
|
230
|
+
// Strip noop "All" measure value filters (no/empty conditions).
|
|
231
|
+
if (isDashboardMeasureValueFilter(filter)) {
|
|
232
|
+
return isAllDashboardMeasureValueFilter(filter);
|
|
233
|
+
}
|
|
234
|
+
// Strip noop "All values" attribute filters.
|
|
235
|
+
return isAllValuesDashboardAttributeFilter(filter);
|
|
236
|
+
}
|
|
233
237
|
/**
|
|
234
238
|
* Matches all-time date filters that are *noop*, i.e. that have no effect on execution.
|
|
235
239
|
*
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Warns once per violation kind per mount when a dialog context decorator breaks the decorator
|
|
3
|
+
* contract in a way that otherwise fails silently and far from its cause: forcing `isLoading`
|
|
4
|
+
* false while the connector still reports true (the state model seeds from the decorated value,
|
|
5
|
+
* corrupting the draft for the dialog's life), or dropping keys the connector provided (a fresh
|
|
6
|
+
* object instead of spreading the read value). Diagnostic only — nothing is prevented.
|
|
7
|
+
*
|
|
8
|
+
* The passthrough default re-renders the connector's own provider value, so `pristine` and
|
|
9
|
+
* `decorated` are identical and the checks short-circuit.
|
|
10
|
+
*
|
|
11
|
+
* @internal
|
|
12
|
+
*/
|
|
13
|
+
export declare function useDecoratorContractCheck<T extends {
|
|
14
|
+
isLoading: boolean;
|
|
15
|
+
}>(pristine: T, decorated: T, seamName: string): void;
|
|
16
|
+
//# sourceMappingURL=useDecoratorContractCheck.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useDecoratorContractCheck.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/automations/shared/hooks/useDecoratorContractCheck.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;GAWG;AACH,wBAAgB,yBAAyB,CAAC,CAAC,SAAS;IAAE,SAAS,EAAE,OAAO,CAAA;CAAE,EACtE,QAAQ,EAAE,CAAC,EACX,SAAS,EAAE,CAAC,EACZ,QAAQ,EAAE,MAAM,GACjB,IAAI,CA4BN"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
// (C) 2026 GoodData Corporation
|
|
2
|
+
import { useEffect, useRef } from "react";
|
|
3
|
+
/**
|
|
4
|
+
* Warns once per violation kind per mount when a dialog context decorator breaks the decorator
|
|
5
|
+
* contract in a way that otherwise fails silently and far from its cause: forcing `isLoading`
|
|
6
|
+
* false while the connector still reports true (the state model seeds from the decorated value,
|
|
7
|
+
* corrupting the draft for the dialog's life), or dropping keys the connector provided (a fresh
|
|
8
|
+
* object instead of spreading the read value). Diagnostic only — nothing is prevented.
|
|
9
|
+
*
|
|
10
|
+
* The passthrough default re-renders the connector's own provider value, so `pristine` and
|
|
11
|
+
* `decorated` are identical and the checks short-circuit.
|
|
12
|
+
*
|
|
13
|
+
* @internal
|
|
14
|
+
*/
|
|
15
|
+
export function useDecoratorContractCheck(pristine, decorated, seamName) {
|
|
16
|
+
const warnedForcedFalse = useRef(false);
|
|
17
|
+
const warnedDroppedKeys = useRef(false);
|
|
18
|
+
useEffect(() => {
|
|
19
|
+
if (pristine === decorated) {
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
if (!warnedForcedFalse.current && pristine.isLoading && !decorated.isLoading) {
|
|
23
|
+
warnedForcedFalse.current = true;
|
|
24
|
+
console.warn(`${seamName}: the decorated context reports isLoading: false while the connector reports true. ` +
|
|
25
|
+
"The dialog's state model seeds from the decorated value, so this can corrupt the draft for " +
|
|
26
|
+
"the dialog's life. Pass isLoading through untouched (see the decorator type's TSDoc).");
|
|
27
|
+
}
|
|
28
|
+
if (!warnedDroppedKeys.current) {
|
|
29
|
+
const droppedKeys = Object.keys(pristine).filter((key) => !(key in decorated));
|
|
30
|
+
if (droppedKeys.length > 0) {
|
|
31
|
+
warnedDroppedKeys.current = true;
|
|
32
|
+
console.warn(`${seamName}: the decorated context is missing keys the connector provided: ` +
|
|
33
|
+
`${droppedKeys.join(", ")}. Spread the value you read ({ ...ctx, member }) so the ` +
|
|
34
|
+
"other members pass through (see the decorator type's TSDoc).");
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
});
|
|
38
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Returns the previous object while every member keeps its identity, so a caller can hold a whole
|
|
3
|
+
* model stable without naming its members. Preferred over `useMemo` here because the roster is the
|
|
4
|
+
* hook's return shape: a dependency array would have to restate all of it, and a missed entry would
|
|
5
|
+
* serve a stale member rather than fail loudly.
|
|
6
|
+
*
|
|
7
|
+
* @internal
|
|
8
|
+
*/
|
|
9
|
+
export declare function useShallowStable<T extends object>(value: T): T;
|
|
10
|
+
//# sourceMappingURL=useShallowStable.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useShallowStable.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/automations/shared/hooks/useShallowStable.ts"],"names":[],"mappings":"AAMA;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,CAQ9D"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
// (C) 2026 GoodData Corporation
|
|
2
|
+
import { useRef } from "react";
|
|
3
|
+
import { shallowEqualObjects } from "@gooddata/util";
|
|
4
|
+
/**
|
|
5
|
+
* Returns the previous object while every member keeps its identity, so a caller can hold a whole
|
|
6
|
+
* model stable without naming its members. Preferred over `useMemo` here because the roster is the
|
|
7
|
+
* hook's return shape: a dependency array would have to restate all of it, and a missed entry would
|
|
8
|
+
* serve a stale member rather than fail loudly.
|
|
9
|
+
*
|
|
10
|
+
* @internal
|
|
11
|
+
*/
|
|
12
|
+
export function useShallowStable(value) {
|
|
13
|
+
const previous = useRef(value);
|
|
14
|
+
if (!shallowEqualObjects(previous.current, value)) {
|
|
15
|
+
previous.current = value;
|
|
16
|
+
}
|
|
17
|
+
return previous.current;
|
|
18
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CreationPanel.d.ts","sourceRoot":"","sources":["../../../../src/presentation/dashboard/DashboardSidebar/CreationPanel.tsx"],"names":[],"mappings":"AAcA,OAAO,EACH,KAAK,2BAA2B,EAChC,KAAK,iCAAiC,EACtC,KAAK,yBAAyB,EAC9B,KAAK,0BAA0B,EAC/B,KAAK,uCAAuC,EAC/C,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EACH,KAAK,qCAAqC,EAC1C,KAAK,qCAAqC,EAC7C,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"CreationPanel.d.ts","sourceRoot":"","sources":["../../../../src/presentation/dashboard/DashboardSidebar/CreationPanel.tsx"],"names":[],"mappings":"AAcA,OAAO,EACH,KAAK,2BAA2B,EAChC,KAAK,iCAAiC,EACtC,KAAK,yBAAyB,EAC9B,KAAK,0BAA0B,EAC/B,KAAK,uCAAuC,EAC/C,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EACH,KAAK,qCAAqC,EAC1C,KAAK,qCAAqC,EAC7C,MAAM,4BAA4B,CAAC;AAMpC,UAAU,mBAAmB;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oCAAoC,CAAC,EAAE,qCAAqC,CAAC;IAC7E,oCAAoC,CAAC,EAAE,qCAAqC,CAAC;IAC7E,2BAA2B,CAAC,EAAE,2BAA2B,CAAC;IAC1D,yBAAyB,CAAC,EAAE,yBAAyB,CAAC;IACtD,0BAA0B,CAAC,EAAE,0BAA0B,CAAC;IACxD,uCAAuC,CAAC,EAAE,uCAAuC,CAAC;IAClF,iCAAiC,CAAC,EAAE,iCAAiC,CAAC;CACzE;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,mBAAmB,2CAoGvD"}
|
|
@@ -1,20 +1,25 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
// (C) 2007-2026 GoodData Corporation
|
|
3
|
-
import { useMemo } from "react";
|
|
3
|
+
import { useMemo, useState } from "react";
|
|
4
4
|
import cx from "classnames";
|
|
5
5
|
import { compact, sortBy } from "lodash-es";
|
|
6
|
-
import { FormattedMessage } from "react-intl";
|
|
7
|
-
import { Typography } from "@gooddata/sdk-ui-kit";
|
|
6
|
+
import { FormattedMessage, useIntl } from "react-intl";
|
|
7
|
+
import { Typography, UiIconButton } from "@gooddata/sdk-ui-kit";
|
|
8
8
|
import { useDashboardSelector } from "../../../model/react/DashboardStoreProvider.js";
|
|
9
9
|
import { selectSupportsRichTextWidgets } from "../../../model/store/backendCapabilities/backendCapabilitiesSelectors.js";
|
|
10
10
|
import { selectIsAiGenerating } from "../../../model/store/config/configSelectors.js";
|
|
11
11
|
import { selectIsNewDashboard } from "../../../model/store/meta/metaSelectors.js";
|
|
12
12
|
import { DraggableInsightList } from "./DraggableInsightList/DraggableInsightList.js";
|
|
13
|
+
import { SidebarCollapseToggle } from "./SidebarCollapseToggle.js";
|
|
14
|
+
import { useResizableSidebar } from "./SidebarResizeContext.js";
|
|
13
15
|
export function CreationPanel(props) {
|
|
14
16
|
const { className, WrapCreatePanelItemWithDragComponent, WrapInsightListItemWithDragComponent } = props;
|
|
17
|
+
const intl = useIntl();
|
|
15
18
|
const supportsRichText = useDashboardSelector(selectSupportsRichTextWidgets);
|
|
16
19
|
const isNewDashboard = useDashboardSelector(selectIsNewDashboard);
|
|
17
20
|
const isAiGenerating = useDashboardSelector(selectIsAiGenerating);
|
|
21
|
+
const { canCollapse, isCollapsed, setCollapsed } = useResizableSidebar();
|
|
22
|
+
const [focusSearch, setFocusSearch] = useState(undefined);
|
|
18
23
|
const AttributeFilterComponentSet = props.AttributeFilterComponentSet;
|
|
19
24
|
const InsightWidgetComponentSet = props.InsightWidgetComponentSet;
|
|
20
25
|
const RichTextWidgetComponentSet = props.RichTextWidgetComponentSet;
|
|
@@ -41,5 +46,13 @@ export function CreationPanel(props) {
|
|
|
41
46
|
WrapCreatePanelItemWithDragComponent,
|
|
42
47
|
isAiGenerating,
|
|
43
48
|
]);
|
|
44
|
-
return (_jsx("div", { className: cx("configuration-panel creation-panel", className), children: _jsxs("div", { className: "configuration-panel-content", children: [
|
|
49
|
+
return (_jsx("div", { className: cx("configuration-panel creation-panel", className), children: _jsxs("div", { className: "configuration-panel-content", children: [_jsxs("div", { className: "gd-creation-panel-header flex-panel-item-nostretch", children: [_jsx(Typography, { tagName: "h2", children: _jsx(FormattedMessage, { id: "visualizationsList.dragToAdd" }) }), canCollapse ? (_jsx(SidebarCollapseToggle, { isCollapsed: isCollapsed, onToggle: () => {
|
|
50
|
+
setFocusSearch(false);
|
|
51
|
+
setCollapsed(!isCollapsed);
|
|
52
|
+
} })) : null] }), _jsx("div", { className: "configuration-category drag-to-add", role: "group", "aria-label": intl.formatMessage({ id: "addPanel.newItem" }), children: _jsx("div", { className: "add-item-panel", children: addItemPanelItems }) }), _jsxs("div", { className: "configuration-category configuration-category-vis drag-to-add flex-panel-item-stretch", role: "group", "aria-label": intl.formatMessage({ id: "visualizationsList.savedVisualizations" }), children: [canCollapse ? (_jsx("div", { className: "gd-sidebar-rail-search", children: _jsx(UiIconButton, { icon: "search", label: intl.formatMessage({ id: "sidebar.search" }), size: "medium", variant: "tertiary", dataTestId: "s-dashboard-sidebar-rail-search", accessibilityConfig: {
|
|
53
|
+
ariaLabel: intl.formatMessage({ id: "sidebar.search" }),
|
|
54
|
+
}, onClick: () => {
|
|
55
|
+
setFocusSearch(true);
|
|
56
|
+
setCollapsed(false);
|
|
57
|
+
} }) })) : null, _jsx(DraggableInsightList, { WrapInsightListItemWithDragComponent: WrapInsightListItemWithDragComponent, recalculateSizeReference: className, searchAutofocus: !isCollapsed && (focusSearch ?? !isNewDashboard), disabled: isAiGenerating })] })] }) }));
|
|
45
58
|
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Collapses the dashboard sidebar to the icon rail and expands it back.
|
|
3
|
+
*
|
|
4
|
+
* @internal
|
|
5
|
+
*/
|
|
6
|
+
export declare function SidebarCollapseToggle({ isCollapsed, onToggle, }: {
|
|
7
|
+
isCollapsed: boolean;
|
|
8
|
+
onToggle: () => void;
|
|
9
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
10
|
+
//# sourceMappingURL=SidebarCollapseToggle.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SidebarCollapseToggle.d.ts","sourceRoot":"","sources":["../../../../src/presentation/dashboard/DashboardSidebar/SidebarCollapseToggle.tsx"],"names":[],"mappings":"AAMA;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,EAClC,WAAW,EACX,QAAQ,GACX,EAAE;IACC,WAAW,EAAE,OAAO,CAAC;IACrB,QAAQ,EAAE,MAAM,IAAI,CAAC;CACxB,2CAsBA"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
// (C) 2026 GoodData Corporation
|
|
3
|
+
import { useIntl } from "react-intl";
|
|
4
|
+
import { UiIconButton } from "@gooddata/sdk-ui-kit";
|
|
5
|
+
/**
|
|
6
|
+
* Collapses the dashboard sidebar to the icon rail and expands it back.
|
|
7
|
+
*
|
|
8
|
+
* @internal
|
|
9
|
+
*/
|
|
10
|
+
export function SidebarCollapseToggle({ isCollapsed, onToggle, }) {
|
|
11
|
+
const intl = useIntl();
|
|
12
|
+
const label = isCollapsed
|
|
13
|
+
? intl.formatMessage({ id: "sidebar.expand" })
|
|
14
|
+
: intl.formatMessage({ id: "sidebar.collapse" });
|
|
15
|
+
return (_jsx("div", { className: "gd-sidebar-collapse-toggle", children: _jsx(UiIconButton, { icon: isCollapsed ? "sidePanelExpand" : "sidePanelCollapse", label: label, size: "medium", variant: "tertiary", dataTestId: "s-dashboard-sidebar-collapse-toggle", accessibilityConfig: {
|
|
16
|
+
ariaLabel: label,
|
|
17
|
+
ariaExpanded: !isCollapsed,
|
|
18
|
+
}, onClick: onToggle }) }));
|
|
19
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SidebarConfigurationPanel.d.ts","sourceRoot":"","sources":["../../../../src/presentation/dashboard/DashboardSidebar/SidebarConfigurationPanel.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"SidebarConfigurationPanel.d.ts","sourceRoot":"","sources":["../../../../src/presentation/dashboard/DashboardSidebar/SidebarConfigurationPanel.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,OAAO,CAAC;AAa1C,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,IAAI,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,YAAY,GAAG,IAAI,CAmE3G"}
|
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import cx from "classnames";
|
|
2
3
|
import { useDashboardSelector } from "../../../model/react/DashboardStoreProvider.js";
|
|
3
4
|
import { useWidgetSelection } from "../../../model/react/useWidgetSelection.js";
|
|
4
5
|
import { selectSettings } from "../../../model/store/config/configSelectors.js";
|
|
5
6
|
import { CreationPanel } from "./CreationPanel.js";
|
|
6
7
|
import { FloatingToolbar } from "./FloatingToolbar.js";
|
|
8
|
+
import { SidebarCollapseToggle } from "./SidebarCollapseToggle.js";
|
|
7
9
|
import { SidebarResizeChrome } from "./SidebarResizeChrome.js";
|
|
10
|
+
import { useResizableSidebar } from "./SidebarResizeContext.js";
|
|
8
11
|
/**
|
|
9
12
|
* @internal
|
|
10
13
|
*/
|
|
@@ -15,12 +18,15 @@ export function SidebarConfigurationPanel(props) {
|
|
|
15
18
|
const settings = useDashboardSelector(selectSettings);
|
|
16
19
|
const enableEnhancedInsightPicker = settings?.enableEnhancedInsightPicker ?? false;
|
|
17
20
|
const enableDashboardSidebarResize = settings?.enableDashboardSidebarResize ?? false;
|
|
21
|
+
const { isCollapsed, canCollapse, setCollapsed, expandedWidth } = useResizableSidebar();
|
|
18
22
|
if (enableEnhancedInsightPicker) {
|
|
19
23
|
return _jsx(FloatingToolbar, {});
|
|
20
24
|
}
|
|
21
|
-
const content = (_jsxs(_Fragment, { children: [_jsx("div", { className: "flex-panel-full-height", children: _jsx(CreationPanel, { className: configurationPanelClassName, WrapCreatePanelItemWithDragComponent: WrapCreatePanelItemWithDragComponent, WrapInsightListItemWithDragComponent: WrapInsightListItemWithDragComponent, AttributeFilterComponentSet: AttributeFilterComponentSet, InsightWidgetComponentSet: InsightWidgetComponentSet, RichTextWidgetComponentSet: RichTextWidgetComponentSet, VisualizationSwitcherWidgetComponentSet: VisualizationSwitcherWidgetComponentSet, DashboardLayoutWidgetComponentSet: DashboardLayoutWidgetComponentSet }) }), _jsx(DeleteDropZoneComponent, {})] }));
|
|
25
|
+
const content = (_jsxs(_Fragment, { children: [canCollapse ? (_jsx("div", { className: "gd-sidebar-rail", children: _jsx(SidebarCollapseToggle, { isCollapsed: isCollapsed, onToggle: () => setCollapsed(!isCollapsed) }) })) : null, _jsx("div", { className: cx("gd-sidebar-panel", { "gd-sidebar-panel--collapsible": canCollapse }), children: _jsx("div", { className: "flex-panel-full-height", style: canCollapse ? { width: expandedWidth } : undefined, children: _jsx(CreationPanel, { className: configurationPanelClassName, WrapCreatePanelItemWithDragComponent: WrapCreatePanelItemWithDragComponent, WrapInsightListItemWithDragComponent: WrapInsightListItemWithDragComponent, AttributeFilterComponentSet: AttributeFilterComponentSet, InsightWidgetComponentSet: InsightWidgetComponentSet, RichTextWidgetComponentSet: RichTextWidgetComponentSet, VisualizationSwitcherWidgetComponentSet: VisualizationSwitcherWidgetComponentSet, DashboardLayoutWidgetComponentSet: DashboardLayoutWidgetComponentSet }) }) }), _jsx(DeleteDropZoneComponent, {})] }));
|
|
22
26
|
if (enableDashboardSidebarResize) {
|
|
23
27
|
return _jsx(SidebarResizeChrome, { onContainerClick: deselectWidgets, children: content });
|
|
24
28
|
}
|
|
25
|
-
return (_jsx("div", { className: "col gd-flex-item gd-sidebar-container",
|
|
29
|
+
return (_jsx("div", { className: cx("col gd-flex-item gd-sidebar-container", {
|
|
30
|
+
"gd-sidebar-container--collapsed": isCollapsed,
|
|
31
|
+
}), onClick: deselectWidgets, children: content }));
|
|
26
32
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SidebarResizeChrome.d.ts","sourceRoot":"","sources":["../../../../src/presentation/dashboard/DashboardSidebar/SidebarResizeChrome.tsx"],"names":[],"mappings":"AAEA,OAAO,EACH,KAAK,YAAY,EACjB,KAAK,SAAS,EAIjB,MAAM,OAAO,CAAC;AAkBf;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,mBAAmB,CAAC,EAChC,gBAAgB,EAChB,QAAQ,GACX,EAAE;IACC,gBAAgB,CAAC,EAAE,MAAM,IAAI,CAAC;IAC9B,QAAQ,EAAE,SAAS,CAAC;CACvB,GAAG,YAAY,
|
|
1
|
+
{"version":3,"file":"SidebarResizeChrome.d.ts","sourceRoot":"","sources":["../../../../src/presentation/dashboard/DashboardSidebar/SidebarResizeChrome.tsx"],"names":[],"mappings":"AAEA,OAAO,EACH,KAAK,YAAY,EACjB,KAAK,SAAS,EAIjB,MAAM,OAAO,CAAC;AAkBf;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,mBAAmB,CAAC,EAChC,gBAAgB,EAChB,QAAQ,GACX,EAAE;IACC,gBAAgB,CAAC,EAAE,MAAM,IAAI,CAAC;IAC9B,QAAQ,EAAE,SAAS,CAAC;CACvB,GAAG,YAAY,CAmHf"}
|
|
@@ -32,7 +32,7 @@ const handleSeparatorKeyboardNavigation = makeKeyboardNavigation({
|
|
|
32
32
|
export function SidebarResizeChrome({ onContainerClick, children, }) {
|
|
33
33
|
const [dragWidth, setDragWidth] = useState(null);
|
|
34
34
|
const dragOriginRef = useRef(null);
|
|
35
|
-
const { width, min, max, canResize, setWidth } = useResizableSidebar();
|
|
35
|
+
const { width, min, max, canResize, setWidth, isCollapsed } = useResizableSidebar();
|
|
36
36
|
const isDragging = dragWidth !== null;
|
|
37
37
|
// Tear down the drag without committing — used when the user presses Escape.
|
|
38
38
|
const endDrag = () => {
|
|
@@ -85,7 +85,9 @@ export function SidebarResizeChrome({ onContainerClick, children, }) {
|
|
|
85
85
|
return (_jsx("div", { className: cx("gd-resizable-sidebar", {
|
|
86
86
|
"gd-resizable-sidebar--resizable": canResize,
|
|
87
87
|
"gd-resizable-sidebar--dragging": isDragging,
|
|
88
|
-
}), style: { width }, children: _jsxs("div", { className: "col gd-flex-item gd-sidebar-container gd-sidebar-container--resizable",
|
|
88
|
+
}), style: { width }, children: _jsxs("div", { className: cx("col gd-flex-item gd-sidebar-container gd-sidebar-container--resizable", {
|
|
89
|
+
"gd-sidebar-container--collapsed": isCollapsed,
|
|
90
|
+
}), onClick: onContainerClick, children: [children, _jsx("button", { type: "button", style: {
|
|
89
91
|
"--drag-x": `${isDragging ? dragWidth : width}px`,
|
|
90
92
|
}, className: cx("gd-resizable-sidebar__handle", {
|
|
91
93
|
"gd-resizable-sidebar__handle--dragging": isDragging,
|
|
@@ -1,15 +1,20 @@
|
|
|
1
1
|
import { type ReactNode } from "react";
|
|
2
2
|
interface IResizableSidebar {
|
|
3
3
|
width: number;
|
|
4
|
+
expandedWidth: number;
|
|
4
5
|
min: number;
|
|
5
6
|
max: number;
|
|
6
7
|
canResize: boolean;
|
|
7
8
|
setWidth: (width: number) => void;
|
|
9
|
+
canCollapse: boolean;
|
|
10
|
+
isCollapsed: boolean;
|
|
11
|
+
setCollapsed: (collapsed: boolean) => void;
|
|
8
12
|
}
|
|
9
13
|
/**
|
|
10
|
-
* Computes the
|
|
11
|
-
*
|
|
12
|
-
*
|
|
14
|
+
* Computes the sidebar width state — both the drag-to-resize bounds and the collapsed/expanded
|
|
15
|
+
* state of the panel. When the sidebar is neither resizable nor collapsible (not edit mode, both
|
|
16
|
+
* features are off, or it is replaced by the enhanced insight picker) it returns the static
|
|
17
|
+
* {@link STATIC_SIDEBAR} — no window resize listener, no width math.
|
|
13
18
|
*
|
|
14
19
|
* Reads the config store, so it must be called below the dashboard loading gate where the config is
|
|
15
20
|
* initialized.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SidebarResizeContext.d.ts","sourceRoot":"","sources":["../../../../src/presentation/dashboard/DashboardSidebar/SidebarResizeContext.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,SAAS,
|
|
1
|
+
{"version":3,"file":"SidebarResizeContext.d.ts","sourceRoot":"","sources":["../../../../src/presentation/dashboard/DashboardSidebar/SidebarResizeContext.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,SAAS,EAA2D,MAAM,OAAO,CAAC;AAwChG,UAAU,iBAAiB;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,MAAM,CAAC;IACtB,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,WAAW,EAAE,OAAO,CAAC;IACrB,WAAW,EAAE,OAAO,CAAC;IACrB,YAAY,EAAE,CAAC,SAAS,EAAE,OAAO,KAAK,IAAI,CAAC;CAC9C;AAmBD;;;;;;;;;;GAUG;AACH,wBAAgB,wBAAwB,IAAI,iBAAiB,CAiE5D;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CAAC,EACrC,KAAK,EACL,QAAQ,GACX,EAAE;IACC,KAAK,EAAE,iBAAiB,CAAC;IACzB,QAAQ,EAAE,SAAS,CAAC;CACvB,2CAEA;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,IAAI,iBAAiB,CAEvD"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
2
|
// (C) 2026 GoodData Corporation
|
|
3
|
-
import { createContext, useContext, useEffect, useState } from "react";
|
|
3
|
+
import { createContext, useContext, useEffect, useMemo, useState } from "react";
|
|
4
4
|
import { clamp } from "lodash-es";
|
|
5
5
|
import { useLocalStorage } from "@gooddata/sdk-ui";
|
|
6
6
|
import { useDashboardSelector } from "../../../model/react/DashboardStoreProvider.js";
|
|
@@ -8,8 +8,10 @@ import { selectSettings } from "../../../model/store/config/configSelectors.js";
|
|
|
8
8
|
import { selectIsInEditMode } from "../../../model/store/renderMode/renderModeSelectors.js";
|
|
9
9
|
const SIDEBAR_MIN_WIDTH = 230;
|
|
10
10
|
const SIDEBAR_MAX_WIDTH = 500;
|
|
11
|
+
const SIDEBAR_COLLAPSED_WIDTH = 48;
|
|
11
12
|
const EDITOR_MIN_WIDTH = 960;
|
|
12
|
-
const
|
|
13
|
+
const WIDTH_STORAGE_KEY = "gd-dashboard-sidebar-width";
|
|
14
|
+
const COLLAPSED_STORAGE_KEY = "gd-dashboard-sidebar-collapsed";
|
|
13
15
|
/**
|
|
14
16
|
* Returns the current `window.innerWidth`, kept in sync with the `resize` event. Only attaches the
|
|
15
17
|
* listener while `active`, so a non-resizable sidebar triggers no resize-driven re-renders.
|
|
@@ -27,21 +29,26 @@ function useWindowWidth(active) {
|
|
|
27
29
|
}, [active]);
|
|
28
30
|
return width;
|
|
29
31
|
}
|
|
30
|
-
// Stable value used whenever the sidebar is
|
|
31
|
-
//
|
|
32
|
-
const
|
|
32
|
+
// Stable value used whenever the sidebar is neither resizable nor collapsible: it is fixed at the
|
|
33
|
+
// minimum width and ignores writes — so consumers never have to null-check.
|
|
34
|
+
const STATIC_SIDEBAR = {
|
|
33
35
|
width: SIDEBAR_MIN_WIDTH,
|
|
36
|
+
expandedWidth: SIDEBAR_MIN_WIDTH,
|
|
34
37
|
min: SIDEBAR_MIN_WIDTH,
|
|
35
38
|
max: SIDEBAR_MIN_WIDTH,
|
|
36
39
|
canResize: false,
|
|
37
40
|
setWidth: () => { },
|
|
41
|
+
canCollapse: false,
|
|
42
|
+
isCollapsed: false,
|
|
43
|
+
setCollapsed: () => { },
|
|
38
44
|
};
|
|
39
|
-
const ResizableSidebarContext = createContext(
|
|
45
|
+
const ResizableSidebarContext = createContext(STATIC_SIDEBAR);
|
|
40
46
|
ResizableSidebarContext.displayName = "ResizableSidebarContext";
|
|
41
47
|
/**
|
|
42
|
-
* Computes the
|
|
43
|
-
*
|
|
44
|
-
*
|
|
48
|
+
* Computes the sidebar width state — both the drag-to-resize bounds and the collapsed/expanded
|
|
49
|
+
* state of the panel. When the sidebar is neither resizable nor collapsible (not edit mode, both
|
|
50
|
+
* features are off, or it is replaced by the enhanced insight picker) it returns the static
|
|
51
|
+
* {@link STATIC_SIDEBAR} — no window resize listener, no width math.
|
|
45
52
|
*
|
|
46
53
|
* Reads the config store, so it must be called below the dashboard loading gate where the config is
|
|
47
54
|
* initialized.
|
|
@@ -53,23 +60,56 @@ export function useResizableSidebarState() {
|
|
|
53
60
|
const isEditMode = useDashboardSelector(selectIsInEditMode);
|
|
54
61
|
const isSidebarResizeEnabled = settings?.enableDashboardSidebarResize ?? false;
|
|
55
62
|
const enableEnhancedInsightPicker = settings?.enableEnhancedInsightPicker ?? false;
|
|
56
|
-
const
|
|
63
|
+
const isGenAiRightPanelEnabled = settings?.enableGenAiRightPanel ?? false;
|
|
64
|
+
const hasCreationPanel = isEditMode && !enableEnhancedInsightPicker;
|
|
65
|
+
const isResizable = hasCreationPanel && isSidebarResizeEnabled;
|
|
66
|
+
const canCollapse = hasCreationPanel && isGenAiRightPanelEnabled;
|
|
57
67
|
const containerWidth = useWindowWidth(isResizable);
|
|
58
|
-
const [persistedWidth, setPersistedWidth] = useLocalStorage(
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
68
|
+
const [persistedWidth, setPersistedWidth] = useLocalStorage(WIDTH_STORAGE_KEY, SIDEBAR_MIN_WIDTH);
|
|
69
|
+
const [persistedCollapsed, setPersistedCollapsed] = useLocalStorage(COLLAPSED_STORAGE_KEY, false);
|
|
70
|
+
return useMemo(() => {
|
|
71
|
+
const max = clamp(containerWidth - EDITOR_MIN_WIDTH, SIDEBAR_MIN_WIDTH, SIDEBAR_MAX_WIDTH);
|
|
72
|
+
const expandedWidth = isResizable ? clamp(persistedWidth, SIDEBAR_MIN_WIDTH, max) : SIDEBAR_MIN_WIDTH;
|
|
73
|
+
if (canCollapse && persistedCollapsed) {
|
|
74
|
+
return {
|
|
75
|
+
width: SIDEBAR_COLLAPSED_WIDTH,
|
|
76
|
+
expandedWidth,
|
|
77
|
+
min: SIDEBAR_COLLAPSED_WIDTH,
|
|
78
|
+
max: SIDEBAR_COLLAPSED_WIDTH,
|
|
79
|
+
canResize: false,
|
|
80
|
+
setWidth: () => { },
|
|
81
|
+
canCollapse,
|
|
82
|
+
isCollapsed: true,
|
|
83
|
+
setCollapsed: setPersistedCollapsed,
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
if (!isResizable) {
|
|
87
|
+
return canCollapse
|
|
88
|
+
? { ...STATIC_SIDEBAR, canCollapse, setCollapsed: setPersistedCollapsed }
|
|
89
|
+
: STATIC_SIDEBAR;
|
|
90
|
+
}
|
|
91
|
+
return {
|
|
92
|
+
width: expandedWidth,
|
|
93
|
+
expandedWidth,
|
|
94
|
+
min: SIDEBAR_MIN_WIDTH,
|
|
95
|
+
max,
|
|
96
|
+
canResize: max > SIDEBAR_MIN_WIDTH,
|
|
97
|
+
// Clamp every write to the current bounds, so callers can't persist an out-of-range width and
|
|
98
|
+
// a non-resizable sidebar (max === min) collapses any value back to the minimum.
|
|
99
|
+
setWidth: (next) => setPersistedWidth(clamp(next, SIDEBAR_MIN_WIDTH, max)),
|
|
100
|
+
canCollapse,
|
|
101
|
+
isCollapsed: false,
|
|
102
|
+
setCollapsed: setPersistedCollapsed,
|
|
103
|
+
};
|
|
104
|
+
}, [
|
|
105
|
+
canCollapse,
|
|
106
|
+
persistedCollapsed,
|
|
107
|
+
setPersistedCollapsed,
|
|
108
|
+
isResizable,
|
|
109
|
+
containerWidth,
|
|
110
|
+
persistedWidth,
|
|
111
|
+
setPersistedWidth,
|
|
112
|
+
]);
|
|
73
113
|
}
|
|
74
114
|
/**
|
|
75
115
|
* Shares the resize state produced by {@link useResizableSidebarState} with descendants such as the
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DashboardInner.d.ts","sourceRoot":"","sources":["../../../../src/presentation/dashboard/components/DashboardInner.tsx"],"names":[],"mappings":"AA4CA,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,aAAa,CAAC;AAQnD,wBAAgB,cAAc,CAAC,KAAK,EAAE,eAAe,
|
|
1
|
+
{"version":3,"file":"DashboardInner.d.ts","sourceRoot":"","sources":["../../../../src/presentation/dashboard/components/DashboardInner.tsx"],"names":[],"mappings":"AA4CA,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,aAAa,CAAC;AAQnD,wBAAgB,cAAc,CAAC,KAAK,EAAE,eAAe,2CAyHpD"}
|
|
@@ -60,10 +60,10 @@ export function DashboardInner(props) {
|
|
|
60
60
|
"gd-dash-content--density-compact": density === "compact",
|
|
61
61
|
});
|
|
62
62
|
const resizableSidebar = useResizableSidebarState();
|
|
63
|
-
// When the sidebar can be resized, expose its live width so the
|
|
64
|
-
// it (see `--gd-dashboard-sidebar-width` in sdk-dashboard.scss).
|
|
65
|
-
// content falls back to the static sidebar width.
|
|
66
|
-
const dashboardsRootStyle = resizableSidebar.canResize
|
|
63
|
+
// When the sidebar can be resized or is collapsed to the icon rail, expose its live width so the
|
|
64
|
+
// sibling content area can subtract it (see `--gd-dashboard-sidebar-width` in sdk-dashboard.scss).
|
|
65
|
+
// Otherwise leave it unset so the content falls back to the static per-breakpoint sidebar width.
|
|
66
|
+
const dashboardsRootStyle = resizableSidebar.canResize || resizableSidebar.isCollapsed
|
|
67
67
|
? {
|
|
68
68
|
"--gd-dashboard-sidebar-width": `${resizableSidebar.width}px`,
|
|
69
69
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DashboardRenderer.d.ts","sourceRoot":"","sources":["../../../../src/presentation/dashboard/components/DashboardRenderer.tsx"],"names":[],"mappings":"AA8CA,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,aAAa,CAAC;AAqEnD;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,eAAe,
|
|
1
|
+
{"version":3,"file":"DashboardRenderer.d.ts","sourceRoot":"","sources":["../../../../src/presentation/dashboard/components/DashboardRenderer.tsx"],"names":[],"mappings":"AA8CA,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,aAAa,CAAC;AAqEnD;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,eAAe,2CA0MvD"}
|
|
@@ -92,9 +92,9 @@ function shouldUseThemeProvider(props, hasThemeProvider) {
|
|
|
92
92
|
* @internal
|
|
93
93
|
*/
|
|
94
94
|
export function DashboardRenderer(props) {
|
|
95
|
-
const { backend, workspace, hasThemeProvider, dashboardOrRef, attributeFilterProvider, dateFilterProvider, measureValueFilterProvider, filterGroupProvider, widgetProvider, insightProvider, insightBodyProvider, insightMenuButtonProvider, dashboardContentProvider, insightMenuProvider, richTextMenuProvider, richTextMenuTitleProvider, insightMenuTitleProvider, insightWidgetComponentSet, attributeFilterComponentSet, dateFilterComponentSet, richTextProvider, visualizationSwitcherProvider, richTextWidgetComponentSet, visualizationSwitcherWidgetComponentSet, visualizationSwitcherToolbarComponentProvider, dashboardLayoutWidgetComponentSet, showAsTableButtonComponentProvider, drillDialogExportDropdownProvider, } = useDashboard(props);
|
|
95
|
+
const { backend, workspace, hasThemeProvider, dashboardOrRef, attributeFilterProvider, dateFilterProvider, measureValueFilterProvider, filterGroupProvider, widgetProvider, insightProvider, insightBodyProvider, insightMenuButtonProvider, dashboardContentProvider, insightMenuProvider, richTextMenuProvider, richTextMenuTitleProvider, insightMenuTitleProvider, insightWidgetComponentSet, attributeFilterComponentSet, dateFilterComponentSet, richTextProvider, restrictedPlaceholderProvider, visualizationSwitcherProvider, richTextWidgetComponentSet, visualizationSwitcherWidgetComponentSet, visualizationSwitcherToolbarComponentProvider, dashboardLayoutWidgetComponentSet, showAsTableButtonComponentProvider, drillDialogExportDropdownProvider, } = useDashboard(props);
|
|
96
96
|
const components = resolveComponentsWithDefaults(props);
|
|
97
|
-
const dashboardRender = (_jsx(BackendProvider, { backend: backend, children: _jsx(WorkspaceProvider, { workspace: workspace, children: _jsx(OverlayControllerProvider, { overlayController: overlayController, children: _jsx(DashboardStoreProvider, { backend: props.backend, workspace: props.workspace, dashboard: dashboardOrRef, persistedDashboard: props.persistedDashboard, filterContextRef: props.filterContextRef, eventHandlers: props.eventHandlers, config: props.config, permissions: props.permissions, onStateChange: props.onStateChange, onEventingInitialized: props.onEventingInitialized, additionalReduxContext: props.additionalReduxContext, customizationFns: props.customizationFns, widgetsOverlayFn: props.widgetsOverlayFn, initialTabId: props.initialTabId, children: _jsx(ExportTemplateDialogContextProvider, { children: _jsx(ExportXlsxDialogContextProvider, { children: _jsx(ExportCsvDialogContextProvider, { children: _jsx(ExportTabularPdfDialogContextProvider, { children: _jsx(DashboardCustomizationsProvider, { insightMenuItemsProvider: props.insightMenuItemsProvider, richTextMenuItemsProvider: props.richTextMenuItemsProvider, existingExportTransformFn: props.customizationFns?.existingExportTransformFn, slideConfig: props.config?.slideConfig, children: _jsx(DashboardComponentsProvider, { ErrorComponent: components.ErrorComponent, LoadingComponent: components.LoadingComponent, LayoutComponent: components.LayoutComponent, InsightComponentProvider: insightProvider, InsightBodyComponentProvider: insightBodyProvider, InsightMenuButtonComponentProvider: insightMenuButtonProvider, InsightMenuTitleComponentProvider: insightMenuTitleProvider, InsightMenuComponentProvider: insightMenuProvider, VisualizationSwitcherToolbarComponentProvider: visualizationSwitcherToolbarComponentProvider, RichTextComponentProvider: richTextProvider, RichTextMenuComponentProvider: richTextMenuProvider, RichTextMenuTitleComponentProvider: richTextMenuTitleProvider, VisualizationSwitcherComponentProvider: visualizationSwitcherProvider, WidgetComponentProvider: widgetProvider, ButtonBarComponent: components.ButtonBarComponent, MenuButtonComponent: components.MenuButtonComponent, TopBarComponent: components.TopBarComponent, ToolbarComponent: components.ToolbarComponent, TitleComponent: components.TitleComponent, ScheduledEmailDialogComponent: components.ScheduledEmailDialogComponent, ScheduledEmailDialogContextDecoratorComponent: components.ScheduledEmailDialogContextDecoratorComponent, ScheduledEmailManagementDialogComponent: components.ScheduledEmailManagementDialogComponent, ScheduledEmailManagementDialogContextDecoratorComponent: components.ScheduledEmailManagementDialogContextDecoratorComponent, ShareDialogComponent: components.ShareDialogComponent, AlertingManagementDialogComponent: components.AlertingManagementDialogComponent, AlertingManagementDialogContextDecoratorComponent: components.AlertingManagementDialogContextDecoratorComponent, AutomationsContextDecoratorComponent: components.AutomationsContextDecoratorComponent, AlertingDialogComponent: components.AlertingDialogComponent, AlertingDialogContextDecoratorComponent: components.AlertingDialogContextDecoratorComponent, SaveAsDialogComponent: components.SaveAsDialogComponent, DashboardAttributeFilterComponentProvider: attributeFilterProvider, DashboardDateFilterComponentProvider: dateFilterProvider, DashboardMeasureValueFilterComponentProvider: measureValueFilterProvider, DashboardFilterGroupComponentProvider: filterGroupProvider, FilterBarComponent: components.FilterBarComponent, SidebarComponent: components.SidebarComponent, InsightWidgetComponentSet: insightWidgetComponentSet, RichTextWidgetComponentSet: richTextWidgetComponentSet, VisualizationSwitcherWidgetComponentSet: visualizationSwitcherWidgetComponentSet, DashboardLayoutWidgetComponentSet: dashboardLayoutWidgetComponentSet, AttributeFilterComponentSet: attributeFilterComponentSet, DateFilterComponentSet: dateFilterComponentSet, EmptyLayoutDropZoneBodyComponent: components.EmptyLayoutDropZoneBodyComponent, SaveButtonComponent: components.SaveButtonComponent, DashboardContentComponentProvider: dashboardContentProvider, SettingButtonComponent: components.SettingButtonComponent, DashboardSettingsDialogComponent: components.DashboardSettingsDialogComponent, ShowAsTableButtonComponentProvider: showAsTableButtonComponentProvider, DrillDialogExportDropdownComponentProvider: drillDialogExportDropdownProvider, children: _jsx(DashboardConfigProvider, { menuButtonConfig: props.menuButtonConfig, children: _jsx(DndProvider, { backend: HTML5Backend, children: _jsx(LayoutResizeStateProvider, { children: _jsx(DashboardItemPathAndSizeProvider, { children: _jsxs(HoveredWidgetProvider, { children: [_jsx(DensityInitializer, {}), _jsx(DashboardLoading, { ...props })] }) }) }) }) }) }) }) }) }) }) }) }) }) }) }));
|
|
97
|
+
const dashboardRender = (_jsx(BackendProvider, { backend: backend, children: _jsx(WorkspaceProvider, { workspace: workspace, children: _jsx(OverlayControllerProvider, { overlayController: overlayController, children: _jsx(DashboardStoreProvider, { backend: props.backend, workspace: props.workspace, dashboard: dashboardOrRef, persistedDashboard: props.persistedDashboard, filterContextRef: props.filterContextRef, eventHandlers: props.eventHandlers, config: props.config, permissions: props.permissions, onStateChange: props.onStateChange, onEventingInitialized: props.onEventingInitialized, additionalReduxContext: props.additionalReduxContext, customizationFns: props.customizationFns, widgetsOverlayFn: props.widgetsOverlayFn, initialTabId: props.initialTabId, children: _jsx(ExportTemplateDialogContextProvider, { children: _jsx(ExportXlsxDialogContextProvider, { children: _jsx(ExportCsvDialogContextProvider, { children: _jsx(ExportTabularPdfDialogContextProvider, { children: _jsx(DashboardCustomizationsProvider, { insightMenuItemsProvider: props.insightMenuItemsProvider, richTextMenuItemsProvider: props.richTextMenuItemsProvider, existingExportTransformFn: props.customizationFns?.existingExportTransformFn, slideConfig: props.config?.slideConfig, children: _jsx(DashboardComponentsProvider, { ErrorComponent: components.ErrorComponent, LoadingComponent: components.LoadingComponent, LayoutComponent: components.LayoutComponent, InsightComponentProvider: insightProvider, InsightBodyComponentProvider: insightBodyProvider, InsightMenuButtonComponentProvider: insightMenuButtonProvider, InsightMenuTitleComponentProvider: insightMenuTitleProvider, InsightMenuComponentProvider: insightMenuProvider, VisualizationSwitcherToolbarComponentProvider: visualizationSwitcherToolbarComponentProvider, RichTextComponentProvider: richTextProvider, RestrictedPlaceholderComponentProvider: restrictedPlaceholderProvider, RichTextMenuComponentProvider: richTextMenuProvider, RichTextMenuTitleComponentProvider: richTextMenuTitleProvider, VisualizationSwitcherComponentProvider: visualizationSwitcherProvider, WidgetComponentProvider: widgetProvider, ButtonBarComponent: components.ButtonBarComponent, MenuButtonComponent: components.MenuButtonComponent, TopBarComponent: components.TopBarComponent, ToolbarComponent: components.ToolbarComponent, TitleComponent: components.TitleComponent, ScheduledEmailDialogComponent: components.ScheduledEmailDialogComponent, ScheduledEmailDialogContextDecoratorComponent: components.ScheduledEmailDialogContextDecoratorComponent, ScheduledEmailManagementDialogComponent: components.ScheduledEmailManagementDialogComponent, ScheduledEmailManagementDialogContextDecoratorComponent: components.ScheduledEmailManagementDialogContextDecoratorComponent, ShareDialogComponent: components.ShareDialogComponent, AlertingManagementDialogComponent: components.AlertingManagementDialogComponent, AlertingManagementDialogContextDecoratorComponent: components.AlertingManagementDialogContextDecoratorComponent, AutomationsContextDecoratorComponent: components.AutomationsContextDecoratorComponent, AlertingDialogComponent: components.AlertingDialogComponent, AlertingDialogContextDecoratorComponent: components.AlertingDialogContextDecoratorComponent, SaveAsDialogComponent: components.SaveAsDialogComponent, DashboardAttributeFilterComponentProvider: attributeFilterProvider, DashboardDateFilterComponentProvider: dateFilterProvider, DashboardMeasureValueFilterComponentProvider: measureValueFilterProvider, DashboardFilterGroupComponentProvider: filterGroupProvider, FilterBarComponent: components.FilterBarComponent, SidebarComponent: components.SidebarComponent, InsightWidgetComponentSet: insightWidgetComponentSet, RichTextWidgetComponentSet: richTextWidgetComponentSet, VisualizationSwitcherWidgetComponentSet: visualizationSwitcherWidgetComponentSet, DashboardLayoutWidgetComponentSet: dashboardLayoutWidgetComponentSet, AttributeFilterComponentSet: attributeFilterComponentSet, DateFilterComponentSet: dateFilterComponentSet, EmptyLayoutDropZoneBodyComponent: components.EmptyLayoutDropZoneBodyComponent, SaveButtonComponent: components.SaveButtonComponent, DashboardContentComponentProvider: dashboardContentProvider, SettingButtonComponent: components.SettingButtonComponent, DashboardSettingsDialogComponent: components.DashboardSettingsDialogComponent, ShowAsTableButtonComponentProvider: showAsTableButtonComponentProvider, DrillDialogExportDropdownComponentProvider: drillDialogExportDropdownProvider, children: _jsx(DashboardConfigProvider, { menuButtonConfig: props.menuButtonConfig, children: _jsx(DndProvider, { backend: HTML5Backend, children: _jsx(LayoutResizeStateProvider, { children: _jsx(DashboardItemPathAndSizeProvider, { children: _jsxs(HoveredWidgetProvider, { children: [_jsx(DensityInitializer, {}), _jsx(DashboardLoading, { ...props })] }) }) }) }) }) }) }) }) }) }) }) }) }) }) }));
|
|
98
98
|
if (shouldUseThemeProvider(props, hasThemeProvider)) {
|
|
99
99
|
return (_jsx(ThemeProvider, { theme: props.theme, modifier: props.themeModifier ?? defaultDashboardThemeModifier, backend: backend, workspace: workspace,
|
|
100
100
|
// Do not remove global theme styles on unmount, if the theme is provided as a prop,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { type IAnalyticalBackend } from "@gooddata/sdk-backend-spi";
|
|
2
2
|
import { type IdentifierRef, type UriRef } from "@gooddata/sdk-model";
|
|
3
3
|
import { type AttributeFilterComponentSet, type DashboardLayoutWidgetComponentSet, type DateFilterComponentSet, type InsightWidgetComponentSet, type RichTextWidgetComponentSet, type VisualizationSwitcherWidgetComponentSet } from "../../componentDefinition/types.js";
|
|
4
|
-
import { type AttributeFilterComponentProvider, type DashboardContentComponentProvider, type DashboardLayoutComponentProvider, type DateFilterComponentProvider, type DrillDialogExportDropdownComponentProvider, type FilterGroupComponentProvider, type InsightBodyComponentProvider, type InsightComponentProvider, type InsightMenuButtonComponentProvider, type InsightMenuComponentProvider, type InsightMenuTitleComponentProvider, type MeasureValueFilterComponentProvider, type RichTextComponentProvider, type RichTextMenuComponentProvider, type RichTextMenuTitleComponentProvider, type ShowAsTableButtonComponentProvider, type VisualizationSwitcherComponentProvider, type VisualizationSwitcherToolbarComponentProvider, type WidgetComponentProvider } from "../../dashboardContexts/types.js";
|
|
4
|
+
import { type AttributeFilterComponentProvider, type DashboardContentComponentProvider, type DashboardLayoutComponentProvider, type DateFilterComponentProvider, type DrillDialogExportDropdownComponentProvider, type FilterGroupComponentProvider, type InsightBodyComponentProvider, type InsightComponentProvider, type InsightMenuButtonComponentProvider, type InsightMenuComponentProvider, type InsightMenuTitleComponentProvider, type MeasureValueFilterComponentProvider, type RestrictedPlaceholderComponentProvider, type RichTextComponentProvider, type RichTextMenuComponentProvider, type RichTextMenuTitleComponentProvider, type ShowAsTableButtonComponentProvider, type VisualizationSwitcherComponentProvider, type VisualizationSwitcherToolbarComponentProvider, type WidgetComponentProvider } from "../../dashboardContexts/types.js";
|
|
5
5
|
import { type IDashboardProps } from "../types.js";
|
|
6
6
|
interface IUseDashboardResult {
|
|
7
7
|
backend: IAnalyticalBackend;
|
|
@@ -25,6 +25,7 @@ interface IUseDashboardResult {
|
|
|
25
25
|
attributeFilterComponentSet: AttributeFilterComponentSet;
|
|
26
26
|
dateFilterComponentSet: DateFilterComponentSet;
|
|
27
27
|
richTextProvider: RichTextComponentProvider;
|
|
28
|
+
restrictedPlaceholderProvider: RestrictedPlaceholderComponentProvider;
|
|
28
29
|
richTextWidgetComponentSet: RichTextWidgetComponentSet;
|
|
29
30
|
visualizationSwitcherProvider: VisualizationSwitcherComponentProvider;
|
|
30
31
|
visualizationSwitcherWidgetComponentSet: VisualizationSwitcherWidgetComponentSet;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useDashboard.d.ts","sourceRoot":"","sources":["../../../../src/presentation/dashboard/hooks/useDashboard.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,MAAM,EAAS,MAAM,qBAAqB,CAAC;AAI7E,OAAO,EACH,KAAK,2BAA2B,EAChC,KAAK,iCAAiC,EACtC,KAAK,sBAAsB,EAC3B,KAAK,yBAAyB,EAC9B,KAAK,0BAA0B,EAC/B,KAAK,uCAAuC,EAC/C,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EACH,KAAK,gCAAgC,EACrC,KAAK,iCAAiC,EACtC,KAAK,gCAAgC,EACrC,KAAK,2BAA2B,EAChC,KAAK,0CAA0C,EAC/C,KAAK,4BAA4B,EACjC,KAAK,4BAA4B,EACjC,KAAK,wBAAwB,EAC7B,KAAK,kCAAkC,EACvC,KAAK,4BAA4B,EACjC,KAAK,iCAAiC,EACtC,KAAK,mCAAmC,EACxC,KAAK,yBAAyB,EAC9B,KAAK,6BAA6B,EAClC,KAAK,kCAAkC,EACvC,KAAK,kCAAkC,EACvC,KAAK,sCAAsC,EAC3C,KAAK,6CAA6C,EAClD,KAAK,uBAAuB,EAC/B,MAAM,kCAAkC,CAAC;
|
|
1
|
+
{"version":3,"file":"useDashboard.d.ts","sourceRoot":"","sources":["../../../../src/presentation/dashboard/hooks/useDashboard.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,MAAM,EAAS,MAAM,qBAAqB,CAAC;AAI7E,OAAO,EACH,KAAK,2BAA2B,EAChC,KAAK,iCAAiC,EACtC,KAAK,sBAAsB,EAC3B,KAAK,yBAAyB,EAC9B,KAAK,0BAA0B,EAC/B,KAAK,uCAAuC,EAC/C,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EACH,KAAK,gCAAgC,EACrC,KAAK,iCAAiC,EACtC,KAAK,gCAAgC,EACrC,KAAK,2BAA2B,EAChC,KAAK,0CAA0C,EAC/C,KAAK,4BAA4B,EACjC,KAAK,4BAA4B,EACjC,KAAK,wBAAwB,EAC7B,KAAK,kCAAkC,EACvC,KAAK,4BAA4B,EACjC,KAAK,iCAAiC,EACtC,KAAK,mCAAmC,EACxC,KAAK,sCAAsC,EAC3C,KAAK,yBAAyB,EAC9B,KAAK,6BAA6B,EAClC,KAAK,kCAAkC,EACvC,KAAK,kCAAkC,EACvC,KAAK,sCAAsC,EAC3C,KAAK,6CAA6C,EAClD,KAAK,uBAAuB,EAC/B,MAAM,kCAAkC,CAAC;AA2B1C,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,aAAa,CAAC;AAEnD,UAAU,mBAAmB;IACzB,OAAO,EAAE,kBAAkB,CAAC;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CAAC;IACnD,gBAAgB,EAAE,OAAO,CAAC;IAC1B,uBAAuB,EAAE,gCAAgC,CAAC;IAC1D,mBAAmB,EAAE,4BAA4B,CAAC;IAClD,kBAAkB,EAAE,2BAA2B,CAAC;IAChD,0BAA0B,EAAE,mCAAmC,CAAC;IAChE,cAAc,EAAE,uBAAuB,CAAC;IACxC,eAAe,EAAE,wBAAwB,CAAC;IAC1C,mBAAmB,EAAE,4BAA4B,CAAC;IAClD,yBAAyB,EAAE,kCAAkC,CAAC;IAC9D,mBAAmB,EAAE,4BAA4B,CAAC;IAClD,oBAAoB,EAAE,6BAA6B,CAAC;IACpD,wBAAwB,EAAE,iCAAiC,CAAC;IAC5D,yBAAyB,EAAE,kCAAkC,CAAC;IAC9D,wBAAwB,EAAE,iCAAiC,CAAC;IAC5D,yBAAyB,EAAE,yBAAyB,CAAC;IACrD,2BAA2B,EAAE,2BAA2B,CAAC;IACzD,sBAAsB,EAAE,sBAAsB,CAAC;IAC/C,gBAAgB,EAAE,yBAAyB,CAAC;IAC5C,6BAA6B,EAAE,sCAAsC,CAAC;IACtE,0BAA0B,EAAE,0BAA0B,CAAC;IACvD,6BAA6B,EAAE,sCAAsC,CAAC;IACtE,uCAAuC,EAAE,uCAAuC,CAAC;IACjF,6CAA6C,EAAE,6CAA6C,CAAC;IAC7F,uBAAuB,EAAE,gCAAgC,CAAC;IAC1D,iCAAiC,EAAE,iCAAiC,CAAC;IACrE,kCAAkC,EAAE,kCAAkC,CAAC;IACvE,iCAAiC,EAAE,0CAA0C,CAAC;CACjF;AAED,eAAO,MAAM,YAAY,UAAW,eAAe,KAAG,mBAqQrD,CAAC"}
|