@gooddata/sdk-ui-dashboard 11.65.0-alpha.1 → 11.65.0-alpha.3
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 +2 -2
- package/esm/__version.d.ts +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 +1 -1
- package/esm/index.d.ts.map +1 -1
- package/esm/index.js +1 -1
- package/esm/model/commandHandlers/dashboard/initializeDashboardHandler/resolveDashboardConfig.d.ts.map +1 -1
- package/esm/model/commandHandlers/dashboard/initializeDashboardHandler/resolveDashboardConfig.js +0 -3
- 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 +12 -0
- package/esm/model/store/config/configSelectors.d.ts.map +1 -1
- package/esm/model/store/config/configSelectors.js +18 -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/types/commonTypes.d.ts +20 -22
- package/esm/model/types/commonTypes.d.ts.map +1 -1
- 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/dashboard/DashboardHeader/DashboardHeader.d.ts.map +1 -1
- package/esm/presentation/dashboard/DashboardHeader/DashboardHeader.js +2 -1
- 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 +5 -6
- package/esm/presentation/dashboard/components/DashboardInteractionComposing.d.ts +7 -0
- package/esm/presentation/dashboard/components/DashboardInteractionComposing.d.ts.map +1 -0
- package/esm/presentation/dashboard/components/DashboardInteractionComposing.js +18 -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/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/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 +6 -0
- package/esm/presentation/localization/bundles/en-US.localization-bundle.d.ts +20 -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 +20 -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 +12 -6
- 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/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/sdk-ui-dashboard.d.ts +34 -22
- package/package.json +21 -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 +94 -87
- package/styles/css/dashboard.css.map +1 -1
- 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/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 +243 -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 +94 -96
- package/styles/scss/dragAndDrop.scss +2 -9
- package/styles/scss/drillConfigPanel.scss +3 -3
- package/styles/scss/layout.scss +1 -1
- 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
|
@@ -252,35 +252,33 @@ export type DashboardConfig = {
|
|
|
252
252
|
*/
|
|
253
253
|
widgetsOverlay?: Record<string, IDashboardWidgetOverlay>;
|
|
254
254
|
/**
|
|
255
|
-
*
|
|
256
|
-
* Specifies if the dashboard is in AI mode.
|
|
255
|
+
* Specifies the dashboard's AI mode.
|
|
257
256
|
*
|
|
258
257
|
* @remarks
|
|
259
|
-
*
|
|
260
|
-
*
|
|
261
|
-
*
|
|
262
|
-
* AI
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
*
|
|
267
|
-
* Specifies if ai now generates the dashboard
|
|
258
|
+
* Any defined, non-null mode enables the AI-assisted dashboard experience.
|
|
259
|
+
* `"active"` enables AI mode without loading or blocking dashboard interaction.
|
|
260
|
+
* `"generating"` shows loading content while AI generates the dashboard.
|
|
261
|
+
* `"waiting"` shows loading content while AI waits for user input.
|
|
262
|
+
* `"building"` keeps dashboard tabs, filters, and visualizations visible beneath an overlay
|
|
263
|
+
* and blocks their mouse and keyboard interaction without loading skeletons. The top bar,
|
|
264
|
+
* sidebar, and external assistant panels remain interactive.
|
|
265
|
+
* `undefined` or `null` disables AI mode.
|
|
268
266
|
*
|
|
269
|
-
* @
|
|
270
|
-
* This flag indicates that an AI process has started generating the dashboard content but
|
|
271
|
-
* has not yet finished. It can be used to trigger loading states (like skeletons or progress
|
|
272
|
-
* indicators) and to allow users to cancel the generation process before it completes.
|
|
267
|
+
* @internal
|
|
273
268
|
*/
|
|
274
|
-
|
|
269
|
+
aiMode?: "active" | "generating" | "waiting" | "building" | null;
|
|
275
270
|
/**
|
|
276
|
-
*
|
|
277
|
-
* Specifies if AI is waiting for user input before it can continue.
|
|
271
|
+
* Current AI reasoning title shown while the dashboard is generating or building.
|
|
278
272
|
*
|
|
279
273
|
* @remarks
|
|
280
|
-
*
|
|
281
|
-
*
|
|
274
|
+
* Provide only the title, not the reasoning body. The title is rendered as plain text,
|
|
275
|
+
* without interpreting HTML or Markdown. The waiting-for-input message takes precedence
|
|
276
|
+
* while AI is waiting. Updating this value updates the status without reinitializing the
|
|
277
|
+
* dashboard; setting it to `undefined` clears the title.
|
|
278
|
+
*
|
|
279
|
+
* @public
|
|
282
280
|
*/
|
|
283
|
-
|
|
281
|
+
aiReasoningTitle?: string;
|
|
284
282
|
/**
|
|
285
283
|
* @internal
|
|
286
284
|
* Identifier of the export
|
|
@@ -468,7 +466,7 @@ export interface IDashboardFocusObject {
|
|
|
468
466
|
*
|
|
469
467
|
* @public
|
|
470
468
|
*/
|
|
471
|
-
export type ResolvedDashboardConfig = Omit<Required<DashboardConfig>, "mapboxToken" | "agGridToken" | "maxZoomLevel" | "exportId" | "exportType" | "exportMetadata" | "focusObject" | "slideConfig" | "references" | "entitlements" | "initialContent" | "executionTimestamp" | "user" | "overrideDefaultFilters" | "overrideDefaultParameters" | "overrideTitle" | "hideWidgetTitles" | "workspaceDescriptor" | "evaluationFrequency" | "externalRecipient" | "openAutomationOnLoad" | "hideAddTabButton"> & DashboardConfig;
|
|
469
|
+
export type ResolvedDashboardConfig = Omit<Required<DashboardConfig>, "mapboxToken" | "agGridToken" | "maxZoomLevel" | "exportId" | "exportType" | "exportMetadata" | "focusObject" | "slideConfig" | "references" | "entitlements" | "initialContent" | "executionTimestamp" | "user" | "overrideDefaultFilters" | "overrideDefaultParameters" | "overrideTitle" | "hideWidgetTitles" | "workspaceDescriptor" | "evaluationFrequency" | "externalRecipient" | "openAutomationOnLoad" | "hideAddTabButton" | "aiMode" | "aiReasoningTitle"> & DashboardConfig;
|
|
472
470
|
/**
|
|
473
471
|
*
|
|
474
472
|
* @beta
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commonTypes.d.ts","sourceRoot":"","sources":["../../../src/model/types/commonTypes.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,kBAAkB,EAAE,KAAK,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAC/F,OAAO,EACH,KAAK,iBAAiB,EACtB,KAAK,aAAa,EAClB,KAAK,UAAU,EACf,KAAK,gBAAgB,EACrB,KAAK,mBAAmB,EACxB,KAAK,iBAAiB,EACtB,KAAK,sBAAsB,EAC3B,KAAK,QAAQ,EACb,KAAK,mBAAmB,EACxB,KAAK,WAAW,EAChB,KAAK,SAAS,EACd,KAAK,KAAK,EACV,KAAK,UAAU,EACf,KAAK,MAAM,EACd,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAEhD,OAAO,EAAE,KAAK,gBAAgB,EAAE,KAAK,0BAA0B,EAAE,KAAK,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAEzG,OAAO,EAAE,KAAK,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAEhE;;;;;;;;;;;GAWG;AACH,MAAM,MAAM,wBAAwB,GAAG;IACnC;;;;;OAKG;IACH,sBAAsB,CAAC,EAAE,MAAM,EAAE,CAAC;IAElC;;;;;;;OAOG;IACH,sBAAsB,CAAC,EAAE,MAAM,EAAE,CAAC;CACrC,CAAC;AAEF;;;;GAIG;AACH,MAAM,MAAM,aAAa,GAAG,0BAA0B,GAAG,iCAAiC,CAAC;AAE3F;;;;GAIG;AACH,MAAM,MAAM,0BAA0B,GAAG;IACrC,aAAa,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,IAAI,0BAA0B,CAE9F;AAED;;;;GAIG;AACH,MAAM,MAAM,iCAAiC,GAAG;IAC5C,oBAAoB,EAAE,QAAQ,CAAC;CAClC,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,mCAAmC,CAC/C,IAAI,EAAE,OAAO,GACd,IAAI,IAAI,iCAAiC,CAE3C;AAED;;;;GAIG;AACH,MAAM,MAAM,eAAe,GAAG;IAC1B;;OAEG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IAEjB;;OAEG;IACH,UAAU,CAAC,EAAE,WAAW,CAAC;IAEzB;;OAEG;IACH,QAAQ,CAAC,EAAE,SAAS,CAAC;IAErB;;;;OAIG;IACH,IAAI,CAAC,EAAE,KAAK,CAAC;IAEb;;;;;;OAMG;IACH,gBAAgB,CAAC,EAAE,iBAAiB,CAAC;IAErC;;;;;;;;;;;;;;;OAeG;IACH,sBAAsB,CAAC,EAAE,iBAAiB,EAAE,CAAC;IAE7C;;;;;;;OAOG;IACH,yBAAyB,CAAC,EAAE,mBAAmB,EAAE,CAAC;IAElD;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB;;OAEG;IACH,YAAY,CAAC,EAAE,aAAa,CAAC;IAE7B;;;OAGG;IACH,kBAAkB,CAAC,EAAE,wBAAwB,CAAC;IAE9C;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;;;;;OAMG;IACH,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAE7B;;;;;;;;OAQG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB;;;;;;;;OAQG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB;;;OAGG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IAEzB;;;;;;;;OAQG;IACH,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAE/B;;;;;OAKG;IACH,yCAAyC,CAAC,EAAE,OAAO,CAAC;IAEpD;;;OAGG;IACH,yBAAyB,CAAC,EAAE,0BAA0B,CAAC;IAEvD;;;;;OAKG;IACH,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAElC;;;OAGG;IACH,yBAAyB,CAAC,EAAE,OAAO,CAAC;IAEpC;;;;;OAKG;IACH,iBAAiB,CAAC,EAAE,UAAU,CAAC;IAE/B;;;OAGG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAE9B;;;OAGG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAE1B;;;OAGG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAE3B;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,uBAAuB,CAAC,CAAC;IAEzD
|
|
1
|
+
{"version":3,"file":"commonTypes.d.ts","sourceRoot":"","sources":["../../../src/model/types/commonTypes.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { type ReactElement } from "react";
|
|
2
|
+
import { type ContainerProps } from "react-select";
|
|
3
|
+
import { type IAutomationRecipient } from "@gooddata/sdk-model";
|
|
4
|
+
/**
|
|
5
|
+
* React-select 5.x renders its hidden live region as the first child; rendering it last keeps screen readers
|
|
6
|
+
* from stopping on it between the field label and the recipients. Guarded by RecipientsSelect.test.tsx.
|
|
7
|
+
*/
|
|
8
|
+
export declare function LiveRegionLastSelectContainer(props: ContainerProps<IAutomationRecipient, boolean>): ReactElement;
|
|
9
|
+
//# sourceMappingURL=LiveRegionLastSelectContainer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LiveRegionLastSelectContainer.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/components/RecipientsSelect/LiveRegionLastSelectContainer.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAY,KAAK,YAAY,EAAE,MAAM,OAAO,CAAC;AAEpD,OAAO,EAAE,KAAK,cAAc,EAAc,MAAM,cAAc,CAAC;AAE/D,OAAO,EAAE,KAAK,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAEhE;;;GAGG;AACH,wBAAgB,6BAA6B,CACzC,KAAK,EAAE,cAAc,CAAC,oBAAoB,EAAE,OAAO,CAAC,GACrD,YAAY,CASd"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
// (C) 2026 GoodData Corporation
|
|
3
|
+
import { Children } from "react";
|
|
4
|
+
import { components } from "react-select";
|
|
5
|
+
/**
|
|
6
|
+
* React-select 5.x renders its hidden live region as the first child; rendering it last keeps screen readers
|
|
7
|
+
* from stopping on it between the field label and the recipients. Guarded by RecipientsSelect.test.tsx.
|
|
8
|
+
*/
|
|
9
|
+
export function LiveRegionLastSelectContainer(props) {
|
|
10
|
+
const [liveRegion, ...rest] = Children.toArray(props.children);
|
|
11
|
+
return (_jsxs(components.SelectContainer, { ...props, children: [rest, liveRegion] }));
|
|
12
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RecipientsSelect.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/components/RecipientsSelect/RecipientsSelect.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,aAAa,EAAW,MAAM,OAAO,CAAC;AAIpD,OAAO,EACH,KAAK,oBAAoB,EACzB,KAAK,8BAA8B,EACnC,KAAK,kCAAkC,EAC1C,MAAM,qBAAqB,CAAC;AAU7B,UAAU,sBAAsB;IAC5B;;OAEG;IACH,KAAK,EAAE,oBAAoB,EAAE,CAAC;IAE9B;;OAEG;IACH,QAAQ,EAAE,CAAC,eAAe,EAAE,oBAAoB,EAAE,KAAK,IAAI,CAAC;IAE5D;;OAEG;IACH,UAAU,CAAC,EAAE,oBAAoB,CAAC;IAElC;;OAEG;IACH,6BAA6B,CAAC,EAAE,OAAO,CAAC;IACxC;;OAEG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAE9B;;OAEG;IACH,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAElC;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,oBAAoB,CAAC,EAAE,8BAA8B,EAAE,GAAG,kCAAkC,EAAE,CAAC;IAE/F;;OAEG;IACH,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAE/B;;OAEG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB;;OAEG;IACH,EAAE,EAAE,MAAM,CAAC;IAEX;;OAEG;IACH,eAAe,CAAC,EAAE,CAAC,CAAC,EAAE,aAAa,KAAK,IAAI,CAAC;IAE7C;;OAEG;IACH,yBAAyB,CAAC,EAAE,MAAM,CAAC;CACtC;AAED,wBAAgB,gBAAgB,CAAC,EAC7B,EAAE,EACF,KAAK,EACL,QAAQ,EACR,UAAU,EACV,mBAAmB,EACnB,uBAAuB,EACvB,6BAA6B,EAC7B,aAAa,EACb,SAAS,EACT,oBAAoB,EACpB,qBAAqB,EACrB,SAAgB,EAChB,eAAe,EACf,yBAAyB,GAC5B,EAAE,sBAAsB,
|
|
1
|
+
{"version":3,"file":"RecipientsSelect.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/components/RecipientsSelect/RecipientsSelect.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,aAAa,EAAW,MAAM,OAAO,CAAC;AAIpD,OAAO,EACH,KAAK,oBAAoB,EACzB,KAAK,8BAA8B,EACnC,KAAK,kCAAkC,EAC1C,MAAM,qBAAqB,CAAC;AAU7B,UAAU,sBAAsB;IAC5B;;OAEG;IACH,KAAK,EAAE,oBAAoB,EAAE,CAAC;IAE9B;;OAEG;IACH,QAAQ,EAAE,CAAC,eAAe,EAAE,oBAAoB,EAAE,KAAK,IAAI,CAAC;IAE5D;;OAEG;IACH,UAAU,CAAC,EAAE,oBAAoB,CAAC;IAElC;;OAEG;IACH,6BAA6B,CAAC,EAAE,OAAO,CAAC;IACxC;;OAEG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAE9B;;OAEG;IACH,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAElC;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,oBAAoB,CAAC,EAAE,8BAA8B,EAAE,GAAG,kCAAkC,EAAE,CAAC;IAE/F;;OAEG;IACH,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAE/B;;OAEG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB;;OAEG;IACH,EAAE,EAAE,MAAM,CAAC;IAEX;;OAEG;IACH,eAAe,CAAC,EAAE,CAAC,CAAC,EAAE,aAAa,KAAK,IAAI,CAAC;IAE7C;;OAEG;IACH,yBAAyB,CAAC,EAAE,MAAM,CAAC;CACtC;AAED,wBAAgB,gBAAgB,CAAC,EAC7B,EAAE,EACF,KAAK,EACL,QAAQ,EACR,UAAU,EACV,mBAAmB,EACnB,uBAAuB,EACvB,6BAA6B,EAC7B,aAAa,EACb,SAAS,EACT,oBAAoB,EACpB,qBAAqB,EACrB,SAAgB,EAChB,eAAe,EACf,yBAAyB,GAC5B,EAAE,sBAAsB,2CAwExB"}
|
|
@@ -5,7 +5,7 @@ import { sortBy } from "lodash-es";
|
|
|
5
5
|
import { DETAILED_ANNOUNCEMENT_THRESHOLD, UiSearchResultsAnnouncement } from "@gooddata/sdk-ui-kit";
|
|
6
6
|
import { useWorkspaceUsersSearch } from "../../../../shared/hooks/useWorkspaceUsersSearch.js";
|
|
7
7
|
import { convertUserToAutomationRecipient } from "../../../../shared/utils/automationUtils.js";
|
|
8
|
-
import { createUser, matchRecipient } from "../../../utils/users.js";
|
|
8
|
+
import { createUser, getRecipientLabel, matchRecipient } from "../../../utils/users.js";
|
|
9
9
|
import { isEmail } from "../../../utils/validate.js";
|
|
10
10
|
import { RecipientsSelectRenderer } from "./RecipientsSelectRenderer.js";
|
|
11
11
|
export function RecipientsSelect({ id, value, onChange, loggedUser, allowEmptySelection, allowExternalRecipients, allowOnlyLoggedUserRecipients, maxRecipients, className, notificationChannels, notificationChannelId, showLabel = true, onKeyDownSubmit, externalRecipientOverride, }) {
|
|
@@ -37,6 +37,6 @@ export function RecipientsSelect({ id, value, onChange, loggedUser, allowEmptySe
|
|
|
37
37
|
externalRecipientOverride,
|
|
38
38
|
]);
|
|
39
39
|
const hasSettledResults = !isLoading && (isServerSearch ? users !== undefined : Boolean(search));
|
|
40
|
-
const announcedResultValues = useMemo(() => options.slice(0, DETAILED_ANNOUNCEMENT_THRESHOLD).map(
|
|
41
|
-
return (_jsxs(_Fragment, { children: [_jsx(
|
|
40
|
+
const announcedResultValues = useMemo(() => options.slice(0, DETAILED_ANNOUNCEMENT_THRESHOLD).map(getRecipientLabel), [options]);
|
|
41
|
+
return (_jsxs(_Fragment, { children: [_jsx(RecipientsSelectRenderer, { id: id, canListUsersInProject: true, isMulti: true, options: options, value: value, onChange: onChange, onSearch: onSearch, onActivate: onActivate, isLoading: isLoading, loggedUser: loggedUser, allowOnlyLoggedUserRecipients: allowOnlyLoggedUserRecipients, allowEmptySelection: allowEmptySelection, allowExternalRecipients: allowExternalRecipients, maxRecipients: maxRecipients, className: className, notificationChannel: notificationChannel, usersError: usersError, showLabel: showLabel, onKeyDownSubmit: onKeyDownSubmit, externalRecipientOverride: externalRecipientOverride }), _jsx(UiSearchResultsAnnouncement, { totalResults: hasSettledResults ? options.length : undefined, resultValues: announcedResultValues })] }));
|
|
42
42
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RecipientsSelectRenderer.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/components/RecipientsSelect/RecipientsSelectRenderer.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,aAAa,EAAqE,MAAM,OAAO,CAAC;AAiB9G,OAAO,EACH,KAAK,oBAAoB,EACzB,KAAK,8BAA8B,EACnC,KAAK,kCAAkC,EAE1C,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACH,KAAK,gBAAgB,EAKxB,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"RecipientsSelectRenderer.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/components/RecipientsSelect/RecipientsSelectRenderer.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,aAAa,EAAqE,MAAM,OAAO,CAAC;AAiB9G,OAAO,EACH,KAAK,oBAAoB,EACzB,KAAK,8BAA8B,EACnC,KAAK,kCAAkC,EAE1C,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACH,KAAK,gBAAgB,EAKxB,MAAM,kBAAkB,CAAC;AAkG1B,MAAM,WAAW,8BAA8B;IAC3C;;OAEG;IACH,KAAK,EAAE,oBAAoB,EAAE,CAAC;IAE9B;;OAEG;IACH,OAAO,EAAE,oBAAoB,EAAE,CAAC;IAEhC;;OAEG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB;;OAEG;IACH,QAAQ,CAAC,EAAE,CAAC,aAAa,EAAE,oBAAoB,EAAE,KAAK,IAAI,CAAC;IAE3D;;OAEG;IACH,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAEnC;;OAEG;IACH,UAAU,EAAE,MAAM,IAAI,CAAC;IAEvB;;OAEG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB;;OAEG;IACH,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAE9B;;OAEG;IACH,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAEhC;;OAEG;IACH,UAAU,CAAC,EAAE,oBAAoB,CAAC;IAElC;;OAEG;IACH,6BAA6B,CAAC,EAAE,OAAO,CAAC;IAExC;;OAEG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAE9B;;OAEG;IACH,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAElC;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,mBAAmB,CAAC,EAAE,8BAA8B,GAAG,kCAAkC,CAAC;IAE1F;;OAEG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB;;OAEG;IACH,EAAE,EAAE,MAAM,CAAC;IAEX;;OAEG;IACH,eAAe,CAAC,EAAE,CAAC,CAAC,EAAE,aAAa,KAAK,IAAI,CAAC;IAE7C;;OAEG;IACH,yBAAyB,CAAC,EAAE,MAAM,CAAC;CACtC;AAQD,eAAO,MAAM,wBAAwB,8CAC1B,8BAA8B,6CAmwBvC,CAAC"}
|
|
@@ -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 {
|
|
@@ -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;AAkF1C,wBAAgB,oBAAoB,mDAOnC;AAID,wBAAgB,eAAe,IAAI,YAAY,CA6B9C"}
|
|
@@ -21,6 +21,7 @@ import { useTopBarProps } from "../../topBar/topBar/DefaultTopBar.js";
|
|
|
21
21
|
import { TopBar } from "../../topBar/topBar/TopBar.js";
|
|
22
22
|
import { useWidgetDeleteDialogProps } from "../../widgetDeleteDialog/DefaultWidgetDeleteDialog.js";
|
|
23
23
|
import { WidgetDeleteDialog } from "../../widgetDeleteDialog/WidgetDeleteDialog.js";
|
|
24
|
+
import { DashboardInteractionLock } from "../components/DashboardInteractionLock.js";
|
|
24
25
|
import { ToastMessages } from "../components/ToastMessages.js";
|
|
25
26
|
import { AlertingDialogProvider } from "./AlertingDialogProvider.js";
|
|
26
27
|
import { DashboardTabs, useDashboardTabsProps } from "./DashboardTabs.js";
|
|
@@ -76,5 +77,5 @@ export function DashboardTabsWrapper() {
|
|
|
76
77
|
// split the header parts of the dashboard so that changes to their state
|
|
77
78
|
// (e.g. opening email dialog) do not re-render the dashboard body
|
|
78
79
|
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, {})] }));
|
|
80
|
+
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
81
|
}
|
|
@@ -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":"AAsCA,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,aAAa,CAAC;AASnD,wBAAgB,cAAc,CAAC,KAAK,EAAE,eAAe,2CAiHpD"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
// (C) 2022-2026 GoodData Corporation
|
|
3
3
|
import { useEffect, useRef } from "react";
|
|
4
4
|
import cx from "classnames";
|
|
@@ -7,7 +7,7 @@ import { useDashboardSelector } from "../../../model/react/DashboardStoreProvide
|
|
|
7
7
|
import { useDashboardAutomations } from "../../../model/react/useDashboardAutomations/useDashboardAutomations.js";
|
|
8
8
|
import { selectAccessibleDashboardsLoaded } from "../../../model/store/accessibleDashboards/accessibleDashboardsSelectors.js";
|
|
9
9
|
import { selectCatalogIsLoaded } from "../../../model/store/catalog/catalogSelectors.js";
|
|
10
|
-
import {
|
|
10
|
+
import { selectLocale, selectSettings } from "../../../model/store/config/configSelectors.js";
|
|
11
11
|
import { selectIsInEditMode } from "../../../model/store/renderMode/renderModeSelectors.js";
|
|
12
12
|
import { selectDashboardDensity } from "../../../model/store/ui/uiSelectors.js";
|
|
13
13
|
import { DASHBOARD_HEADER_OVERLAYS_Z_INDEX, DASHBOARD_TOASTS_OVERLAY_Z_INDEX, } from "../../constants/zIndex.js";
|
|
@@ -24,8 +24,9 @@ import { DashboardHeader } from "../DashboardHeader/DashboardHeader.js";
|
|
|
24
24
|
import { DashboardSidebar } from "../DashboardSidebar/DashboardSidebar.js";
|
|
25
25
|
import { RenderModeAwareDashboardSidebar } from "../DashboardSidebar/RenderModeAwareDashboardSidebar.js";
|
|
26
26
|
import { useResizableSidebarState } from "../DashboardSidebar/useResizableSidebarState.js";
|
|
27
|
+
import { DashboardInteractionComposing } from "./DashboardInteractionComposing.js";
|
|
28
|
+
import { DashboardInteractionLock } from "./DashboardInteractionLock.js";
|
|
27
29
|
import { DashboardScreenSizeProvider } from "./DashboardScreenSizeContext.js";
|
|
28
|
-
import { DashboardSkeleton } from "./DashboardSkeleton.js";
|
|
29
30
|
const overlayController = OverlayController.getInstance(DASHBOARD_HEADER_OVERLAYS_Z_INDEX);
|
|
30
31
|
const toastsOverlayController = OverlayController.getInstance(DASHBOARD_TOASTS_OVERLAY_Z_INDEX);
|
|
31
32
|
export function DashboardInner(props) {
|
|
@@ -35,7 +36,6 @@ export function DashboardInner(props) {
|
|
|
35
36
|
const accessibleDashboardsLoaded = useDashboardSelector(selectAccessibleDashboardsLoaded);
|
|
36
37
|
const density = useDashboardSelector(selectDashboardDensity);
|
|
37
38
|
const settings = useDashboardSelector(selectSettings);
|
|
38
|
-
const isAiLoading = useDashboardSelector(selectIsAiLoading);
|
|
39
39
|
const enableEnhancedInsightPicker = settings?.enableEnhancedInsightPicker ?? false;
|
|
40
40
|
const headerRef = useRef(null);
|
|
41
41
|
const layoutRef = useRef(null);
|
|
@@ -75,6 +75,5 @@ export function DashboardInner(props) {
|
|
|
75
75
|
"accessible-dashboards-loaded": accessibleDashboardsLoaded,
|
|
76
76
|
}), children: [_jsx(DragLayerComponent, {}), _jsxs("div", { className: cx("gd-dashboards-root gd-flex-container", {
|
|
77
77
|
"gd-dashboards-root--floating-toolbar": enableEnhancedInsightPicker,
|
|
78
|
-
|
|
79
|
-
}), style: dashboardsRootStyle, children: [_jsx(DashboardSidebar, { DefaultSidebar: RenderModeAwareDashboardSidebar, DeleteDropZoneComponent: DeleteDropZone, WrapCreatePanelItemWithDragComponent: WrapCreatePanelItemWithDrag, WrapInsightListItemWithDragComponent: WrapInsightListItemWithDrag }), _jsxs("main", { className: dashboardContentClassNames, ...mainContentNavigationProps, children: [_jsx("div", { className: "gd-dash-header-wrapper gd-dash-header-wrapper-sdk-8-12", ref: headerRef, children: _jsx(OverlayControllerProvider, { overlayController: overlayController, children: _jsx(DashboardHeader, {}) }) }), isAiLoading ? (_jsx("div", { className: "gd-flex-item-stretch dash-section dash-section-kpis", children: _jsx(DashboardScreenSizeProvider, { children: _jsx(DashboardSkeleton, {}) }) })) : (_jsxs(_Fragment, { children: [_jsxs("div", { className: "gd-flex-item-stretch dash-section dash-section-kpis", ref: layoutRef, children: [_jsx(DashboardScreenSizeProvider, { children: _jsx(DashboardContent, { ...props }) }), enableEnhancedInsightPicker ? _jsx(FilterDeleteOverlay, {}) : null] }), _jsx("div", { className: "gd-dash-bottom-position-pixel", ref: bottomRef })] }))] })] }), _jsx(Toolbar, {})] }) })] }) }));
|
|
78
|
+
}), style: dashboardsRootStyle, children: [_jsx(DashboardSidebar, { DefaultSidebar: RenderModeAwareDashboardSidebar, DeleteDropZoneComponent: DeleteDropZone, WrapCreatePanelItemWithDragComponent: WrapCreatePanelItemWithDrag, WrapInsightListItemWithDragComponent: WrapInsightListItemWithDrag }), _jsx("main", { className: dashboardContentClassNames, ...mainContentNavigationProps, children: _jsxs(DashboardInteractionComposing, { children: [_jsx("div", { className: "gd-dash-header-wrapper gd-dash-header-wrapper-sdk-8-12", ref: headerRef, children: _jsx(OverlayControllerProvider, { overlayController: overlayController, children: _jsx(DashboardHeader, {}) }) }), _jsxs(DashboardInteractionLock, { children: [_jsxs("div", { className: "gd-flex-item-stretch dash-section dash-section-kpis", ref: layoutRef, children: [_jsx(DashboardScreenSizeProvider, { children: _jsx(DashboardContent, { ...props }) }), enableEnhancedInsightPicker ? _jsx(FilterDeleteOverlay, {}) : null] }), _jsx("div", { className: "gd-dash-bottom-position-pixel", ref: bottomRef })] })] }) })] }), _jsx(Toolbar, {})] }) })] }) }));
|
|
80
79
|
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { type ReactNode } from "react";
|
|
2
|
+
interface IDashboardInteractionComposingProps {
|
|
3
|
+
children: ReactNode;
|
|
4
|
+
}
|
|
5
|
+
export declare function DashboardInteractionComposing({ children }: IDashboardInteractionComposingProps): import("react/jsx-runtime").JSX.Element;
|
|
6
|
+
export {};
|
|
7
|
+
//# sourceMappingURL=DashboardInteractionComposing.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DashboardInteractionComposing.d.ts","sourceRoot":"","sources":["../../../../src/presentation/dashboard/components/DashboardInteractionComposing.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAevC,UAAU,mCAAmC;IACzC,QAAQ,EAAE,SAAS,CAAC;CACvB;AAED,wBAAgB,6BAA6B,CAAC,EAAE,QAAQ,EAAE,EAAE,mCAAmC,2CAiC9F"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import cx from "classnames";
|
|
3
|
+
import { FormattedMessage } from "react-intl";
|
|
4
|
+
import { useDashboardSelector } from "../../../model/react/DashboardStoreProvider.js";
|
|
5
|
+
import { selectAiReasoningTitle, selectIsAiBuilding, selectIsAiGenerating, selectIsAiWaiting, } from "../../../model/store/config/configSelectors.js";
|
|
6
|
+
import { DashboardAiComposingOverlay } from "./DashboardAiComposingOverlay.js";
|
|
7
|
+
export function DashboardInteractionComposing({ children }) {
|
|
8
|
+
const isAiGenerating = useDashboardSelector(selectIsAiGenerating);
|
|
9
|
+
const isAiBuilding = useDashboardSelector(selectIsAiBuilding);
|
|
10
|
+
const isAiWaiting = useDashboardSelector(selectIsAiWaiting);
|
|
11
|
+
const aiReasoningTitle = useDashboardSelector(selectAiReasoningTitle);
|
|
12
|
+
const isAiActive = isAiBuilding || isAiWaiting || isAiGenerating;
|
|
13
|
+
const showReasoningTitle = (isAiGenerating || isAiBuilding) && !!aiReasoningTitle;
|
|
14
|
+
const showStatus = isAiWaiting || showReasoningTitle;
|
|
15
|
+
return (_jsxs(_Fragment, { children: [children, isAiActive ? (_jsx("div", { children: _jsx(DashboardAiComposingOverlay, { isWaiting: isAiWaiting }) })) : null, _jsx("div", { className: cx("gd-dashboard-interaction-composing__status", {
|
|
16
|
+
hidden: !showStatus,
|
|
17
|
+
}), role: showStatus ? "status" : undefined, "aria-hidden": !showStatus, children: isAiWaiting || !showReasoningTitle ? (_jsx(FormattedMessage, { id: "dashboard.ai.composing.waiting" })) : (aiReasoningTitle) })] }));
|
|
18
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { type ReactNode } from "react";
|
|
2
|
+
interface IDashboardInteractionLockProps {
|
|
3
|
+
className?: string;
|
|
4
|
+
children: ReactNode;
|
|
5
|
+
}
|
|
6
|
+
export declare function DashboardInteractionLock({ className, children }: IDashboardInteractionLockProps): import("react/jsx-runtime").JSX.Element;
|
|
7
|
+
export {};
|
|
8
|
+
//# sourceMappingURL=DashboardInteractionLock.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DashboardInteractionLock.d.ts","sourceRoot":"","sources":["../../../../src/presentation/dashboard/components/DashboardInteractionLock.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,SAAS,EAA2B,MAAM,OAAO,CAAC;AAOhE,UAAU,8BAA8B;IACpC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,SAAS,CAAC;CACvB;AAED,wBAAgB,wBAAwB,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,8BAA8B,2CAiC/F"}
|