@gooddata/sdk-ui-dashboard 11.65.0-alpha.1 → 11.65.0-alpha.10
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 +72077 -4
- package/esm/__version.d.ts +1 -1
- package/esm/__version.d.ts.map +1 -1
- package/esm/__version.js +1 -1
- package/esm/assets/type-csv-formatted.svg +1 -1
- package/esm/assets/type-csv-raw.svg +1 -1
- package/esm/index.d.ts +7 -4
- package/esm/index.d.ts.map +1 -1
- package/esm/index.js +3 -2
- package/esm/model/commandHandlers/dashboard/initializeDashboardHandler/resolveDashboardConfig.d.ts.map +1 -1
- package/esm/model/commandHandlers/dashboard/initializeDashboardHandler/resolveDashboardConfig.js +1 -3
- package/esm/model/commandHandlers/filterContext/attributeFilter/changeAttributeDisplayFormHandler.d.ts.map +1 -1
- package/esm/model/commandHandlers/filterContext/attributeFilter/changeAttributeDisplayFormHandler.js +8 -7
- package/esm/model/commandHandlers/filterContext/attributeFilter/changeAttributeFilterSelectionHandler.d.ts.map +1 -1
- package/esm/model/commandHandlers/filterContext/attributeFilter/changeAttributeFilterSelectionHandler.js +19 -28
- package/esm/model/commandHandlers/filterContext/attributeFilter/removeAttributeFiltersHandler.d.ts.map +1 -1
- package/esm/model/commandHandlers/filterContext/attributeFilter/removeAttributeFiltersHandler.js +4 -5
- package/esm/model/commandHandlers/filterContext/attributeFilter/replaceAttributeFilterItemSelectionHandler.d.ts.map +1 -1
- package/esm/model/commandHandlers/filterContext/attributeFilter/replaceAttributeFilterItemSelectionHandler.js +14 -15
- package/esm/model/commandHandlers/filterContext/attributeFilter/resolveDisplayFormMetadata.d.ts +4 -1
- package/esm/model/commandHandlers/filterContext/attributeFilter/resolveDisplayFormMetadata.d.ts.map +1 -1
- package/esm/model/commandHandlers/filterContext/attributeFilter/resolveDisplayFormMetadata.js +11 -2
- package/esm/model/commandHandlers/filterContext/changeFilterContextSelectionHandler.d.ts.map +1 -1
- package/esm/model/commandHandlers/filterContext/changeFilterContextSelectionHandler.js +23 -45
- package/esm/model/commandHandlers/filterContext/common.d.ts +6 -5
- package/esm/model/commandHandlers/filterContext/common.d.ts.map +1 -1
- package/esm/model/commandHandlers/filterContext/common.js +12 -18
- package/esm/model/commandHandlers/filterContext/dateFilter/changeDateFilterSelectionHandler.d.ts.map +1 -1
- package/esm/model/commandHandlers/filterContext/dateFilter/changeDateFilterSelectionHandler.js +30 -36
- package/esm/model/commandHandlers/filterContext/measureValueFilter/changeMeasureValueFilterConditionHandler.d.ts.map +1 -1
- package/esm/model/commandHandlers/filterContext/measureValueFilter/changeMeasureValueFilterConditionHandler.js +11 -17
- package/esm/model/commandHandlers/filterContext/measureValueFilter/changeMeasureValueFilterDimensionalityHandler.d.ts.map +1 -1
- package/esm/model/commandHandlers/filterContext/measureValueFilter/changeMeasureValueFilterDimensionalityHandler.js +7 -10
- package/esm/model/commandHandlers/filterContext/tabSync/expandActionsForTabSync.d.ts +15 -0
- package/esm/model/commandHandlers/filterContext/tabSync/expandActionsForTabSync.d.ts.map +1 -0
- package/esm/model/commandHandlers/filterContext/tabSync/expandActionsForTabSync.js +88 -0
- package/esm/model/commandHandlers/filterContext/tabSync/tabSyncRules.d.ts +11 -0
- package/esm/model/commandHandlers/filterContext/tabSync/tabSyncRules.d.ts.map +1 -0
- package/esm/model/commandHandlers/filterContext/tabSync/tabSyncRules.js +335 -0
- package/esm/model/commandHandlers/filterContext/tabSync/tabSyncSaga.d.ts +52 -0
- package/esm/model/commandHandlers/filterContext/tabSync/tabSyncSaga.d.ts.map +1 -0
- package/esm/model/commandHandlers/filterContext/tabSync/tabSyncSaga.js +60 -0
- package/esm/model/commandHandlers/filterContext/tabSync/tabSyncScope.d.ts +69 -0
- package/esm/model/commandHandlers/filterContext/tabSync/tabSyncScope.d.ts.map +1 -0
- package/esm/model/commandHandlers/filterContext/tabSync/tabSyncScope.js +2 -0
- package/esm/model/commandHandlers/parameters/changeParameterValuesHandler.d.ts +2 -1
- package/esm/model/commandHandlers/parameters/changeParameterValuesHandler.d.ts.map +1 -1
- package/esm/model/commandHandlers/parameters/changeParameterValuesHandler.js +41 -10
- package/esm/model/commands/parameters.d.ts +11 -1
- package/esm/model/commands/parameters.d.ts.map +1 -1
- package/esm/model/commands/parameters.js +2 -1
- package/esm/model/events/base.d.ts +1 -1
- package/esm/model/events/base.d.ts.map +1 -1
- package/esm/model/events/index.d.ts +2 -1
- package/esm/model/events/index.d.ts.map +1 -1
- package/esm/model/events/insightEditor.d.ts +128 -0
- package/esm/model/events/insightEditor.d.ts.map +1 -0
- package/esm/model/events/insightEditor.js +74 -0
- package/esm/model/react/useInitializeDashboardStore.d.ts.map +1 -1
- package/esm/model/react/useInitializeDashboardStore.js +4 -9
- package/esm/model/store/config/configReducers.d.ts +4 -8
- package/esm/model/store/config/configReducers.d.ts.map +1 -1
- package/esm/model/store/config/configReducers.js +6 -12
- package/esm/model/store/config/configSelectors.d.ts +24 -0
- package/esm/model/store/config/configSelectors.d.ts.map +1 -1
- package/esm/model/store/config/configSelectors.js +30 -4
- package/esm/model/store/config/index.d.ts +2 -3
- package/esm/model/store/config/index.d.ts.map +1 -1
- package/esm/model/store/tabs/attributeFilterConfigs/attributeFilterConfigsReducers.d.ts +75 -5
- package/esm/model/store/tabs/attributeFilterConfigs/attributeFilterConfigsReducers.d.ts.map +1 -1
- package/esm/model/store/tabs/attributeFilterConfigs/attributeFilterConfigsReducers.js +35 -60
- package/esm/model/store/tabs/dateFilterConfigs/dateFilterConfigsReducers.js +1 -1
- package/esm/model/store/tabs/filterContext/filterContextReducers.d.ts +139 -31
- package/esm/model/store/tabs/filterContext/filterContextReducers.d.ts.map +1 -1
- package/esm/model/store/tabs/filterContext/filterContextReducers.js +314 -529
- package/esm/model/store/tabs/filterContext/filterSync.d.ts +35 -13
- package/esm/model/store/tabs/filterContext/filterSync.d.ts.map +1 -1
- package/esm/model/store/tabs/filterContext/filterSync.js +79 -58
- package/esm/model/store/tabs/index.d.ts +10 -12
- package/esm/model/store/tabs/index.d.ts.map +1 -1
- package/esm/model/store/tabs/layout/layoutReducers.d.ts +1 -0
- package/esm/model/store/tabs/layout/layoutReducers.d.ts.map +1 -1
- package/esm/model/store/tabs/measureValueFilterConfigs/measureValueFilterConfigsReducers.d.ts.map +1 -1
- package/esm/model/store/tabs/parameters/parametersReducers.d.ts +0 -5
- package/esm/model/store/tabs/parameters/parametersReducers.d.ts.map +1 -1
- package/esm/model/store/tabs/parameters/parametersReducers.js +8 -7
- package/esm/model/store/tabs/parameters/parametersSelectors.d.ts +7 -0
- package/esm/model/store/tabs/parameters/parametersSelectors.d.ts.map +1 -1
- package/esm/model/store/tabs/parameters/parametersSelectors.js +16 -0
- package/esm/model/store/tabs/tabsReducers.d.ts +8 -4
- package/esm/model/store/tabs/tabsReducers.d.ts.map +1 -1
- package/esm/model/store/tabs/tabsReducers.js +15 -18
- package/esm/model/store/tabs/tabsState.d.ts +0 -10
- package/esm/model/store/tabs/tabsState.d.ts.map +1 -1
- package/esm/model/store/tabs/tabsState.js +0 -20
- package/esm/model/store/ui/index.d.ts +2 -0
- package/esm/model/store/ui/index.d.ts.map +1 -1
- package/esm/model/store/ui/uiReducers.d.ts +6 -0
- package/esm/model/store/ui/uiReducers.d.ts.map +1 -1
- package/esm/model/store/ui/uiReducers.js +8 -0
- package/esm/model/store/ui/uiSelectors.d.ts +7 -0
- package/esm/model/store/ui/uiSelectors.d.ts.map +1 -1
- package/esm/model/store/ui/uiSelectors.js +6 -0
- package/esm/model/store/ui/uiState.d.ts +5 -0
- package/esm/model/store/ui/uiState.d.ts.map +1 -1
- package/esm/model/store/ui/uiState.js +1 -0
- package/esm/model/types/commonTypes.d.ts +38 -22
- package/esm/model/types/commonTypes.d.ts.map +1 -1
- package/esm/model/types/insightEditorTypes.d.ts +43 -0
- package/esm/model/types/insightEditorTypes.d.ts.map +1 -0
- package/esm/model/types/insightEditorTypes.js +2 -0
- package/esm/model/utils/attributeFilterMatching.d.ts +10 -0
- package/esm/model/utils/attributeFilterMatching.d.ts.map +1 -1
- package/esm/model/utils/attributeFilterMatching.js +14 -3
- package/esm/model/utils/attributeFilterSelectionTypeCompatibility.d.ts +8 -0
- package/esm/model/utils/attributeFilterSelectionTypeCompatibility.d.ts.map +1 -1
- package/esm/model/utils/attributeFilterSelectionTypeCompatibility.js +14 -4
- package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/components/RecipientsSelect/LiveRegionLastSelectContainer.d.ts +9 -0
- package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/components/RecipientsSelect/LiveRegionLastSelectContainer.d.ts.map +1 -0
- package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/components/RecipientsSelect/LiveRegionLastSelectContainer.js +12 -0
- package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/components/RecipientsSelect/RecipientsSelect.d.ts.map +1 -1
- package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/components/RecipientsSelect/RecipientsSelect.js +3 -3
- package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/components/RecipientsSelect/RecipientsSelectRenderer.d.ts.map +1 -1
- package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/components/RecipientsSelect/RecipientsSelectRenderer.js +14 -7
- package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/components/RecipientsSelect/RecipientsSelectionDescription.d.ts +12 -0
- package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/components/RecipientsSelect/RecipientsSelectionDescription.d.ts.map +1 -0
- package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/components/RecipientsSelect/RecipientsSelectionDescription.js +30 -0
- package/esm/presentation/automations/scheduledEmail/utils/users.d.ts +1 -0
- package/esm/presentation/automations/scheduledEmail/utils/users.d.ts.map +1 -1
- package/esm/presentation/automations/scheduledEmail/utils/users.js +3 -0
- package/esm/presentation/automations/shared/automationFilters/utils.d.ts +4 -0
- package/esm/presentation/automations/shared/automationFilters/utils.d.ts.map +1 -1
- package/esm/presentation/automations/shared/automationFilters/utils.js +12 -5
- package/esm/presentation/dashboard/DashboardHeader/DashboardHeader.d.ts +1 -1
- package/esm/presentation/dashboard/DashboardHeader/DashboardHeader.d.ts.map +1 -1
- package/esm/presentation/dashboard/DashboardHeader/DashboardHeader.js +2 -11
- package/esm/presentation/dashboard/DashboardSidebar/CreationPanel.d.ts.map +1 -1
- package/esm/presentation/dashboard/DashboardSidebar/CreationPanel.js +10 -1
- package/esm/presentation/dashboard/DefaultDashboardContent/DashboardContentLoader.d.ts +5 -0
- package/esm/presentation/dashboard/DefaultDashboardContent/DashboardContentLoader.d.ts.map +1 -0
- package/esm/presentation/dashboard/DefaultDashboardContent/DashboardContentLoader.js +27 -0
- package/esm/presentation/dashboard/DefaultDashboardContent/DefaultDashboardMainContent.d.ts.map +1 -1
- package/esm/presentation/dashboard/DefaultDashboardContent/DefaultDashboardMainContent.js +7 -2
- package/esm/presentation/dashboard/components/DashboardAiComposingOverlay.d.ts +4 -0
- package/esm/presentation/dashboard/components/DashboardAiComposingOverlay.d.ts.map +1 -0
- package/esm/presentation/dashboard/components/DashboardAiComposingOverlay.js +151 -0
- package/esm/presentation/dashboard/components/DashboardInner.d.ts.map +1 -1
- package/esm/presentation/dashboard/components/DashboardInner.js +17 -14
- package/esm/presentation/dashboard/components/DashboardInteractionComposing.d.ts +8 -0
- package/esm/presentation/dashboard/components/DashboardInteractionComposing.d.ts.map +1 -0
- package/esm/presentation/dashboard/components/DashboardInteractionComposing.js +23 -0
- package/esm/presentation/dashboard/components/DashboardInteractionLock.d.ts +8 -0
- package/esm/presentation/dashboard/components/DashboardInteractionLock.d.ts.map +1 -0
- package/esm/presentation/dashboard/components/DashboardInteractionLock.js +29 -0
- package/esm/presentation/dashboard/hooks/useDashboard.d.ts.map +1 -1
- package/esm/presentation/dashboard/hooks/useDashboard.js +3 -2
- package/esm/presentation/dashboard/types.d.ts +5 -0
- package/esm/presentation/dashboard/types.d.ts.map +1 -1
- package/esm/presentation/dragAndDrop/draggableWidget/AddDashboardLayoutWidgetButton.d.ts.map +1 -1
- package/esm/presentation/dragAndDrop/draggableWidget/AddDashboardLayoutWidgetButton.js +2 -4
- package/esm/presentation/dragAndDrop/draggableWidget/AddRichTextWidgetButton.d.ts.map +1 -1
- package/esm/presentation/dragAndDrop/draggableWidget/AddRichTextWidgetButton.js +3 -3
- package/esm/presentation/dragAndDrop/draggableWidget/AddVisualizationSwitcherWidgetButton.d.ts.map +1 -1
- package/esm/presentation/dragAndDrop/draggableWidget/AddVisualizationSwitcherWidgetButton.js +2 -4
- package/esm/presentation/filterBar/attributeFilter/addAttributeFilter/AddAttributeFilterPlaceholder.d.ts.map +1 -1
- package/esm/presentation/filterBar/attributeFilter/addAttributeFilter/AddAttributeFilterPlaceholder.js +3 -2
- package/esm/presentation/filterBar/filterBar/hooks/useResetFiltersButton.d.ts.map +1 -1
- package/esm/presentation/filterBar/filterBar/hooks/useResetFiltersButton.js +4 -1
- package/esm/presentation/insightEditor/InsightEditorContent.d.ts +26 -0
- package/esm/presentation/insightEditor/InsightEditorContent.d.ts.map +1 -0
- package/esm/presentation/insightEditor/InsightEditorContent.js +158 -0
- package/esm/presentation/insightEditor/InsightEditorCreatePanelItem.d.ts +7 -0
- package/esm/presentation/insightEditor/InsightEditorCreatePanelItem.d.ts.map +1 -0
- package/esm/presentation/insightEditor/InsightEditorCreatePanelItem.js +25 -0
- package/esm/presentation/insightEditor/InsightEditorOverlay.d.ts +6 -0
- package/esm/presentation/insightEditor/InsightEditorOverlay.d.ts.map +1 -0
- package/esm/presentation/insightEditor/InsightEditorOverlay.js +110 -0
- package/esm/presentation/insightEditor/InsightEditorPermissionsContext.d.ts +10 -0
- package/esm/presentation/insightEditor/InsightEditorPermissionsContext.d.ts.map +1 -0
- package/esm/presentation/insightEditor/InsightEditorPermissionsContext.js +18 -0
- package/esm/presentation/insightEditor/InsightEditorPlaceholder.d.ts +7 -0
- package/esm/presentation/insightEditor/InsightEditorPlaceholder.d.ts.map +1 -0
- package/esm/presentation/insightEditor/InsightEditorPlaceholder.js +15 -0
- package/esm/presentation/insightEditor/filterContext/attributeFilters.d.ts +4 -0
- package/esm/presentation/insightEditor/filterContext/attributeFilters.d.ts.map +1 -0
- package/esm/presentation/insightEditor/filterContext/attributeFilters.js +115 -0
- package/esm/presentation/insightEditor/filterContext/dateFilters.d.ts +5 -0
- package/esm/presentation/insightEditor/filterContext/dateFilters.d.ts.map +1 -0
- package/esm/presentation/insightEditor/filterContext/dateFilters.js +117 -0
- package/esm/presentation/insightEditor/filterContext/filterIntersection.d.ts +7 -0
- package/esm/presentation/insightEditor/filterContext/filterIntersection.d.ts.map +1 -0
- package/esm/presentation/insightEditor/filterContext/filterIntersection.js +149 -0
- package/esm/presentation/insightEditor/filterContext/insightFilterContext.d.ts +26 -0
- package/esm/presentation/insightEditor/filterContext/insightFilterContext.d.ts.map +1 -0
- package/esm/presentation/insightEditor/filterContext/insightFilterContext.js +72 -0
- package/esm/presentation/insightEditor/filterContext/measureValueFilters.d.ts +20 -0
- package/esm/presentation/insightEditor/filterContext/measureValueFilters.d.ts.map +1 -0
- package/esm/presentation/insightEditor/filterContext/measureValueFilters.js +76 -0
- package/esm/presentation/insightEditor/filterContext/objQualifiers.d.ts +11 -0
- package/esm/presentation/insightEditor/filterContext/objQualifiers.d.ts.map +1 -0
- package/esm/presentation/insightEditor/filterContext/objQualifiers.js +18 -0
- package/esm/presentation/insightEditor/insightEditorEscapeGuard.d.ts +18 -0
- package/esm/presentation/insightEditor/insightEditorEscapeGuard.d.ts.map +1 -0
- package/esm/presentation/insightEditor/insightEditorEscapeGuard.js +24 -0
- package/esm/presentation/insightEditor/insightEditorRoute.d.ts +34 -0
- package/esm/presentation/insightEditor/insightEditorRoute.d.ts.map +1 -0
- package/esm/presentation/insightEditor/insightEditorRoute.js +48 -0
- package/esm/presentation/insightEditor/types.d.ts +7 -0
- package/esm/presentation/insightEditor/types.d.ts.map +1 -0
- package/esm/presentation/insightEditor/types.js +2 -0
- package/esm/presentation/insightEditor/useCanCreateInsightInEditor.d.ts +5 -0
- package/esm/presentation/insightEditor/useCanCreateInsightInEditor.d.ts.map +1 -0
- package/esm/presentation/insightEditor/useCanCreateInsightInEditor.js +14 -0
- package/esm/presentation/insightEditor/useExploreFilterTransfer.d.ts +21 -0
- package/esm/presentation/insightEditor/useExploreFilterTransfer.d.ts.map +1 -0
- package/esm/presentation/insightEditor/useExploreFilterTransfer.js +193 -0
- package/esm/presentation/insightEditor/useInsightEditPermissions.d.ts +17 -0
- package/esm/presentation/insightEditor/useInsightEditPermissions.d.ts.map +1 -0
- package/esm/presentation/insightEditor/useInsightEditPermissions.js +42 -0
- package/esm/presentation/insightEditor/useInsightEditorMenuItems.d.ts +23 -0
- package/esm/presentation/insightEditor/useInsightEditorMenuItems.d.ts.map +1 -0
- package/esm/presentation/insightEditor/useInsightEditorMenuItems.js +126 -0
- package/esm/presentation/insightEditor/useInsightEditorSession.d.ts +19 -0
- package/esm/presentation/insightEditor/useInsightEditorSession.d.ts.map +1 -0
- package/esm/presentation/insightEditor/useInsightEditorSession.js +141 -0
- package/esm/presentation/insightList/InsightList.d.ts.map +1 -1
- package/esm/presentation/insightList/InsightList.js +10 -5
- package/esm/presentation/localization/bundles/de-DE.localization-bundle.d.ts +6 -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 +48 -42
- package/esm/presentation/localization/bundles/en-AU.localization-bundle.d.ts +6 -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 +6 -0
- package/esm/presentation/localization/bundles/en-GB.localization-bundle.d.ts +6 -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 +11 -5
- package/esm/presentation/localization/bundles/en-US.localization-bundle.d.ts +56 -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 +56 -0
- package/esm/presentation/localization/bundles/es-419.localization-bundle.d.ts +6 -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 +6 -0
- package/esm/presentation/localization/bundles/es-ES.localization-bundle.d.ts +6 -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 +6 -0
- package/esm/presentation/localization/bundles/fi-FI.localization-bundle.d.ts +6 -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 +6 -0
- package/esm/presentation/localization/bundles/fr-CA.localization-bundle.d.ts +6 -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 +6 -0
- package/esm/presentation/localization/bundles/fr-FR.localization-bundle.d.ts +6 -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 +187 -181
- package/esm/presentation/localization/bundles/id-ID.localization-bundle.d.ts +6 -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 +6 -0
- package/esm/presentation/localization/bundles/it-IT.localization-bundle.d.ts +6 -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 +6 -0
- package/esm/presentation/localization/bundles/ja-JP.localization-bundle.d.ts +6 -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 +6 -0
- package/esm/presentation/localization/bundles/ko-KR.localization-bundle.d.ts +6 -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 +6 -0
- package/esm/presentation/localization/bundles/nl-NL.localization-bundle.d.ts +6 -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 +6 -0
- package/esm/presentation/localization/bundles/pl-PL.localization-bundle.d.ts +6 -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 +6 -0
- package/esm/presentation/localization/bundles/pt-BR.localization-bundle.d.ts +6 -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 +6 -0
- package/esm/presentation/localization/bundles/pt-PT.localization-bundle.d.ts +6 -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 +6 -0
- package/esm/presentation/localization/bundles/ru-RU.localization-bundle.d.ts +6 -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 +6 -0
- package/esm/presentation/localization/bundles/sl-SI.localization-bundle.d.ts +6 -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 +6 -0
- package/esm/presentation/localization/bundles/th-TH.localization-bundle.d.ts +6 -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 +6 -0
- package/esm/presentation/localization/bundles/tr-TR.localization-bundle.d.ts +6 -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 +6 -0
- package/esm/presentation/localization/bundles/uk-UA.localization-bundle.d.ts +6 -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 +6 -0
- package/esm/presentation/localization/bundles/vi-VN.localization-bundle.d.ts +6 -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 +6 -0
- package/esm/presentation/localization/bundles/zh-HK.localization-bundle.d.ts +6 -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 +6 -0
- package/esm/presentation/localization/bundles/zh-Hans.localization-bundle.d.ts +6 -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 +6 -0
- package/esm/presentation/localization/bundles/zh-Hant.localization-bundle.d.ts +6 -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 +7 -1
- package/esm/presentation/topBar/buttonBar/button/saveAsButton/DefaultSaveAsNewButton.d.ts.map +1 -1
- package/esm/presentation/topBar/buttonBar/button/saveAsButton/DefaultSaveAsNewButton.js +3 -2
- package/esm/presentation/topBar/buttonBar/button/saveButton/DefaultSaveButton.d.ts.map +1 -1
- package/esm/presentation/topBar/buttonBar/button/saveButton/DefaultSaveButton.js +3 -2
- package/esm/presentation/topBar/buttonBar/button/settingButton/DefaultSettingButton.d.ts.map +1 -1
- package/esm/presentation/topBar/buttonBar/button/settingButton/DefaultSettingButton.js +3 -2
- package/esm/presentation/topBar/buttonBar/button/shareButton/DefaultShareButton.d.ts.map +1 -1
- package/esm/presentation/topBar/buttonBar/button/shareButton/DefaultShareButton.js +3 -2
- package/esm/presentation/topBar/title/EditableTitle.d.ts.map +1 -1
- package/esm/presentation/topBar/title/EditableTitle.js +6 -0
- package/esm/presentation/widget/insight/DefaultDashboardInsightComponentSetFactory.d.ts +1 -1
- package/esm/presentation/widget/insight/DefaultDashboardInsightComponentSetFactory.d.ts.map +1 -1
- package/esm/presentation/widget/insight/DefaultDashboardInsightComponentSetFactory.js +13 -1
- package/esm/presentation/widget/insightMenu/DefaultDashboardInsightMenu/DashboardInsightMenu/index.d.ts.map +1 -1
- package/esm/presentation/widget/insightMenu/DefaultDashboardInsightMenu/DashboardInsightMenu/index.js +10 -1
- package/esm/presentation/widget/richText/EditModeDashboardRichText.js +1 -1
- package/esm/presentation/widget/visualizationSwitcher/EditModeDashboardVisualizationSwitcher.js +1 -1
- package/esm/presentation/widget/visualizationSwitcher/configuration/ToolbarTop.js +2 -2
- package/esm/presentation/widget/widget/InsightWidget/useEditableInsightMenu.d.ts.map +1 -1
- package/esm/presentation/widget/widget/InsightWidget/useEditableInsightMenu.js +5 -1
- package/esm/presentation/widget/widget/InsightWidget/useInsightMenu.d.ts.map +1 -1
- package/esm/presentation/widget/widget/InsightWidget/useInsightMenu.js +4 -1
- package/esm/sdk-ui-dashboard.d.ts +523 -68
- package/package.json +23 -21
- package/styles/css/alerting.css +1 -1
- package/styles/css/alerting.css.map +1 -1
- package/styles/css/attributeFilterConfig.css +3 -3
- package/styles/css/automationFilters.css +1 -1
- package/styles/css/configurationPanel.css +2 -2
- package/styles/css/configurationPanel.css.map +1 -1
- package/styles/css/dashboard.css +141 -87
- package/styles/css/dashboard.css.map +1 -1
- package/styles/css/dashboardContentLoader.css +45 -0
- package/styles/css/dashboardContentLoader.css.map +1 -0
- package/styles/css/dashboardNestedLayoutToolbar.css.map +1 -1
- package/styles/css/dashboardNestedLayoutWidget.css +1 -1
- package/styles/css/dashboardSettingsDialog.css +1 -1
- package/styles/css/dragAndDrop.css +0 -8
- package/styles/css/dragAndDrop.css.map +1 -1
- package/styles/css/drillConfigPanel.css +7 -7
- package/styles/css/drillConfigPanel.css.map +1 -1
- package/styles/css/filterBar.css +4 -4
- package/styles/css/filterBar.css.map +1 -1
- package/styles/css/grouped-navigation.css +2 -2
- package/styles/css/grouped-navigation.css.map +1 -1
- package/styles/css/icons.css.map +1 -1
- package/styles/css/insightConfiguration.css +1 -1
- package/styles/css/insightConfiguration.css.map +1 -1
- package/styles/css/insightEditor.css +46 -0
- package/styles/css/insightEditor.css.map +1 -0
- package/styles/css/kpi.css +2 -2
- package/styles/css/kpi.css.map +1 -1
- package/styles/css/kpi_alert_dialog.css +2 -2
- package/styles/css/layout.css +5 -5
- package/styles/css/layout.css.map +1 -1
- package/styles/css/main.css +335 -219
- package/styles/css/main.css.map +1 -1
- package/styles/css/notifications_channels_dialog.css +2 -2
- package/styles/css/notifications_channels_dialog.css.map +1 -1
- package/styles/css/resizing.css.map +1 -1
- package/styles/css/richTextWidget.css.map +1 -1
- package/styles/css/saveAsDialog.css.map +1 -1
- package/styles/css/sidebar.css +35 -10
- package/styles/css/sidebar.css.map +1 -1
- package/styles/css/topBar.css.map +1 -1
- package/styles/css/visualization.css.map +1 -1
- package/styles/css/visualizationSwitcherHeader.css.map +1 -1
- package/styles/css/visualizationSwitcherToolbar.css +1 -1
- package/styles/css/visualizationSwitcherToolbar.css.map +1 -1
- package/styles/css/visualizationSwitcherWidget.css +1 -1
- package/styles/css/visualizationSwitcherWidget.css.map +1 -1
- package/styles/scss/_variables.scss +3 -2
- package/styles/scss/_zIndexes.scss +4 -0
- package/styles/scss/attributeFilterConfig.scss +1 -1
- package/styles/scss/configurationPanel.scss +1 -1
- package/styles/scss/dashboard.scss +104 -96
- package/styles/scss/dashboardContentLoader.scss +45 -0
- package/styles/scss/dragAndDrop.scss +2 -9
- package/styles/scss/drillConfigPanel.scss +3 -3
- package/styles/scss/insightEditor.scss +53 -0
- package/styles/scss/layout.scss +1 -1
- package/styles/scss/main.scss +1 -0
- package/styles/scss/sidebar.scss +47 -12
- package/esm/presentation/dashboard/components/DashboardSkeleton.d.ts +0 -5
- package/esm/presentation/dashboard/components/DashboardSkeleton.d.ts.map +0 -1
- package/esm/presentation/dashboard/components/DashboardSkeleton.js +0 -20
|
@@ -9,7 +9,10 @@ import { isAutomationUserRecipient, } from "@gooddata/sdk-model";
|
|
|
9
9
|
import { ValidationContextStore, createInvalidDatapoint, createInvalidNode, useValidationContextValue, } from "@gooddata/sdk-ui";
|
|
10
10
|
import { LoadingMask, Message, Overlay, OverlayController, OverlayControllerProvider, UiIcon, UiTooltip, isEscapeKey, makeKeyboardNavigation, } from "@gooddata/sdk-ui-kit";
|
|
11
11
|
import { DASHBOARD_DIALOG_OVERS_Z_INDEX } from "../../../../../constants/zIndex.js";
|
|
12
|
+
import { getRecipientLabel } from "../../../utils/users.js";
|
|
12
13
|
import { isEmail } from "../../../utils/validate.js";
|
|
14
|
+
import { LiveRegionLastSelectContainer } from "./LiveRegionLastSelectContainer.js";
|
|
15
|
+
import { RecipientsSelectionDescription } from "./RecipientsSelectionDescription.js";
|
|
13
16
|
const MAXIMUM_RECIPIENTS_RECEIVE = 60;
|
|
14
17
|
const PADDING = 16;
|
|
15
18
|
const LOADING_MENU_HEIGHT = 50;
|
|
@@ -113,12 +116,12 @@ export const RecipientsSelectRenderer = memo(function RecipientsSelectRenderer(p
|
|
|
113
116
|
const invalidUnknownRecipients = value.filter((v) => v.type === "unknownUser");
|
|
114
117
|
const invalidUnknownError = !!invalidUnknownRecipients.length;
|
|
115
118
|
const invalidRecipientsValues = [...invalidExternalRecipients, ...invalidUnknownRecipients]
|
|
116
|
-
.map(
|
|
119
|
+
.map(getRecipientLabel)
|
|
117
120
|
.join(", ");
|
|
118
121
|
const authorOnlyError = allowOnlyLoggedUserRecipients &&
|
|
119
122
|
((value.length === 1 && value[0].id !== loggedUser?.id) || value.length > 1);
|
|
120
123
|
const missingEmailRecipients = value.filter((v) => !getHasEmail(v));
|
|
121
|
-
const missingEmailRecipientsValues = missingEmailRecipients.map(
|
|
124
|
+
const missingEmailRecipientsValues = missingEmailRecipients.map(getRecipientLabel).join(", ");
|
|
122
125
|
const missingEmailError = !!missingEmailRecipients.length;
|
|
123
126
|
return {
|
|
124
127
|
maxRecipientsError,
|
|
@@ -229,7 +232,7 @@ export const RecipientsSelectRenderer = memo(function RecipientsSelectRenderer(p
|
|
|
229
232
|
const { data, children } = multiValueProps;
|
|
230
233
|
// MultiValueRemove component from react-select
|
|
231
234
|
const removeIcon = children[1];
|
|
232
|
-
const name = data
|
|
235
|
+
const name = getRecipientLabel(data);
|
|
233
236
|
const hasEmail = getHasEmail(data);
|
|
234
237
|
const noExternal = data.type === "externalUser" && !allowExternalRecipients;
|
|
235
238
|
const invalidExternal = data.type === "unknownUser";
|
|
@@ -260,13 +263,16 @@ export const RecipientsSelectRenderer = memo(function RecipientsSelectRenderer(p
|
|
|
260
263
|
return renderEmptyContainer();
|
|
261
264
|
}, [renderEmptyContainer]);
|
|
262
265
|
const renderOptionLabel = useCallback((recipient) => {
|
|
263
|
-
const displayName = recipient
|
|
266
|
+
const displayName = getRecipientLabel(recipient);
|
|
264
267
|
const email = isAutomationUserRecipient(recipient) ? (recipient.email ?? "") : "";
|
|
265
268
|
const renderValue = renderRecipientValue(recipient);
|
|
266
269
|
return (_jsx(UiTooltip, { anchor: _jsxs("div", { className: "gd-recipient-option-item s-gd-recipient-option-item", children: [_jsx("span", { className: "gd-recipient-option-label-item s-gd-recipient-option-label-item", children: displayName }), allowExternalRecipients && recipient.type === "externalUser" ? (_jsxs("span", { className: "gd-recipient-quest", children: ["\u00A0", _jsx(FormattedMessage, { id: "dialogs.schedule.email.user.guest" })] })) : (renderValue), !externalRecipientOverride &&
|
|
267
270
|
allowExternalRecipients &&
|
|
268
271
|
recipient.type === "externalUser" ? (_jsx("div", { className: "gd-recipient-option-label-external-warning", children: _jsx(Message, { type: "warning", children: _jsx(FormattedMessage, { id: "dialogs.schedule.email.user.warning.external", values: { email: displayName } }) }) })) : null] }), content: isEmail(email) ? `${displayName} (${email})` : displayName, variant: "default", arrowPlacement: "right", triggerBy: ["hover", "focus"] }));
|
|
269
272
|
}, [allowExternalRecipients, externalRecipientOverride, renderRecipientValue]);
|
|
273
|
+
const descriptionId = `${id}-description`;
|
|
274
|
+
const errorId = `${id}-error`;
|
|
275
|
+
const ariaDescribedBy = isValid ? descriptionId : `${descriptionId} ${errorId}`;
|
|
270
276
|
const renderInputContainer = useCallback((inputProps) => {
|
|
271
277
|
if (!isMulti) {
|
|
272
278
|
return renderEmptyContainer();
|
|
@@ -287,8 +293,8 @@ export const RecipientsSelectRenderer = memo(function RecipientsSelectRenderer(p
|
|
|
287
293
|
inputProps.innerRef(ref);
|
|
288
294
|
}
|
|
289
295
|
}, autoComplete: "new-password" // common hack for Safari to not autocomplete
|
|
290
|
-
, "aria-invalid": !isValid, "aria-describedby":
|
|
291
|
-
}, [isMulti, id, isValid, renderEmptyContainer]);
|
|
296
|
+
, "aria-invalid": !isValid, "aria-describedby": ariaDescribedBy }) }));
|
|
297
|
+
}, [isMulti, id, isValid, ariaDescribedBy, renderEmptyContainer]);
|
|
292
298
|
const handleKeyboardRecipientRemove = useCallback((index) => {
|
|
293
299
|
if (index < 0 || index >= value.length) {
|
|
294
300
|
return;
|
|
@@ -437,6 +443,7 @@ export const RecipientsSelectRenderer = memo(function RecipientsSelectRenderer(p
|
|
|
437
443
|
}, [canListUsersInProject, onActivate]);
|
|
438
444
|
const creatableSelectComponent = {
|
|
439
445
|
...ReactSelectComponents,
|
|
446
|
+
SelectContainer: LiveRegionLastSelectContainer,
|
|
440
447
|
IndicatorsContainer: renderEmptyContainer,
|
|
441
448
|
Input: renderInputContainer,
|
|
442
449
|
MultiValueContainer: renderMultiValueContainer,
|
|
@@ -496,5 +503,5 @@ export const RecipientsSelectRenderer = memo(function RecipientsSelectRenderer(p
|
|
|
496
503
|
// Options arrive pre-filtered (server search, or the owner's options memo).
|
|
497
504
|
filterOption: null, isClearable: false, isDisabled: !isMulti, isMulti: isMulti, onChange:
|
|
498
505
|
// using as any as it would be too tricky to type properly
|
|
499
|
-
handleOnChange, onInputChange: handleSearchChange, onMenuOpen: onMenuOpen, onMenuClose: () => setState((prev) => ({ ...prev, menuOpen: false })), onKeyDown: handleKeyDown, options: options, onBlur: onBlur, value: value, getOptionValue: (o) => o.id, getOptionLabel:
|
|
506
|
+
handleOnChange, onInputChange: handleSearchChange, onMenuOpen: onMenuOpen, onMenuClose: () => setState((prev) => ({ ...prev, menuOpen: false })), onKeyDown: handleKeyDown, options: options, onBlur: onBlur, value: value, getOptionValue: (o) => o.id, getOptionLabel: getRecipientLabel, "aria-invalid": !isValid }), _jsx(RecipientsSelectionDescription, { id: descriptionId, recipients: value }), isValid ? (renderExternalRecipientsNote ? (_jsx("div", { className: "gd-recipients-field-note", children: _jsx(FormattedMessage, { id: "dialogs.schedule.email.recipients.note" }) })) : allowOnlyLoggedUserRecipients ? (_jsx("div", { className: "gd-recipients-field-note", children: _jsx(FormattedMessage, { id: "dialogs.schedule.email.destinationWarning" }) })) : null) : (_jsx("div", { id: errorId, className: "gd-recipients-field-error", children: getInvalidDatapoints().map((invalidDatapoint) => (_jsx("div", { id: invalidDatapoint.id, className: "gd-recipients-field-error-item", children: invalidDatapoint.message }, invalidDatapoint.id))) }))] })] }) }));
|
|
500
507
|
});
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { type ReactElement } from "react";
|
|
2
|
+
import { type IAutomationRecipient } from "@gooddata/sdk-model";
|
|
3
|
+
interface IRecipientsSelectionDescriptionProps {
|
|
4
|
+
id: string;
|
|
5
|
+
recipients: readonly IAutomationRecipient[];
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Hidden screen reader description of the selected recipients, referenced by the recipients input.
|
|
9
|
+
*/
|
|
10
|
+
export declare function RecipientsSelectionDescription({ id, recipients, }: IRecipientsSelectionDescriptionProps): ReactElement;
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=RecipientsSelectionDescription.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RecipientsSelectionDescription.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/components/RecipientsSelect/RecipientsSelectionDescription.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,OAAO,CAAC;AAI1C,OAAO,EAAE,KAAK,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AA8BhE,UAAU,oCAAoC;IAC1C,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,SAAS,oBAAoB,EAAE,CAAC;CAC/C;AAED;;GAEG;AACH,wBAAgB,8BAA8B,CAAC,EAC3C,EAAE,EACF,UAAU,GACb,EAAE,oCAAoC,GAAG,YAAY,CAQrD"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { defineMessages, useIntl } from "react-intl";
|
|
3
|
+
import { DETAILED_ANNOUNCEMENT_THRESHOLD } from "@gooddata/sdk-ui-kit";
|
|
4
|
+
import { getRecipientLabel } from "../../../utils/users.js";
|
|
5
|
+
const messages = defineMessages({
|
|
6
|
+
selectedNone: { id: "dialogs.schedule.email.recipients.selected.none" },
|
|
7
|
+
selectedFew: { id: "dialogs.schedule.email.recipients.selected.few" },
|
|
8
|
+
selectedMany: { id: "dialogs.schedule.email.recipients.selected.many" },
|
|
9
|
+
navigationHint: { id: "dialogs.schedule.email.recipients.navigationHint" },
|
|
10
|
+
});
|
|
11
|
+
function describeRecipients(intl, recipients) {
|
|
12
|
+
const count = recipients.length;
|
|
13
|
+
if (count === 0) {
|
|
14
|
+
return intl.formatMessage(messages.selectedNone);
|
|
15
|
+
}
|
|
16
|
+
const selection = count <= DETAILED_ANNOUNCEMENT_THRESHOLD
|
|
17
|
+
? intl.formatMessage(messages.selectedFew, {
|
|
18
|
+
count,
|
|
19
|
+
names: intl.formatList(recipients.map(getRecipientLabel), { type: "unit" }),
|
|
20
|
+
})
|
|
21
|
+
: intl.formatMessage(messages.selectedMany, { count });
|
|
22
|
+
return `${selection} ${intl.formatMessage(messages.navigationHint)}`;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Hidden screen reader description of the selected recipients, referenced by the recipients input.
|
|
26
|
+
*/
|
|
27
|
+
export function RecipientsSelectionDescription({ id, recipients, }) {
|
|
28
|
+
const intl = useIntl();
|
|
29
|
+
return (_jsx("span", { id: id, hidden: true, children: describeRecipients(intl, recipients) }));
|
|
30
|
+
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { type IAutomationRecipient } from "@gooddata/sdk-model";
|
|
2
2
|
export declare function matchRecipient(user: IAutomationRecipient, search: string): boolean;
|
|
3
|
+
export declare function getRecipientLabel(recipient: IAutomationRecipient): string;
|
|
3
4
|
export declare function createUser(search: string): IAutomationRecipient;
|
|
4
5
|
//# sourceMappingURL=users.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"users.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/automations/scheduledEmail/utils/users.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,oBAAoB,EAAkC,MAAM,qBAAqB,CAAC;AAIhG,wBAAgB,cAAc,CAAC,IAAI,EAAE,oBAAoB,EAAE,MAAM,EAAE,MAAM,WAexE;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,oBAAoB,CAQ/D"}
|
|
1
|
+
{"version":3,"file":"users.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/automations/scheduledEmail/utils/users.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,oBAAoB,EAAkC,MAAM,qBAAqB,CAAC;AAIhG,wBAAgB,cAAc,CAAC,IAAI,EAAE,oBAAoB,EAAE,MAAM,EAAE,MAAM,WAexE;AAED,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,oBAAoB,GAAG,MAAM,CAEzE;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,oBAAoB,CAQ/D"}
|
|
@@ -14,6 +14,9 @@ export function matchRecipient(user, search) {
|
|
|
14
14
|
lowerCaseId?.includes(lowerCaseSearch)) ??
|
|
15
15
|
false);
|
|
16
16
|
}
|
|
17
|
+
export function getRecipientLabel(recipient) {
|
|
18
|
+
return recipient.name || recipient.id;
|
|
19
|
+
}
|
|
17
20
|
export function createUser(search) {
|
|
18
21
|
const hasEmail = isEmail(search);
|
|
19
22
|
return {
|
|
@@ -39,6 +39,10 @@ export declare const getFilterByLocalIdentifier: (localIdentifier: string | unde
|
|
|
39
39
|
*/
|
|
40
40
|
export declare function isAllTimeDateFilterFixed(f: IFilter): boolean;
|
|
41
41
|
export declare function areFiltersEqual(filter1: IFilter, filter2: IFilter): boolean;
|
|
42
|
+
/**
|
|
43
|
+
* Values to compare date filters by. A bounded range never matches an empty date, so a missing
|
|
44
|
+
* `emptyValueHandling` counts as "exclude" there; on an all-time filter it means no filtering at all.
|
|
45
|
+
*/
|
|
42
46
|
export declare function dateFilterValues(filter: IDateFilter): import("@gooddata/sdk-model").IAbsoluteDateFilterValues | import("@gooddata/sdk-model").IRelativeDateFilterValues;
|
|
43
47
|
export declare function isFilterIgnoredByWidget(filter: FilterContextItem, widget: ExtendedDashboardWidget): boolean;
|
|
44
48
|
export declare function isFilterMatch(filter1: IFilter, filter2: IFilter): boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/automations/shared/automationFilters/utils.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,OAAO,EACH,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,EACtB,KAAK,mBAAmB,EACxB,KAAK,eAAe,EACpB,KAAK,+BAA+B,EACpC,KAAK,8BAA8B,EACnC,KAAK,kCAAkC,EACvC,KAAK,WAAW,EAChB,KAAK,OAAO,EACZ,KAAK,MAAM,EA6Bd,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAE,KAAK,uBAAuB,EAAE,MAAM,wCAAwC,CAAC;AAEtF,eAAO,MAAM,wBAAwB,WAAY,iBAAiB,KAAG,MAAM,GAAG,SAE7E,CAAC;AAEF,eAAO,MAAM,iCAAiC,YAAa,iBAAiB,EAAE,KAAG,OAEhF,CAAC;AAEF,eAAO,MAAM,6BAA6B,YAC7B,iBAAiB,WACjB,iBAAiB,KAC3B,OAEF,CAAC;AAEF;;;GAGG;AACH,wBAAgB,iBAAiB,CAC7B,OAAO,EAAE,iBAAiB,EAAE,EAC5B,OAAO,EAAE,iBAAiB,GAC3B,iBAAiB,EAAE,CAErB;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC5B,OAAO,EAAE,iBAAiB,EAAE,EAC5B,QAAQ,EAAE,iBAAiB,GAC5B,iBAAiB,EAAE,CAErB;AAiBD;;;;GAIG;AACH,wBAAgB,kBAAkB,CAC9B,cAAc,EAAE,MAAM,EACtB,UAAU,EAAE,iBAAiB,EAAE,EAC/B,UAAU,EAAE,iBAAiB,EAAE,EAC/B,YAAY,EAAE,mBAAmB,EAAE,GACpC,iBAAiB,GAAG,SAAS,CAuB/B;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CACjC,cAAc,EAAE,MAAM,EACtB,gBAAgB,EAAE,iBAAiB,EAAE,EACrC,UAAU,EAAE,iBAAiB,EAAE,EAC/B,YAAY,EAAE,mBAAmB,EAAE,GACpC,iBAAiB,GAAG,SAAS,CAmB/B;AAED,eAAO,MAAM,qBAAqB,eAClB,iBAAiB,EAAE,mBACd,iBAAiB,EAAE,wBAOvC,CAAC;AAEF,eAAO,MAAM,6BAA6B,YAC7B,iBAAiB,EAAE,cAChB,iBAAiB,EAAE,oBACb,+BAA+B,EAAE,KACpD,iBAAiB,EAsBnB,CAAC;AAEF,eAAO,MAAM,2BAA2B,YAC3B,iBAAiB,EAAE,YAClB,eAAe,EAAE,cACf,kCAAkC,EAAE,KACjD,eAAe,EAiBjB,CAAC;AAEF,eAAO,MAAM,+BAA+B,YAC/B,iBAAiB,EAAE,eACf,mBAAmB,EAAE,eACrB,8BAA8B,EAAE,KAC9C,mBAAmB,EAoBrB,CAAC;AAEF,eAAO,MAAM,yBAAyB,QAC7B,MAAM,WACF,iBAAiB,EAAE,KAC7B,iBAAiB,GAAG,SAWtB,CAAC;AAEF,eAAO,MAAM,mBAAmB,YACnB,iBAAiB,EAAE,GAAG,SAAS,oBACtB,+BAA+B,EAAE,eACtC,8BAA8B,EAAE,cACjC,kCAAkC,EAAE,4BACtB,OAAO,sBACb,OAAO,KAC5B,iBAAiB,EAwBnB,CAAC;AAEF,eAAO,MAAM,0BAA0B,oBAClB,MAAM,GAAG,SAAS,WAC1B,iBAAiB,EAAE,KAC7B,iBAAiB,GAAG,SAStB,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,CAAC,EAAE,OAAO,GAAG,OAAO,CAuB5D;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAyD3E;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,WAAW,
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/automations/shared/automationFilters/utils.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,OAAO,EACH,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,EACtB,KAAK,mBAAmB,EACxB,KAAK,eAAe,EACpB,KAAK,+BAA+B,EACpC,KAAK,8BAA8B,EACnC,KAAK,kCAAkC,EACvC,KAAK,WAAW,EAChB,KAAK,OAAO,EACZ,KAAK,MAAM,EA6Bd,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAE,KAAK,uBAAuB,EAAE,MAAM,wCAAwC,CAAC;AAEtF,eAAO,MAAM,wBAAwB,WAAY,iBAAiB,KAAG,MAAM,GAAG,SAE7E,CAAC;AAEF,eAAO,MAAM,iCAAiC,YAAa,iBAAiB,EAAE,KAAG,OAEhF,CAAC;AAEF,eAAO,MAAM,6BAA6B,YAC7B,iBAAiB,WACjB,iBAAiB,KAC3B,OAEF,CAAC;AAEF;;;GAGG;AACH,wBAAgB,iBAAiB,CAC7B,OAAO,EAAE,iBAAiB,EAAE,EAC5B,OAAO,EAAE,iBAAiB,GAC3B,iBAAiB,EAAE,CAErB;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC5B,OAAO,EAAE,iBAAiB,EAAE,EAC5B,QAAQ,EAAE,iBAAiB,GAC5B,iBAAiB,EAAE,CAErB;AAiBD;;;;GAIG;AACH,wBAAgB,kBAAkB,CAC9B,cAAc,EAAE,MAAM,EACtB,UAAU,EAAE,iBAAiB,EAAE,EAC/B,UAAU,EAAE,iBAAiB,EAAE,EAC/B,YAAY,EAAE,mBAAmB,EAAE,GACpC,iBAAiB,GAAG,SAAS,CAuB/B;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CACjC,cAAc,EAAE,MAAM,EACtB,gBAAgB,EAAE,iBAAiB,EAAE,EACrC,UAAU,EAAE,iBAAiB,EAAE,EAC/B,YAAY,EAAE,mBAAmB,EAAE,GACpC,iBAAiB,GAAG,SAAS,CAmB/B;AAED,eAAO,MAAM,qBAAqB,eAClB,iBAAiB,EAAE,mBACd,iBAAiB,EAAE,wBAOvC,CAAC;AAEF,eAAO,MAAM,6BAA6B,YAC7B,iBAAiB,EAAE,cAChB,iBAAiB,EAAE,oBACb,+BAA+B,EAAE,KACpD,iBAAiB,EAsBnB,CAAC;AAEF,eAAO,MAAM,2BAA2B,YAC3B,iBAAiB,EAAE,YAClB,eAAe,EAAE,cACf,kCAAkC,EAAE,KACjD,eAAe,EAiBjB,CAAC;AAEF,eAAO,MAAM,+BAA+B,YAC/B,iBAAiB,EAAE,eACf,mBAAmB,EAAE,eACrB,8BAA8B,EAAE,KAC9C,mBAAmB,EAoBrB,CAAC;AAEF,eAAO,MAAM,yBAAyB,QAC7B,MAAM,WACF,iBAAiB,EAAE,KAC7B,iBAAiB,GAAG,SAWtB,CAAC;AAEF,eAAO,MAAM,mBAAmB,YACnB,iBAAiB,EAAE,GAAG,SAAS,oBACtB,+BAA+B,EAAE,eACtC,8BAA8B,EAAE,cACjC,kCAAkC,EAAE,4BACtB,OAAO,sBACb,OAAO,KAC5B,iBAAiB,EAwBnB,CAAC;AAEF,eAAO,MAAM,0BAA0B,oBAClB,MAAM,GAAG,SAAS,WAC1B,iBAAiB,EAAE,KAC7B,iBAAiB,GAAG,SAStB,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,CAAC,EAAE,OAAO,GAAG,OAAO,CAuB5D;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAyD3E;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,WAAW,qHAUnD;AAED,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,iBAAiB,EAAE,MAAM,EAAE,uBAAuB,GAAG,OAAO,CA+B3G;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAazE;AAED,eAAO,MAAM,cAAc,WACf,iBAAiB,iBACV,iBAAiB,EAAE,mBACjB,mBAAmB,EAAE,QAChC,SAAS,KAChB,MAyCF,CAAC"}
|
|
@@ -226,8 +226,8 @@ export function areFiltersEqual(filter1, filter2) {
|
|
|
226
226
|
else if (isAbsoluteDateFilter(filter1) && isAbsoluteDateFilter(filter2)) {
|
|
227
227
|
// An automation does not store a granularity that has no period literal, so the granularity counts
|
|
228
228
|
// only when both filters have one.
|
|
229
|
-
const { granularity: granularity1, ...values1 } =
|
|
230
|
-
const { granularity: granularity2, ...values2 } =
|
|
229
|
+
const { granularity: granularity1, ...values1 } = dateFilterValues(filter1);
|
|
230
|
+
const { granularity: granularity2, ...values2 } = dateFilterValues(filter2);
|
|
231
231
|
return (isEqual(values1, values2) &&
|
|
232
232
|
(granularity1 === undefined || granularity2 === undefined || granularity1 === granularity2));
|
|
233
233
|
}
|
|
@@ -237,11 +237,18 @@ export function areFiltersEqual(filter1, filter2) {
|
|
|
237
237
|
// Filter types are different
|
|
238
238
|
return isEqual(filter1, filter2);
|
|
239
239
|
}
|
|
240
|
+
/**
|
|
241
|
+
* Values to compare date filters by. A bounded range never matches an empty date, so a missing
|
|
242
|
+
* `emptyValueHandling` counts as "exclude" there; on an all-time filter it means no filtering at all.
|
|
243
|
+
*/
|
|
240
244
|
export function dateFilterValues(filter) {
|
|
241
|
-
|
|
242
|
-
|
|
245
|
+
const values = isAbsoluteDateFilter(filter)
|
|
246
|
+
? absoluteDateFilterValues(filter)
|
|
247
|
+
: relativeDateFilterValues(filter);
|
|
248
|
+
if (values.emptyValueHandling !== undefined || isAllTimeDateFilterFixed(filter)) {
|
|
249
|
+
return values;
|
|
243
250
|
}
|
|
244
|
-
return
|
|
251
|
+
return { ...values, emptyValueHandling: "exclude" };
|
|
245
252
|
}
|
|
246
253
|
export function isFilterIgnoredByWidget(filter, widget) {
|
|
247
254
|
if (!isInsightWidget(widget)) {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import { type ReactElement } from "react";
|
|
2
|
-
export declare function DashboardTabsWrapper(): import("react/jsx-runtime").JSX.Element
|
|
2
|
+
export declare function DashboardTabsWrapper(): import("react/jsx-runtime").JSX.Element;
|
|
3
3
|
export declare function DashboardHeader(): ReactElement;
|
|
4
4
|
//# sourceMappingURL=DashboardHeader.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DashboardHeader.d.ts","sourceRoot":"","sources":["../../../../src/presentation/dashboard/DashboardHeader/DashboardHeader.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"DashboardHeader.d.ts","sourceRoot":"","sources":["../../../../src/presentation/dashboard/DashboardHeader/DashboardHeader.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,OAAO,CAAC;AA6E1C,wBAAgB,oBAAoB,4CAInC;AAID,wBAAgB,eAAe,IAAI,YAAY,CA6B9C"}
|
|
@@ -1,6 +1,4 @@
|
|
|
1
1
|
import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { useDashboardSelector } from "../../../model/react/DashboardStoreProvider.js";
|
|
3
|
-
import { selectIsAiLoading } from "../../../model/store/config/configSelectors.js";
|
|
4
2
|
import { ScheduledEmailAutomationsProvider, ScheduledEmailConnector, } from "../../automations/connectors/ScheduledEmailConnector.js";
|
|
5
3
|
import { CancelEditDialog } from "../../cancelEditDialog/CancelEditDialog.js";
|
|
6
4
|
import { useCancelEditDialog } from "../../cancelEditDialog/DefaultCancelEditDialog.js";
|
|
@@ -21,6 +19,7 @@ import { useTopBarProps } from "../../topBar/topBar/DefaultTopBar.js";
|
|
|
21
19
|
import { TopBar } from "../../topBar/topBar/TopBar.js";
|
|
22
20
|
import { useWidgetDeleteDialogProps } from "../../widgetDeleteDialog/DefaultWidgetDeleteDialog.js";
|
|
23
21
|
import { WidgetDeleteDialog } from "../../widgetDeleteDialog/WidgetDeleteDialog.js";
|
|
22
|
+
import { DashboardInteractionLock } from "../components/DashboardInteractionLock.js";
|
|
24
23
|
import { ToastMessages } from "../components/ToastMessages.js";
|
|
25
24
|
import { AlertingDialogProvider } from "./AlertingDialogProvider.js";
|
|
26
25
|
import { DashboardTabs, useDashboardTabsProps } from "./DashboardTabs.js";
|
|
@@ -55,10 +54,6 @@ function TopBarWrapper() {
|
|
|
55
54
|
}
|
|
56
55
|
function FilterBarWrapper() {
|
|
57
56
|
const filterBarProps = useFilterBarProps();
|
|
58
|
-
const isAiLoading = useDashboardSelector(selectIsAiLoading);
|
|
59
|
-
if (isAiLoading) {
|
|
60
|
-
return null;
|
|
61
|
-
}
|
|
62
57
|
return _jsx(FilterBar, { ...filterBarProps });
|
|
63
58
|
}
|
|
64
59
|
function CancelEditDialogWrapper() {
|
|
@@ -67,14 +62,10 @@ function CancelEditDialogWrapper() {
|
|
|
67
62
|
}
|
|
68
63
|
export function DashboardTabsWrapper() {
|
|
69
64
|
const dashboardTabsProps = useDashboardTabsProps();
|
|
70
|
-
const isAiLoading = useDashboardSelector(selectIsAiLoading);
|
|
71
|
-
if (isAiLoading) {
|
|
72
|
-
return null;
|
|
73
|
-
}
|
|
74
65
|
return _jsx(DashboardTabs, { ...dashboardTabsProps });
|
|
75
66
|
}
|
|
76
67
|
// split the header parts of the dashboard so that changes to their state
|
|
77
68
|
// (e.g. opening email dialog) do not re-render the dashboard body
|
|
78
69
|
export function DashboardHeader() {
|
|
79
|
-
return (_jsxs(_Fragment, { children: [_jsx(ToastMessages, {}), _jsx(ExportXlsxDialogProvider, {}), _jsx(ExportCsvDialogProvider, {}), _jsx(ExportTabularPdfDialogProvider, {}), _jsx(ExportTemplateDialogProvider, {}), _jsx(ScheduledEmailAutomationsProvider, { children: _jsx(ScheduledEmailConnector, {}) }), _jsx(AlertingDialogProvider, {}), _jsx(ShareDialogDashboardHeader, {}), _jsx(SettingsDialogProvider, {}), _jsx(DensityDialogProvider, {}), _jsx(TimezoneDialogProvider, {}), _jsx(DeleteDialogWrapper, {}), _jsx(WidgetDeleteDialogWrapper, {}), _jsx(KpiDeleteDialogWrapper, {}), _jsx(SaveAsDialogWrapper, {}), _jsx(InsightNotSavedDialogWrapper, {}), _jsx(TopBarWrapper, {}), _jsx(DashboardTabsWrapper, {}), _jsx(FilterBarWrapper, {}), _jsx(CancelEditDialogWrapper, {})] }));
|
|
70
|
+
return (_jsxs(_Fragment, { children: [_jsx(ToastMessages, {}), _jsx(ExportXlsxDialogProvider, {}), _jsx(ExportCsvDialogProvider, {}), _jsx(ExportTabularPdfDialogProvider, {}), _jsx(ExportTemplateDialogProvider, {}), _jsx(ScheduledEmailAutomationsProvider, { children: _jsx(ScheduledEmailConnector, {}) }), _jsx(AlertingDialogProvider, {}), _jsx(ShareDialogDashboardHeader, {}), _jsx(SettingsDialogProvider, {}), _jsx(DensityDialogProvider, {}), _jsx(TimezoneDialogProvider, {}), _jsx(DeleteDialogWrapper, {}), _jsx(WidgetDeleteDialogWrapper, {}), _jsx(KpiDeleteDialogWrapper, {}), _jsx(SaveAsDialogWrapper, {}), _jsx(InsightNotSavedDialogWrapper, {}), _jsx(TopBarWrapper, {}), _jsxs(DashboardInteractionLock, { children: [_jsx(DashboardTabsWrapper, {}), _jsx(FilterBarWrapper, {})] }), _jsx(CancelEditDialogWrapper, {})] }));
|
|
80
71
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CreationPanel.d.ts","sourceRoot":"","sources":["../../../../src/presentation/dashboard/DashboardSidebar/CreationPanel.tsx"],"names":[],"mappings":"AAcA,OAAO,EACH,KAAK,2BAA2B,EAChC,KAAK,iCAAiC,EACtC,KAAK,yBAAyB,EAC9B,KAAK,0BAA0B,EAC/B,KAAK,uCAAuC,EAC/C,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAEH,KAAK,qCAAqC,EAC1C,KAAK,qCAAqC,EAC7C,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"CreationPanel.d.ts","sourceRoot":"","sources":["../../../../src/presentation/dashboard/DashboardSidebar/CreationPanel.tsx"],"names":[],"mappings":"AAcA,OAAO,EACH,KAAK,2BAA2B,EAChC,KAAK,iCAAiC,EACtC,KAAK,yBAAyB,EAC9B,KAAK,0BAA0B,EAC/B,KAAK,uCAAuC,EAC/C,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAEH,KAAK,qCAAqC,EAC1C,KAAK,qCAAqC,EAC7C,MAAM,4BAA4B,CAAC;AAkBpC,UAAU,mBAAmB;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oCAAoC,CAAC,EAAE,qCAAqC,CAAC;IAC7E,oCAAoC,CAAC,EAAE,qCAAqC,CAAC;IAC7E,2BAA2B,CAAC,EAAE,2BAA2B,CAAC;IAC1D,yBAAyB,CAAC,EAAE,yBAAyB,CAAC;IACtD,0BAA0B,CAAC,EAAE,0BAA0B,CAAC;IACxD,uCAAuC,CAAC,EAAE,uCAAuC,CAAC;IAClF,iCAAiC,CAAC,EAAE,iCAAiC,CAAC;CACzE;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,mBAAmB,2CAyIvD"}
|
|
@@ -9,6 +9,9 @@ import { useDashboardSelector } from "../../../model/react/DashboardStoreProvide
|
|
|
9
9
|
import { selectSupportsRichTextWidgets } from "../../../model/store/backendCapabilities/backendCapabilitiesSelectors.js";
|
|
10
10
|
import { selectIsAiLoading } from "../../../model/store/config/configSelectors.js";
|
|
11
11
|
import { selectIsNewDashboard } from "../../../model/store/meta/metaSelectors.js";
|
|
12
|
+
import { InsightEditorCreatePanelItem } from "../../insightEditor/InsightEditorCreatePanelItem.js";
|
|
13
|
+
import { InsightEditorPlaceholder } from "../../insightEditor/InsightEditorPlaceholder.js";
|
|
14
|
+
import { useCanCreateInsightInEditor } from "../../insightEditor/useCanCreateInsightInEditor.js";
|
|
12
15
|
import { DraggableInsightList } from "./DraggableInsightList/DraggableInsightList.js";
|
|
13
16
|
import { SidebarCollapseToggle } from "./SidebarCollapseToggle.js";
|
|
14
17
|
import { useResizableSidebar } from "./useResizableSidebarState.js";
|
|
@@ -35,9 +38,14 @@ export function CreationPanel(props) {
|
|
|
35
38
|
const RichTextWidgetComponentSet = props.RichTextWidgetComponentSet;
|
|
36
39
|
const VisualizationSwitcherWidgetComponentSet = props.VisualizationSwitcherWidgetComponentSet;
|
|
37
40
|
const DashboardLayoutWidgetComponentSet = props.DashboardLayoutWidgetComponentSet;
|
|
41
|
+
const canCreateInsightInEditor = useCanCreateInsightInEditor();
|
|
38
42
|
const addItemPanelItems = useMemo(() => {
|
|
43
|
+
// A customization can wrap one of the two editor components, so either of them marks the editor.
|
|
44
|
+
const creating = InsightWidgetComponentSet.creating;
|
|
45
|
+
const isInsightEditorItem = creating?.CreatePanelListItemComponent === InsightEditorCreatePanelItem ||
|
|
46
|
+
creating?.CreatingPlaceholderComponent === InsightEditorPlaceholder;
|
|
39
47
|
const items = compact([
|
|
40
|
-
InsightWidgetComponentSet.creating,
|
|
48
|
+
(!isInsightEditorItem || canCreateInsightInEditor) && InsightWidgetComponentSet.creating,
|
|
41
49
|
AttributeFilterComponentSet.creating,
|
|
42
50
|
DashboardLayoutWidgetComponentSet.creating,
|
|
43
51
|
VisualizationSwitcherWidgetComponentSet.creating,
|
|
@@ -61,6 +69,7 @@ export function CreationPanel(props) {
|
|
|
61
69
|
WrapCreatePanelItemWithDragComponent,
|
|
62
70
|
isAiLoading,
|
|
63
71
|
isRailCollapsed,
|
|
72
|
+
canCreateInsightInEditor,
|
|
64
73
|
]);
|
|
65
74
|
return (_jsx("div", { className: cx("configuration-panel creation-panel", className), children: _jsxs("div", { className: "configuration-panel-content", children: [_jsxs("div", { className: "gd-creation-panel-header flex-panel-item-nostretch", children: [canCollapse ? (_jsx(SidebarCollapseToggle, { isCollapsed: isCollapsed, onToggle: () => {
|
|
66
75
|
setFocusSearch(false);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DashboardContentLoader.d.ts","sourceRoot":"","sources":["../../../../src/presentation/dashboard/DefaultDashboardContent/DashboardContentLoader.tsx"],"names":[],"mappings":"AA0BA;;GAEG;AACH,wBAAgB,sBAAsB,4CAgCrC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
// (C) 2026 GoodData Corporation
|
|
3
|
+
import { useState } from "react";
|
|
4
|
+
import { FormattedMessage } from "react-intl";
|
|
5
|
+
import { UiSkeleton } from "@gooddata/sdk-ui-kit";
|
|
6
|
+
function createDashboardContentLoaderRow() {
|
|
7
|
+
if (Math.random() < 0.5) {
|
|
8
|
+
return { widths: [50, 50] };
|
|
9
|
+
}
|
|
10
|
+
const firstDivider = Math.floor(Math.random() * 41);
|
|
11
|
+
const secondDivider = Math.floor(Math.random() * 41);
|
|
12
|
+
const [lowerDivider, upperDivider] = [firstDivider, secondDivider].sort((a, b) => a - b);
|
|
13
|
+
return {
|
|
14
|
+
widths: [20 + lowerDivider, 20 + upperDivider - lowerDivider, 60 - upperDivider],
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* @internal
|
|
19
|
+
*/
|
|
20
|
+
export function DashboardContentLoader() {
|
|
21
|
+
const [row] = useState(() => createDashboardContentLoaderRow());
|
|
22
|
+
return (_jsxs("div", { className: "gd-dashboard-content-loader", role: "status", children: [_jsx("span", { className: "gd-dashboard-content-loader__status", children: _jsx(FormattedMessage, { id: "loading" }) }), _jsx("div", { className: "gd-dashboard-content-loader__charts", "data-testid": "dashboard-content-loader-row", "aria-hidden": "true", style: {
|
|
23
|
+
"--dashboard-content-loader-columns": row.widths
|
|
24
|
+
.map((width) => `minmax(0, ${width}fr)`)
|
|
25
|
+
.join(" "),
|
|
26
|
+
}, children: Array.from({ length: row.widths.length }, (_, index) => (_jsx("div", { className: "gd-dashboard-content-loader__chart", "data-testid": "dashboard-content-loader-chart", children: _jsx(UiSkeleton, { itemHeight: 440, itemWidth: "45%" }) }, index))) })] }));
|
|
27
|
+
}
|
package/esm/presentation/dashboard/DefaultDashboardContent/DefaultDashboardMainContent.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DefaultDashboardMainContent.d.ts","sourceRoot":"","sources":["../../../../src/presentation/dashboard/DefaultDashboardContent/DefaultDashboardMainContent.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"DefaultDashboardMainContent.d.ts","sourceRoot":"","sources":["../../../../src/presentation/dashboard/DefaultDashboardContent/DefaultDashboardMainContent.tsx"],"names":[],"mappings":"AAkBA,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,aAAa,CAAC;AAInD;;GAEG;AACH,wBAAgB,2BAA2B,CAAC,CAAC,EAAE,eAAe,2CA+D7D"}
|
|
@@ -1,4 +1,4 @@
|
|
|
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) 2023-2026 GoodData Corporation
|
|
3
3
|
import { useEffect } from "react";
|
|
4
4
|
import cx from "classnames";
|
|
@@ -6,12 +6,15 @@ import { changeFilterContextSelection } from "../../../model/commands/filters.js
|
|
|
6
6
|
import { useDashboardSelector } from "../../../model/react/DashboardStoreProvider.js";
|
|
7
7
|
import { useDispatchDashboardCommand } from "../../../model/react/useDispatchDashboardCommand.js";
|
|
8
8
|
import { useWidgetSelection } from "../../../model/react/useWidgetSelection.js";
|
|
9
|
+
import { selectIsAiLoading } from "../../../model/store/config/configSelectors.js";
|
|
10
|
+
import { selectIsNewDashboard } from "../../../model/store/meta/metaSelectors.js";
|
|
9
11
|
import { selectRenderMode } from "../../../model/store/renderMode/renderModeSelectors.js";
|
|
10
12
|
import { useDashboardDrop } from "../../dragAndDrop/useDashboardDrop.js";
|
|
11
13
|
import { ExportThemeProvider } from "../../export/ExportThemeProvider.js";
|
|
12
14
|
import { useWidgetDragHoverHandlers as useFlexibleWidgetDragHoverHandlers } from "../../flexibleLayout/dragAndDrop/draggableWidget/useWidgetDragHoverHandlers.js";
|
|
13
15
|
import { DashboardLayout } from "../../widget/dashboardLayout/DashboardLayout.js";
|
|
14
16
|
import { DateFilterConfigWarnings } from "../components/DateFilterConfigWarnings.js";
|
|
17
|
+
import { DashboardContentLoader } from "./DashboardContentLoader.js";
|
|
15
18
|
/**
|
|
16
19
|
* @internal
|
|
17
20
|
*/
|
|
@@ -19,6 +22,8 @@ export function DefaultDashboardMainContent(_) {
|
|
|
19
22
|
const onFiltersChange = useDispatchDashboardCommand(changeFilterContextSelection);
|
|
20
23
|
const { deselectWidgets } = useWidgetSelection();
|
|
21
24
|
const renderMode = useDashboardSelector(selectRenderMode);
|
|
25
|
+
const isAiLoading = useDashboardSelector(selectIsAiLoading);
|
|
26
|
+
const isNewDashboard = useDashboardSelector(selectIsNewDashboard);
|
|
22
27
|
const { handleDragHoverEnd } = useFlexibleWidgetDragHoverHandlers();
|
|
23
28
|
const [{ isOver }, dropRef] = useDashboardDrop([
|
|
24
29
|
"insight",
|
|
@@ -40,7 +45,7 @@ export function DefaultDashboardMainContent(_) {
|
|
|
40
45
|
}, [handleDragHoverEnd, isOver]);
|
|
41
46
|
const classNames = cx("gd-flex-container", "root-flex-maincontent", "gd-grid-layout", "gd-auto-resized-dashboard-descriptions");
|
|
42
47
|
const renderContent = () => {
|
|
43
|
-
return (
|
|
48
|
+
return (_jsx("div", { className: classNames, ref: dropRef, onClick: deselectWidgets, children: isNewDashboard && isAiLoading ? (_jsx(DashboardContentLoader, {})) : (_jsxs(_Fragment, { children: [_jsx(DateFilterConfigWarnings, {}), _jsx(DashboardLayout, { onFiltersChange: onFiltersChange })] })) }));
|
|
44
49
|
};
|
|
45
50
|
if (renderMode === "export") {
|
|
46
51
|
return _jsx(ExportThemeProvider, { children: renderContent() });
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DashboardAiComposingOverlay.d.ts","sourceRoot":"","sources":["../../../../src/presentation/dashboard/components/DashboardAiComposingOverlay.tsx"],"names":[],"mappings":"AAmBA,wBAAgB,2BAA2B,CAAC,EAAE,SAAS,EAAE,EAAE;IAAE,SAAS,EAAE,OAAO,CAAA;CAAE,2CAuKhF"}
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
// (C) 2026 GoodData Corporation
|
|
3
|
+
import { useLayoutEffect, useRef } from "react";
|
|
4
|
+
const speed = 1 / 3.6;
|
|
5
|
+
const springAt = 0.05;
|
|
6
|
+
const stiffness = 7;
|
|
7
|
+
const damping = 0.55;
|
|
8
|
+
export function DashboardAiComposingOverlay({ isWaiting }) {
|
|
9
|
+
const overlayRef = useRef(null);
|
|
10
|
+
const stateRef = useRef(null);
|
|
11
|
+
useLayoutEffect(() => {
|
|
12
|
+
const overlay = overlayRef.current;
|
|
13
|
+
if (!overlay) {
|
|
14
|
+
return;
|
|
15
|
+
}
|
|
16
|
+
const rects = Array.from(overlay.querySelectorAll("rect"));
|
|
17
|
+
const reducedMotion = window.matchMedia("(prefers-reduced-motion: reduce)");
|
|
18
|
+
let state = stateRef.current;
|
|
19
|
+
let width = 0;
|
|
20
|
+
let perimeter = 0;
|
|
21
|
+
let previousTime;
|
|
22
|
+
let frame;
|
|
23
|
+
const segment = (rect, start, length) => {
|
|
24
|
+
rect.style.strokeDasharray = `${length} ${Math.max(0, perimeter - length)}`;
|
|
25
|
+
rect.style.strokeDashoffset = String(-(((start % perimeter) + perimeter) % perimeter));
|
|
26
|
+
};
|
|
27
|
+
const animate = (time) => {
|
|
28
|
+
frame = undefined;
|
|
29
|
+
if (!state || !perimeter) {
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
const dt = Math.min(0.05, (time - (previousTime ?? time)) / 1000);
|
|
33
|
+
previousTime = time;
|
|
34
|
+
const top = width / 2 / perimeter;
|
|
35
|
+
const runningLength = Math.min(600, perimeter * 0.25);
|
|
36
|
+
const waitingLength = Math.min(120, runningLength);
|
|
37
|
+
let settled = false;
|
|
38
|
+
if (isWaiting && state.mode === "run") {
|
|
39
|
+
state.mode = "cruise";
|
|
40
|
+
state.lap = Math.ceil(state.center + springAt - top);
|
|
41
|
+
}
|
|
42
|
+
else if (!isWaiting && state.mode !== "run") {
|
|
43
|
+
state.mode = "run";
|
|
44
|
+
state.speed = 0;
|
|
45
|
+
}
|
|
46
|
+
if (reducedMotion.matches) {
|
|
47
|
+
state.center = top;
|
|
48
|
+
state.length = isWaiting ? waitingLength : runningLength;
|
|
49
|
+
state.head = isWaiting ? 0 : 1;
|
|
50
|
+
state.lap = 0;
|
|
51
|
+
state.velocity = 0;
|
|
52
|
+
state.speed = 0;
|
|
53
|
+
state.mode = isWaiting ? "spring" : "run";
|
|
54
|
+
settled = true;
|
|
55
|
+
}
|
|
56
|
+
else if (state.mode === "cruise") {
|
|
57
|
+
state.center += speed * dt;
|
|
58
|
+
if (state.lap + top - state.center <= springAt) {
|
|
59
|
+
state.mode = "spring";
|
|
60
|
+
state.velocity = speed;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
else if (state.mode === "spring") {
|
|
64
|
+
// Keep the spring target aligned with the top center while the dashboard resizes.
|
|
65
|
+
const target = state.lap + top;
|
|
66
|
+
const steps = Math.max(1, Math.ceil(dt * 240));
|
|
67
|
+
const step = dt / steps;
|
|
68
|
+
for (let i = 0; i < steps; i++) {
|
|
69
|
+
const acceleration = -stiffness * stiffness * (state.center - target) -
|
|
70
|
+
2 * damping * stiffness * state.velocity;
|
|
71
|
+
state.velocity += acceleration * step;
|
|
72
|
+
state.center += state.velocity * step;
|
|
73
|
+
}
|
|
74
|
+
const easing = 1 - Math.exp(-dt * 3.2);
|
|
75
|
+
state.length += (waitingLength - state.length) * easing;
|
|
76
|
+
state.head += -state.head * easing;
|
|
77
|
+
settled =
|
|
78
|
+
Math.abs(state.center - target) < 0.00001 &&
|
|
79
|
+
Math.abs(state.velocity) < 0.00001 &&
|
|
80
|
+
Math.abs(state.length - waitingLength) < 0.01 &&
|
|
81
|
+
state.head < 0.0001;
|
|
82
|
+
if (settled) {
|
|
83
|
+
state.center = target;
|
|
84
|
+
state.length = waitingLength;
|
|
85
|
+
state.head = 0;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
state.speed = Math.min(1, state.speed + dt / 0.9);
|
|
90
|
+
state.center += speed * dt * state.speed * state.speed;
|
|
91
|
+
const easing = 1 - Math.exp(-dt * 2.5);
|
|
92
|
+
state.length += (runningLength - state.length) * easing;
|
|
93
|
+
state.head += (1 - state.head) * easing;
|
|
94
|
+
}
|
|
95
|
+
const start = state.center * perimeter - state.length / 2;
|
|
96
|
+
const coreLength = state.length * 0.55;
|
|
97
|
+
const coreStart = start + (state.length - coreLength) * (0.5 + 0.5 * state.head);
|
|
98
|
+
const [bloom, glow, tail, core] = rects;
|
|
99
|
+
segment(tail, start, state.length);
|
|
100
|
+
for (const rect of [bloom, glow, core]) {
|
|
101
|
+
segment(rect, coreStart, coreLength);
|
|
102
|
+
}
|
|
103
|
+
if (!settled) {
|
|
104
|
+
frame = requestAnimationFrame(animate);
|
|
105
|
+
}
|
|
106
|
+
};
|
|
107
|
+
const refresh = () => {
|
|
108
|
+
if (frame !== undefined) {
|
|
109
|
+
cancelAnimationFrame(frame);
|
|
110
|
+
}
|
|
111
|
+
previousTime = undefined;
|
|
112
|
+
animate(performance.now());
|
|
113
|
+
};
|
|
114
|
+
const fit = () => {
|
|
115
|
+
width = Math.max(0, overlay.clientWidth - 2);
|
|
116
|
+
const height = Math.max(0, overlay.clientHeight - 2);
|
|
117
|
+
perimeter = width && height ? 2 * (width + height) : 0;
|
|
118
|
+
for (const rect of rects) {
|
|
119
|
+
rect.setAttribute("width", String(width));
|
|
120
|
+
rect.setAttribute("height", String(height));
|
|
121
|
+
}
|
|
122
|
+
if (!state && perimeter) {
|
|
123
|
+
state = {
|
|
124
|
+
center: isWaiting ? width / 2 / perimeter : 0.62,
|
|
125
|
+
length: isWaiting ? Math.min(120, perimeter * 0.25) : Math.min(600, perimeter * 0.25),
|
|
126
|
+
head: isWaiting ? 0 : 1,
|
|
127
|
+
speed: 1,
|
|
128
|
+
mode: isWaiting ? "spring" : "run",
|
|
129
|
+
lap: 0,
|
|
130
|
+
velocity: 0,
|
|
131
|
+
};
|
|
132
|
+
stateRef.current = state;
|
|
133
|
+
}
|
|
134
|
+
refresh();
|
|
135
|
+
};
|
|
136
|
+
const observer = typeof ResizeObserver === "undefined" ? undefined : new ResizeObserver(fit);
|
|
137
|
+
observer?.observe(overlay);
|
|
138
|
+
window.addEventListener("resize", fit);
|
|
139
|
+
reducedMotion.addEventListener("change", refresh);
|
|
140
|
+
fit();
|
|
141
|
+
return () => {
|
|
142
|
+
if (frame !== undefined) {
|
|
143
|
+
cancelAnimationFrame(frame);
|
|
144
|
+
}
|
|
145
|
+
observer?.disconnect();
|
|
146
|
+
window.removeEventListener("resize", fit);
|
|
147
|
+
reducedMotion.removeEventListener("change", refresh);
|
|
148
|
+
};
|
|
149
|
+
}, [isWaiting]);
|
|
150
|
+
return (_jsx("div", { "data-testid": "gd-dashboard-ai-composing-overlay", className: "gd-dashboard-ai-composing-overlay", ref: overlayRef, "aria-hidden": "true", children: ["bloom", "glow", "tail", "core"].map((layer) => (_jsx("svg", { className: `gd-dashboard-ai-composing-overlay__${layer}`, focusable: "false", children: _jsx("rect", { x: "1", y: "1", width: "0", height: "0" }) }, layer))) }));
|
|
151
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DashboardInner.d.ts","sourceRoot":"","sources":["../../../../src/presentation/dashboard/components/DashboardInner.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"DashboardInner.d.ts","sourceRoot":"","sources":["../../../../src/presentation/dashboard/components/DashboardInner.tsx"],"names":[],"mappings":"AAwCA,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,aAAa,CAAC;AASnD,wBAAgB,cAAc,CAAC,KAAK,EAAE,eAAe,2CAuHpD"}
|