@gooddata/sdk-ui-dashboard 11.56.0-alpha.7 → 11.56.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm/__version.d.ts +1 -1
- package/esm/__version.d.ts.map +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/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/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/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 -0
- package/esm/presentation/localization/bundles/de-DE.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/de-DE.localization-bundle.js +5 -0
- package/esm/presentation/localization/bundles/en-AU.localization-bundle.d.ts +5 -0
- package/esm/presentation/localization/bundles/en-AU.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/en-AU.localization-bundle.js +5 -0
- package/esm/presentation/localization/bundles/en-GB.localization-bundle.d.ts +5 -0
- package/esm/presentation/localization/bundles/en-GB.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/en-GB.localization-bundle.js +5 -0
- 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 -0
- package/esm/presentation/localization/bundles/es-419.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/es-419.localization-bundle.js +5 -0
- package/esm/presentation/localization/bundles/es-ES.localization-bundle.d.ts +5 -0
- package/esm/presentation/localization/bundles/es-ES.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/es-ES.localization-bundle.js +5 -0
- package/esm/presentation/localization/bundles/fi-FI.localization-bundle.d.ts +5 -0
- package/esm/presentation/localization/bundles/fi-FI.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/fi-FI.localization-bundle.js +5 -0
- package/esm/presentation/localization/bundles/fr-CA.localization-bundle.d.ts +5 -0
- package/esm/presentation/localization/bundles/fr-CA.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/fr-CA.localization-bundle.js +5 -0
- package/esm/presentation/localization/bundles/fr-FR.localization-bundle.d.ts +5 -0
- package/esm/presentation/localization/bundles/fr-FR.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/fr-FR.localization-bundle.js +5 -0
- package/esm/presentation/localization/bundles/id-ID.localization-bundle.d.ts +5 -0
- package/esm/presentation/localization/bundles/id-ID.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/id-ID.localization-bundle.js +5 -0
- package/esm/presentation/localization/bundles/it-IT.localization-bundle.d.ts +5 -0
- package/esm/presentation/localization/bundles/it-IT.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/it-IT.localization-bundle.js +5 -0
- package/esm/presentation/localization/bundles/ja-JP.localization-bundle.d.ts +5 -0
- package/esm/presentation/localization/bundles/ja-JP.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/ja-JP.localization-bundle.js +5 -0
- package/esm/presentation/localization/bundles/ko-KR.localization-bundle.d.ts +5 -0
- package/esm/presentation/localization/bundles/ko-KR.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/ko-KR.localization-bundle.js +5 -0
- package/esm/presentation/localization/bundles/nl-NL.localization-bundle.d.ts +5 -0
- package/esm/presentation/localization/bundles/nl-NL.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/nl-NL.localization-bundle.js +5 -0
- package/esm/presentation/localization/bundles/pl-PL.localization-bundle.d.ts +5 -0
- package/esm/presentation/localization/bundles/pl-PL.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/pl-PL.localization-bundle.js +5 -0
- package/esm/presentation/localization/bundles/pt-BR.localization-bundle.d.ts +5 -0
- package/esm/presentation/localization/bundles/pt-BR.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/pt-BR.localization-bundle.js +5 -0
- package/esm/presentation/localization/bundles/pt-PT.localization-bundle.d.ts +5 -0
- package/esm/presentation/localization/bundles/pt-PT.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/pt-PT.localization-bundle.js +5 -0
- package/esm/presentation/localization/bundles/ru-RU.localization-bundle.d.ts +5 -0
- package/esm/presentation/localization/bundles/ru-RU.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/ru-RU.localization-bundle.js +5 -0
- package/esm/presentation/localization/bundles/sl-SI.localization-bundle.d.ts +5 -0
- package/esm/presentation/localization/bundles/sl-SI.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/sl-SI.localization-bundle.js +5 -0
- package/esm/presentation/localization/bundles/th-TH.localization-bundle.d.ts +5 -0
- package/esm/presentation/localization/bundles/th-TH.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/th-TH.localization-bundle.js +5 -0
- package/esm/presentation/localization/bundles/tr-TR.localization-bundle.d.ts +5 -0
- package/esm/presentation/localization/bundles/tr-TR.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/tr-TR.localization-bundle.js +5 -0
- package/esm/presentation/localization/bundles/uk-UA.localization-bundle.d.ts +5 -0
- package/esm/presentation/localization/bundles/uk-UA.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/uk-UA.localization-bundle.js +5 -0
- package/esm/presentation/localization/bundles/vi-VN.localization-bundle.d.ts +5 -0
- package/esm/presentation/localization/bundles/vi-VN.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/vi-VN.localization-bundle.js +5 -0
- package/esm/presentation/localization/bundles/zh-HK.localization-bundle.d.ts +5 -0
- package/esm/presentation/localization/bundles/zh-HK.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/zh-HK.localization-bundle.js +5 -0
- package/esm/presentation/localization/bundles/zh-Hans.localization-bundle.d.ts +5 -0
- package/esm/presentation/localization/bundles/zh-Hans.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/zh-Hans.localization-bundle.js +5 -0
- package/esm/presentation/localization/bundles/zh-Hant.localization-bundle.d.ts +5 -0
- package/esm/presentation/localization/bundles/zh-Hant.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/zh-Hant.localization-bundle.js +5 -0
- 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 +201 -3
- package/package.json +21 -21
- package/styles/css/configurationPanel.css +1 -5
- package/styles/css/configurationPanel.css.map +1 -1
- package/styles/css/filterBar.css +29 -0
- package/styles/css/filterBar.css.map +1 -1
- package/styles/css/main.css +203 -5
- 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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DateDatasetFilter.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/widget/common/configuration/DateDatasetFilter.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,mBAAmB,EAAE,KAAK,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAiB7E,UAAU,uBAAuB;IAC7B,MAAM,EAAE,OAAO,CAAC;IAChB,mBAAmB,EAAE,SAAS,mBAAmB,EAAE,GAAG,SAAS,CAAC;IAChE,iBAAiB,EAAE,OAAO,CAAC;IAE3B,qBAAqB,CAAC,EAAE,mBAAmB,CAAC;IAC5C,0BAA0B,EAAE,OAAO,CAAC;IACpC,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,2BAA2B,CAAC,EAAE,OAAO,CAAC;IACtC,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,oBAAoB,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"DateDatasetFilter.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/widget/common/configuration/DateDatasetFilter.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,mBAAmB,EAAE,KAAK,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAiB7E,UAAU,uBAAuB;IAC7B,MAAM,EAAE,OAAO,CAAC;IAChB,mBAAmB,EAAE,SAAS,mBAAmB,EAAE,GAAG,SAAS,CAAC;IAChE,iBAAiB,EAAE,OAAO,CAAC;IAE3B,qBAAqB,CAAC,EAAE,mBAAmB,CAAC;IAC5C,0BAA0B,EAAE,OAAO,CAAC;IACpC,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,2BAA2B,CAAC,EAAE,OAAO,CAAC;IACtC,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,oBAAoB,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5C;;;OAGG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAChC;AAED,wBAAgB,iBAAiB,CAAC,EAC9B,mBAAmB,EACnB,MAAM,EACN,0BAA0B,EAC1B,qBAAqB,EACrB,iBAAiB,EACjB,qBAAqB,EACrB,2BAA2B,EAC3B,oBAAoB,EACpB,uBAAuB,EACvB,kBAAkB,GACrB,EAAE,uBAAuB,2CAoFzB"}
|
|
@@ -11,7 +11,7 @@ import { DateFilterCheckbox } from "./DateFilterCheckbox.js";
|
|
|
11
11
|
import { useDateFilterConfigurationHandling } from "./useDateFilterConfigurationHandling.js";
|
|
12
12
|
import { useIsSelectedDatasetHidden } from "./useIsSelectedDatasetHidden.js";
|
|
13
13
|
import { getUnrelatedDateDataset, getUnrelatedDateDatasets } from "./utils.js";
|
|
14
|
-
export function DateDatasetFilter({ relatedDateDatasets, widget, dateFilterCheckboxDisabled, dateFromVisualization, isDatasetsLoading, shouldPickDateDataset, shouldOpenDateDatasetPicker, onDateDatasetChanged, isLoadingAdditionalData, }) {
|
|
14
|
+
export function DateDatasetFilter({ relatedDateDatasets, widget, dateFilterCheckboxDisabled, dateFromVisualization, isDatasetsLoading, shouldPickDateDataset, shouldOpenDateDatasetPicker, onDateDatasetChanged, isLoadingAdditionalData, datasetsLoadFailed, }) {
|
|
15
15
|
const enableUnrelatedItemsVisibility = useDashboardSelector(selectEnableUnavailableItemsVisibility);
|
|
16
16
|
const catalogDatasetsMap = useDashboardSelector(selectAllCatalogDateDatasetsMap);
|
|
17
17
|
const selectedDateDataset = widget.dateDataSet && catalogDatasetsMap.get(widget.dateDataSet);
|
|
@@ -35,5 +35,5 @@ export function DateDatasetFilter({ relatedDateDatasets, widget, dateFilterCheck
|
|
|
35
35
|
const unrelatedDateDataset = relatedDateDatasets &&
|
|
36
36
|
getUnrelatedDateDataset(relatedDateDatasets, selectedDateDataset, selectedDateDatasetHiddenByObjectAvailability);
|
|
37
37
|
const unrelatedDateDatasets = getUnrelatedDateDatasets(dateDatasets, relatedDateDatasets);
|
|
38
|
-
return (_jsxs("div", { children: [_jsx(DateFilterCheckbox, { relatedDateDatasets: relatedDateDatasets, widget: widget, dateFilterCheckboxDisabled: dateFilterCheckboxDisabled, dateFilterEnabled: isDateFilterEnabled, isDropdownLoading: isDropdownLoading, isFilterLoading: isFilterLoading, selectedDateDataset: selectedDateDataset, selectedDateDatasetHidden: selectedDateDatasetHiddenByObjectAvailability, onDateDatasetFilterEnabled: handleDateFilterEnabled, enableUnrelatedItemsVisibility: enableUnrelatedItemsVisibility }), !!shouldRenderDateDataSetsDropdown && (_jsx(DateDatasetPicker, { relatedDateDatasets: relatedDateDatasets, dateFromVisualization: dateFromVisualization, widget: widget, selectedDateDataset: selectedDateDataset, selectedDateDatasetHidden: selectedDateDatasetHiddenByObjectAvailability, unrelatedDateDataset: unrelatedDateDataset, onDateDatasetChange: handleDateDatasetChanged, autoOpen: shouldOpenDateDatasetPicker, isLoading: isDropdownLoading, enableUnrelatedItemsVisibility: enableUnrelatedItemsVisibility, unrelatedDateDatasets: unrelatedDateDatasets })), !isDropdownLoading && !!duplicatedDateDatasetFilter && _jsx(DateDatasetDuplicityWarning, {})] }));
|
|
38
|
+
return (_jsxs("div", { children: [_jsx(DateFilterCheckbox, { relatedDateDatasets: relatedDateDatasets, widget: widget, dateFilterCheckboxDisabled: dateFilterCheckboxDisabled, dateFilterEnabled: isDateFilterEnabled, isDropdownLoading: isDropdownLoading, isFilterLoading: isFilterLoading, selectedDateDataset: selectedDateDataset, selectedDateDatasetHidden: selectedDateDatasetHiddenByObjectAvailability, onDateDatasetFilterEnabled: handleDateFilterEnabled, enableUnrelatedItemsVisibility: enableUnrelatedItemsVisibility, datasetsLoadFailed: datasetsLoadFailed }), !!shouldRenderDateDataSetsDropdown && (_jsx(DateDatasetPicker, { relatedDateDatasets: relatedDateDatasets, dateFromVisualization: dateFromVisualization, widget: widget, selectedDateDataset: selectedDateDataset, selectedDateDatasetHidden: selectedDateDatasetHiddenByObjectAvailability, unrelatedDateDataset: unrelatedDateDataset, onDateDatasetChange: handleDateDatasetChanged, autoOpen: shouldOpenDateDatasetPicker, isLoading: isDropdownLoading, enableUnrelatedItemsVisibility: enableUnrelatedItemsVisibility, unrelatedDateDatasets: unrelatedDateDatasets })), !isDropdownLoading && !!duplicatedDateDatasetFilter && _jsx(DateDatasetDuplicityWarning, {})] }));
|
|
39
39
|
}
|
|
@@ -10,7 +10,12 @@ interface IDateFilterCheckboxProps {
|
|
|
10
10
|
dateFilterCheckboxDisabled?: boolean;
|
|
11
11
|
onDateDatasetFilterEnabled: (enabled: boolean, dateDatasetRef: ObjRef | undefined) => void;
|
|
12
12
|
enableUnrelatedItemsVisibility?: boolean;
|
|
13
|
+
/**
|
|
14
|
+
* When the related date datasets query failed, the empty result must not be presented
|
|
15
|
+
* as "cannot be filtered by date" - the related date datasets are unknown, not absent.
|
|
16
|
+
*/
|
|
17
|
+
datasetsLoadFailed?: boolean;
|
|
13
18
|
}
|
|
14
|
-
export declare function DateFilterCheckbox({ isDropdownLoading, isFilterLoading, dateFilterEnabled, selectedDateDataset, selectedDateDatasetHidden, dateFilterCheckboxDisabled, relatedDateDatasets, widget, onDateDatasetFilterEnabled, enableUnrelatedItemsVisibility, }: IDateFilterCheckboxProps): import("react/jsx-runtime").JSX.Element;
|
|
19
|
+
export declare function DateFilterCheckbox({ isDropdownLoading, isFilterLoading, dateFilterEnabled, selectedDateDataset, selectedDateDatasetHidden, dateFilterCheckboxDisabled, relatedDateDatasets, widget, onDateDatasetFilterEnabled, enableUnrelatedItemsVisibility, datasetsLoadFailed, }: IDateFilterCheckboxProps): import("react/jsx-runtime").JSX.Element;
|
|
15
20
|
export {};
|
|
16
21
|
//# sourceMappingURL=DateFilterCheckbox.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DateFilterCheckbox.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/widget/common/configuration/DateFilterCheckbox.tsx"],"names":[],"mappings":"AAOA,OAAO,EAAE,KAAK,mBAAmB,EAAE,KAAK,OAAO,EAAE,KAAK,MAAM,EAAmB,MAAM,qBAAqB,CAAC;AAS3G,UAAU,wBAAwB;IAC9B,MAAM,EAAE,OAAO,CAAC;IAChB,mBAAmB,EAAE,SAAS,mBAAmB,EAAE,GAAG,SAAS,CAAC;IAChE,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,mBAAmB,CAAC,EAAE,mBAAmB,CAAC;IAC1C,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,yBAAyB,CAAC,EAAE,OAAO,CAAC;IACpC,0BAA0B,CAAC,EAAE,OAAO,CAAC;IACrC,0BAA0B,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,GAAG,SAAS,KAAK,IAAI,CAAC;IAC3F,8BAA8B,CAAC,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"DateFilterCheckbox.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/widget/common/configuration/DateFilterCheckbox.tsx"],"names":[],"mappings":"AAOA,OAAO,EAAE,KAAK,mBAAmB,EAAE,KAAK,OAAO,EAAE,KAAK,MAAM,EAAmB,MAAM,qBAAqB,CAAC;AAS3G,UAAU,wBAAwB;IAC9B,MAAM,EAAE,OAAO,CAAC;IAChB,mBAAmB,EAAE,SAAS,mBAAmB,EAAE,GAAG,SAAS,CAAC;IAChE,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,mBAAmB,CAAC,EAAE,mBAAmB,CAAC;IAC1C,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,yBAAyB,CAAC,EAAE,OAAO,CAAC;IACpC,0BAA0B,CAAC,EAAE,OAAO,CAAC;IACrC,0BAA0B,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,GAAG,SAAS,KAAK,IAAI,CAAC;IAC3F,8BAA8B,CAAC,EAAE,OAAO,CAAC;IACzC;;;OAGG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAChC;AAED,wBAAgB,kBAAkB,CAAC,EAC/B,iBAAiB,EACjB,eAAe,EACf,iBAAiB,EACjB,mBAAmB,EACnB,yBAAyB,EACzB,0BAA0B,EAC1B,mBAAmB,EACnB,MAAM,EACN,0BAA0B,EAC1B,8BAA8B,EAC9B,kBAAkB,GACrB,EAAE,wBAAwB,2CAqF1B"}
|
|
@@ -8,17 +8,24 @@ import { ShortenedText } from "@gooddata/sdk-ui-kit";
|
|
|
8
8
|
import { useCurrentDateFilterConfig } from "../../../dragAndDrop/useCurrentDateFilterConfig.js";
|
|
9
9
|
import { getUnrelatedDateDataset } from "./utils.js";
|
|
10
10
|
const tooltipAlignPoints = [{ align: "cl cr", offset: { x: -20, y: 0 } }];
|
|
11
|
-
export function DateFilterCheckbox({ isDropdownLoading, isFilterLoading, dateFilterEnabled, selectedDateDataset, selectedDateDatasetHidden, dateFilterCheckboxDisabled, relatedDateDatasets, widget, onDateDatasetFilterEnabled, enableUnrelatedItemsVisibility, }) {
|
|
11
|
+
export function DateFilterCheckbox({ isDropdownLoading, isFilterLoading, dateFilterEnabled, selectedDateDataset, selectedDateDatasetHidden, dateFilterCheckboxDisabled, relatedDateDatasets, widget, onDateDatasetFilterEnabled, enableUnrelatedItemsVisibility, datasetsLoadFailed, }) {
|
|
12
12
|
const unrelatedDateDataset = relatedDateDatasets &&
|
|
13
13
|
getUnrelatedDateDataset(relatedDateDatasets, selectedDateDataset, selectedDateDatasetHidden);
|
|
14
14
|
const hasRelatedDateDataSets = !!relatedDateDatasets?.length;
|
|
15
15
|
const showNoRelatedDate = !hasRelatedDateDataSets &&
|
|
16
|
+
!datasetsLoadFailed &&
|
|
16
17
|
!selectedDateDatasetHidden &&
|
|
17
18
|
dateFilterEnabled &&
|
|
18
19
|
!isDropdownLoading &&
|
|
19
20
|
!dateFilterCheckboxDisabled &&
|
|
20
21
|
!enableUnrelatedItemsVisibility;
|
|
21
|
-
const
|
|
22
|
+
const showLoadFailed = !!datasetsLoadFailed &&
|
|
23
|
+
!hasRelatedDateDataSets &&
|
|
24
|
+
!selectedDateDatasetHidden &&
|
|
25
|
+
dateFilterEnabled &&
|
|
26
|
+
!isDropdownLoading &&
|
|
27
|
+
!dateFilterCheckboxDisabled;
|
|
28
|
+
const showError = (!!unrelatedDateDataset || showNoRelatedDate || showLoadFailed) &&
|
|
22
29
|
!isDropdownLoading &&
|
|
23
30
|
!isFilterLoading &&
|
|
24
31
|
dateFilterEnabled &&
|
|
@@ -36,5 +43,5 @@ export function DateFilterCheckbox({ isDropdownLoading, isFilterLoading, dateFil
|
|
|
36
43
|
const intl = useIntl();
|
|
37
44
|
const defaultDateFilterName = intl.formatMessage({ id: "dateFilterDropdown.title" });
|
|
38
45
|
const { title } = useCurrentDateFilterConfig(undefined, defaultDateFilterName);
|
|
39
|
-
return (_jsxs("div", { children: [_jsxs("label", { className: classes, htmlFor: "configurationPanel.date.input", children: [_jsx("input", { className: "input-checkbox s-date-filter-checkbox", id: "configurationPanel.date.input", type: "checkbox", checked: !dateFilterCheckboxDisabled && dateFilterEnabled, disabled: dateFilterCheckboxDisabled, onChange: handleChange }), _jsx("span", { className: "input-label-text title", children: _jsx(ShortenedText, { tooltipAlignPoints: tooltipAlignPoints, tagName: "span", className: "title", children: title }) }), isFilterLoading ? _jsx("div", { className: "gd-spinner small" }) : null] }), !isFilterLoading && showNoRelatedDate ? (_jsx("div", { className: "gd-message error s-no-related-date", children: isInsightWidget(widget) ? (_jsx(FormattedMessage, { id: "configurationPanel.vizCantBeFilteredByDate" })) : (_jsx(FormattedMessage, { id: "configurationPanel.kpiCantBeFilteredByDate" })) })) : null] }));
|
|
46
|
+
return (_jsxs("div", { children: [_jsxs("label", { className: classes, htmlFor: "configurationPanel.date.input", children: [_jsx("input", { className: "input-checkbox s-date-filter-checkbox", id: "configurationPanel.date.input", type: "checkbox", checked: !dateFilterCheckboxDisabled && dateFilterEnabled, disabled: dateFilterCheckboxDisabled, onChange: handleChange }), _jsx("span", { className: "input-label-text title", children: _jsx(ShortenedText, { tooltipAlignPoints: tooltipAlignPoints, tagName: "span", className: "title", children: title }) }), isFilterLoading ? _jsx("div", { className: "gd-spinner small" }) : null] }), !isFilterLoading && showLoadFailed ? (_jsx("div", { className: "gd-message error s-date-datasets-load-failed", children: _jsx(FormattedMessage, { id: "configurationPanel.dateDatasetsLoadFailed" }) })) : null, !isFilterLoading && showNoRelatedDate ? (_jsx("div", { className: "gd-message error s-no-related-date", children: isInsightWidget(widget) ? (_jsx(FormattedMessage, { id: "configurationPanel.vizCantBeFilteredByDate" })) : (_jsx(FormattedMessage, { id: "configurationPanel.kpiCantBeFilteredByDate" })) })) : null] }));
|
|
40
47
|
}
|
|
@@ -3,7 +3,7 @@ import { jsx as _jsx } from "react/jsx-runtime";
|
|
|
3
3
|
import { useMemo } from "react";
|
|
4
4
|
import { InsightRenderer } from "@gooddata/sdk-ui-ext";
|
|
5
5
|
import { useDashboardSelector } from "../../../../model/react/DashboardStoreProvider.js";
|
|
6
|
-
import {
|
|
6
|
+
import { selectCatalogAttributesWithComputed } from "../../../../model/store/catalog/catalogSelectors.js";
|
|
7
7
|
import { selectSettings } from "../../../../model/store/config/configSelectors.js";
|
|
8
8
|
import { selectPreloadedAttributesWithReferences } from "../../../../model/store/tabs/filterContext/filterContextSelectors.js";
|
|
9
9
|
import { useShowAsTable } from "../../showAsTableButton/useShowAsTable.js";
|
|
@@ -19,7 +19,7 @@ export function DefaultInsightBody(props) {
|
|
|
19
19
|
const { insight, layerTables: providedLayerTables } = props;
|
|
20
20
|
const { isWidgetAsTable } = useShowAsTable(props.widget);
|
|
21
21
|
const settings = useDashboardSelector(selectSettings);
|
|
22
|
-
const catalogAttributes = useDashboardSelector(
|
|
22
|
+
const catalogAttributes = useDashboardSelector(selectCatalogAttributesWithComputed);
|
|
23
23
|
const preloadedAttributesWithReferences = useDashboardSelector(selectPreloadedAttributesWithReferences);
|
|
24
24
|
const computedLayerTables = useMemo(() => providedLayerTables
|
|
25
25
|
? undefined
|
|
@@ -7,7 +7,7 @@ import { useBackendStrict, useWorkspaceStrict, } from "@gooddata/sdk-ui";
|
|
|
7
7
|
import { useDashboardSelector } from "../../../../../model/react/DashboardStoreProvider.js";
|
|
8
8
|
import { useWidgetExecConfig } from "../../../../../model/react/useWidgetExecConfig.js";
|
|
9
9
|
import { useWidgetFilters } from "../../../../../model/react/useWidgetFilters.js";
|
|
10
|
-
import {
|
|
10
|
+
import { selectCatalogAttributesWithComputed } from "../../../../../model/store/catalog/catalogSelectors.js";
|
|
11
11
|
import { selectAgGridToken, selectColorPalette, selectIsExport, selectLocale, selectMapboxToken, selectMaxZoomLevel, selectSeparators, selectSettings, } from "../../../../../model/store/config/configSelectors.js";
|
|
12
12
|
import { selectDrillableItems } from "../../../../../model/store/drill/drillSelectors.js";
|
|
13
13
|
import { selectPermissions } from "../../../../../model/store/permissions/permissionsSelectors.js";
|
|
@@ -56,7 +56,7 @@ export function DrillDialogInsight({ insight, widget, backend, workspace, drillS
|
|
|
56
56
|
const { locale, settings, colorPalette } = useDashboardSelector(selectCommonDashboardInsightProps);
|
|
57
57
|
const permissions = useDashboardSelector(selectPermissions);
|
|
58
58
|
const chartConfig = useDashboardSelector(selectChartConfig);
|
|
59
|
-
const catalogAttributes = useDashboardSelector(
|
|
59
|
+
const catalogAttributes = useDashboardSelector(selectCatalogAttributesWithComputed);
|
|
60
60
|
const preloadedAttributesWithReferences = useDashboardSelector(selectPreloadedAttributesWithReferences);
|
|
61
61
|
// Loading and rendering
|
|
62
62
|
const [isVisualizationLoading, setIsVisualizationLoading] = useState(false);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InsightDateDataSetFilter.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/widget/insight/configuration/InsightDateDataSetFilter.tsx"],"names":[],"mappings":"AAMA,OAAO,EAAE,KAAK,cAAc,EAAa,MAAM,qBAAqB,CAAC;AAcrE,MAAM,WAAW,wBAAwB;IACrC,MAAM,EAAE,cAAc,CAAC;CAC1B;AAED,wBAAgB,wBAAwB,CAAC,EAAE,MAAM,EAAE,EAAE,wBAAwB,
|
|
1
|
+
{"version":3,"file":"InsightDateDataSetFilter.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/widget/insight/configuration/InsightDateDataSetFilter.tsx"],"names":[],"mappings":"AAMA,OAAO,EAAE,KAAK,cAAc,EAAa,MAAM,qBAAqB,CAAC;AAcrE,MAAM,WAAW,wBAAwB;IACrC,MAAM,EAAE,cAAc,CAAC;CAC1B;AAED,wBAAgB,wBAAwB,CAAC,EAAE,MAAM,EAAE,EAAE,wBAAwB,2CAyC5E"}
|
|
@@ -22,5 +22,5 @@ export function InsightDateDataSetFilter({ widget }) {
|
|
|
22
22
|
queryDateDatasets(insight);
|
|
23
23
|
}, [queryDateDatasets, insight]);
|
|
24
24
|
const { handleDateDatasetChanged, shouldOpenDateDatasetPicker } = useDateDatasetFilter(result?.dateDatasets);
|
|
25
|
-
return (_jsx(DateDatasetFilter, { widget: widget, dateFilterCheckboxDisabled: false, isDatasetsLoading: status === "running" || status === "pending" || isLoadingAdditionalData, relatedDateDatasets: result?.dateDatasetsOrdered, isLoadingAdditionalData: isLoadingAdditionalData, shouldOpenDateDatasetPicker: shouldOpenDateDatasetPicker, onDateDatasetChanged: handleDateDatasetChanged }));
|
|
25
|
+
return (_jsx(DateDatasetFilter, { widget: widget, dateFilterCheckboxDisabled: false, isDatasetsLoading: status === "running" || status === "pending" || isLoadingAdditionalData, relatedDateDatasets: result?.dateDatasetsOrdered, datasetsLoadFailed: status === "error", isLoadingAdditionalData: isLoadingAdditionalData, shouldOpenDateDatasetPicker: shouldOpenDateDatasetPicker, onDateDatasetChanged: handleDateDatasetChanged }));
|
|
26
26
|
}
|
|
@@ -6,6 +6,11 @@ export interface IDrillConfigListProps {
|
|
|
6
6
|
onSetup: (drill: InsightDrillDefinition | IDrillDownAttributeHierarchyDefinition, changedItem: IDrillConfigItem) => void;
|
|
7
7
|
onIncompleteChange: (changedItem: IDrillConfigItem) => void;
|
|
8
8
|
disableDrillDown?: boolean;
|
|
9
|
+
/**
|
|
10
|
+
* Local identifiers of insight attributes that are computed attributes. Drill down is not
|
|
11
|
+
* available for them - a computed attribute cannot be part of an attribute hierarchy.
|
|
12
|
+
*/
|
|
13
|
+
computedAttributeOriginLocalIds?: string[];
|
|
9
14
|
}
|
|
10
|
-
export declare function InsightDrillConfigList({ drillConfigItems, disableDrillDown, onDelete, onSetup, onIncompleteChange, }: IDrillConfigListProps): import("react/jsx-runtime").JSX.Element;
|
|
15
|
+
export declare function InsightDrillConfigList({ drillConfigItems, disableDrillDown, computedAttributeOriginLocalIds, onDelete, onSetup, onIncompleteChange, }: IDrillConfigListProps): import("react/jsx-runtime").JSX.Element;
|
|
11
16
|
//# sourceMappingURL=InsightDrillConfigList.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InsightDrillConfigList.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/widget/insight/configuration/InsightDrillConfigList.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"InsightDrillConfigList.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/widget/insight/configuration/InsightDrillConfigList.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAIlE,OAAO,EAAE,KAAK,gBAAgB,EAAE,KAAK,sCAAsC,EAAE,MAAM,yBAAyB,CAAC;AAK7G,MAAM,WAAW,qBAAqB;IAClC,gBAAgB,CAAC,EAAE,gBAAgB,EAAE,CAAC;IACtC,QAAQ,EAAE,CAAC,IAAI,EAAE,gBAAgB,KAAK,IAAI,CAAC;IAC3C,OAAO,EAAE,CACL,KAAK,EAAE,sBAAsB,GAAG,sCAAsC,EACtE,WAAW,EAAE,gBAAgB,KAC5B,IAAI,CAAC;IACV,kBAAkB,EAAE,CAAC,WAAW,EAAE,gBAAgB,KAAK,IAAI,CAAC;IAC5D,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B;;;OAGG;IACH,+BAA+B,CAAC,EAAE,MAAM,EAAE,CAAC;CAC9C;AAED,wBAAgB,sBAAsB,CAAC,EACnC,gBAAqB,EACrB,gBAAgB,EAChB,+BAAoC,EACpC,QAAQ,EACR,OAAO,EACP,kBAAkB,GACrB,EAAE,qBAAqB,2CA6CvB"}
|
|
@@ -1,9 +1,20 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
// (C) 2019-2026 GoodData Corporation
|
|
3
|
+
import { useIntl } from "react-intl";
|
|
2
4
|
import { ScrollableItem } from "@gooddata/sdk-ui-kit";
|
|
5
|
+
import { messages } from "../../../../locales.js";
|
|
3
6
|
import { DrillConfigItem } from "./InsightDrillConfigItem.js";
|
|
4
7
|
import { useDrillTargetTypeItems } from "./useDrillTargetTypeItems.js";
|
|
5
|
-
export function InsightDrillConfigList({ drillConfigItems = [], disableDrillDown, onDelete, onSetup, onIncompleteChange, }) {
|
|
8
|
+
export function InsightDrillConfigList({ drillConfigItems = [], disableDrillDown, computedAttributeOriginLocalIds = [], onDelete, onSetup, onIncompleteChange, }) {
|
|
9
|
+
const intl = useIntl();
|
|
6
10
|
const enabledDrillTargetTypeItems = useDrillTargetTypeItems(disableDrillDown);
|
|
11
|
+
const computedAttributeDrillTargetTypeItems = useDrillTargetTypeItems(true, intl.formatMessage(messages.computedAttributeDrillDownToolTip));
|
|
12
|
+
const getDrillTargetTypeItems = (item) => {
|
|
13
|
+
return item.type === "attribute" &&
|
|
14
|
+
computedAttributeOriginLocalIds.includes(item.originLocalIdentifier)
|
|
15
|
+
? computedAttributeDrillTargetTypeItems
|
|
16
|
+
: enabledDrillTargetTypeItems;
|
|
17
|
+
};
|
|
7
18
|
const shouldScrollToContainer = (item, isLast) => {
|
|
8
19
|
return !item.complete && isLast;
|
|
9
20
|
};
|
|
@@ -12,6 +23,6 @@ export function InsightDrillConfigList({ drillConfigItems = [], disableDrillDown
|
|
|
12
23
|
};
|
|
13
24
|
return (_jsx("div", { className: "s-drill-config-list", children: drillConfigItems.map((item, index) => {
|
|
14
25
|
const shouldScroll = shouldScrollToContainer(item, isLast(index));
|
|
15
|
-
return (_jsx(ScrollableItem, { scrollIntoView: shouldScroll, children: _jsx(DrillConfigItem, { item: item, onDelete: onDelete, onSetup: onSetup, onIncompleteChange: onIncompleteChange, enabledDrillTargetTypeItems:
|
|
26
|
+
return (_jsx(ScrollableItem, { scrollIntoView: shouldScroll, children: _jsx(DrillConfigItem, { item: item, onDelete: onDelete, onSetup: onSetup, onIncompleteChange: onIncompleteChange, enabledDrillTargetTypeItems: getDrillTargetTypeItems(item) }, item.localIdentifier + item.drillTargetType) }, item.localIdentifier + item.drillTargetType));
|
|
16
27
|
}) }));
|
|
17
28
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InsightDrillConfigPanel.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/widget/insight/configuration/InsightDrillConfigPanel/InsightDrillConfigPanel.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"InsightDrillConfigPanel.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/widget/insight/configuration/InsightDrillConfigPanel/InsightDrillConfigPanel.tsx"],"names":[],"mappings":"AAMA,OAAO,EAAE,KAAK,MAAM,EAA4D,MAAM,qBAAqB,CAAC;AAU5G;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACnC,SAAS,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,EAAE,SAAS,EAAE,EAAE,sBAAsB,2CAuD5E"}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
// (C) 2019-2026 GoodData Corporation
|
|
3
|
+
import { useMemo } from "react";
|
|
3
4
|
import { FormattedMessage } from "react-intl";
|
|
5
|
+
import { attributeLocalId, insightAttributes, isComputedAttribute } from "@gooddata/sdk-model";
|
|
4
6
|
import { Typography } from "@gooddata/sdk-ui-kit";
|
|
5
7
|
import { DrillFiltersConfig } from "../DrillFilters/DrillFiltersConfig.js";
|
|
6
8
|
import { DrillOriginSelector } from "../DrillOriginSelector/DrillOriginSelector.js";
|
|
@@ -12,8 +14,10 @@ import { useInsightDrillConfigPanel } from "./useInsightDrillConfigPanel.js";
|
|
|
12
14
|
*/
|
|
13
15
|
export function InsightDrillConfigPanel({ widgetRef }) {
|
|
14
16
|
const { widget, insight, drillConfigItems, selectedDrillItem, originSelectorItems, isOriginSelectorVisible, isLoaded, onChangeItem, onOriginSelect, onSetupItem, onUpdateDrillItem, onDeleteItem, } = useInsightDrillConfigPanel({ widgetRef });
|
|
17
|
+
// drill down is never available for computed attributes: they cannot be part of an attribute hierarchy
|
|
18
|
+
const computedAttributeOriginLocalIds = useMemo(() => (insight ? insightAttributes(insight).filter(isComputedAttribute).map(attributeLocalId) : []), [insight]);
|
|
15
19
|
if (selectedDrillItem) {
|
|
16
20
|
return _jsx(DrillFiltersConfig, { item: selectedDrillItem, onUpdateDrillItem: onUpdateDrillItem });
|
|
17
21
|
}
|
|
18
|
-
return (_jsxs(_Fragment, { children: [_jsx(ZoomInsightConfiguration, { widget: widget }), _jsxs("div", { className: "configuration-category s-drill-config-panel", children: [_jsx(Typography, { tagName: "h3", children: _jsx("span", { children: _jsx(FormattedMessage, { id: "configurationPanel.drillConfig.interactions" }) }) }), _jsx(InsightDrillConfigList, { disableDrillDown: insight?.insight?.properties?.["controls"]?.disableDrillDown, drillConfigItems: drillConfigItems, onDelete: onDeleteItem, onSetup: onSetupItem, onIncompleteChange: onChangeItem }), isOriginSelectorVisible ? (_jsx(DrillOriginSelector, { widgetRef: widgetRef, items: originSelectorItems, onSelect: onOriginSelect })) : isLoaded ? null : (_jsx("div", { className: "gd-spinner small" }))] })] }));
|
|
22
|
+
return (_jsxs(_Fragment, { children: [_jsx(ZoomInsightConfiguration, { widget: widget }), _jsxs("div", { className: "configuration-category s-drill-config-panel", children: [_jsx(Typography, { tagName: "h3", children: _jsx("span", { children: _jsx(FormattedMessage, { id: "configurationPanel.drillConfig.interactions" }) }) }), _jsx(InsightDrillConfigList, { disableDrillDown: insight?.insight?.properties?.["controls"]?.disableDrillDown, computedAttributeOriginLocalIds: computedAttributeOriginLocalIds, drillConfigItems: drillConfigItems, onDelete: onDeleteItem, onSetup: onSetupItem, onIncompleteChange: onChangeItem }), isOriginSelectorVisible ? (_jsx(DrillOriginSelector, { widgetRef: widgetRef, items: originSelectorItems, onSelect: onOriginSelect })) : isLoaded ? null : (_jsx("div", { className: "gd-spinner small" }))] })] }));
|
|
19
23
|
}
|
|
@@ -7,5 +7,5 @@ export interface IDrillTargetType {
|
|
|
7
7
|
tooltipMessage?: string;
|
|
8
8
|
documentUrl?: string;
|
|
9
9
|
}
|
|
10
|
-
export declare const useDrillTargetTypeItems: (disableDrillDown?: boolean) => IDrillTargetType[];
|
|
10
|
+
export declare const useDrillTargetTypeItems: (disableDrillDown?: boolean, disableDrillDownTooltip?: string) => IDrillTargetType[];
|
|
11
11
|
//# sourceMappingURL=useDrillTargetTypeItems.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useDrillTargetTypeItems.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/widget/insight/configuration/useDrillTargetTypeItems.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAE5D,MAAM,WAAW,gBAAgB;IAC7B,EAAE,EAAE,iBAAiB,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,eAAO,MAAM,uBAAuB,
|
|
1
|
+
{"version":3,"file":"useDrillTargetTypeItems.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/widget/insight/configuration/useDrillTargetTypeItems.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAE5D,MAAM,WAAW,gBAAgB;IAC7B,EAAE,EAAE,iBAAiB,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,eAAO,MAAM,uBAAuB,sBACb,OAAO,4BACA,MAAM,KACjC,gBAAgB,EA6ClB,CAAC"}
|
|
@@ -5,7 +5,7 @@ import { messages } from "../../../../locales.js";
|
|
|
5
5
|
import { useDashboardSelector } from "../../../../model/react/DashboardStoreProvider.js";
|
|
6
6
|
import { selectSupportsAttributeHierarchies } from "../../../../model/store/backendCapabilities/backendCapabilitiesSelectors.js";
|
|
7
7
|
import { DRILL_TARGET_TYPE } from "../../../drill/types.js";
|
|
8
|
-
export const useDrillTargetTypeItems = (disableDrillDown) => {
|
|
8
|
+
export const useDrillTargetTypeItems = (disableDrillDown, disableDrillDownTooltip) => {
|
|
9
9
|
const intl = useIntl();
|
|
10
10
|
const supportsAttributeHierarchies = useDashboardSelector(selectSupportsAttributeHierarchies);
|
|
11
11
|
const dropdownItems = [
|
|
@@ -28,7 +28,7 @@ export const useDrillTargetTypeItems = (disableDrillDown) => {
|
|
|
28
28
|
title: intl.formatMessage(messages.drillDownConfig),
|
|
29
29
|
disabled: disableDrillDown,
|
|
30
30
|
disableTooltipMessage: disableDrillDown
|
|
31
|
-
? intl.formatMessage(messages.disableDrillDownToolTip)
|
|
31
|
+
? (disableDrillDownTooltip ?? intl.formatMessage(messages.disableDrillDownToolTip))
|
|
32
32
|
: undefined,
|
|
33
33
|
tooltipMessage: uiMessages["drilldownTooltip"].id,
|
|
34
34
|
documentUrl: "https://www.gooddata.com/docs/cloud/create-dashboards/drilling-in-dashboards/set-drill-down/",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RichTextDateDataSetFilter.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/widget/richText/configuration/RichTextDateDataSetFilter.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,eAAe,EAAa,MAAM,qBAAqB,CAAC;AAatE,MAAM,WAAW,+BAA+B;IAC5C,MAAM,EAAE,eAAe,CAAC;CAC3B;AAED,wBAAgB,yBAAyB,CAAC,EAAE,MAAM,EAAE,EAAE,+BAA+B,
|
|
1
|
+
{"version":3,"file":"RichTextDateDataSetFilter.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/widget/richText/configuration/RichTextDateDataSetFilter.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,eAAe,EAAa,MAAM,qBAAqB,CAAC;AAatE,MAAM,WAAW,+BAA+B;IAC5C,MAAM,EAAE,eAAe,CAAC;CAC3B;AAED,wBAAgB,yBAAyB,CAAC,EAAE,MAAM,EAAE,EAAE,+BAA+B,2CAqCpF"}
|
|
@@ -17,5 +17,5 @@ export function RichTextDateDataSetFilter({ widget }) {
|
|
|
17
17
|
queryDateDatasets();
|
|
18
18
|
}, [queryDateDatasets]);
|
|
19
19
|
const { handleDateDatasetChanged, shouldOpenDateDatasetPicker } = useDateDatasetFilter(result?.dateDatasets);
|
|
20
|
-
return (_jsx(DateDatasetFilter, { widget: widget, dateFilterCheckboxDisabled: false, isDatasetsLoading: status === "running" || status === "pending" || isLoadingAdditionalData, relatedDateDatasets: result?.dateDatasetsOrdered, isLoadingAdditionalData: isLoadingAdditionalData, shouldOpenDateDatasetPicker: shouldOpenDateDatasetPicker, onDateDatasetChanged: handleDateDatasetChanged }));
|
|
20
|
+
return (_jsx(DateDatasetFilter, { widget: widget, dateFilterCheckboxDisabled: false, isDatasetsLoading: status === "running" || status === "pending" || isLoadingAdditionalData, relatedDateDatasets: result?.dateDatasetsOrdered, datasetsLoadFailed: status === "error", isLoadingAdditionalData: isLoadingAdditionalData, shouldOpenDateDatasetPicker: shouldOpenDateDatasetPicker, onDateDatasetChanged: handleDateDatasetChanged }));
|
|
21
21
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ViewModeDashboardVisualizationSwitcher.d.ts","sourceRoot":"","sources":["../../../../src/presentation/widget/visualizationSwitcher/ViewModeDashboardVisualizationSwitcher.tsx"],"names":[],"mappings":"AAOA,OAAO,EACH,KAAK,QAAQ,EACb,KAAK,cAAc,EAGtB,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"ViewModeDashboardVisualizationSwitcher.d.ts","sourceRoot":"","sources":["../../../../src/presentation/widget/visualizationSwitcher/ViewModeDashboardVisualizationSwitcher.tsx"],"names":[],"mappings":"AAOA,OAAO,EACH,KAAK,QAAQ,EACb,KAAK,cAAc,EAGtB,MAAM,qBAAqB,CAAC;AA0B7B,OAAO,EAAE,KAAK,oCAAoC,EAAE,MAAM,YAAY,CAAC;AAIvE;;GAEG;AACH,wBAAgB,sCAAsC,CAAC,EACnD,MAAM,EACN,qBAAqB,EAAE,4BAA4B,EACnD,OAAO,EACP,aAAa,EACb,gBAAgB,EAChB,MAAM,EACN,UAAU,GACb,EAAE,oCAAoC,2CAwDtC;AAED,wBAAgB,2CAA2C,4CAE1D;AAED,MAAM,WAAW,mDAAoD,SAAQ,oCAAoC;IAC7G,OAAO,EAAE,QAAQ,CAAC;IAClB,mBAAmB,EAAE,cAAc,CAAC;IACpC,2BAA2B,EAAE,CAAC,qBAAqB,EAAE,MAAM,KAAK,IAAI,CAAC;CACxE;AAED,wBAAgB,6CAA6C,CAAC,EAC1D,MAAM,EACN,OAAO,EACP,mBAAmB,EACnB,2BAA2B,EAC3B,MAAM,EACN,OAAO,EACP,aAAa,EACb,gBAAgB,EAChB,UAAU,GACb,EAAE,mDAAmD,2CAmOrD"}
|
package/esm/presentation/widget/visualizationSwitcher/ViewModeDashboardVisualizationSwitcher.js
CHANGED
|
@@ -12,6 +12,7 @@ import { useDashboardAlerts } from "../../../model/react/useDashboardAlerting/us
|
|
|
12
12
|
import { useDashboardCommand } from "../../../model/react/useDashboardCommand.js";
|
|
13
13
|
import { selectInsightsMap } from "../../../model/store/insights/insightsSelectors.js";
|
|
14
14
|
import { selectVisualizationSwitcherActiveVisualizationByWidgetRef } from "../../../model/store/ui/uiSelectors.js";
|
|
15
|
+
import { selectRestrictedInsightsMap } from "../../../model/store/unavailableObjects/unavailableObjectsSelectors.js";
|
|
15
16
|
import { useDashboardComponentsContext } from "../../dashboardContexts/DashboardComponentsContext.js";
|
|
16
17
|
import { DashboardItem } from "../../presentationComponents/DashboardItems/DashboardItem.js";
|
|
17
18
|
import { DashboardItemVisualization } from "../../presentationComponents/DashboardItems/DashboardItemVisualization.js";
|
|
@@ -26,6 +27,7 @@ import { useInsightMenu } from "../widget/InsightWidget/useInsightMenu.js";
|
|
|
26
27
|
import { VisualizationSwitcherNavigationHeader } from "../widget/VisualizationSwitcherWidget/VisualizationSwitcherNavigationHeader.js";
|
|
27
28
|
import { AllVisualizationsDashInsights } from "./AllVisualizationsDashInsights.js";
|
|
28
29
|
import { useExecutionProgress } from "./useExecutionProgress.js";
|
|
30
|
+
import { ViewModeDashboardVisualizationSwitcherRestricted } from "./ViewModeDashboardVisualizationSwitcherRestricted.js";
|
|
29
31
|
/**
|
|
30
32
|
* @internal
|
|
31
33
|
*/
|
|
@@ -40,7 +42,13 @@ export function ViewModeDashboardVisualizationSwitcher({ widget, activeVisualiza
|
|
|
40
42
|
const activeVisualization = widget.visualizations.find((visualization) => visualization.identifier === activeVisualizationId) ??
|
|
41
43
|
widget.visualizations[0];
|
|
42
44
|
const insights = useDashboardSelector(selectInsightsMap);
|
|
45
|
+
const restrictedInsights = useDashboardSelector(selectRestrictedInsightsMap);
|
|
43
46
|
const insight = activeVisualization ? insights.get(activeVisualization.insight) : undefined;
|
|
47
|
+
// a restricted insight is withheld from the insights map, so this must be decided before the
|
|
48
|
+
// missing-insight branch below, which would otherwise render the empty switcher
|
|
49
|
+
if (activeVisualization && restrictedInsights.has(activeVisualization.insight)) {
|
|
50
|
+
return (_jsx(ViewModeDashboardVisualizationSwitcherRestricted, { widget: widget, activeVisualization: activeVisualization, screen: screen, exportData: exportData, onActiveVisualizationChange: setActiveVisualizationId }));
|
|
51
|
+
}
|
|
44
52
|
if (!activeVisualization || !insight) {
|
|
45
53
|
return _jsx(ViewModeDashboardVisualizationSwitcherEmpty, {});
|
|
46
54
|
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { type IInsightWidget, type IVisualizationSwitcherWidget, type ScreenSize } from "@gooddata/sdk-model";
|
|
2
|
+
import { type WidgetExportData } from "../../export/types.js";
|
|
3
|
+
export interface IViewModeDashboardVisualizationSwitcherRestrictedProps {
|
|
4
|
+
widget: IVisualizationSwitcherWidget;
|
|
5
|
+
activeVisualization: IInsightWidget;
|
|
6
|
+
screen: ScreenSize;
|
|
7
|
+
exportData?: WidgetExportData;
|
|
8
|
+
onActiveVisualizationChange: (activeVisualizationId: string) => void;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* The switcher with a restricted visualization active. The switcher keeps its entry list, so the user
|
|
12
|
+
* can move to a readable visualization; only the body becomes the access placeholder, and no widget
|
|
13
|
+
* menu is offered, which leaves the widget without drill and without export.
|
|
14
|
+
*/
|
|
15
|
+
export declare function ViewModeDashboardVisualizationSwitcherRestricted({ widget, activeVisualization, screen, exportData, onActiveVisualizationChange, }: IViewModeDashboardVisualizationSwitcherRestrictedProps): import("react/jsx-runtime").JSX.Element;
|
|
16
|
+
//# sourceMappingURL=ViewModeDashboardVisualizationSwitcherRestricted.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ViewModeDashboardVisualizationSwitcherRestricted.d.ts","sourceRoot":"","sources":["../../../../src/presentation/widget/visualizationSwitcher/ViewModeDashboardVisualizationSwitcherRestricted.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,4BAA4B,EAAE,KAAK,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAI9G,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAK9D,MAAM,WAAW,sDAAsD;IACnE,MAAM,EAAE,4BAA4B,CAAC;IACrC,mBAAmB,EAAE,cAAc,CAAC;IACpC,MAAM,EAAE,UAAU,CAAC;IACnB,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAC9B,2BAA2B,EAAE,CAAC,qBAAqB,EAAE,MAAM,KAAK,IAAI,CAAC;CACxE;AAED;;;;GAIG;AACH,wBAAgB,gDAAgD,CAAC,EAC7D,MAAM,EACN,mBAAmB,EACnB,MAAM,EACN,UAAU,EACV,2BAA2B,GAC9B,EAAE,sDAAsD,2CAqCxD"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
// (C) 2026 GoodData Corporation
|
|
3
|
+
import cx from "classnames";
|
|
4
|
+
import { useId } from "@gooddata/sdk-ui-kit";
|
|
5
|
+
import { useDashboardComponentsContext } from "../../dashboardContexts/DashboardComponentsContext.js";
|
|
6
|
+
import { DashboardItem } from "../../presentationComponents/DashboardItems/DashboardItem.js";
|
|
7
|
+
import { DashboardItemVisualization } from "../../presentationComponents/DashboardItems/DashboardItemVisualization.js";
|
|
8
|
+
import { VisualizationSwitcherNavigationHeader } from "../widget/VisualizationSwitcherWidget/VisualizationSwitcherNavigationHeader.js";
|
|
9
|
+
/**
|
|
10
|
+
* The switcher with a restricted visualization active. The switcher keeps its entry list, so the user
|
|
11
|
+
* can move to a readable visualization; only the body becomes the access placeholder, and no widget
|
|
12
|
+
* menu is offered, which leaves the widget without drill and without export.
|
|
13
|
+
*/
|
|
14
|
+
export function ViewModeDashboardVisualizationSwitcherRestricted({ widget, activeVisualization, screen, exportData, onActiveVisualizationChange, }) {
|
|
15
|
+
const titleId = useId();
|
|
16
|
+
const { RestrictedPlaceholderComponentProvider } = useDashboardComponentsContext();
|
|
17
|
+
const Content = RestrictedPlaceholderComponentProvider(activeVisualization);
|
|
18
|
+
return (_jsx(DashboardItem, { className: cx("type-visualization", "gd-dashboard-view-widget"), screen: screen, titleId: titleId, children: _jsx(DashboardItemVisualization, { isExport: !!exportData, renderHeadline: (clientHeight, clientWidth) => (_jsx(VisualizationSwitcherNavigationHeader, { widget: widget, clientHeight: clientHeight, clientWidth: clientWidth, titleId: titleId, activeVisualization: activeVisualization, onActiveVisualizationChange: onActiveVisualizationChange, exportData: exportData?.title })), children: ({ clientHeight, clientWidth }) => (_jsx("div", { className: "gd-visualization-switcher-visible-visualization", children: _jsx("div", { className: "visualization-content", children: _jsx(Content, { width: clientWidth, height: clientHeight }) }) })) }) }));
|
|
19
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DashboardWidgetInsightGuard.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/widget/widget/InsightWidget/DashboardWidgetInsightGuard.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"DashboardWidgetInsightGuard.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/widget/widget/InsightWidget/DashboardWidgetInsightGuard.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,OAAO,CAAC;AAQ3C,OAAO,EAAE,KAAK,mCAAmC,EAAE,MAAM,YAAY,CAAC;AAEtE,UAAU,iCAAkC,SAAQ,IAAI,CAAC,mCAAmC,EAAE,SAAS,CAAC;IACpG,SAAS,EAAE,aAAa,CAAC,mCAAmC,CAAC,CAAC;CACjE;AAKD,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,iCAAiC,2CAsBnF"}
|
|
@@ -1,12 +1,22 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
2
|
import { useDashboardSelector } from "../../../../model/react/DashboardStoreProvider.js";
|
|
3
|
+
import { useIsWidgetRestricted } from "../../../../model/react/useIsWidgetRestricted.js";
|
|
3
4
|
import { selectInsightsMap } from "../../../../model/store/insights/insightsSelectors.js";
|
|
5
|
+
import { useDashboardComponentsContext } from "../../../dashboardContexts/DashboardComponentsContext.js";
|
|
6
|
+
import { RestrictedPlaceholder } from "../../common/RestrictedPlaceholder.js";
|
|
4
7
|
// Sometimes this component is rendered even before insights are ready, which blows up.
|
|
5
8
|
// Since the behavior is nearly impossible to replicate reliably, let's be defensive here and not render
|
|
6
9
|
// anything until the insights "catch up".
|
|
7
10
|
export function DashboardWidgetInsightGuard(props) {
|
|
8
|
-
const { widget, Component } = props;
|
|
11
|
+
const { widget, screen, dashboardItemClasses, exportData, Component } = props;
|
|
9
12
|
const insights = useDashboardSelector(selectInsightsMap);
|
|
13
|
+
const isRestricted = useIsWidgetRestricted(widget);
|
|
14
|
+
const { RestrictedPlaceholderComponentProvider } = useDashboardComponentsContext();
|
|
15
|
+
// view, edit and export modes all reach the widget through this guard, so short-circuiting here is
|
|
16
|
+
// what strips the config panel, menu and selection from a restricted widget in edit mode
|
|
17
|
+
if (isRestricted) {
|
|
18
|
+
return (_jsx(RestrictedPlaceholder, { screen: screen, dashboardItemClasses: dashboardItemClasses, exportData: exportData, Content: RestrictedPlaceholderComponentProvider(widget) }));
|
|
19
|
+
}
|
|
10
20
|
const insight = insights.get(widget.insight);
|
|
11
21
|
return _jsx(Component, { ...props, insight: insight });
|
|
12
22
|
}
|
|
@@ -8,7 +8,7 @@ import { useId } from "@gooddata/sdk-ui-kit";
|
|
|
8
8
|
import { useDashboardSelector } from "../../../../model/react/DashboardStoreProvider.js";
|
|
9
9
|
import { useDashboardScheduledEmails } from "../../../../model/react/useDasboardScheduledEmails/useDashboardScheduledEmails.js";
|
|
10
10
|
import { useDashboardAlerts } from "../../../../model/react/useDashboardAlerting/useDashboardAlerts.js";
|
|
11
|
-
import {
|
|
11
|
+
import { selectCatalogAttributesWithComputed } from "../../../../model/store/catalog/catalogSelectors.js";
|
|
12
12
|
import { selectSettings } from "../../../../model/store/config/configSelectors.js";
|
|
13
13
|
import { selectRenderMode } from "../../../../model/store/renderMode/renderModeSelectors.js";
|
|
14
14
|
import { selectPreloadedAttributesWithReferences } from "../../../../model/store/tabs/filterContext/filterContextSelectors.js";
|
|
@@ -39,7 +39,7 @@ export function DefaultDashboardInsightWidget(props) {
|
|
|
39
39
|
function DefaultDashboardInsightWidgetCore({ widget, insight, screen, onError, onExportReady, onLoadingChanged, dashboardItemClasses, exportData, }) {
|
|
40
40
|
const intl = useIntl();
|
|
41
41
|
const settings = useDashboardSelector(selectSettings);
|
|
42
|
-
const catalogAttributes = useDashboardSelector(
|
|
42
|
+
const catalogAttributes = useDashboardSelector(selectCatalogAttributesWithComputed);
|
|
43
43
|
const preloadedAttributesWithReferences = useDashboardSelector(selectPreloadedAttributesWithReferences);
|
|
44
44
|
const renderMode = useDashboardSelector(selectRenderMode);
|
|
45
45
|
const isExportMode = renderMode === "export";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VisualizationSwitcherNavigationHeader.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/widget/widget/VisualizationSwitcherWidget/VisualizationSwitcherNavigationHeader.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"VisualizationSwitcherNavigationHeader.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/widget/widget/VisualizationSwitcherWidget/VisualizationSwitcherNavigationHeader.tsx"],"names":[],"mappings":"AAOA,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,4BAA4B,EAAE,MAAM,qBAAqB,CAAC;AAa7F,OAAO,EAAE,KAAK,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;AAG3E,UAAU,2CAA2C;IACjD,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,mBAAmB,EAAE,cAAc,CAAC;IACpC,MAAM,EAAE,4BAA4B,CAAC;IACrC,2BAA2B,EAAE,CAAC,eAAe,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/D,UAAU,CAAC,EAAE,0BAA0B,CAAC;IACxC,OAAO,EAAE,MAAM,CAAC;CACnB;AAaD,wBAAgB,qCAAqC,CAAC,EAClD,MAAM,EACN,WAAW,EACX,YAAY,EACZ,mBAAmB,EACnB,2BAA2B,EAC3B,UAAU,EACV,OAAO,GACV,EAAE,2CAA2C,2CAiE7C"}
|
|
@@ -1,9 +1,12 @@
|
|
|
1
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
// (C) 2020-2026 GoodData Corporation
|
|
3
3
|
import { forwardRef, useCallback, useMemo } from "react";
|
|
4
4
|
import cx from "classnames";
|
|
5
|
-
import {
|
|
5
|
+
import { useIntl } from "react-intl";
|
|
6
|
+
import { Dropdown, UiIcon, UiListbox, } from "@gooddata/sdk-ui-kit";
|
|
7
|
+
import { useDashboardSelector } from "../../../../model/react/DashboardStoreProvider.js";
|
|
6
8
|
import { useDashboardUserInteraction } from "../../../../model/react/useDashboardUserInteraction.js";
|
|
9
|
+
import { selectRestrictedInsightsMap } from "../../../../model/store/unavailableObjects/unavailableObjectsSelectors.js";
|
|
7
10
|
import { DashboardItemHeadline } from "../../../presentationComponents/DashboardItems/DashboardItemHeadline.js";
|
|
8
11
|
const alignPoints = [
|
|
9
12
|
{
|
|
@@ -17,23 +20,33 @@ const alignPoints = [
|
|
|
17
20
|
];
|
|
18
21
|
export function VisualizationSwitcherNavigationHeader({ widget, clientWidth, clientHeight, activeVisualization, onActiveVisualizationChange, exportData, titleId, }) {
|
|
19
22
|
const userInteraction = useDashboardUserInteraction();
|
|
23
|
+
const intl = useIntl();
|
|
24
|
+
const restrictedInsights = useDashboardSelector(selectRestrictedInsightsMap);
|
|
25
|
+
const restrictedEntryTitle = intl.formatMessage({ id: "visualizationSwitcher.restrictedEntry" });
|
|
20
26
|
const items = useMemo(() => {
|
|
21
|
-
return widget.visualizations.map((visualization) =>
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
27
|
+
return widget.visualizations.map((visualization) => {
|
|
28
|
+
// a stored entry title names the visualization, so a restricted entry must never show it
|
|
29
|
+
const isRestricted = restrictedInsights.has(visualization.insight);
|
|
30
|
+
return {
|
|
31
|
+
type: "interactive",
|
|
32
|
+
id: visualization.identifier,
|
|
33
|
+
stringTitle: isRestricted ? restrictedEntryTitle : visualization.title,
|
|
34
|
+
icon: isRestricted ? "lock" : undefined,
|
|
35
|
+
data: visualization,
|
|
36
|
+
};
|
|
37
|
+
});
|
|
38
|
+
}, [widget.visualizations, restrictedInsights, restrictedEntryTitle]);
|
|
28
39
|
const handleSelectVisualization = useCallback((item) => {
|
|
29
40
|
onActiveVisualizationChange(item.id);
|
|
30
41
|
userInteraction.visualizationSwitcherInteraction("visualizationSwitcherSwitched");
|
|
31
42
|
}, [onActiveVisualizationChange, userInteraction]);
|
|
32
|
-
return (_jsx(Dropdown, { alignPoints: alignPoints, accessibilityConfig: { popupRole: "listbox" }, autofocusOnOpen: true, renderBody: ({ closeDropdown, ariaAttributes }) => (_jsx(UiListbox, { items: items, selectedItemId: activeVisualization.identifier, onSelect: handleSelectVisualization, onClose: closeDropdown, ariaAttributes: ariaAttributes, maxWidth: clientWidth ?? 200, dataTestId: "s-visualization-switcher-widget-list", itemDataTestId: "s-visualization-switcher-widget-list-item" })), renderButton: ({ toggleDropdown, isOpen, ariaAttributes, buttonRef }) => (_jsx(VisualizationSwitcherNavigationHeaderButton, {
|
|
43
|
+
return (_jsx(Dropdown, { alignPoints: alignPoints, accessibilityConfig: { popupRole: "listbox" }, autofocusOnOpen: true, renderBody: ({ closeDropdown, ariaAttributes }) => (_jsx(UiListbox, { items: items, selectedItemId: activeVisualization.identifier, onSelect: handleSelectVisualization, onClose: closeDropdown, ariaAttributes: ariaAttributes, maxWidth: clientWidth ?? 200, dataTestId: "s-visualization-switcher-widget-list", itemDataTestId: "s-visualization-switcher-widget-list-item" })), renderButton: ({ toggleDropdown, isOpen, ariaAttributes, buttonRef }) => (_jsx(VisualizationSwitcherNavigationHeaderButton, { isRestricted: restrictedInsights.has(activeVisualization.insight), title: restrictedInsights.has(activeVisualization.insight)
|
|
44
|
+
? restrictedEntryTitle
|
|
45
|
+
: activeVisualization.title, isOpen: isOpen, toggleDropdown: toggleDropdown, clientHeight: clientHeight, exportData: exportData, ariaAttributes: ariaAttributes, titleId: titleId, ref: buttonRef })) }));
|
|
33
46
|
}
|
|
34
|
-
const VisualizationSwitcherNavigationHeaderButton = forwardRef(function VisualizationSwitcherNavigationHeaderButton({ isOpen, toggleDropdown, title, clientHeight, ariaAttributes, exportData, titleId }, ref) {
|
|
47
|
+
const VisualizationSwitcherNavigationHeaderButton = forwardRef(function VisualizationSwitcherNavigationHeaderButton({ isOpen, toggleDropdown, title, isRestricted, clientHeight, ariaAttributes, exportData, titleId }, ref) {
|
|
35
48
|
const classNames = cx("gd-visualization-switcher-widget-header s-visualization-switcher-widget-header", {
|
|
36
49
|
"is-open": isOpen,
|
|
37
50
|
});
|
|
38
|
-
return (_jsx("div", { ref: ref, className: classNames, onClick: toggleDropdown, tabIndex: 0, ...exportData, ...ariaAttributes, children: _jsx(DashboardItemHeadline, { clientHeight: clientHeight, title: title, titleId: titleId }) }));
|
|
51
|
+
return (_jsx("div", { ref: ref, className: classNames, onClick: toggleDropdown, tabIndex: 0, ...exportData, ...ariaAttributes, children: _jsxs("div", { className: "gd-visualization-switcher-widget-header-title", children: [isRestricted ? _jsx(UiIcon, { type: "lock", size: 14, color: "complementary-7" }) : null, _jsx(DashboardItemHeadline, { clientHeight: clientHeight, title: title, titleId: titleId })] }) }));
|
|
39
52
|
});
|