@gooddata/sdk-ui-dashboard 11.58.0-alpha.2 → 11.58.0-alpha.4
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 +8 -8
- package/esm/__version.d.ts +1 -1
- package/esm/__version.js +1 -1
- package/esm/index.d.ts +5 -5
- package/esm/index.d.ts.map +1 -1
- package/esm/index.js +3 -3
- package/esm/internal.d.ts +1 -0
- package/esm/internal.d.ts.map +1 -1
- package/esm/internal.js +1 -0
- package/esm/model/DashboardTester.d.ts.map +1 -1
- package/esm/model/DashboardTester.js +7 -1
- package/esm/model/commandHandlers/common/validateDrillToCustomUrlParams.d.ts.map +1 -1
- package/esm/model/commandHandlers/common/validateDrillToCustomUrlParams.js +6 -1
- package/esm/model/commandHandlers/common/validateDrills.d.ts.map +1 -1
- package/esm/model/commandHandlers/common/validateDrills.js +12 -3
- package/esm/model/commandHandlers/dashboard/dashboardDrillReferences.d.ts +4 -0
- package/esm/model/commandHandlers/dashboard/dashboardDrillReferences.d.ts.map +1 -0
- package/esm/model/commandHandlers/dashboard/dashboardDrillReferences.js +53 -0
- package/esm/model/commandHandlers/dashboard/initializeDashboardHandler/index.d.ts.map +1 -1
- package/esm/model/commandHandlers/dashboard/initializeDashboardHandler/index.js +13 -6
- package/esm/model/commandHandlers/dashboard/saveAsDashboardHandler.d.ts.map +1 -1
- package/esm/model/commandHandlers/dashboard/saveAsDashboardHandler.js +4 -1
- package/esm/model/commandHandlers/dashboard/saveDashboardHandler.d.ts.map +1 -1
- package/esm/model/commandHandlers/dashboard/saveDashboardHandler.js +30 -6
- package/esm/model/commandHandlers/drill/drillToAttributeUrlHandler.d.ts.map +1 -1
- package/esm/model/commandHandlers/drill/drillToAttributeUrlHandler.js +2 -0
- package/esm/model/commandHandlers/drill/drillToCustomUrlHandler.d.ts.map +1 -1
- package/esm/model/commandHandlers/drill/drillToCustomUrlHandler.js +2 -0
- package/esm/model/commandHandlers/drill/drillToDashboardHandler.d.ts.map +1 -1
- package/esm/model/commandHandlers/drill/drillToDashboardHandler.js +2 -0
- package/esm/model/commandHandlers/drill/drillToInsightHandler.d.ts.map +1 -1
- package/esm/model/commandHandlers/drill/drillToInsightHandler.js +3 -1
- package/esm/model/commandHandlers/drill/resolveDrillToCustomUrl.d.ts.map +1 -1
- package/esm/model/commandHandlers/drill/resolveDrillToCustomUrl.js +30 -29
- package/esm/model/commandHandlers/drill/validateDrillAccess.d.ts +6 -0
- package/esm/model/commandHandlers/drill/validateDrillAccess.d.ts.map +1 -0
- package/esm/model/commandHandlers/drill/validateDrillAccess.js +10 -0
- package/esm/model/commandHandlers/parameters/filterParameterDependenciesWorker.d.ts +45 -0
- package/esm/model/commandHandlers/parameters/filterParameterDependenciesWorker.d.ts.map +1 -0
- package/esm/model/commandHandlers/parameters/filterParameterDependenciesWorker.js +99 -0
- package/esm/model/commandHandlers/parameters/insightParameterDependenciesWorker.d.ts +11 -0
- package/esm/model/commandHandlers/parameters/insightParameterDependenciesWorker.d.ts.map +1 -0
- package/esm/model/commandHandlers/parameters/insightParameterDependenciesWorker.js +71 -0
- package/esm/model/commandHandlers/parameters/loadFilterParameterDependencies.d.ts +22 -0
- package/esm/model/commandHandlers/parameters/loadFilterParameterDependencies.d.ts.map +1 -0
- package/esm/model/commandHandlers/parameters/loadFilterParameterDependencies.js +39 -0
- package/esm/model/commandHandlers/parameters/loadInsightParameterDependencies.d.ts +21 -0
- package/esm/model/commandHandlers/parameters/loadInsightParameterDependencies.d.ts.map +1 -0
- package/esm/model/commandHandlers/parameters/loadInsightParameterDependencies.js +86 -0
- package/esm/model/react/useInitializeDashboardStore.d.ts.map +1 -1
- package/esm/model/react/useInitializeDashboardStore.js +4 -0
- package/esm/model/react/useWidgetExecConfig.d.ts +4 -4
- package/esm/model/react/useWidgetExecConfig.d.ts.map +1 -1
- package/esm/model/react/useWidgetExecConfig.js +2 -2
- package/esm/model/store/catalog/catalogReducers.d.ts +16 -4
- package/esm/model/store/catalog/catalogReducers.d.ts.map +1 -1
- package/esm/model/store/catalog/catalogReducers.js +15 -3
- package/esm/model/store/catalog/catalogSelectors.d.ts +47 -7
- package/esm/model/store/catalog/catalogSelectors.d.ts.map +1 -1
- package/esm/model/store/catalog/catalogSelectors.js +33 -7
- package/esm/model/store/catalog/catalogState.d.ts +30 -9
- package/esm/model/store/catalog/catalogState.d.ts.map +1 -1
- package/esm/model/store/catalog/catalogState.js +2 -1
- package/esm/model/store/catalog/index.d.ts +4 -1
- package/esm/model/store/catalog/index.d.ts.map +1 -1
- package/esm/model/store/filtering/dashboardFilterSelectors.d.ts +8 -2
- package/esm/model/store/filtering/dashboardFilterSelectors.d.ts.map +1 -1
- package/esm/model/store/filtering/dashboardFilterSelectors.js +41 -25
- package/esm/model/store/filtering/types.d.ts +5 -0
- package/esm/model/store/filtering/types.d.ts.map +1 -1
- package/esm/model/store/tabs/layout/layoutSelectors.d.ts.map +1 -1
- package/esm/model/store/tabs/layout/layoutSelectors.js +2 -1
- package/esm/model/store/tabs/parameters/parametersHelpers.d.ts +42 -8
- package/esm/model/store/tabs/parameters/parametersHelpers.d.ts.map +1 -1
- package/esm/model/store/tabs/parameters/parametersHelpers.js +88 -19
- package/esm/model/store/tabs/parameters/parametersSelectors.d.ts +13 -6
- package/esm/model/store/tabs/parameters/parametersSelectors.d.ts.map +1 -1
- package/esm/model/store/tabs/parameters/parametersSelectors.js +24 -13
- package/esm/model/store/ui/index.d.ts +1 -0
- package/esm/model/store/ui/index.d.ts.map +1 -1
- package/esm/model/store/ui/uiReducers.d.ts +5 -1
- package/esm/model/store/ui/uiReducers.d.ts.map +1 -1
- package/esm/model/store/ui/uiReducers.js +8 -4
- package/esm/model/store/ui/uiSelectors.d.ts +5 -1
- package/esm/model/store/ui/uiSelectors.d.ts.map +1 -1
- package/esm/model/store/ui/uiSelectors.js +4 -0
- package/esm/model/store/ui/uiState.d.ts +2 -1
- package/esm/model/store/ui/uiState.d.ts.map +1 -1
- package/esm/model/store/ui/uiState.js +1 -0
- package/esm/model/store/widgetDrills/drillRestrictionSelectors.d.ts +23 -0
- package/esm/model/store/widgetDrills/drillRestrictionSelectors.d.ts.map +1 -0
- package/esm/model/store/widgetDrills/drillRestrictionSelectors.js +5 -0
- package/esm/model/store/widgetDrills/drillRestrictionUtils.d.ts +5 -0
- package/esm/model/store/widgetDrills/drillRestrictionUtils.d.ts.map +1 -0
- package/esm/model/store/widgetDrills/drillRestrictionUtils.js +27 -0
- package/esm/model/store/widgetDrills/widgetDrillSelectors.d.ts.map +1 -1
- package/esm/model/store/widgetDrills/widgetDrillSelectors.js +9 -5
- package/esm/presentation/automations/alerting/state/AlertingDialogStateProvider.js +1 -0
- package/esm/presentation/automations/alerting/state/useAlertDraftFilterWrites.d.ts +4 -2
- package/esm/presentation/automations/alerting/state/useAlertDraftFilterWrites.d.ts.map +1 -1
- package/esm/presentation/automations/alerting/state/useAlertDraftFilterWrites.js +12 -3
- package/esm/presentation/automations/alerting/utils/items.js +8 -14
- package/esm/presentation/automations/connectors/hooks/useBuildAutomationsContext.d.ts.map +1 -1
- package/esm/presentation/automations/connectors/hooks/useBuildAutomationsContext.js +8 -2
- package/esm/presentation/automations/contexts/AutomationsContext.d.ts +4 -2
- package/esm/presentation/automations/contexts/AutomationsContext.d.ts.map +1 -1
- package/esm/presentation/automations/scheduledEmail/hooks/useExportTimezones.js +1 -1
- package/esm/presentation/automations/scheduledEmail/state/ScheduledEmailDialogStateProvider.js +1 -0
- package/esm/presentation/automations/scheduledEmail/state/useScheduledEmailDraftFilterWrites.d.ts +4 -2
- package/esm/presentation/automations/scheduledEmail/state/useScheduledEmailDraftFilterWrites.d.ts.map +1 -1
- package/esm/presentation/automations/scheduledEmail/state/useScheduledEmailDraftFilterWrites.js +25 -6
- package/esm/presentation/automations/shared/automationFilters/components/AutomationAttributeFilter.d.ts.map +1 -1
- package/esm/presentation/automations/shared/automationFilters/components/AutomationAttributeFilter.js +16 -2
- package/esm/presentation/automations/shared/automationFilters/components/AutomationFiltersSelect.d.ts.map +1 -1
- package/esm/presentation/automations/shared/automationFilters/components/AutomationFiltersSelect.js +16 -11
- package/esm/presentation/automations/shared/automationFilters/components/AutomationRestrictedFilters.d.ts +9 -0
- package/esm/presentation/automations/shared/automationFilters/components/AutomationRestrictedFilters.d.ts.map +1 -0
- package/esm/presentation/automations/shared/automationFilters/components/AutomationRestrictedFilters.js +22 -0
- package/esm/presentation/automations/shared/automationFilters/hooks/useDefaultSelectedFiltersForExistingAutomation.d.ts +2 -2
- package/esm/presentation/automations/shared/automationFilters/hooks/useDefaultSelectedFiltersForExistingAutomation.d.ts.map +1 -1
- package/esm/presentation/automations/shared/automationFilters/hooks/useDefaultSelectedFiltersForExistingAutomation.js +17 -5
- package/esm/presentation/automations/shared/automationFilters/useAutomationFilters.d.ts +8 -0
- package/esm/presentation/automations/shared/automationFilters/useAutomationFilters.d.ts.map +1 -1
- package/esm/presentation/automations/shared/automationFilters/useAutomationFilters.js +54 -10
- package/esm/presentation/automations/shared/automationFilters/useAutomationFiltersSelect.d.ts.map +1 -1
- package/esm/presentation/automations/shared/automationFilters/useAutomationFiltersSelect.js +3 -2
- package/esm/presentation/automations/shared/filters/conversions.d.ts +10 -2
- package/esm/presentation/automations/shared/filters/conversions.d.ts.map +1 -1
- package/esm/presentation/automations/shared/filters/conversions.js +15 -6
- package/esm/presentation/dashboardSettingsDialog/DefaultDashboardSettingsDialog.d.ts.map +1 -1
- package/esm/presentation/dashboardSettingsDialog/DefaultDashboardSettingsDialog.js +3 -4
- package/esm/presentation/dashboardSettingsDialog/TimezoneOption.d.ts.map +1 -1
- package/esm/presentation/dashboardSettingsDialog/TimezoneOption.js +20 -7
- package/esm/presentation/dialogs/ExportCsvDialog.d.ts.map +1 -1
- package/esm/presentation/dialogs/ExportCsvDialog.js +2 -1
- package/esm/presentation/drill/DrillConfigPanel/DrillToUrl/CustomUrlEditorParametersSections/IdentifierParametersSection.js +1 -1
- package/esm/presentation/drill/DrillSelect/DrillSelectDropdown.d.ts +2 -1
- package/esm/presentation/drill/DrillSelect/DrillSelectDropdown.d.ts.map +1 -1
- package/esm/presentation/drill/DrillSelect/DrillSelectDropdown.js +19 -1
- package/esm/presentation/drill/DrillSelect/WithDrillSelect.d.ts.map +1 -1
- package/esm/presentation/drill/DrillSelect/WithDrillSelect.js +12 -4
- package/esm/presentation/drill/DrillSelect/types.d.ts +1 -0
- package/esm/presentation/drill/DrillSelect/types.d.ts.map +1 -1
- package/esm/presentation/drill/hooks/useDrillSelectDropdownMenuItems.d.ts.map +1 -1
- package/esm/presentation/drill/hooks/useDrillSelectDropdownMenuItems.js +4 -2
- package/esm/presentation/insightNotSavedDialog/InsightNotSavedDialog.d.ts.map +1 -1
- package/esm/presentation/insightNotSavedDialog/InsightNotSavedDialog.js +4 -5
- package/esm/presentation/localization/bundles/de-DE.localization-bundle.d.ts +3 -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 -2
- package/esm/presentation/localization/bundles/en-AU.localization-bundle.d.ts +3 -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 -2
- package/esm/presentation/localization/bundles/en-GB.localization-bundle.d.ts +3 -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 -2
- package/esm/presentation/localization/bundles/en-US.localization-bundle.d.ts +21 -1
- package/esm/presentation/localization/bundles/en-US.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/en-US.localization-bundle.js +27 -7
- package/esm/presentation/localization/bundles/es-419.localization-bundle.d.ts +3 -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 -2
- package/esm/presentation/localization/bundles/es-ES.localization-bundle.d.ts +3 -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 -2
- package/esm/presentation/localization/bundles/fi-FI.localization-bundle.d.ts +3 -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 -2
- package/esm/presentation/localization/bundles/fr-CA.localization-bundle.d.ts +3 -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 -2
- package/esm/presentation/localization/bundles/fr-FR.localization-bundle.d.ts +3 -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 -2
- package/esm/presentation/localization/bundles/id-ID.localization-bundle.d.ts +3 -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 -2
- package/esm/presentation/localization/bundles/it-IT.localization-bundle.d.ts +3 -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 -2
- package/esm/presentation/localization/bundles/ja-JP.localization-bundle.d.ts +3 -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 -2
- package/esm/presentation/localization/bundles/ko-KR.localization-bundle.d.ts +3 -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 -2
- package/esm/presentation/localization/bundles/nl-NL.localization-bundle.d.ts +3 -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 -2
- package/esm/presentation/localization/bundles/pl-PL.localization-bundle.d.ts +3 -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 -2
- package/esm/presentation/localization/bundles/pt-BR.localization-bundle.d.ts +3 -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 -2
- package/esm/presentation/localization/bundles/pt-PT.localization-bundle.d.ts +3 -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 -2
- package/esm/presentation/localization/bundles/ru-RU.localization-bundle.d.ts +3 -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 -2
- package/esm/presentation/localization/bundles/sl-SI.localization-bundle.d.ts +3 -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 -2
- package/esm/presentation/localization/bundles/th-TH.localization-bundle.d.ts +3 -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 -2
- package/esm/presentation/localization/bundles/tr-TR.localization-bundle.d.ts +3 -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 -2
- package/esm/presentation/localization/bundles/uk-UA.localization-bundle.d.ts +3 -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 -2
- package/esm/presentation/localization/bundles/vi-VN.localization-bundle.d.ts +3 -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 -2
- package/esm/presentation/localization/bundles/zh-HK.localization-bundle.d.ts +3 -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 -2
- package/esm/presentation/localization/bundles/zh-Hans.localization-bundle.d.ts +3 -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 -2
- package/esm/presentation/localization/bundles/zh-Hant.localization-bundle.d.ts +3 -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 -2
- package/esm/presentation/widget/common/RestrictedPlaceholder.d.ts +4 -8
- package/esm/presentation/widget/common/RestrictedPlaceholder.d.ts.map +1 -1
- package/esm/presentation/widget/common/RestrictedPlaceholder.js +16 -23
- package/esm/presentation/widget/insight/DefaultInsightBody/DefaultInsightBody.d.ts.map +1 -1
- package/esm/presentation/widget/insight/DefaultInsightBody/DefaultInsightBody.js +2 -4
- package/esm/presentation/widget/insight/LayeredTableView.d.ts +1 -1
- package/esm/presentation/widget/insight/LayeredTableView.d.ts.map +1 -1
- package/esm/presentation/widget/insight/ViewModeDashboardInsight/InsightDrillDialog/DrillDialogInsight.d.ts.map +1 -1
- package/esm/presentation/widget/insight/ViewModeDashboardInsight/InsightDrillDialog/DrillDialogInsight.js +2 -3
- package/esm/presentation/widget/insight/ViewModeDashboardInsight/InsightDrillDialog/InsightDrillDialog.d.ts.map +1 -1
- package/esm/presentation/widget/insight/ViewModeDashboardInsight/InsightDrillDialog/InsightDrillDialog.js +1 -1
- package/esm/presentation/widget/insight/types.d.ts +1 -1
- package/esm/presentation/widget/insight/types.d.ts.map +1 -1
- package/esm/presentation/widget/richText/RestrictedReferencesDialog.d.ts.map +1 -1
- package/esm/presentation/widget/richText/RestrictedReferencesDialog.js +5 -6
- package/esm/presentation/widget/visualizationSwitcher/ViewModeDashboardVisualizationSwitcher.js +1 -1
- package/esm/presentation/widget/visualizationSwitcher/configuration/VisualizationsList/VisualizationListItem.d.ts.map +1 -1
- package/esm/presentation/widget/visualizationSwitcher/configuration/VisualizationsList/VisualizationListItem.js +1 -4
- package/esm/presentation/widget/widget/InsightWidget/DefaultDashboardInsightWidget.js +2 -3
- package/esm/sdk-ui-dashboard.d.ts +88 -61
- package/package.json +21 -21
- package/styles/css/dashboard.css +1 -7
- package/styles/css/dashboard.css.map +1 -1
- package/styles/css/dashboardSettingsDialog.css +4 -0
- package/styles/css/dashboardSettingsDialog.css.map +1 -1
- package/styles/css/export.css +0 -6
- package/styles/css/export.css.map +1 -1
- package/styles/css/main.css +13 -20
- package/styles/css/main.css.map +1 -1
- package/styles/css/notifications_channels_dialog.css +1 -7
- package/styles/css/notifications_channels_dialog.css.map +1 -1
- package/styles/css/richTextWidget.css +4 -0
- package/styles/css/richTextWidget.css.map +1 -1
- package/styles/scss/dashboardSettingsDialog.scss +5 -0
- package/styles/scss/export.scss +0 -9
- package/styles/scss/notifications_channels_dialog.scss +1 -10
- package/styles/scss/richTextWidget.scss +5 -1
- package/esm/model/commandHandlers/dashboard/initializeDashboardHandler/loadMeasureParameterDependencies.d.ts +0 -13
- package/esm/model/commandHandlers/dashboard/initializeDashboardHandler/loadMeasureParameterDependencies.d.ts.map +0 -1
- package/esm/model/commandHandlers/dashboard/initializeDashboardHandler/loadMeasureParameterDependencies.js +0 -98
- package/esm/model/types/drillTypes.d.ts +0 -13
- package/esm/model/types/drillTypes.d.ts.map +0 -1
- package/esm/model/types/drillTypes.js +0 -14
- package/esm/presentation/widget/insight/geoDefaultDisplayFormRefs.d.ts +0 -5
- package/esm/presentation/widget/insight/geoDefaultDisplayFormRefs.d.ts.map +0 -1
- package/esm/presentation/widget/insight/geoDefaultDisplayFormRefs.js +0 -28
- package/esm/presentation/widget/insight/insightToTable.d.ts +0 -74
- package/esm/presentation/widget/insight/insightToTable.d.ts.map +0 -1
- package/esm/presentation/widget/insight/insightToTable.js +0 -482
|
@@ -1,13 +1,21 @@
|
|
|
1
1
|
// (C) 2025-2026 GoodData Corporation
|
|
2
2
|
import { useCallback, useMemo, useRef, useState } from "react";
|
|
3
|
+
import { partition } from "lodash-es";
|
|
3
4
|
import { useIntl } from "react-intl";
|
|
4
5
|
import { useAutomationsContext } from "../../contexts/AutomationsContext.js";
|
|
5
6
|
import { applyFilterChange, getCatalogAttributesByFilters, getCatalogDateDatasetsByFilters, getCatalogMeasuresByFilters, getFilterTitle, getNonHiddenFilters, getNonSelectedFilters, removeFilterFrom, resolveFilterToAdd, resolveTabFilterToAdd, } from "./utils.js";
|
|
6
7
|
/**
|
|
7
|
-
* Computes
|
|
8
|
+
* Computes the filters the bar renders: restricted ones split off to be reported as a count, hidden
|
|
9
|
+
* ones removed from the rest. Restricted filters stay in the selection, so they are still saved.
|
|
10
|
+
*
|
|
11
|
+
* @remarks
|
|
12
|
+
* Restricted filters are taken out before the hidden check, so one the author hid after the automation
|
|
13
|
+
* stored it is still counted and removable rather than kept invisibly.
|
|
8
14
|
*/
|
|
9
15
|
function computeVisibleFilters(selectedFilters, context) {
|
|
10
|
-
|
|
16
|
+
const [restrictedFilters, readableFilters] = partition(selectedFilters, context.isFilterRestricted);
|
|
17
|
+
const visibleFilters = getNonHiddenFilters(readableFilters, context.attributeConfigs, context.dateConfigs, context.isCommonDateFilterHidden, context.disableDateFilters);
|
|
18
|
+
return { visibleFilters, restrictedFilters };
|
|
11
19
|
}
|
|
12
20
|
/**
|
|
13
21
|
* Computes catalog attributes available for the Add filter dropdown.
|
|
@@ -32,7 +40,7 @@ function computeAddDropdownMeasures(nonSelectedFilters, context) {
|
|
|
32
40
|
*/
|
|
33
41
|
export const useAutomationFilters = ({ availableFilters, selectedFilters, onFiltersChange, onStoreFiltersChange, disableDateFilters = false, }) => {
|
|
34
42
|
const intl = useIntl();
|
|
35
|
-
const { catalogAttributes: allAttributes, catalogDateDatasets: allDateDatasets, catalogMeasures: allMeasures, attributeFilterConfigs: attributeConfigs, dateFilterConfigs: dateConfigs, measureValueFilterConfigs: mvfConfigs, dateFilterContextConfig: dateFilterConfig, commonDateFilterId, lockedFilters, } = useAutomationsContext();
|
|
43
|
+
const { catalogAttributes: allAttributes, catalogDateDatasets: allDateDatasets, catalogMeasures: allMeasures, attributeFilterConfigs: attributeConfigs, dateFilterConfigs: dateConfigs, measureValueFilterConfigs: mvfConfigs, dateFilterContextConfig: dateFilterConfig, commonDateFilterId, lockedFilters, isFilterRestricted, } = useAutomationsContext();
|
|
36
44
|
const [filterAnnouncement, setFilterAnnouncement] = useState("");
|
|
37
45
|
const addFilterButtonRef = useRef(null);
|
|
38
46
|
const filterGroupRef = useRef(null);
|
|
@@ -47,6 +55,7 @@ export const useAutomationFilters = ({ availableFilters, selectedFilters, onFilt
|
|
|
47
55
|
mvfConfigs,
|
|
48
56
|
isCommonDateFilterHidden,
|
|
49
57
|
disableDateFilters,
|
|
58
|
+
isFilterRestricted,
|
|
50
59
|
}), [
|
|
51
60
|
allAttributes,
|
|
52
61
|
allDateDatasets,
|
|
@@ -56,9 +65,12 @@ export const useAutomationFilters = ({ availableFilters, selectedFilters, onFilt
|
|
|
56
65
|
mvfConfigs,
|
|
57
66
|
isCommonDateFilterHidden,
|
|
58
67
|
disableDateFilters,
|
|
68
|
+
isFilterRestricted,
|
|
59
69
|
]);
|
|
60
|
-
const visibleFilters = useMemo(() => computeVisibleFilters(selectedFilters, processingContext), [selectedFilters, processingContext]);
|
|
61
|
-
|
|
70
|
+
const { visibleFilters, restrictedFilters } = useMemo(() => computeVisibleFilters(selectedFilters, processingContext), [selectedFilters, processingContext]);
|
|
71
|
+
// Dropped once here, so no consumer has to remember to exclude a restricted filter.
|
|
72
|
+
const selectableFilters = useMemo(() => availableFilters.filter((filter) => !isFilterRestricted(filter)), [availableFilters, isFilterRestricted]);
|
|
73
|
+
const nonSelectedFilters = useMemo(() => getNonSelectedFilters(selectableFilters, selectedFilters), [selectableFilters, selectedFilters]);
|
|
62
74
|
const attributes = useMemo(() => computeAddDropdownAttributes(nonSelectedFilters, processingContext), [nonSelectedFilters, processingContext]);
|
|
63
75
|
const dateDatasets = useMemo(() => computeAddDropdownDateDatasets(nonSelectedFilters, processingContext), [nonSelectedFilters, processingContext]);
|
|
64
76
|
const measures = useMemo(() => computeAddDropdownMeasures(nonSelectedFilters, processingContext), [nonSelectedFilters, processingContext]);
|
|
@@ -133,6 +145,20 @@ export const useAutomationFilters = ({ availableFilters, selectedFilters, onFilt
|
|
|
133
145
|
intl,
|
|
134
146
|
focusAddFilterButton,
|
|
135
147
|
]);
|
|
148
|
+
const handleRemoveRestrictedFilters = useCallback(() => {
|
|
149
|
+
const message = intl.formatMessage({ id: "automationFilters.announcement.restrictedFiltersRemoved" }, { count: restrictedFilters.length });
|
|
150
|
+
announceFiltersChanged(message);
|
|
151
|
+
onFiltersChange(selectedFilters.filter((filter) => !isFilterRestricted(filter)));
|
|
152
|
+
focusFilterGroup();
|
|
153
|
+
}, [
|
|
154
|
+
onFiltersChange,
|
|
155
|
+
focusFilterGroup,
|
|
156
|
+
announceFiltersChanged,
|
|
157
|
+
selectedFilters,
|
|
158
|
+
restrictedFilters,
|
|
159
|
+
isFilterRestricted,
|
|
160
|
+
intl,
|
|
161
|
+
]);
|
|
136
162
|
const handleStoreFiltersChange = useCallback((value) => {
|
|
137
163
|
onStoreFiltersChange(value, selectedFilters, undefined);
|
|
138
164
|
}, [onStoreFiltersChange, selectedFilters]);
|
|
@@ -147,6 +173,9 @@ export const useAutomationFilters = ({ availableFilters, selectedFilters, onFilt
|
|
|
147
173
|
commonDateFilterId,
|
|
148
174
|
lockedFilters,
|
|
149
175
|
visibleFilters,
|
|
176
|
+
restrictedFilterCount: restrictedFilters.length,
|
|
177
|
+
hasFiltersToAdd: nonSelectedFilters.length > 0,
|
|
178
|
+
handleRemoveRestrictedFilters,
|
|
150
179
|
attributes,
|
|
151
180
|
dateDatasets,
|
|
152
181
|
measures,
|
|
@@ -169,7 +198,7 @@ export const useAutomationFilters = ({ availableFilters, selectedFilters, onFilt
|
|
|
169
198
|
* Returns processed filters and handlers for add/change/delete operations per tab.
|
|
170
199
|
*/
|
|
171
200
|
export const useAutomationFiltersByTab = ({ filtersByTab, editedFiltersByTab, onFiltersByTabChange, onStoreFiltersChange, disableDateFilters = false, }) => {
|
|
172
|
-
const { catalogAttributes: allAttributes, catalogDateDatasets: allDateDatasets, catalogMeasures: allMeasures, commonDateFilterId, attributeFilterConfigsByTab: attributeConfigsByTab, dateFilterConfigsByTab: dateConfigsByTab, dateFilterConfigOverridesByTab: dateFilterConfigByTab, measureValueFilterConfigsByTab: mvfConfigsByTab, } = useAutomationsContext();
|
|
201
|
+
const { catalogAttributes: allAttributes, catalogDateDatasets: allDateDatasets, catalogMeasures: allMeasures, commonDateFilterId, attributeFilterConfigsByTab: attributeConfigsByTab, dateFilterConfigsByTab: dateConfigsByTab, dateFilterConfigOverridesByTab: dateFilterConfigByTab, measureValueFilterConfigsByTab: mvfConfigsByTab, isFilterRestricted, } = useAutomationsContext();
|
|
173
202
|
const [filterAnnouncement] = useState("");
|
|
174
203
|
const addFilterButtonRef = useRef(null);
|
|
175
204
|
const filterGroupRef = useRef(null);
|
|
@@ -195,14 +224,14 @@ export const useAutomationFiltersByTab = ({ filtersByTab, editedFiltersByTab, on
|
|
|
195
224
|
mvfConfigs,
|
|
196
225
|
isCommonDateFilterHidden,
|
|
197
226
|
disableDateFilters,
|
|
227
|
+
isFilterRestricted,
|
|
198
228
|
};
|
|
199
229
|
// Use edited filters if available, otherwise default selected filters
|
|
200
230
|
const selectedFilters = editedFiltersByTab?.[tabId] ?? tab.defaultSelectedFilters;
|
|
201
|
-
const availableFilters = tab.availableFilters;
|
|
202
231
|
// Apply visible filter logic (removes hidden filters based on config)
|
|
203
|
-
const visibleFilters = computeVisibleFilters(selectedFilters, processingContext);
|
|
232
|
+
const { visibleFilters, restrictedFilters } = computeVisibleFilters(selectedFilters, processingContext);
|
|
204
233
|
// Compute non-selected filters for Add dropdown
|
|
205
|
-
const nonSelectedFilters = getNonSelectedFilters(
|
|
234
|
+
const nonSelectedFilters = getNonSelectedFilters(tab.selectableFilters, selectedFilters);
|
|
206
235
|
// Compute catalog items for Add dropdown
|
|
207
236
|
const attributes = computeAddDropdownAttributes(nonSelectedFilters, processingContext);
|
|
208
237
|
const dateDatasets = computeAddDropdownDateDatasets(nonSelectedFilters, processingContext);
|
|
@@ -211,6 +240,8 @@ export const useAutomationFiltersByTab = ({ filtersByTab, editedFiltersByTab, on
|
|
|
211
240
|
tabId: tab.tabId,
|
|
212
241
|
tabTitle: tab.tabTitle,
|
|
213
242
|
visibleFilters,
|
|
243
|
+
restrictedFilterCount: restrictedFilters.length,
|
|
244
|
+
hasFiltersToAdd: nonSelectedFilters.length > 0,
|
|
214
245
|
lockedFilters: tab.lockedFilters,
|
|
215
246
|
attributes,
|
|
216
247
|
dateDatasets,
|
|
@@ -231,6 +262,7 @@ export const useAutomationFiltersByTab = ({ filtersByTab, editedFiltersByTab, on
|
|
|
231
262
|
dateFilterConfigByTab,
|
|
232
263
|
mvfConfigsByTab,
|
|
233
264
|
disableDateFilters,
|
|
265
|
+
isFilterRestricted,
|
|
234
266
|
]);
|
|
235
267
|
// Handlers for per-tab filter operations (similar to original hook)
|
|
236
268
|
const handleTabFilterChange = useCallback((tabId, updatedFilter) => {
|
|
@@ -267,7 +299,9 @@ export const useAutomationFiltersByTab = ({ filtersByTab, editedFiltersByTab, on
|
|
|
267
299
|
if (!tabData) {
|
|
268
300
|
return;
|
|
269
301
|
}
|
|
270
|
-
|
|
302
|
+
// Resolves by ObjRef, which is coarser than the local identifier used elsewhere: one
|
|
303
|
+
// catalog attribute can back several filters, so a restricted one must not be a candidate.
|
|
304
|
+
const availableFilter = resolveTabFilterToAdd(displayForm, tabData.selectableFilters, attributes, dateDatasets);
|
|
271
305
|
if (availableFilter) {
|
|
272
306
|
onFiltersByTabChange({
|
|
273
307
|
...editedFiltersByTab,
|
|
@@ -275,6 +309,15 @@ export const useAutomationFiltersByTab = ({ filtersByTab, editedFiltersByTab, on
|
|
|
275
309
|
});
|
|
276
310
|
}
|
|
277
311
|
}, [editedFiltersByTab, onFiltersByTabChange, filtersByTab]);
|
|
312
|
+
const handleTabRestrictedFiltersRemove = useCallback((tabId) => {
|
|
313
|
+
if (!editedFiltersByTab || !onFiltersByTabChange) {
|
|
314
|
+
return;
|
|
315
|
+
}
|
|
316
|
+
onFiltersByTabChange({
|
|
317
|
+
...editedFiltersByTab,
|
|
318
|
+
[tabId]: (editedFiltersByTab[tabId] ?? []).filter((filter) => !isFilterRestricted(filter)),
|
|
319
|
+
});
|
|
320
|
+
}, [editedFiltersByTab, onFiltersByTabChange, isFilterRestricted]);
|
|
278
321
|
const handleStoreFiltersChange = useCallback((value) => {
|
|
279
322
|
onStoreFiltersChange(value, undefined, editedFiltersByTab);
|
|
280
323
|
}, [editedFiltersByTab, onStoreFiltersChange]);
|
|
@@ -314,6 +357,7 @@ export const useAutomationFiltersByTab = ({ filtersByTab, editedFiltersByTab, on
|
|
|
314
357
|
handleTabFilterChange,
|
|
315
358
|
handleTabFilterDelete,
|
|
316
359
|
handleTabFilterAdd,
|
|
360
|
+
handleTabRestrictedFiltersRemove,
|
|
317
361
|
handleStoreFiltersChange,
|
|
318
362
|
makeFilterGroupUnfocusable,
|
|
319
363
|
setAddFilterButtonRefs,
|
package/esm/presentation/automations/shared/automationFilters/useAutomationFiltersSelect.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useAutomationFiltersSelect.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/automations/shared/automationFilters/useAutomationFiltersSelect.ts"],"names":[],"mappings":"AAIA,OAAO,EACH,KAAK,iBAAiB,EACtB,KAAK,yBAAyB,EAC9B,KAAK,wBAAwB,EAEhC,MAAM,qBAAqB,CAAC;AAG7B,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4CAA4C,CAAC;AACxF,OAAO,EAAE,KAAK,uBAAuB,EAAE,MAAM,wCAAwC,CAAC;AActF;;;;GAIG;AACH,MAAM,MAAM,kBAAkB,GAAG,MAAM,CAAC,MAAM,EAAE,iBAAiB,EAAE,CAAC,CAAC;AAErE;;;GAGG;AACH,MAAM,WAAW,2BAA2B;IACxC,uBAAuB,EAAE,iBAAiB,EAAE,CAAC;IAC7C,0BAA0B,EAAE,CAAC,OAAO,EAAE,iBAAiB,EAAE,KAAK,IAAI,CAAC;IACnE,YAAY,EAAE,OAAO,CAAC;IACtB,eAAe,EAAE,CAAC,YAAY,EAAE,OAAO,KAAK,IAAI,CAAC;IACjD,gBAAgB,EAAE,iBAAiB,EAAE,GAAG,SAAS,CAAC;IAClD,gCAAgC,EAAE,wBAAwB,EAAE,GAAG,SAAS,CAAC;IACzE,uBAAuB,EAAE,iBAAiB,EAAE,CAAC;IAC7C;;;;;OAKG;IACH,YAAY,EAAE,qBAAqB,EAAE,GAAG,SAAS,CAAC;IAClD;;;;OAIG;IACH,4BAA4B,EAAE,kBAAkB,GAAG,SAAS,CAAC;IAC7D;;OAEG;IACH,+BAA+B,EAAE,CAAC,OAAO,EAAE,kBAAkB,KAAK,IAAI,CAAC;IAEvE,qCAAqC,EAAE,MAAM,CAAC,MAAM,EAAE,wBAAwB,EAAE,CAAC,GAAG,SAAS,CAAC;CACjG;AAiFD;;GAEG;AACH,eAAO,MAAM,0BAA0B,kCAGpC;IACC;;OAEG;IACH,MAAM,CAAC,EAAE,uBAAuB,CAAC;IAEjC;;;OAGG;IACH,gBAAgB,CAAC,EAAE,yBAAyB,CAAC;CAChD,KAAG,
|
|
1
|
+
{"version":3,"file":"useAutomationFiltersSelect.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/automations/shared/automationFilters/useAutomationFiltersSelect.ts"],"names":[],"mappings":"AAIA,OAAO,EACH,KAAK,iBAAiB,EACtB,KAAK,yBAAyB,EAC9B,KAAK,wBAAwB,EAEhC,MAAM,qBAAqB,CAAC;AAG7B,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4CAA4C,CAAC;AACxF,OAAO,EAAE,KAAK,uBAAuB,EAAE,MAAM,wCAAwC,CAAC;AActF;;;;GAIG;AACH,MAAM,MAAM,kBAAkB,GAAG,MAAM,CAAC,MAAM,EAAE,iBAAiB,EAAE,CAAC,CAAC;AAErE;;;GAGG;AACH,MAAM,WAAW,2BAA2B;IACxC,uBAAuB,EAAE,iBAAiB,EAAE,CAAC;IAC7C,0BAA0B,EAAE,CAAC,OAAO,EAAE,iBAAiB,EAAE,KAAK,IAAI,CAAC;IACnE,YAAY,EAAE,OAAO,CAAC;IACtB,eAAe,EAAE,CAAC,YAAY,EAAE,OAAO,KAAK,IAAI,CAAC;IACjD,gBAAgB,EAAE,iBAAiB,EAAE,GAAG,SAAS,CAAC;IAClD,gCAAgC,EAAE,wBAAwB,EAAE,GAAG,SAAS,CAAC;IACzE,uBAAuB,EAAE,iBAAiB,EAAE,CAAC;IAC7C;;;;;OAKG;IACH,YAAY,EAAE,qBAAqB,EAAE,GAAG,SAAS,CAAC;IAClD;;;;OAIG;IACH,4BAA4B,EAAE,kBAAkB,GAAG,SAAS,CAAC;IAC7D;;OAEG;IACH,+BAA+B,EAAE,CAAC,OAAO,EAAE,kBAAkB,KAAK,IAAI,CAAC;IAEvE,qCAAqC,EAAE,MAAM,CAAC,MAAM,EAAE,wBAAwB,EAAE,CAAC,GAAG,SAAS,CAAC;CACjG;AAiFD;;GAEG;AACH,eAAO,MAAM,0BAA0B,kCAGpC;IACC;;OAEG;IACH,MAAM,CAAC,EAAE,uBAAuB,CAAC;IAEjC;;;OAGG;IACH,gBAAgB,CAAC,EAAE,yBAAyB,CAAC;CAChD,KAAG,2BAiHH,CAAC;AAEF,wBAAgB,yCAAyC,CAAC,YAAY,EAAE,qBAAqB,EAAE,GAAG,SAAS,kCAQ1G;AAED,wBAAgB,mCAAmC,CAAC,YAAY,EAAE,qBAAqB,EAAE,GAAG,SAAS,uCAQpG"}
|
|
@@ -68,7 +68,7 @@ function checkAreParametersStored(automationToEdit) {
|
|
|
68
68
|
* Hook to get data for AutomationFiltersSelect component.
|
|
69
69
|
*/
|
|
70
70
|
export const useAutomationFiltersSelect = ({ widget, automationToEdit, }) => {
|
|
71
|
-
const { availableFilters, automationFiltersByTab: allFiltersByTab, commonDateFilterId, parameters: { enabled: parametersEnabled }, } = useAutomationsContext();
|
|
71
|
+
const { availableFilters, automationFiltersByTab: allFiltersByTab, commonDateFilterId, isFilterRestricted, parameters: { enabled: parametersEnabled }, } = useAutomationsContext();
|
|
72
72
|
const availableFiltersWithoutIgnoredWidgetFilters = useMemo(() => removeIgnoredWidgetFilters(availableFilters, widget), [availableFilters, widget]);
|
|
73
73
|
const availableFiltersAsVisibleFilters = useAutomationVisibleFilters(availableFiltersWithoutIgnoredWidgetFilters);
|
|
74
74
|
const filtersForNewAutomation = useDefaultSelectedFiltersForNewAutomation(widget);
|
|
@@ -99,7 +99,7 @@ export const useAutomationFiltersSelect = ({ widget, automationToEdit, }) => {
|
|
|
99
99
|
if (!filtersByTab || !automationToEdit || isDashboardAutomationWithoutStoredFilters) {
|
|
100
100
|
return undefined;
|
|
101
101
|
}
|
|
102
|
-
const filtersByTabForExistingAutomation = getDefaultSelectedFiltersByTabForExistingAutomation(automationToEdit, availableFiltersByTab, commonDateFilterId);
|
|
102
|
+
const filtersByTabForExistingAutomation = getDefaultSelectedFiltersByTabForExistingAutomation(automationToEdit, availableFiltersByTab, commonDateFilterId, isFilterRestricted);
|
|
103
103
|
if (filtersByTabForExistingAutomation) {
|
|
104
104
|
return filtersByTabForExistingAutomation;
|
|
105
105
|
}
|
|
@@ -110,6 +110,7 @@ export const useAutomationFiltersSelect = ({ widget, automationToEdit, }) => {
|
|
|
110
110
|
isDashboardAutomationWithoutStoredFilters,
|
|
111
111
|
commonDateFilterId,
|
|
112
112
|
availableFiltersByTab,
|
|
113
|
+
isFilterRestricted,
|
|
113
114
|
]);
|
|
114
115
|
// State for edited filters per tab (only used when dashboard tabs are enabled)
|
|
115
116
|
const [editedAutomationFiltersByTab, setEditedAutomationFiltersByTab] = useState(automationToEdit && !isDashboardAutomationWithoutStoredFilters
|
|
@@ -1,12 +1,20 @@
|
|
|
1
1
|
import { type FilterContextItem, type IAutomationVisibleFilter, type IFilter, type IInsight } from "@gooddata/sdk-model";
|
|
2
2
|
import { type ExtendedDashboardWidget } from "../../../../model/types/layoutTypes.js";
|
|
3
3
|
import { type IDashboardFilter } from "../../../../types.js";
|
|
4
|
-
|
|
4
|
+
/**
|
|
5
|
+
* The automation's own stored entries, used to keep a restricted filter's name as it was saved.
|
|
6
|
+
* `TStored` is the flat list, or the per-tab record for {@link getVisibleFiltersByFiltersByTab}.
|
|
7
|
+
*/
|
|
8
|
+
export interface IRestrictedVisibleFiltersFallback<TStored = IAutomationVisibleFilter[]> {
|
|
9
|
+
storedVisibleFilters: TStored | undefined;
|
|
10
|
+
isFilterRestricted: (filter: FilterContextItem) => boolean;
|
|
11
|
+
}
|
|
12
|
+
export declare const getVisibleFiltersByFilters: (selectedFilters: FilterContextItem[] | undefined, visibleFiltersMetadata: IAutomationVisibleFilter[] | undefined, storeFilters?: boolean, restrictedFallback?: IRestrictedVisibleFiltersFallback) => IAutomationVisibleFilter[] | undefined;
|
|
5
13
|
/**
|
|
6
14
|
* Get visible filters metadata structured by tab.
|
|
7
15
|
* Applies the same logic as getVisibleFiltersByFilters to each tab's filters.
|
|
8
16
|
*/
|
|
9
|
-
export declare const getVisibleFiltersByFiltersByTab: (filtersByTab: Record<string, FilterContextItem[]> | undefined, visibleFiltersMetadata: Record<string, IAutomationVisibleFilter[]> | undefined, storeFilters?: boolean) => Record<string, IAutomationVisibleFilter[]> | undefined;
|
|
17
|
+
export declare const getVisibleFiltersByFiltersByTab: (filtersByTab: Record<string, FilterContextItem[]> | undefined, visibleFiltersMetadata: Record<string, IAutomationVisibleFilter[]> | undefined, storeFilters?: boolean, restrictedFallback?: IRestrictedVisibleFiltersFallback<Record<string, IAutomationVisibleFilter[]>>) => Record<string, IAutomationVisibleFilter[]> | undefined;
|
|
10
18
|
/**
|
|
11
19
|
* Get final execution filters for the widget alert or scheduled export.
|
|
12
20
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conversions.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/automations/shared/filters/conversions.ts"],"names":[],"mappings":"AAKA,OAAO,EAEH,KAAK,iBAAiB,EACtB,KAAK,wBAAwB,EAC7B,KAAK,OAAO,EACZ,KAAK,QAAQ,EAoChB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAE,KAAK,uBAAuB,EAAE,MAAM,wCAAwC,CAAC;AAEtF,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAE7D,eAAO,MAAM,0BAA0B,oBAClB,iBAAiB,EAAE,GAAG,SAAS,0BACxB,wBAAwB,EAAE,GAAG,SAAS,iBAC/C,OAAO,
|
|
1
|
+
{"version":3,"file":"conversions.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/automations/shared/filters/conversions.ts"],"names":[],"mappings":"AAKA,OAAO,EAEH,KAAK,iBAAiB,EACtB,KAAK,wBAAwB,EAC7B,KAAK,OAAO,EACZ,KAAK,QAAQ,EAoChB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAE,KAAK,uBAAuB,EAAE,MAAM,wCAAwC,CAAC;AAEtF,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAE7D;;;GAGG;AACH,MAAM,WAAW,iCAAiC,CAAC,OAAO,GAAG,wBAAwB,EAAE;IACnF,oBAAoB,EAAE,OAAO,GAAG,SAAS,CAAC;IAC1C,kBAAkB,EAAE,CAAC,MAAM,EAAE,iBAAiB,KAAK,OAAO,CAAC;CAC9D;AASD,eAAO,MAAM,0BAA0B,oBAClB,iBAAiB,EAAE,GAAG,SAAS,0BACxB,wBAAwB,EAAE,GAAG,SAAS,iBAC/C,OAAO,uBACD,iCAAiC,KACvD,wBAAwB,EAAE,GAAG,SAmC/B,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,+BAA+B,iBAC1B,MAAM,CAAC,MAAM,EAAE,iBAAiB,EAAE,CAAC,GAAG,SAAS,0BACrC,MAAM,CAAC,MAAM,EAAE,wBAAwB,EAAE,CAAC,GAAG,SAAS,iBAC/D,OAAO,uBACD,iCAAiC,CAAC,MAAM,CAAC,MAAM,EAAE,wBAAwB,EAAE,CAAC,CAAC,KACnG,MAAM,CAAC,MAAM,EAAE,wBAAwB,EAAE,CAAC,GAAG,SAuB/C,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,uBAAuB,8BACL,iBAAiB,EAAE,0BACtB,iBAAiB,EAAE,UACnC,uBAAuB,GAAG,SAAS,WAClC,QAAQ,GAAG,SAAS,sBACT,MAAM,GAAG,SAAS,wBACjB,OAAO,kBACb,OAAO,cA6BzB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,0BAA0B,8BACR,iBAAiB,EAAE,0BACtB,iBAAiB,EAAE,iBAC5B,OAAO,oCAWzB,CAAC;AAEF,wBAAgB,kCAAkC,CAC9C,MAAM,EAAE,gBAAgB,EACxB,YAAY,EAAE,OAAO,GACtB,iBAAiB,GAAG,SAAS,CA8E/B;AAED;;;;;;;GAOG;AACH,wBAAgB,oCAAoC,CAChD,OAAO,EAAE,OAAO,EAAE,EAClB,OAAO,EAAE,QAAQ,GAAG,SAAS,GAC9B,OAAO,EAAE,CAiDX;AAyBD,8GAA8G;AAC9G,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAW9D;AAED,mEAAmE;AACnE,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAWxE;AAED;;;;;;GAMG;AACH,wBAAgB,4BAA4B,CAAC,CAAC,EAAE,OAAO,GAAG,OAAO,CA0BhE"}
|
|
@@ -3,7 +3,10 @@ import { compact } from "lodash-es";
|
|
|
3
3
|
import { NotSupported } from "@gooddata/sdk-backend-spi";
|
|
4
4
|
import { attributeLocalId, dashboardFilterLocalIdentifier, filterAttributeElements, filterContextItemsToDashboardFiltersByWidget, filterLocalIdentifier, filterObjRef, hasMeasureValueFilterConditions, insightAttributes, isAbsoluteDateFilter, isAllDashboardMeasureValueFilter, isAllTimeDateFilter, isAllValuesAttributeFilter, isAllValuesDashboardAttributeFilter, isArbitraryAttributeFilter, isAttributeFilterWithSelection, isDashboardDateFilter, isDashboardMeasureValueFilter, isDateFilter, isInsightWidget, isLocalIdRef, isMatchAttributeFilter, isMeasureValueFilter, isNegativeAttributeFilter, isNoopAllTimeDashboardDateFilter, isObjRef, isRankingFilter, isRelativeBoundedDateFilter, isRelativeDateFilter, measureValueFilterConditions, measureValueFilterMeasure, mergeFilters, newAbsoluteDashboardDateFilter, newAllTimeDashboardDateFilter, newRelativeDashboardDateFilter, } from "@gooddata/sdk-model";
|
|
5
5
|
import { removeIgnoredWidgetFilters } from "../../../../model/utils/widgetFilters.js";
|
|
6
|
-
|
|
6
|
+
function findVisibleFilter(localIdentifier, visibleFilters) {
|
|
7
|
+
return (visibleFilters ?? []).find((visibleFilter) => visibleFilter.localIdentifier === localIdentifier);
|
|
8
|
+
}
|
|
9
|
+
export const getVisibleFiltersByFilters = (selectedFilters, visibleFiltersMetadata, storeFilters, restrictedFallback) => {
|
|
7
10
|
if (!storeFilters) {
|
|
8
11
|
return undefined;
|
|
9
12
|
}
|
|
@@ -13,9 +16,12 @@ export const getVisibleFiltersByFilters = (selectedFilters, visibleFiltersMetada
|
|
|
13
16
|
.filter((filter) => !isAllValuesDashboardAttributeFilter(filter) && !isAllDashboardMeasureValueFilter(filter))
|
|
14
17
|
.map((selectedFilter) => {
|
|
15
18
|
const selectedLocalIdentifier = dashboardFilterLocalIdentifier(selectedFilter);
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
+
// A restricted date or measure value filter still resolves a title from the dashboard, so
|
|
20
|
+
// the stored entry has to win or the saved name is replaced by that derived one.
|
|
21
|
+
const storedFilter = restrictedFallback?.isFilterRestricted(selectedFilter)
|
|
22
|
+
? findVisibleFilter(selectedLocalIdentifier, restrictedFallback.storedVisibleFilters)
|
|
23
|
+
: undefined;
|
|
24
|
+
const targetFilter = storedFilter ?? findVisibleFilter(selectedLocalIdentifier, visibleFiltersMetadata);
|
|
19
25
|
if (targetFilter && isDashboardDateFilter(selectedFilter)) {
|
|
20
26
|
return {
|
|
21
27
|
...targetFilter,
|
|
@@ -32,12 +38,15 @@ export const getVisibleFiltersByFilters = (selectedFilters, visibleFiltersMetada
|
|
|
32
38
|
* Get visible filters metadata structured by tab.
|
|
33
39
|
* Applies the same logic as getVisibleFiltersByFilters to each tab's filters.
|
|
34
40
|
*/
|
|
35
|
-
export const getVisibleFiltersByFiltersByTab = (filtersByTab, visibleFiltersMetadata, storeFilters) => {
|
|
41
|
+
export const getVisibleFiltersByFiltersByTab = (filtersByTab, visibleFiltersMetadata, storeFilters, restrictedFallback) => {
|
|
36
42
|
if (!storeFilters || !filtersByTab) {
|
|
37
43
|
return undefined;
|
|
38
44
|
}
|
|
39
45
|
return Object.entries(filtersByTab).reduce((acc, [tabId, tabFilters]) => {
|
|
40
|
-
const visibleFilters = getVisibleFiltersByFilters(tabFilters, visibleFiltersMetadata?.[tabId], true
|
|
46
|
+
const visibleFilters = getVisibleFiltersByFilters(tabFilters, visibleFiltersMetadata?.[tabId], true, restrictedFallback && {
|
|
47
|
+
storedVisibleFilters: restrictedFallback.storedVisibleFilters?.[tabId],
|
|
48
|
+
isFilterRestricted: restrictedFallback.isFilterRestricted,
|
|
49
|
+
});
|
|
41
50
|
if (visibleFilters && visibleFilters.length > 0) {
|
|
42
51
|
acc[tabId] = visibleFilters;
|
|
43
52
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DefaultDashboardSettingsDialog.d.ts","sourceRoot":"","sources":["../../../src/presentation/dashboardSettingsDialog/DefaultDashboardSettingsDialog.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,YAAY,EAAoD,MAAM,OAAO,CAAC;AA2C5F,OAAO,EAAE,KAAK,6BAA6B,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"DefaultDashboardSettingsDialog.d.ts","sourceRoot":"","sources":["../../../src/presentation/dashboardSettingsDialog/DefaultDashboardSettingsDialog.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,YAAY,EAAoD,MAAM,OAAO,CAAC;AA2C5F,OAAO,EAAE,KAAK,6BAA6B,EAAE,MAAM,YAAY,CAAC;AAGhE;;GAEG;AACH,wBAAgB,8BAA8B,CAAC,EAC3C,SAAS,EACT,OAAO,EACP,QAAQ,GACX,EAAE,6BAA6B,GAAG,YAAY,GAAG,IAAI,CAiRrD"}
|
|
@@ -11,7 +11,6 @@ import { selectDateFormat, selectEnableDashboardPersistentFiltersAcrossTabs, sel
|
|
|
11
11
|
import { selectCrossFilteringEnabledAndSupported } from "../../model/store/topBar/topBarSelectors.js";
|
|
12
12
|
import { TimezoneOption } from "./TimezoneOption.js";
|
|
13
13
|
import { useDialogData } from "./useDialogData.js";
|
|
14
|
-
const DASHBOARD_TIMEZONE_DOC_LINK = "https://www.gooddata.ai/docs/cloud/customize-appearance/manage-timezones/#change-the-time-zone-on-a-dashboard";
|
|
15
14
|
/**
|
|
16
15
|
* @alpha
|
|
17
16
|
*/
|
|
@@ -105,9 +104,9 @@ export function DefaultDashboardSettingsDialog({ isVisible, onApply, onCancel /*
|
|
|
105
104
|
strong: (chunks) => _jsx("strong", { children: chunks }),
|
|
106
105
|
} })) })] }), settings.enableTimezoneChange ? (_jsxs("div", { className: "gd-dashboard-settings-dialog-section s-dashboard-settings-timezone", children: [_jsx(DialogListHeader, { title: intl.formatMessage({ id: "settingsDashboardDialog.section.timezone" }), className: "gd-dashboard-settings-filters" }), _jsx(TimezoneOption, { label: intl.formatMessage({
|
|
107
106
|
id: "settingsDashboardDialog.section.timezone.defaultTimezone",
|
|
108
|
-
}), tooltip:
|
|
109
|
-
|
|
110
|
-
|
|
107
|
+
}), tooltip: intl.formatMessage({
|
|
108
|
+
id: "settingsDashboardDialog.section.timezone.defaultTimezone.tooltip",
|
|
109
|
+
}), timezoneConfig: currentData.timezoneConfig, onChange: (timezoneId) => {
|
|
111
110
|
setCurrentData({
|
|
112
111
|
...currentData,
|
|
113
112
|
timezoneConfig: normalizeDashboardTimezoneConfig({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TimezoneOption.d.ts","sourceRoot":"","sources":["../../../src/presentation/dashboardSettingsDialog/TimezoneOption.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,SAAS,EAAW,MAAM,OAAO,CAAC;AAIhD,OAAO,EAAoB,KAAK,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"TimezoneOption.d.ts","sourceRoot":"","sources":["../../../src/presentation/dashboardSettingsDialog/TimezoneOption.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,SAAS,EAAW,MAAM,OAAO,CAAC;AAIhD,OAAO,EAAoB,KAAK,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAetF,UAAU,oBAAoB;IAC1B,KAAK,EAAE,SAAS,CAAC;IACjB,OAAO,EAAE,SAAS,CAAC;IACnB,cAAc,EAAE,wBAAwB,GAAG,SAAS,CAAC;IACrD,QAAQ,EAAE,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,KAAK,IAAI,CAAC;CACtD;AAED,wBAAgB,cAAc,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,EAAE,oBAAoB,2CAmGhG"}
|
|
@@ -1,11 +1,15 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
1
|
+
import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
// (C) 2026 GoodData Corporation
|
|
3
3
|
import { useMemo } from "react";
|
|
4
4
|
import { useIntl } from "react-intl";
|
|
5
5
|
import { BROWSER_DETECTED } from "@gooddata/sdk-model";
|
|
6
|
-
import { TimezoneSelect, UiTooltip, useIdPrefixed, } from "@gooddata/sdk-ui-kit";
|
|
6
|
+
import { TimezoneSelect, UiLink, UiTooltip, useIdPrefixed, } from "@gooddata/sdk-ui-kit";
|
|
7
|
+
import { useDashboardSelector } from "../../model/react/DashboardStoreProvider.js";
|
|
8
|
+
import { selectIsWhiteLabeled } from "../../model/store/config/configSelectors.js";
|
|
9
|
+
const DASHBOARD_TIMEZONE_DOC_LINK = "https://www.gooddata.ai/docs/cloud/customize-appearance/manage-timezones/#change-the-time-zone-on-a-dashboard";
|
|
7
10
|
export function TimezoneOption({ label, tooltip, timezoneConfig, onChange }) {
|
|
8
11
|
const intl = useIntl();
|
|
12
|
+
const isWhiteLabeled = useDashboardSelector(selectIsWhiteLabeled);
|
|
9
13
|
const helpTooltipId = useIdPrefixed("timezone-help-tooltip");
|
|
10
14
|
const specialItems = useMemo(() => {
|
|
11
15
|
const workspaceItemLabel = intl.formatMessage({
|
|
@@ -14,6 +18,10 @@ export function TimezoneOption({ label, tooltip, timezoneConfig, onChange }) {
|
|
|
14
18
|
const workspaceItemTooltip = intl.formatMessage({
|
|
15
19
|
id: "settingsDashboardDialog.section.timezone.defaultTimezone.workspace.tooltip",
|
|
16
20
|
});
|
|
21
|
+
// the docs link goes on its own line; it is left out of the plain-text tooltip read by screen readers
|
|
22
|
+
const workspaceItemTooltipContent = isWhiteLabeled ? undefined : (_jsxs(_Fragment, { children: [workspaceItemTooltip, _jsx("div", { className: "gd-timezone-option__tooltip-link", children: _jsx(UiLink, { variant: "inverse", href: DASHBOARD_TIMEZONE_DOC_LINK, rel: "noopener noreferrer", target: "_blank", dataTestId: "timezone-docs-link", children: intl.formatMessage({
|
|
23
|
+
id: "settingsDashboardDialog.section.timezone.defaultTimezone.workspace.tooltip.learnMore",
|
|
24
|
+
}) }) })] }));
|
|
17
25
|
const browserItemLabel = intl.formatMessage({
|
|
18
26
|
id: "settingsDashboardDialog.section.timezone.defaultTimezone.fromBrowser",
|
|
19
27
|
});
|
|
@@ -21,13 +29,18 @@ export function TimezoneOption({ label, tooltip, timezoneConfig, onChange }) {
|
|
|
21
29
|
id: "settingsDashboardDialog.section.timezone.defaultTimezone.fromBrowser.tooltip",
|
|
22
30
|
});
|
|
23
31
|
return [
|
|
24
|
-
{
|
|
32
|
+
{
|
|
33
|
+
id: undefined,
|
|
34
|
+
label: workspaceItemLabel,
|
|
35
|
+
tooltip: workspaceItemTooltip,
|
|
36
|
+
tooltipContent: workspaceItemTooltipContent,
|
|
37
|
+
},
|
|
25
38
|
{ id: BROWSER_DETECTED, label: browserItemLabel, tooltip: browserItemTooltip },
|
|
26
39
|
];
|
|
27
|
-
}, [intl]);
|
|
28
|
-
return (_jsxs("div", { className: "configuration-category-item", children: [
|
|
29
|
-
|
|
30
|
-
|
|
40
|
+
}, [intl, isWhiteLabeled]);
|
|
41
|
+
return (_jsxs("div", { className: "configuration-category-item", children: [_jsxs("span", { className: "input-label-text", children: [label, _jsx("span", { className: "configuration-category-item-tooltip-icon", children: _jsx(UiTooltip, { id: helpTooltipId, component: "span", inlineAnchor: true, anchor: _jsx("span", { role: "img", tabIndex: 0, "aria-label": intl.formatMessage({
|
|
42
|
+
id: "settingsDashboardDialog.section.timezone.defaultTimezone.help",
|
|
43
|
+
}), "aria-describedby": helpTooltipId, className: "gd-icon-circle-question gd-filter-configuration__help-icon" }), content: _jsx("div", { className: "gd-filter-configuration__help-tooltip", children: tooltip }), triggerBy: ["hover", "focus"], arrowPlacement: "left", optimalPlacement: true, width: 200 }) })] }), _jsx(TimezoneSelect, { value: timezoneConfig?.timezoneId, showTooltip: true, onChange: onChange, specialItems: specialItems, searchPlaceholder: intl.formatMessage({
|
|
31
44
|
id: "settingsDashboardDialog.section.timezone.select.searchPlaceholder",
|
|
32
45
|
}), ariaLabel: intl.formatMessage({
|
|
33
46
|
id: "settingsDashboardDialog.section.timezone.defaultTimezone",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ExportCsvDialog.d.ts","sourceRoot":"","sources":["../../../src/presentation/dialogs/ExportCsvDialog.tsx"],"names":[],"mappings":"AAcA,OAAO,EAAE,KAAK,oBAAoB,EAAE,MAAM,gDAAgD,CAAC;
|
|
1
|
+
{"version":3,"file":"ExportCsvDialog.d.ts","sourceRoot":"","sources":["../../../src/presentation/dialogs/ExportCsvDialog.tsx"],"names":[],"mappings":"AAcA,OAAO,EAAE,KAAK,oBAAoB,EAAE,MAAM,gDAAgD,CAAC;AAY3F,MAAM,WAAW,qBAAqB;IAClC,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,QAAQ,EAAE,CAAC,IAAI,EAAE,oBAAoB,KAAK,IAAI,CAAC;CAClD;AAED,eAAO,MAAM,eAAe,+DAAyD,qBAAqB,6CA8CxG,CAAC"}
|
|
@@ -11,6 +11,7 @@ const messages = defineMessages({
|
|
|
11
11
|
cancel: { id: "cancel" },
|
|
12
12
|
submit: { id: "dialogs.export.submit" },
|
|
13
13
|
delimiterLabel: { id: "dialogs.export.csv.delimiter", defaultMessage: "CSV delimiter" },
|
|
14
|
+
submitDisabledTooltip: { id: "dialogs.export.csv.submit.disabledTooltip" },
|
|
14
15
|
});
|
|
15
16
|
export const ExportCsvDialog = memo(function ExportCsvDialog({ onCancel, onSubmit }) {
|
|
16
17
|
const intl = useIntl();
|
|
@@ -22,5 +23,5 @@ export const ExportCsvDialog = memo(function ExportCsvDialog({ onCancel, onSubmi
|
|
|
22
23
|
const handleSubmit = () => {
|
|
23
24
|
onSubmit({ delimiter: selectedDelimiter });
|
|
24
25
|
};
|
|
25
|
-
return (_jsx(Overlay, { alignPoints: alignPoints, isModal: true, positionType: "fixed", children: _jsx(ValidationContextStore, { value: validationContextValue, children: _jsx(ConfirmDialogBase, { className: "gd-csv-export-dialog s-gd-csv-export-dialog", displayCloseButton: true, isPositive: true, isSubmitDisabled: isSubmitDisabled, headline: intl.formatMessage(messages.headline), cancelButtonText: intl.formatMessage(messages.cancel), submitButtonText: intl.formatMessage(messages.submit), onCancel: onCancel, onSubmit: handleSubmit, autofocusOnOpen: true, children: _jsx("div", { className: "gd-csv-export-dialog-item", children: _jsx(CsvDelimiterPicker, { value: value, onChange: setValue, validationError: validationError, label: intl.formatMessage(messages.delimiterLabel), onEnterKeyPress: isSubmitDisabled ? undefined : handleSubmit }) }) }) }) }));
|
|
26
|
+
return (_jsx(Overlay, { alignPoints: alignPoints, isModal: true, positionType: "fixed", children: _jsx(ValidationContextStore, { value: validationContextValue, children: _jsx(ConfirmDialogBase, { className: "gd-csv-export-dialog s-gd-csv-export-dialog", displayCloseButton: true, isPositive: true, isSubmitDisabled: isSubmitDisabled, submitButtonTooltipText: isSubmitDisabled ? intl.formatMessage(messages.submitDisabledTooltip) : undefined, headline: intl.formatMessage(messages.headline), cancelButtonText: intl.formatMessage(messages.cancel), submitButtonText: intl.formatMessage(messages.submit), onCancel: onCancel, onSubmit: handleSubmit, autofocusOnOpen: true, children: _jsx("div", { className: "gd-csv-export-dialog-item", children: _jsx(CsvDelimiterPicker, { value: value, onChange: setValue, validationError: validationError, label: intl.formatMessage(messages.delimiterLabel), onEnterKeyPress: isSubmitDisabled ? undefined : handleSubmit }) }) }) }) }));
|
|
26
27
|
});
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { FormattedMessage, defineMessages } from "react-intl";
|
|
3
|
-
import { DRILL_TO_URL_PLACEHOLDER } from "
|
|
3
|
+
import { DRILL_TO_URL_PLACEHOLDER } from "@gooddata/sdk-model/internal";
|
|
4
4
|
import { DropdownSectionHeader } from "../DropdownSectionHeader.js";
|
|
5
5
|
import { ClientIdParameterDetail } from "../ParameterDetails/ClientIdParameterDetail.js";
|
|
6
6
|
import { DashboardIdParameterDetail } from "../ParameterDetails/DashboardIdParameterDetail.js";
|
|
@@ -12,7 +12,8 @@ export interface IDrillSelectDropdownProps extends IDrillSelectContext {
|
|
|
12
12
|
onSelect: (item: DashboardDrillDefinition, context: unknown) => void;
|
|
13
13
|
}
|
|
14
14
|
export declare function DrillSelectDropdown({ isOpen, dropDownAnchorClass, onClose, onCloseReturnFocus, onSelect, drillDefinitions, drillEvent, }: IDrillSelectDropdownProps): import("react/jsx-runtime").JSX.Element | null;
|
|
15
|
-
export declare const createDrillSelectItems: ({ drillDefinitions, drillEvent, insights, dashboardList, dashboardTitle, intl, widget, attributeDisplayForms, enableSecondGranularities, }: {
|
|
15
|
+
export declare const createDrillSelectItems: ({ drillDefinitions, drillEvent, insights, dashboardList, dashboardTitle, intl, widget, attributeDisplayForms, enableSecondGranularities, isDrillRestricted, }: {
|
|
16
|
+
isDrillRestricted: (drill: DashboardDrillDefinition) => boolean;
|
|
16
17
|
drillDefinitions: DashboardDrillDefinition[];
|
|
17
18
|
drillEvent: IDrillEvent;
|
|
18
19
|
insights: ObjRefMap<IInsight>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DrillSelectDropdown.d.ts","sourceRoot":"","sources":["../../../../src/presentation/drill/DrillSelect/DrillSelectDropdown.tsx"],"names":[],"mappings":"AAMA,OAAO,EAAE,KAAK,SAAS,EAAW,MAAM,YAAY,CAAC;AAGrD,OAAO,EACH,KAAK,mCAAmC,EACxC,KAAK,QAAQ,EACb,KAAK,gBAAgB,EACrB,KAAK,OAAO,EAcf,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,KAAK,WAAW,EAAsB,MAAM,kBAAkB,CAAC;AAIxE,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,yCAAyC,CAAC;
|
|
1
|
+
{"version":3,"file":"DrillSelectDropdown.d.ts","sourceRoot":"","sources":["../../../../src/presentation/drill/DrillSelect/DrillSelectDropdown.tsx"],"names":[],"mappings":"AAMA,OAAO,EAAE,KAAK,SAAS,EAAW,MAAM,YAAY,CAAC;AAGrD,OAAO,EACH,KAAK,mCAAmC,EACxC,KAAK,QAAQ,EACb,KAAK,gBAAgB,EACrB,KAAK,OAAO,EAcf,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,KAAK,WAAW,EAAsB,MAAM,kBAAkB,CAAC;AAIxE,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,yCAAyC,CAAC;AASzE,OAAO,EAAE,KAAK,wBAAwB,EAAyB,MAAM,mBAAmB,CAAC;AAazF,OAAO,EAAa,KAAK,mBAAmB,EAAE,KAAK,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAExF,MAAM,WAAW,yBAA0B,SAAQ,mBAAmB;IAClE,mBAAmB,EAAE,MAAM,CAAC;IAC5B,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,kBAAkB,EAAE,MAAM,IAAI,CAAC;IAC/B,QAAQ,EAAE,CAAC,IAAI,EAAE,wBAAwB,EAAE,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;CACxE;AAED,wBAAgB,mBAAmB,CAAC,EAChC,MAAM,EACN,mBAAmB,EACnB,OAAO,EACP,kBAAkB,EAClB,QAAQ,EACR,gBAAgB,EAChB,UAAU,GACb,EAAE,yBAAyB,kDA6K3B;AAqFD,eAAO,MAAM,sBAAsB,kKAWhC;IACC,iBAAiB,EAAE,CAAC,KAAK,EAAE,wBAAwB,KAAK,OAAO,CAAC;IAChE,gBAAgB,EAAE,wBAAwB,EAAE,CAAC;IAC7C,UAAU,EAAE,WAAW,CAAC;IACxB,QAAQ,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAC;IAC9B,aAAa,EAAE,gBAAgB,EAAE,CAAC;IAClC,cAAc,EAAE,MAAM,CAAC;IACvB,IAAI,EAAE,SAAS,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,qBAAqB,EAAE,MAAM,CAAC,MAAM,EAAE,mCAAmC,CAAC,CAAC;IAC3E,yBAAyB,CAAC,EAAE,OAAO,CAAC;CACvC,KAAG,gBAAgB,EAuJnB,CAAC"}
|
|
@@ -16,6 +16,7 @@ import { selectEnableSecondGranularities } from "../../../model/store/config/con
|
|
|
16
16
|
import { selectInsightsMap } from "../../../model/store/insights/insightsSelectors.js";
|
|
17
17
|
import { selectDashboardTitle } from "../../../model/store/meta/metaSelectors.js";
|
|
18
18
|
import { selectWidgetByRef } from "../../../model/store/tabs/layout/layoutSelectors.js";
|
|
19
|
+
import { selectIsDrillRestricted } from "../../../model/store/widgetDrills/drillRestrictionSelectors.js";
|
|
19
20
|
import { isDrillDownDefinition } from "../../../types.js";
|
|
20
21
|
import { useDrillSelectDropdownMenuItems } from "../hooks/useDrillSelectDropdownMenuItems.js";
|
|
21
22
|
import { isDrillToUrl } from "../types.js";
|
|
@@ -27,6 +28,7 @@ import { DrillSelectDropdownMenuItem } from "./DrillSelectDropdownMenuItem.js";
|
|
|
27
28
|
import { DrillType } from "./types.js";
|
|
28
29
|
export function DrillSelectDropdown({ isOpen, dropDownAnchorClass, onClose, onCloseReturnFocus, onSelect, drillDefinitions, drillEvent, }) {
|
|
29
30
|
const intl = useIntl();
|
|
31
|
+
const isDrillRestricted = useDashboardSelector(selectIsDrillRestricted);
|
|
30
32
|
const dashboardList = useDashboardSelector(selectAccessibleDashboards);
|
|
31
33
|
const dashboardTitle = useDashboardSelector(selectDashboardTitle);
|
|
32
34
|
const insights = useDashboardSelector(selectInsightsMap);
|
|
@@ -73,6 +75,7 @@ export function DrillSelectDropdown({ isOpen, dropDownAnchorClass, onClose, onCl
|
|
|
73
75
|
const drillSelectItems = useMemo(() => createDrillSelectItems({
|
|
74
76
|
drillDefinitions: deduplicateDrillIntoUrlItems(drillDefinitions),
|
|
75
77
|
drillEvent,
|
|
78
|
+
isDrillRestricted,
|
|
76
79
|
insights,
|
|
77
80
|
dashboardList,
|
|
78
81
|
dashboardTitle,
|
|
@@ -82,6 +85,7 @@ export function DrillSelectDropdown({ isOpen, dropDownAnchorClass, onClose, onCl
|
|
|
82
85
|
enableSecondGranularities,
|
|
83
86
|
}), [
|
|
84
87
|
drillDefinitions,
|
|
88
|
+
isDrillRestricted,
|
|
85
89
|
drillEvent,
|
|
86
90
|
insights,
|
|
87
91
|
dashboardList,
|
|
@@ -212,10 +216,24 @@ function calculateAlignPoints(anchorClass, drillEvent) {
|
|
|
212
216
|
},
|
|
213
217
|
];
|
|
214
218
|
}
|
|
215
|
-
export const createDrillSelectItems = ({ drillDefinitions, drillEvent, insights, dashboardList, dashboardTitle, intl, widget, attributeDisplayForms, enableSecondGranularities = false, }) => {
|
|
219
|
+
export const createDrillSelectItems = ({ drillDefinitions, drillEvent, insights, dashboardList, dashboardTitle, intl, widget, attributeDisplayForms, enableSecondGranularities = false, isDrillRestricted, }) => {
|
|
216
220
|
const totalDrillToUrls = getTotalDrillToUrlCount(drillDefinitions);
|
|
217
221
|
return drillDefinitions.flatMap((drillDefinition) => {
|
|
218
222
|
invariant(!isDrillToLegacyDashboard(drillDefinition), "Drill to pixel perfect dashboards from insight is not supported.");
|
|
223
|
+
if (isDrillRestricted(drillDefinition)) {
|
|
224
|
+
return {
|
|
225
|
+
type: isDrillToInsight(drillDefinition)
|
|
226
|
+
? DrillType.DRILL_TO_INSIGHT
|
|
227
|
+
: isDrillToDashboard(drillDefinition)
|
|
228
|
+
? DrillType.DRILL_TO_DASHBOARD
|
|
229
|
+
: DrillType.DRILL_TO_URL,
|
|
230
|
+
name: intl.formatMessage({ id: "drill_modal_picker.restricted" }),
|
|
231
|
+
drillDefinition,
|
|
232
|
+
id: stringify(drillDefinition) || "undefined",
|
|
233
|
+
isRestricted: true,
|
|
234
|
+
isDisabled: true,
|
|
235
|
+
};
|
|
236
|
+
}
|
|
219
237
|
if (isDrillDownDefinition(drillDefinition)) {
|
|
220
238
|
const { title: drillTitle } = drillDefinition;
|
|
221
239
|
const drillTargetIdentifier = isIdentifierRef(drillDefinition.target)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WithDrillSelect.d.ts","sourceRoot":"","sources":["../../../../src/presentation/drill/DrillSelect/WithDrillSelect.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,YAAY,EAA0C,MAAM,OAAO,CAAC;AAKlF,OAAO,EACH,KAAK,QAAQ,EACb,KAAK,MAAM,EAOd,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"WithDrillSelect.d.ts","sourceRoot":"","sources":["../../../../src/presentation/drill/DrillSelect/WithDrillSelect.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,YAAY,EAA0C,MAAM,OAAO,CAAC;AAKlF,OAAO,EACH,KAAK,QAAQ,EACb,KAAK,MAAM,EAOd,MAAM,qBAAqB,CAAC;AAsB7B,OAAO,EACH,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,EACvB,KAAK,4BAA4B,EACjC,KAAK,yBAAyB,EAC9B,KAAK,yBAAyB,EAC9B,KAAK,uBAAuB,EAC5B,KAAK,0BAA0B,EAC/B,KAAK,aAAa,EACrB,MAAM,aAAa,CAAC;AAMrB;;GAEG;AACH,MAAM,WAAW,qBAAqB;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,QAAQ,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,oBAAoB,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IACjD,YAAY,CAAC,EAAE,gBAAgB,CAAC;IAChC,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;IACxC,uBAAuB,CAAC,EAAE,uBAAuB,CAAC;IAClD,yBAAyB,CAAC,EAAE,yBAAyB,CAAC;IACtD,4BAA4B,CAAC,EAAE,4BAA4B,CAAC;IAC5D,yBAAyB,CAAC,EAAE,yBAAyB,CAAC;IACtD,0BAA0B,CAAC,EAAE,0BAA0B,CAAC;IACxD,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,IAAI,CAAC;IAC/B,QAAQ,EAAE,CAAC,KAAK,EAAE;QAAE,OAAO,EAAE,aAAa,CAAA;KAAE,KAAK,YAAY,CAAC;CACjE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,EAC5B,SAAS,EACT,QAAQ,EACR,OAAO,EACP,oBAAoB,EACpB,YAAY,EACZ,kBAAkB,EAClB,uBAAuB,EACvB,yBAAyB,EACzB,4BAA4B,EAC5B,yBAAyB,EACzB,0BAA0B,EAC1B,OAAO,GACV,EAAE,qBAAqB,GAAG,YAAY,CAmLtC"}
|
|
@@ -9,8 +9,9 @@ import { OverlayController, OverlayControllerProvider } from "@gooddata/sdk-ui-k
|
|
|
9
9
|
import { useDashboardSelector } from "../../../model/react/DashboardStoreProvider.js";
|
|
10
10
|
import { selectBackendCapabilities } from "../../../model/store/backendCapabilities/backendCapabilitiesSelectors.js";
|
|
11
11
|
import { selectDisableDefaultDrills, selectLocale } from "../../../model/store/config/configSelectors.js";
|
|
12
|
-
import {
|
|
12
|
+
import { selectExecutableDashboardFiltersWithoutCrossFiltering } from "../../../model/store/filtering/dashboardFilterSelectors.js";
|
|
13
13
|
import { selectWidgetDrills } from "../../../model/store/tabs/layout/layoutSelectors.js";
|
|
14
|
+
import { selectIsDrillRestricted } from "../../../model/store/widgetDrills/drillRestrictionSelectors.js";
|
|
14
15
|
import { isDrillDownDefinition, } from "../../../types.js";
|
|
15
16
|
import { DASHBOARD_DRILL_MENU_Z_INDEX } from "../../constants/zIndex.js";
|
|
16
17
|
import { IntlWrapper } from "../../localization/IntlWrapper.js";
|
|
@@ -26,7 +27,8 @@ export function WithDrillSelect({ widgetRef, children, insight, returnFocusToIns
|
|
|
26
27
|
const [isOpen, setIsOpen] = useState(true);
|
|
27
28
|
const locale = useDashboardSelector(selectLocale);
|
|
28
29
|
const disableDefaultDrills = useDashboardSelector(selectDisableDefaultDrills); // TODO: maybe remove?
|
|
29
|
-
const filters = useDashboardSelector(
|
|
30
|
+
const filters = useDashboardSelector(selectExecutableDashboardFiltersWithoutCrossFiltering);
|
|
31
|
+
const isDrillRestricted = useDashboardSelector(selectIsDrillRestricted);
|
|
30
32
|
const configuredDrills = useDashboardSelector(selectWidgetDrills(widgetRef));
|
|
31
33
|
const { supportsAttributeHierarchies } = useDashboardSelector(selectBackendCapabilities);
|
|
32
34
|
const drills = useDrills({
|
|
@@ -41,7 +43,9 @@ export function WithDrillSelect({ widgetRef, children, insight, returnFocusToIns
|
|
|
41
43
|
const validDrillDefinitions = supportsAttributeHierarchies
|
|
42
44
|
? drillDefinitions
|
|
43
45
|
: filterDrillFromAttributeByPriority(drillDefinitions, configuredDrills);
|
|
44
|
-
const type =
|
|
46
|
+
const type = validDrillDefinitions.some(isDrillRestricted)
|
|
47
|
+
? "multiple"
|
|
48
|
+
: getDrillDefinitionType(validDrillDefinitions);
|
|
45
49
|
if (type === "single") {
|
|
46
50
|
onSelect(validDrillDefinitions[0], undefined, drillEvent, s.correlationId, context);
|
|
47
51
|
}
|
|
@@ -74,10 +78,14 @@ export function WithDrillSelect({ widgetRef, children, insight, returnFocusToIns
|
|
|
74
78
|
drills,
|
|
75
79
|
dropdownProps: { correlationId: dropdownProps?.correlationId, drillEvent: dropdownProps?.drillEvent },
|
|
76
80
|
insight,
|
|
81
|
+
isDrillRestricted,
|
|
77
82
|
handleClose,
|
|
78
83
|
});
|
|
79
84
|
const onSelect = useCallback((drillDefinition, context, drillEvent, correlationId, drillContext) => {
|
|
80
|
-
const { drills, dropdownProps, insight, handleClose } = onSelectDepsRef.current;
|
|
85
|
+
const { drills, dropdownProps, insight, handleClose, isDrillRestricted } = onSelectDepsRef.current;
|
|
86
|
+
if (isDrillRestricted(drillDefinition)) {
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
81
89
|
const effectiveDrillEvent = drillEvent ?? dropdownProps?.drillEvent;
|
|
82
90
|
const effectiveCorrelationId = correlationId ?? dropdownProps?.correlationId;
|
|
83
91
|
const effectiveInsight = drillContext?.insight ?? insight;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/presentation/drill/DrillSelect/types.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,8BAA8B,EAAE,KAAK,4BAA4B,EAAE,MAAM,kBAAkB,CAAC;AAE1G,OAAO,EACH,KAAK,wBAAwB,EAC7B,KAAK,sBAAsB,EAC3B,KAAK,oBAAoB,EAC5B,MAAM,mBAAmB,CAAC;AAE3B;;GAEG;AACH,oBAAY,SAAS;IACjB,kBAAkB,uBAAuB;IACzC,gBAAgB,qBAAqB;IACrC,YAAY,iBAAiB;IAC7B,UAAU,eAAe;IACzB,eAAe,oBAAoB;IACnC,mBAAmB,wBAAwB;CAC9C;AAED,MAAM,WAAW,gBAAgB;IAC7B,IAAI,EAAE,SAAS,CAAC;IAChB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,eAAe,EAAE,wBAAwB,CAAC;IAC1C,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,mBAAmB;IAChC,gBAAgB,EAAE,wBAAwB,EAAE,CAAC;IAC7C,UAAU,EAAE,oBAAoB,CAAC;IACjC,YAAY,CAAC,EAAE,sBAAsB,CAAC;IACtC,aAAa,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,MAAM,yBAAyB,GAAG,8BAA8B,GAAG,4BAA4B,CAAC"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/presentation/drill/DrillSelect/types.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,8BAA8B,EAAE,KAAK,4BAA4B,EAAE,MAAM,kBAAkB,CAAC;AAE1G,OAAO,EACH,KAAK,wBAAwB,EAC7B,KAAK,sBAAsB,EAC3B,KAAK,oBAAoB,EAC5B,MAAM,mBAAmB,CAAC;AAE3B;;GAEG;AACH,oBAAY,SAAS;IACjB,kBAAkB,uBAAuB;IACzC,gBAAgB,qBAAqB;IACrC,YAAY,iBAAiB;IAC7B,UAAU,eAAe;IACzB,eAAe,oBAAoB;IACnC,mBAAmB,wBAAwB;CAC9C;AAED,MAAM,WAAW,gBAAgB;IAC7B,IAAI,EAAE,SAAS,CAAC;IAChB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,eAAe,EAAE,wBAAwB,CAAC;IAC1C,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,mBAAmB;IAChC,gBAAgB,EAAE,wBAAwB,EAAE,CAAC;IAC7C,UAAU,EAAE,oBAAoB,CAAC;IACjC,YAAY,CAAC,EAAE,sBAAsB,CAAC;IACtC,aAAa,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,MAAM,yBAAyB,GAAG,8BAA8B,GAAG,4BAA4B,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useDrillSelectDropdownMenuItems.d.ts","sourceRoot":"","sources":["../../../../src/presentation/drill/hooks/useDrillSelectDropdownMenuItems.tsx"],"names":[],"mappings":"AAOA,OAAO,EAAE,KAAK,WAAW,EAAyB,MAAM,sBAAsB,CAAC;AAE/E,OAAO,EAAE,KAAK,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AAClE,OAAO,EAAE,SAAS,EAAE,KAAK,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAuB3E,MAAM,WAAW,gCAAgC;IAC7C,WAAW,EAAE;QACT,IAAI,EAAE,SAAS,CAAC;QAChB,eAAe,EAAE,wBAAwB,CAAC;QAC1C,QAAQ,EAAE,MAAM,IAAI,CAAC;KACxB,CAAC;CACL;AAED,MAAM,MAAM,oBAAoB,GAAG,WAAW,CAAC,gCAAgC,CAAC,CAAC;AAEjF,eAAO,MAAM,+BAA+B,4GAOzC;IACC,cAAc,EAAE,gBAAgB,EAAE,CAAC;IACnC,UAAU,EAAE,gBAAgB,EAAE,CAAC;IAC/B,mBAAmB,EAAE,gBAAgB,EAAE,CAAC;IACxC,sBAAsB,EAAE,gBAAgB,EAAE,CAAC;IAC3C,eAAe,EAAE,gBAAgB,EAAE,CAAC;IACpC,QAAQ,EAAE,CAAC,IAAI,EAAE,wBAAwB,EAAE,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;CACxE,KAAG,oBAAoB,
|
|
1
|
+
{"version":3,"file":"useDrillSelectDropdownMenuItems.d.ts","sourceRoot":"","sources":["../../../../src/presentation/drill/hooks/useDrillSelectDropdownMenuItems.tsx"],"names":[],"mappings":"AAOA,OAAO,EAAE,KAAK,WAAW,EAAyB,MAAM,sBAAsB,CAAC;AAE/E,OAAO,EAAE,KAAK,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AAClE,OAAO,EAAE,SAAS,EAAE,KAAK,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAuB3E,MAAM,WAAW,gCAAgC;IAC7C,WAAW,EAAE;QACT,IAAI,EAAE,SAAS,CAAC;QAChB,eAAe,EAAE,wBAAwB,CAAC;QAC1C,QAAQ,EAAE,MAAM,IAAI,CAAC;KACxB,CAAC;CACL;AAED,MAAM,MAAM,oBAAoB,GAAG,WAAW,CAAC,gCAAgC,CAAC,CAAC;AAEjF,eAAO,MAAM,+BAA+B,4GAOzC;IACC,cAAc,EAAE,gBAAgB,EAAE,CAAC;IACnC,UAAU,EAAE,gBAAgB,EAAE,CAAC;IAC/B,mBAAmB,EAAE,gBAAgB,EAAE,CAAC;IACxC,sBAAsB,EAAE,gBAAgB,EAAE,CAAC;IAC3C,eAAe,EAAE,gBAAgB,EAAE,CAAC;IACpC,QAAQ,EAAE,CAAC,IAAI,EAAE,wBAAwB,EAAE,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;CACxE,KAAG,oBAAoB,EA2FvB,CAAC"}
|
|
@@ -35,7 +35,7 @@ export const useDrillSelectDropdownMenuItems = ({ drillDownItems, drillItems, cr
|
|
|
35
35
|
type: "interactive",
|
|
36
36
|
id: `${groupId}-${index}`,
|
|
37
37
|
stringTitle: getMenuItemStringTitle(item),
|
|
38
|
-
iconLeft: _jsx(UiIcon, { type: DRILL_ICON_NAME[item.type], size: 16, color: "complementary-5" }),
|
|
38
|
+
iconLeft: (_jsx(UiIcon, { type: item.isRestricted ? "lock" : DRILL_ICON_NAME[item.type], size: 16, color: "complementary-5" })),
|
|
39
39
|
isDisabled: item.isDisabled,
|
|
40
40
|
tooltip: item.tooltipText,
|
|
41
41
|
ariaAttributes: {
|
|
@@ -47,7 +47,9 @@ export const useDrillSelectDropdownMenuItems = ({ drillDownItems, drillItems, cr
|
|
|
47
47
|
type: item.type,
|
|
48
48
|
drillDefinition: item.drillDefinition,
|
|
49
49
|
onSelect: () => {
|
|
50
|
-
|
|
50
|
+
if (!item.isDisabled) {
|
|
51
|
+
onSelect(item.drillDefinition, item.context);
|
|
52
|
+
}
|
|
51
53
|
},
|
|
52
54
|
},
|
|
53
55
|
})),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InsightNotSavedDialog.d.ts","sourceRoot":"","sources":["../../../src/presentation/insightNotSavedDialog/InsightNotSavedDialog.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"InsightNotSavedDialog.d.ts","sourceRoot":"","sources":["../../../src/presentation/insightNotSavedDialog/InsightNotSavedDialog.tsx"],"names":[],"mappings":"AAeA;;GAEG;AACH,wBAAgB,qBAAqB,mDAwDpC"}
|