@gooddata/sdk-ui-dashboard 11.51.0-alpha.2 → 11.51.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.
Files changed (179) hide show
  1. package/esm/__version.d.ts +1 -1
  2. package/esm/__version.js +1 -1
  3. package/esm/assets/timezone.svg +1 -0
  4. package/esm/index.d.ts +6 -2
  5. package/esm/index.d.ts.map +1 -1
  6. package/esm/index.js +5 -2
  7. package/esm/model/react/useWidgetExecConfig.d.ts +9 -0
  8. package/esm/model/react/useWidgetExecConfig.d.ts.map +1 -1
  9. package/esm/model/react/useWidgetExecConfig.js +21 -3
  10. package/esm/model/store/config/configSelectors.d.ts +6 -0
  11. package/esm/model/store/config/configSelectors.d.ts.map +1 -1
  12. package/esm/model/store/config/configSelectors.js +8 -0
  13. package/esm/model/store/meta/metaSelectors.d.ts +12 -0
  14. package/esm/model/store/meta/metaSelectors.d.ts.map +1 -1
  15. package/esm/model/store/meta/metaSelectors.js +19 -1
  16. package/esm/presentation/automations/connectors/ScheduledEmailConnector.d.ts.map +1 -1
  17. package/esm/presentation/automations/connectors/ScheduledEmailConnector.js +30 -32
  18. package/esm/presentation/automations/connectors/ScheduledEmailConnector.test.js +90 -9
  19. package/esm/presentation/automations/connectors/hooks/useBuildScheduledEmailDialogContext.d.ts +8 -1
  20. package/esm/presentation/automations/connectors/hooks/useBuildScheduledEmailDialogContext.d.ts.map +1 -1
  21. package/esm/presentation/automations/connectors/hooks/useBuildScheduledEmailDialogContext.js +12 -3
  22. package/esm/presentation/automations/connectors/hooks/useBuildScheduledEmailDialogContext.test.js +38 -8
  23. package/esm/presentation/automations/connectors/hooks/useBuildScheduledEmailManagementDialogContext.d.ts +6 -1
  24. package/esm/presentation/automations/connectors/hooks/useBuildScheduledEmailManagementDialogContext.d.ts.map +1 -1
  25. package/esm/presentation/automations/connectors/hooks/useBuildScheduledEmailManagementDialogContext.js +6 -1
  26. package/esm/presentation/automations/connectors/hooks/useBuildScheduledEmailManagementDialogContext.test.js +7 -1
  27. package/esm/presentation/automations/contexts/ScheduledEmailDialogContext.d.ts +22 -3
  28. package/esm/presentation/automations/contexts/ScheduledEmailDialogContext.d.ts.map +1 -1
  29. package/esm/presentation/automations/contexts/ScheduledEmailDialogContext.js +3 -2
  30. package/esm/presentation/automations/contexts/ScheduledEmailManagementDialogContext.d.ts +9 -2
  31. package/esm/presentation/automations/contexts/ScheduledEmailManagementDialogContext.d.ts.map +1 -1
  32. package/esm/presentation/automations/contexts/ScheduledEmailManagementDialogContext.js +2 -2
  33. package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/DefaultLoadingScheduledEmailDialog.d.ts +7 -2
  34. package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/DefaultLoadingScheduledEmailDialog.d.ts.map +1 -1
  35. package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/DefaultScheduledEmailDialog.d.ts +1 -1
  36. package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/DefaultScheduledEmailDialog.d.ts.map +1 -1
  37. package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/DefaultScheduledEmailDialog.js +9 -11
  38. package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/hooks/useEditScheduledEmail.d.ts +6 -12
  39. package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/hooks/useEditScheduledEmail.d.ts.map +1 -1
  40. package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/hooks/useEditScheduledEmail.js +5 -1
  41. package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailManagementDialog/DefaultScheduledEmailManagementDialog.d.ts +1 -1
  42. package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailManagementDialog/DefaultScheduledEmailManagementDialog.d.ts.map +1 -1
  43. package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailManagementDialog/DefaultScheduledEmailManagementDialog.js +2 -2
  44. package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailManagementDialog/DefaultScheduledEmailManagementDialogContent.d.ts +1 -3
  45. package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailManagementDialog/DefaultScheduledEmailManagementDialogContent.d.ts.map +1 -1
  46. package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailManagementDialog/DefaultScheduledEmailManagementDialogContent.js +2 -2
  47. package/esm/presentation/automations/scheduledEmail/types.d.ts +35 -5
  48. package/esm/presentation/automations/scheduledEmail/types.d.ts.map +1 -1
  49. package/esm/presentation/dashboard/components/DashboardLoading.js +1 -1
  50. package/esm/presentation/dashboardContexts/useSlideData.d.ts +5 -10
  51. package/esm/presentation/dashboardContexts/useSlideData.d.ts.map +1 -1
  52. package/esm/presentation/dashboardContexts/useSlideData.js +16 -10
  53. package/esm/presentation/flexibleLayout/DefaultDashboardLayoutRenderer/DashboardLayoutSection.d.ts.map +1 -1
  54. package/esm/presentation/flexibleLayout/DefaultDashboardLayoutRenderer/DashboardLayoutSection.js +29 -8
  55. package/esm/presentation/flexibleLayout/DefaultDashboardLayoutRenderer/DashboardLayoutSectionHeaderDescription.d.ts.map +1 -1
  56. package/esm/presentation/flexibleLayout/DefaultDashboardLayoutRenderer/DashboardLayoutSectionHeaderDescription.js +3 -5
  57. package/esm/presentation/flexibleLayout/DefaultDashboardLayoutRenderer/EditableHeader/SectionHeaderEditable.d.ts.map +1 -1
  58. package/esm/presentation/flexibleLayout/DefaultDashboardLayoutRenderer/EditableHeader/SectionHeaderEditable.js +3 -5
  59. package/esm/presentation/flexibleLayout/DefaultDashboardLayoutRenderer/ExportableDashboardLayoutSectionRenderer.d.ts +1 -1
  60. package/esm/presentation/flexibleLayout/DefaultDashboardLayoutRenderer/ExportableDashboardLayoutSectionRenderer.d.ts.map +1 -1
  61. package/esm/presentation/flexibleLayout/DefaultDashboardLayoutRenderer/ExportableDashboardLayoutSectionRenderer.js +2 -5
  62. package/esm/presentation/insightList/InsightList.d.ts.map +1 -1
  63. package/esm/presentation/insightList/InsightList.js +4 -5
  64. package/esm/presentation/localization/bundles/de-DE.localization-bundle.d.ts +11 -0
  65. package/esm/presentation/localization/bundles/de-DE.localization-bundle.d.ts.map +1 -1
  66. package/esm/presentation/localization/bundles/de-DE.localization-bundle.js +11 -0
  67. package/esm/presentation/localization/bundles/en-AU.localization-bundle.d.ts +11 -0
  68. package/esm/presentation/localization/bundles/en-AU.localization-bundle.d.ts.map +1 -1
  69. package/esm/presentation/localization/bundles/en-AU.localization-bundle.js +11 -0
  70. package/esm/presentation/localization/bundles/en-GB.localization-bundle.d.ts +11 -0
  71. package/esm/presentation/localization/bundles/en-GB.localization-bundle.d.ts.map +1 -1
  72. package/esm/presentation/localization/bundles/en-GB.localization-bundle.js +11 -0
  73. package/esm/presentation/localization/bundles/en-US.localization-bundle.d.ts +4 -0
  74. package/esm/presentation/localization/bundles/en-US.localization-bundle.d.ts.map +1 -1
  75. package/esm/presentation/localization/bundles/en-US.localization-bundle.js +4 -0
  76. package/esm/presentation/localization/bundles/es-419.localization-bundle.d.ts +11 -0
  77. package/esm/presentation/localization/bundles/es-419.localization-bundle.d.ts.map +1 -1
  78. package/esm/presentation/localization/bundles/es-419.localization-bundle.js +11 -0
  79. package/esm/presentation/localization/bundles/es-ES.localization-bundle.d.ts +11 -0
  80. package/esm/presentation/localization/bundles/es-ES.localization-bundle.d.ts.map +1 -1
  81. package/esm/presentation/localization/bundles/es-ES.localization-bundle.js +11 -0
  82. package/esm/presentation/localization/bundles/fi-FI.localization-bundle.d.ts +11 -0
  83. package/esm/presentation/localization/bundles/fi-FI.localization-bundle.d.ts.map +1 -1
  84. package/esm/presentation/localization/bundles/fi-FI.localization-bundle.js +11 -0
  85. package/esm/presentation/localization/bundles/fr-CA.localization-bundle.d.ts +11 -0
  86. package/esm/presentation/localization/bundles/fr-CA.localization-bundle.d.ts.map +1 -1
  87. package/esm/presentation/localization/bundles/fr-CA.localization-bundle.js +11 -0
  88. package/esm/presentation/localization/bundles/fr-FR.localization-bundle.d.ts +11 -0
  89. package/esm/presentation/localization/bundles/fr-FR.localization-bundle.d.ts.map +1 -1
  90. package/esm/presentation/localization/bundles/fr-FR.localization-bundle.js +11 -0
  91. package/esm/presentation/localization/bundles/id-ID.localization-bundle.d.ts +11 -0
  92. package/esm/presentation/localization/bundles/id-ID.localization-bundle.d.ts.map +1 -1
  93. package/esm/presentation/localization/bundles/id-ID.localization-bundle.js +11 -0
  94. package/esm/presentation/localization/bundles/it-IT.localization-bundle.d.ts +11 -0
  95. package/esm/presentation/localization/bundles/it-IT.localization-bundle.d.ts.map +1 -1
  96. package/esm/presentation/localization/bundles/it-IT.localization-bundle.js +11 -0
  97. package/esm/presentation/localization/bundles/ja-JP.localization-bundle.d.ts +11 -0
  98. package/esm/presentation/localization/bundles/ja-JP.localization-bundle.d.ts.map +1 -1
  99. package/esm/presentation/localization/bundles/ja-JP.localization-bundle.js +11 -0
  100. package/esm/presentation/localization/bundles/ko-KR.localization-bundle.d.ts +11 -0
  101. package/esm/presentation/localization/bundles/ko-KR.localization-bundle.d.ts.map +1 -1
  102. package/esm/presentation/localization/bundles/ko-KR.localization-bundle.js +11 -0
  103. package/esm/presentation/localization/bundles/nl-NL.localization-bundle.d.ts +11 -0
  104. package/esm/presentation/localization/bundles/nl-NL.localization-bundle.d.ts.map +1 -1
  105. package/esm/presentation/localization/bundles/nl-NL.localization-bundle.js +11 -0
  106. package/esm/presentation/localization/bundles/pl-PL.localization-bundle.d.ts +11 -0
  107. package/esm/presentation/localization/bundles/pl-PL.localization-bundle.d.ts.map +1 -1
  108. package/esm/presentation/localization/bundles/pl-PL.localization-bundle.js +11 -0
  109. package/esm/presentation/localization/bundles/pt-BR.localization-bundle.d.ts +11 -0
  110. package/esm/presentation/localization/bundles/pt-BR.localization-bundle.d.ts.map +1 -1
  111. package/esm/presentation/localization/bundles/pt-BR.localization-bundle.js +11 -0
  112. package/esm/presentation/localization/bundles/pt-PT.localization-bundle.d.ts +11 -0
  113. package/esm/presentation/localization/bundles/pt-PT.localization-bundle.d.ts.map +1 -1
  114. package/esm/presentation/localization/bundles/pt-PT.localization-bundle.js +11 -0
  115. package/esm/presentation/localization/bundles/ru-RU.localization-bundle.d.ts +11 -0
  116. package/esm/presentation/localization/bundles/ru-RU.localization-bundle.d.ts.map +1 -1
  117. package/esm/presentation/localization/bundles/ru-RU.localization-bundle.js +11 -0
  118. package/esm/presentation/localization/bundles/sl-SI.localization-bundle.d.ts +11 -0
  119. package/esm/presentation/localization/bundles/sl-SI.localization-bundle.d.ts.map +1 -1
  120. package/esm/presentation/localization/bundles/sl-SI.localization-bundle.js +11 -0
  121. package/esm/presentation/localization/bundles/th-TH.localization-bundle.d.ts +11 -0
  122. package/esm/presentation/localization/bundles/th-TH.localization-bundle.d.ts.map +1 -1
  123. package/esm/presentation/localization/bundles/th-TH.localization-bundle.js +11 -0
  124. package/esm/presentation/localization/bundles/tr-TR.localization-bundle.d.ts +11 -0
  125. package/esm/presentation/localization/bundles/tr-TR.localization-bundle.d.ts.map +1 -1
  126. package/esm/presentation/localization/bundles/tr-TR.localization-bundle.js +11 -0
  127. package/esm/presentation/localization/bundles/uk-UA.localization-bundle.d.ts +11 -0
  128. package/esm/presentation/localization/bundles/uk-UA.localization-bundle.d.ts.map +1 -1
  129. package/esm/presentation/localization/bundles/uk-UA.localization-bundle.js +13 -2
  130. package/esm/presentation/localization/bundles/vi-VN.localization-bundle.d.ts +11 -0
  131. package/esm/presentation/localization/bundles/vi-VN.localization-bundle.d.ts.map +1 -1
  132. package/esm/presentation/localization/bundles/vi-VN.localization-bundle.js +11 -0
  133. package/esm/presentation/localization/bundles/zh-HK.localization-bundle.d.ts +11 -0
  134. package/esm/presentation/localization/bundles/zh-HK.localization-bundle.d.ts.map +1 -1
  135. package/esm/presentation/localization/bundles/zh-HK.localization-bundle.js +11 -0
  136. package/esm/presentation/localization/bundles/zh-Hans.localization-bundle.d.ts +11 -0
  137. package/esm/presentation/localization/bundles/zh-Hans.localization-bundle.d.ts.map +1 -1
  138. package/esm/presentation/localization/bundles/zh-Hans.localization-bundle.js +11 -0
  139. package/esm/presentation/localization/bundles/zh-Hant.localization-bundle.d.ts +11 -0
  140. package/esm/presentation/localization/bundles/zh-Hant.localization-bundle.d.ts.map +1 -1
  141. package/esm/presentation/localization/bundles/zh-Hant.localization-bundle.js +12 -1
  142. package/esm/presentation/topBar/timezoneIndicator/DefaultTimezoneIndicator.d.ts +10 -0
  143. package/esm/presentation/topBar/timezoneIndicator/DefaultTimezoneIndicator.d.ts.map +1 -0
  144. package/esm/presentation/topBar/timezoneIndicator/DefaultTimezoneIndicator.js +19 -0
  145. package/esm/presentation/topBar/timezoneIndicator/TimezoneIndicator.d.ts +13 -0
  146. package/esm/presentation/topBar/timezoneIndicator/TimezoneIndicator.d.ts.map +1 -0
  147. package/esm/presentation/topBar/timezoneIndicator/TimezoneIndicator.js +27 -0
  148. package/esm/presentation/topBar/timezoneIndicator/resolveDashboardTimezoneInfo.d.ts +13 -0
  149. package/esm/presentation/topBar/timezoneIndicator/resolveDashboardTimezoneInfo.d.ts.map +1 -0
  150. package/esm/presentation/topBar/timezoneIndicator/resolveDashboardTimezoneInfo.js +20 -0
  151. package/esm/presentation/topBar/timezoneIndicator/types.d.ts +47 -0
  152. package/esm/presentation/topBar/timezoneIndicator/types.d.ts.map +1 -0
  153. package/esm/presentation/topBar/timezoneIndicator/types.js +2 -0
  154. package/esm/presentation/topBar/topBar/DefaultTopBar.d.ts.map +1 -1
  155. package/esm/presentation/topBar/topBar/DefaultTopBar.js +15 -4
  156. package/esm/presentation/topBar/topBar/types.d.ts +2 -0
  157. package/esm/presentation/topBar/topBar/types.d.ts.map +1 -1
  158. package/esm/presentation/widget/description/ExportModeInsightWidgetDescription.d.ts.map +1 -1
  159. package/esm/presentation/widget/description/ExportModeInsightWidgetDescription.js +3 -5
  160. package/esm/presentation/widget/description/InsightWidgetDescriptionTrigger.d.ts.map +1 -1
  161. package/esm/presentation/widget/description/InsightWidgetDescriptionTrigger.js +3 -6
  162. package/esm/presentation/widget/insight/ViewModeDashboardInsight/InsightDrillDialog/InsightDrillDialog.js +3 -5
  163. package/esm/presentation/widget/insight/configuration/InsightDescriptionConfig/InsightDescription.d.ts.map +1 -1
  164. package/esm/presentation/widget/insight/configuration/InsightDescriptionConfig/InsightDescription.js +3 -6
  165. package/esm/presentation/widget/richText/EditModeDashboardRichText.d.ts.map +1 -1
  166. package/esm/presentation/widget/richText/EditModeDashboardRichText.js +3 -5
  167. package/esm/presentation/widget/richText/ViewModeDashboardRichText.d.ts.map +1 -1
  168. package/esm/presentation/widget/richText/ViewModeDashboardRichText.js +3 -5
  169. package/esm/sdk-ui-dashboard.d.ts +162 -10
  170. package/package.json +21 -21
  171. package/styles/css/main.css +28 -1
  172. package/styles/css/main.css.map +1 -1
  173. package/styles/css/timezoneIndicator.css +20 -0
  174. package/styles/css/timezoneIndicator.css.map +1 -0
  175. package/styles/css/topBar.css +9 -1
  176. package/styles/css/topBar.css.map +1 -1
  177. package/styles/scss/main.scss +1 -0
  178. package/styles/scss/timezoneIndicator.scss +23 -0
  179. package/styles/scss/topBar.scss +13 -2
@@ -40,7 +40,7 @@ function ScheduledEmailDialogFooter({ isWhiteLabeled, helpTextId, scheduledExpor
40
40
  const intl = useIntl();
41
41
  return (_jsxs("div", { className: "gd-notifications-channels-dialog-footer-link", children: [isWhiteLabeled ? null : (_jsx(Hyperlink, { text: intl.formatMessage({ id: helpTextId }), href: "https://www.gooddata.com/docs/cloud/create-dashboards/automation/scheduled-exports/#ScheduleExportsinDashboards-ScheduleExport", iconClass: "gd-icon-circle-question" })), scheduledExportToEdit ? (_jsx(Button, { className: "gd-button-link-dimmed", value: intl.formatMessage({ id: "delete" }), onClick: onDeleteClick, disabled: isSavingScheduledEmail })) : null] }));
42
42
  }
43
- export function ScheduledMailDialogRenderer({ scheduledExportToEdit, users, usersError, notificationChannels, insight, widget, dashboardFilters, widgetFilters, onBack, onCancel, onDeleteSuccess, onDeleteError, onError, onSave, onSaveError, onSaveSuccess, onSubmit, onSuccess, }) {
43
+ export function ScheduledMailDialogRenderer({ onBack, onCancel, onDeleteSuccess, onDeleteError, onError, onSave, onSaveError, onSaveSuccess, onSubmit, onSuccess, }) {
44
44
  const intl = useIntl();
45
45
  const dialogTitleRef = useRef(null);
46
46
  const generalTabContentRef = useRef(null);
@@ -48,7 +48,11 @@ export function ScheduledMailDialogRenderer({ scheduledExportToEdit, users, user
48
48
  const [scheduledEmailToDelete, setScheduledEmailToDelete] = useState(null);
49
49
  const [selectedTabId, setSelectedTabId] = useState("general");
50
50
  const { isWhiteLabeled, externalRecipient: externalRecipientOverride, isSecondaryTitleVisible, } = useAutomationsContext();
51
- const { exportTemplates, widgetTitle, hasMultipleTabs } = useScheduledEmailDialogContext();
51
+ // Read from context because this component calls useAutomationFiltersSelect,
52
+ // useAutomationExportParameters and useValidateExistingAutomationFilters directly, and the
53
+ // filter-select call must run before useEditScheduledEmail, which consumes its output. Removed
54
+ // with the filter read-model consolidation (EB-867), which retires these call sites.
55
+ const { exportTemplates, widgetTitle, hasMultipleTabs, scheduledExportToEdit, widget, insight, dashboardFilters, } = useScheduledEmailDialogContext();
52
56
  const handleScheduleDeleteSuccess = () => {
53
57
  onDeleteSuccess?.();
54
58
  setScheduledEmailToDelete(null);
@@ -60,16 +64,9 @@ export function ScheduledMailDialogRenderer({ scheduledExportToEdit, users, user
60
64
  widget,
61
65
  });
62
66
  const { locale, dashboardTitle, dateFormat, weekStart, maxAutomationsRecipients, allowHourlyRecurrence, isCrossFiltering, isExecutionTimestampMode, isSlidesExportEnabled, isAccessibilityModeEnabled, defaultPdfPageSize, } = useDefaultScheduledEmailDialogData();
63
- const { defaultUser, editedAutomation, originalAutomation, isSubmitDisabled, xlsxSettings, pdfSettings, csvSettings, csvRawSettings, startDate, allowExternalRecipients, allowOnlyLoggedUserRecipients, validationErrorMessage, selectedAttachments, isParentValid, onDashboardAttachmentsChange, onWidgetAttachmentsChange, onXlsxSettingsChange, onPdfSettingsChange, onCsvSettingsChange, onCsvRawSettingsChange, slidesTemplateIds, onSlidesTemplateIdChange, onDestinationChange, onMessageChange, onRecipientsChange, onRecurrenceChange, onEvaluationModeChange, onSubjectChange, onTitleChange, onFiltersChange, onApplyCurrentFilters, onStoreFiltersChange, onFiltersByTabChange, setParametersWire, enableAutomationEvaluationMode, } = useEditScheduledEmail({
64
- notificationChannels,
65
- insight,
66
- widget,
67
- users,
68
- scheduledExportToEdit,
67
+ const { defaultUser, editedAutomation, originalAutomation, isSubmitDisabled, xlsxSettings, pdfSettings, csvSettings, csvRawSettings, startDate, allowExternalRecipients, allowOnlyLoggedUserRecipients, validationErrorMessage, selectedAttachments, isParentValid, onDashboardAttachmentsChange, onWidgetAttachmentsChange, onXlsxSettingsChange, onPdfSettingsChange, onCsvSettingsChange, onCsvRawSettingsChange, slidesTemplateIds, onSlidesTemplateIdChange, onDestinationChange, onMessageChange, onRecipientsChange, onRecurrenceChange, onEvaluationModeChange, onSubjectChange, onTitleChange, onFiltersChange, onApplyCurrentFilters, onStoreFiltersChange, onFiltersByTabChange, setParametersWire, enableAutomationEvaluationMode, users, usersError, notificationChannels, } = useEditScheduledEmail({
69
68
  storeFilters,
70
69
  editedAutomationFilters,
71
- dashboardFilters,
72
- widgetFilters,
73
70
  maxAutomationsRecipients,
74
71
  setEditedAutomationFilters,
75
72
  setStoreFilters,
@@ -220,7 +217,8 @@ export function ScheduledMailDialogRenderer({ scheduledExportToEdit, users, user
220
217
  * @alpha
221
218
  */
222
219
  export function DefaultScheduledEmailDialog(props) {
223
- const { isLoading, onCancel, scheduledExportToEdit } = props;
220
+ const { onCancel } = props;
221
+ const { isLoading, scheduledExportToEdit } = useScheduledEmailDialogContext();
224
222
  if (isLoading) {
225
223
  return (_jsx(DefaultLoadingScheduledEmailDialog, { onCancel: onCancel, scheduledExportToEdit: scheduledExportToEdit }));
226
224
  }
@@ -1,16 +1,8 @@
1
- import { type FilterContextItem, type IAutomationMetadataObject, type IAutomationVisibleFilter, type IExportDefinitionVisualizationObjectSettings, type IFilter, type IInsight, type INotificationChannelIdentifier, type INotificationChannelMetadataObject, type IWidget, type IWorkspaceUser } from "@gooddata/sdk-model";
1
+ import { type FilterContextItem, type IAutomationVisibleFilter, type IExportDefinitionVisualizationObjectSettings } from "@gooddata/sdk-model";
2
2
  import type { IAutomationFiltersTab } from "../../../../../model/store/filtering/types.js";
3
3
  export interface IUseEditScheduledEmailProps {
4
- scheduledExportToEdit?: IAutomationMetadataObject;
5
- notificationChannels: INotificationChannelIdentifier[] | INotificationChannelMetadataObject[];
6
4
  maxAutomationsRecipients: number;
7
- /** Workspace users, lazy-loaded in the connector and passed via dialog props. */
8
- users: IWorkspaceUser[];
9
- widget?: IWidget;
10
- insight?: IInsight;
11
- widgetFilters?: IFilter[];
12
5
  editedAutomationFilters?: FilterContextItem[];
13
- dashboardFilters?: FilterContextItem[];
14
6
  setEditedAutomationFilters: (filters: FilterContextItem[]) => void;
15
7
  /**
16
8
  * Edited filters structured by tab ID for dashboard automations with tabs enabled.
@@ -31,13 +23,15 @@ export interface IUseEditScheduledEmailProps {
31
23
  externalRecipientOverride?: string;
32
24
  defaultPdfPageSize?: IExportDefinitionVisualizationObjectSettings["pageSize"];
33
25
  }
34
- export declare function useEditScheduledEmail({ scheduledExportToEdit, notificationChannels, insight, widget, users, editedAutomationFilters, dashboardFilters, editedAutomationFiltersByTab, maxAutomationsRecipients, setEditedAutomationFilters, setEditedAutomationFiltersByTab, availableFiltersAsVisibleFilters, storeFilters, setStoreFilters, filtersForNewAutomation, externalRecipientOverride, defaultPdfPageSize, filtersDataByTab, availableFiltersAsVisibleFiltersByTab }: IUseEditScheduledEmailProps): {
35
- defaultUser: IWorkspaceUser;
26
+ export declare function useEditScheduledEmail({ editedAutomationFilters, editedAutomationFiltersByTab, maxAutomationsRecipients, setEditedAutomationFilters, setEditedAutomationFiltersByTab, availableFiltersAsVisibleFilters, storeFilters, setStoreFilters, filtersForNewAutomation, externalRecipientOverride, defaultPdfPageSize, filtersDataByTab, availableFiltersAsVisibleFiltersByTab }: IUseEditScheduledEmailProps): {
27
+ defaultUser: import("@gooddata/sdk-model").IWorkspaceUser;
36
28
  areDashboardFiltersChanged: boolean;
37
29
  originalAutomation: import("@gooddata/sdk-model").IAutomationMetadataObjectDefinition;
38
30
  editedAutomation: import("@gooddata/sdk-model").IAutomationMetadataObjectDefinition;
39
31
  isCronValid: boolean;
40
- notificationChannels: INotificationChannelIdentifier[] | INotificationChannelMetadataObject[];
32
+ notificationChannels: import("@gooddata/sdk-model").INotificationChannelIdentifier[] | import("@gooddata/sdk-model").INotificationChannelMetadataObject[];
33
+ users: import("@gooddata/sdk-model").IWorkspaceUser[];
34
+ usersError: import("@gooddata/sdk-ui").GoodDataSdkError | undefined;
41
35
  isDashboardExportSelected: boolean;
42
36
  isCsvExportSelected: boolean;
43
37
  isXlsxExportSelected: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"useEditScheduledEmail.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/hooks/useEditScheduledEmail.ts"],"names":[],"mappings":"AAEA,OAAO,EACH,KAAK,iBAAiB,EACtB,KAAK,yBAAyB,EAC9B,KAAK,wBAAwB,EAC7B,KAAK,4CAA4C,EACjD,KAAK,OAAO,EACZ,KAAK,QAAQ,EACb,KAAK,8BAA8B,EACnC,KAAK,kCAAkC,EACvC,KAAK,OAAO,EACZ,KAAK,cAAc,EACtB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,+CAA+C,CAAC;AAS3F,MAAM,WAAW,2BAA2B;IACxC,qBAAqB,CAAC,EAAE,yBAAyB,CAAC;IAClD,oBAAoB,EAAE,8BAA8B,EAAE,GAAG,kCAAkC,EAAE,CAAC;IAC9F,wBAAwB,EAAE,MAAM,CAAC;IACjC,iFAAiF;IACjF,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,QAAQ,CAAC;IACnB,aAAa,CAAC,EAAE,OAAO,EAAE,CAAC;IAC1B,uBAAuB,CAAC,EAAE,iBAAiB,EAAE,CAAC;IAC9C,gBAAgB,CAAC,EAAE,iBAAiB,EAAE,CAAC;IACvC,0BAA0B,EAAE,CAAC,OAAO,EAAE,iBAAiB,EAAE,KAAK,IAAI,CAAC;IAEnE;;;OAGG;IACH,4BAA4B,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,EAAE,CAAC,CAAC;IACnE;;;OAGG;IACH,+BAA+B,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,EAAE,CAAC,KAAK,IAAI,CAAC;IACzF,gBAAgB,CAAC,EAAE,qBAAqB,EAAE,GAAG,SAAS,CAAC;IACvD,gCAAgC,CAAC,EAAE,wBAAwB,EAAE,GAAG,SAAS,CAAC;IAC1E,qCAAqC,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,wBAAwB,EAAE,CAAC,CAAC;IAEnF,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,eAAe,EAAE,CAAC,YAAY,EAAE,OAAO,KAAK,IAAI,CAAC;IACjD,uBAAuB,EAAE,iBAAiB,EAAE,CAAC;IAC7C,yBAAyB,CAAC,EAAE,MAAM,CAAC;IACnC,kBAAkB,CAAC,EAAE,4CAA4C,CAAC,UAAU,CAAC,CAAC;CACjF;AAED,wBAAgB,qBAAqB,CAAC,EAClC,qBAAqB,EACrB,oBAAoB,EACpB,OAAO,EACP,MAAM,EACN,KAAK,EACL,uBAAuB,EACvB,gBAAgB,EAChB,4BAA4B,EAC5B,wBAAwB,EACxB,0BAA0B,EAC1B,+BAA+B,EAC/B,gCAAgC,EAChC,YAAY,EACZ,eAAe,EACf,uBAAuB,EACvB,yBAAyB,EACzB,kBAAkB,EAClB,gBAAgB,EAChB,qCAAqC,EACxC,EAAE,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA4K7B"}
1
+ {"version":3,"file":"useEditScheduledEmail.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/hooks/useEditScheduledEmail.ts"],"names":[],"mappings":"AAEA,OAAO,EACH,KAAK,iBAAiB,EACtB,KAAK,wBAAwB,EAC7B,KAAK,4CAA4C,EACpD,MAAM,qBAAqB,CAAC;AAE7B,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,+CAA+C,CAAC;AAU3F,MAAM,WAAW,2BAA2B;IACxC,wBAAwB,EAAE,MAAM,CAAC;IACjC,uBAAuB,CAAC,EAAE,iBAAiB,EAAE,CAAC;IAC9C,0BAA0B,EAAE,CAAC,OAAO,EAAE,iBAAiB,EAAE,KAAK,IAAI,CAAC;IAEnE;;;OAGG;IACH,4BAA4B,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,EAAE,CAAC,CAAC;IACnE;;;OAGG;IACH,+BAA+B,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,EAAE,CAAC,KAAK,IAAI,CAAC;IACzF,gBAAgB,CAAC,EAAE,qBAAqB,EAAE,GAAG,SAAS,CAAC;IACvD,gCAAgC,CAAC,EAAE,wBAAwB,EAAE,GAAG,SAAS,CAAC;IAC1E,qCAAqC,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,wBAAwB,EAAE,CAAC,CAAC;IAEnF,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,eAAe,EAAE,CAAC,YAAY,EAAE,OAAO,KAAK,IAAI,CAAC;IACjD,uBAAuB,EAAE,iBAAiB,EAAE,CAAC;IAC7C,yBAAyB,CAAC,EAAE,MAAM,CAAC;IACnC,kBAAkB,CAAC,EAAE,4CAA4C,CAAC,UAAU,CAAC,CAAC;CACjF;AAED,wBAAgB,qBAAqB,CAAC,EAClC,uBAAuB,EACvB,4BAA4B,EAC5B,wBAAwB,EACxB,0BAA0B,EAC1B,+BAA+B,EAC/B,gCAAgC,EAChC,YAAY,EACZ,eAAe,EACf,uBAAuB,EACvB,yBAAyB,EACzB,kBAAkB,EAClB,gBAAgB,EAChB,qCAAqC,EACxC,EAAE,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAwL7B"}
@@ -1,12 +1,14 @@
1
1
  // (C) 2019-2026 GoodData Corporation
2
2
  import { useAutomationsContext } from "../../../contexts/AutomationsContext.js";
3
+ import { useScheduledEmailDialogContext } from "../../../contexts/ScheduledEmailDialogContext.js";
3
4
  import { useScheduledEmailEffectiveFilters } from "./useScheduledEmailEffectiveFilters.js";
4
5
  import { useScheduledEmailExportSettings } from "./useScheduledEmailExportSettings.js";
5
6
  import { useScheduledEmailFilters } from "./useScheduledEmailFilters.js";
6
7
  import { useScheduledEmailFormState } from "./useScheduledEmailFormState.js";
7
8
  import { useScheduledEmailFormValidity } from "./useScheduledEmailFormValidity.js";
8
- export function useEditScheduledEmail({ scheduledExportToEdit, notificationChannels, insight, widget, users, editedAutomationFilters, dashboardFilters, editedAutomationFiltersByTab, maxAutomationsRecipients, setEditedAutomationFilters, setEditedAutomationFiltersByTab, availableFiltersAsVisibleFilters, storeFilters, setStoreFilters, filtersForNewAutomation, externalRecipientOverride, defaultPdfPageSize, filtersDataByTab, availableFiltersAsVisibleFiltersByTab, }) {
9
+ export function useEditScheduledEmail({ editedAutomationFilters, editedAutomationFiltersByTab, maxAutomationsRecipients, setEditedAutomationFilters, setEditedAutomationFiltersByTab, availableFiltersAsVisibleFilters, storeFilters, setStoreFilters, filtersForNewAutomation, externalRecipientOverride, defaultPdfPageSize, filtersDataByTab, availableFiltersAsVisibleFiltersByTab, }) {
9
10
  const { features: { enableAutomationEvaluationMode }, } = useAutomationsContext();
11
+ const { scheduledExportToEdit, widget, insight, users, usersError, notificationChannels, dashboardFilters, } = useScheduledEmailDialogContext();
10
12
  const areDashboardFiltersChanged = !!dashboardFilters;
11
13
  const { effectiveWidgetFilters, effectiveWidgetFiltersWithInsight, effectiveVisibleWidgetFilters, effectiveDashboardFilters, effectiveDashboardFiltersByTab, effectiveVisibleDashboardFilters, effectiveVisibleDashboardFiltersByTab, parametersByTabForNewAutomation, } = useScheduledEmailEffectiveFilters({
12
14
  widget,
@@ -79,6 +81,8 @@ export function useEditScheduledEmail({ scheduledExportToEdit, notificationChann
79
81
  editedAutomation,
80
82
  isCronValid,
81
83
  notificationChannels,
84
+ users,
85
+ usersError,
82
86
  isDashboardExportSelected,
83
87
  isCsvExportSelected,
84
88
  isXlsxExportSelected,
@@ -2,5 +2,5 @@ import { type IScheduledEmailManagementDialogProps } from "../types.js";
2
2
  /**
3
3
  * @alpha
4
4
  */
5
- export declare function ScheduledEmailManagementDialog({ onAdd, onEdit, onClose, isLoadingScheduleData, automations }: IScheduledEmailManagementDialogProps): import("react/jsx-runtime").JSX.Element;
5
+ export declare function ScheduledEmailManagementDialog({ onAdd, onEdit, onClose }: IScheduledEmailManagementDialogProps): import("react/jsx-runtime").JSX.Element;
6
6
  //# sourceMappingURL=DefaultScheduledEmailManagementDialog.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"DefaultScheduledEmailManagementDialog.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/automations/scheduledEmail/DefaultScheduledEmailManagementDialog/DefaultScheduledEmailManagementDialog.tsx"],"names":[],"mappings":"AAMA,OAAO,EAAE,KAAK,oCAAoC,EAAE,MAAM,aAAa,CAAC;AAIxE;;GAEG;AACH,wBAAgB,8BAA8B,CAAC,EAC3C,KAAK,EACL,MAAM,EACN,OAAO,EACP,qBAAqB,EACrB,WAAW,EACd,EAAE,oCAAoC,2CAiBtC"}
1
+ {"version":3,"file":"DefaultScheduledEmailManagementDialog.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/automations/scheduledEmail/DefaultScheduledEmailManagementDialog/DefaultScheduledEmailManagementDialog.tsx"],"names":[],"mappings":"AAMA,OAAO,EAAE,KAAK,oCAAoC,EAAE,MAAM,aAAa,CAAC;AAIxE;;GAEG;AACH,wBAAgB,8BAA8B,CAAC,EAC3C,KAAK,EACL,MAAM,EACN,OAAO,EACV,EAAE,oCAAoC,2CAetC"}
@@ -5,9 +5,9 @@ import { DefaultScheduledEmailManagementDialogContent } from "./DefaultScheduled
5
5
  /**
6
6
  * @alpha
7
7
  */
8
- export function ScheduledEmailManagementDialog({ onAdd, onEdit, onClose, isLoadingScheduleData, automations, }) {
8
+ export function ScheduledEmailManagementDialog({ onAdd, onEdit, onClose, }) {
9
9
  const handleScheduleEdit = useCallback((scheduledEmail) => {
10
10
  onEdit?.(scheduledEmail);
11
11
  }, [onEdit]);
12
- return (_jsx(DefaultScheduledEmailManagementDialogContent, { onAdd: onAdd, onClose: onClose, onEdit: handleScheduleEdit, isLoadingScheduleData: isLoadingScheduleData, automations: automations }));
12
+ return (_jsx(DefaultScheduledEmailManagementDialogContent, { onAdd: onAdd, onClose: onClose, onEdit: handleScheduleEdit }));
13
13
  }
@@ -3,9 +3,7 @@ interface IDefaultScheduledEmailManagementDialogContentProps {
3
3
  onAdd?: () => void;
4
4
  onClose?: () => void;
5
5
  onEdit: (scheduledEmail: IAutomationMetadataObject) => void;
6
- isLoadingScheduleData: boolean;
7
- automations: IAutomationMetadataObject[];
8
6
  }
9
- export declare function DefaultScheduledEmailManagementDialogContent({ onAdd, onClose, onEdit, isLoadingScheduleData, automations }: IDefaultScheduledEmailManagementDialogContentProps): import("react/jsx-runtime").JSX.Element;
7
+ export declare function DefaultScheduledEmailManagementDialogContent({ onAdd, onClose, onEdit }: IDefaultScheduledEmailManagementDialogContentProps): import("react/jsx-runtime").JSX.Element;
10
8
  export {};
11
9
  //# sourceMappingURL=DefaultScheduledEmailManagementDialogContent.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"DefaultScheduledEmailManagementDialogContent.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/automations/scheduledEmail/DefaultScheduledEmailManagementDialog/DefaultScheduledEmailManagementDialogContent.tsx"],"names":[],"mappings":"AAOA,OAAO,EAAE,KAAK,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AA4BrE,UAAU,kDAAkD;IACxD,KAAK,CAAC,EAAE,MAAM,IAAI,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,MAAM,EAAE,CAAC,cAAc,EAAE,yBAAyB,KAAK,IAAI,CAAC;IAC5D,qBAAqB,EAAE,OAAO,CAAC;IAC/B,WAAW,EAAE,yBAAyB,EAAE,CAAC;CAC5C;AAED,wBAAgB,4CAA4C,CAAC,EACzD,KAAK,EACL,OAAO,EACP,MAAM,EACN,qBAAqB,EACrB,WAAW,EACd,EAAE,kDAAkD,2CA4JpD"}
1
+ {"version":3,"file":"DefaultScheduledEmailManagementDialogContent.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/automations/scheduledEmail/DefaultScheduledEmailManagementDialog/DefaultScheduledEmailManagementDialogContent.tsx"],"names":[],"mappings":"AAOA,OAAO,EAAE,KAAK,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AA4BrE,UAAU,kDAAkD;IACxD,KAAK,CAAC,EAAE,MAAM,IAAI,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,MAAM,EAAE,CAAC,cAAc,EAAE,yBAAyB,KAAK,IAAI,CAAC;CAC/D;AAED,wBAAgB,4CAA4C,CAAC,EACzD,KAAK,EACL,OAAO,EACP,MAAM,EACT,EAAE,kDAAkD,2CA8JpD"}
@@ -16,13 +16,13 @@ import { SCHEDULED_EMAIL_DIALOG_ID } from "../DefaultScheduledEmailDialog/consta
16
16
  import { useScheduleEmailDialogAccessibility } from "../hooks/useScheduleEmailDialogAccessibility.js";
17
17
  import { isMobileView } from "../utils/responsive.js";
18
18
  const overlayController = OverlayController.getInstance(DASHBOARD_DIALOG_OVERS_Z_INDEX);
19
- export function DefaultScheduledEmailManagementDialogContent({ onAdd, onClose, onEdit, isLoadingScheduleData, automations, }) {
19
+ export function DefaultScheduledEmailManagementDialogContent({ onAdd, onClose, onEdit, }) {
20
20
  const intl = useIntl();
21
21
  const isMobile = isMobileView();
22
22
  const workspace = useWorkspace();
23
23
  const backend = useBackend();
24
24
  const { timezone, locale, settings, isWhiteLabeled, isExecutionTimestampMode, externalRecipient: externalRecipientOverride, features: { canCreateAutomation }, } = useAutomationsContext();
25
- const { dashboardId, dashboardTitle, enableAccessibilityMode, isScheduleEmailDialogOpen: isEditDialogOpen, automationsInvalidationId, isEmbedded, maxAutomations, unlimitedAutomations, } = useScheduledEmailManagementDialogContext();
25
+ const { dashboardId, dashboardTitle, enableAccessibilityMode, isScheduleEmailDialogOpen: isEditDialogOpen, automationsInvalidationId, isEmbedded, maxAutomations, unlimitedAutomations, automations, isLoading: isLoadingScheduleData, } = useScheduledEmailManagementDialogContext();
26
26
  const enableBulkActions = !enableAccessibilityMode;
27
27
  const useHostRoute = computeUseHostRoute(settings);
28
28
  const { returnFocusTo } = useScheduleEmailDialogAccessibility();
@@ -7,20 +7,29 @@ import { type GoodDataSdkError } from "@gooddata/sdk-ui";
7
7
  export interface IScheduledEmailDialogProps {
8
8
  /**
9
9
  * In case, we are not creating new schedule, but editing existing one, this is the active schedule to be edited.
10
+ *
11
+ * @deprecated read `scheduledExportToEdit` from `useScheduledEmailDialogContext()` instead. Prop will be removed.
10
12
  */
11
13
  scheduledExportToEdit?: IAutomationMetadataObject;
12
14
  /**
13
15
  * Users in workspace
16
+ *
17
+ * @deprecated read `users` from `useScheduledEmailDialogContext()` instead. Prop will be removed.
14
18
  */
15
- users: IWorkspaceUser[];
19
+ users?: IWorkspaceUser[];
16
20
  /**
17
21
  * Error occurred while loading users
22
+ *
23
+ * @deprecated read `usersError` from `useScheduledEmailDialogContext()` instead. Prop will be removed.
18
24
  */
19
25
  usersError?: GoodDataSdkError;
20
26
  /**
21
27
  * Notification channels in organization
28
+ *
29
+ * @deprecated read `notificationChannels` from `useScheduledEmailDialogContext()` instead.
30
+ * Prop will be removed.
22
31
  */
23
- notificationChannels: INotificationChannelIdentifier[] | INotificationChannelMetadataObject[];
32
+ notificationChannels?: INotificationChannelIdentifier[] | INotificationChannelMetadataObject[];
24
33
  /**
25
34
  * Widget to be used for scheduled email.
26
35
  *
@@ -28,12 +37,16 @@ export interface IScheduledEmailDialogProps {
28
37
  * Typed as IWidget (not ExtendedDashboardWidget) because the dialog only
29
38
  * supports insight widgets; custom widgets and nested layouts are not valid
30
39
  * export targets and were silently discarded at the connector boundary anyway.
40
+ *
41
+ * @deprecated read `widget` from `useScheduledEmailDialogContext()` instead. Prop will be removed.
31
42
  */
32
43
  widget?: IWidget;
33
44
  /**
34
45
  * Insight to be used for scheduled email.
35
46
  *
36
47
  * Note: this is available only when scheduling export for widget, not dashboard.
48
+ *
49
+ * @deprecated read `insight` from `useScheduledEmailDialogContext()` instead. Prop will be removed.
37
50
  */
38
51
  insight?: IInsight;
39
52
  /**
@@ -47,6 +60,8 @@ export interface IScheduledEmailDialogProps {
47
60
  * the export reflects the latest intended filter configuration and we don't want to save them.
48
61
  *
49
62
  * - If we are editing an existing scheduled export, this will contain its filters, as changing saved filters is currently not allowed.
63
+ *
64
+ * @deprecated read `dashboardFilters` from `useScheduledEmailDialogContext()` instead. Prop will be removed.
50
65
  */
51
66
  dashboardFilters?: FilterContextItem[];
52
67
  /**
@@ -59,10 +74,15 @@ export interface IScheduledEmailDialogProps {
59
74
  * - If the resulting filters include all-time date filter, it is excluded as it has no effect on the scheduled export execution.
60
75
  *
61
76
  * - If we are editing an existing scheduled export, this will contain its filters, as changing saved filters is currently not allowed.
77
+ *
78
+ * @deprecated not read by the default dialog; the effective widget filters are derived from the
79
+ * edited filters. Prop will be removed.
62
80
  */
63
81
  widgetFilters?: IFilter[];
64
82
  /**
65
83
  * Is scheduled email dialog loading initial data, before it can be rendered?
84
+ *
85
+ * @deprecated read `isLoading` from `useScheduledEmailDialogContext()` instead. Prop will be removed.
66
86
  */
67
87
  isLoading?: boolean;
68
88
  /**
@@ -113,20 +133,30 @@ export interface IScheduledEmailDialogProps {
113
133
  export interface IScheduledEmailManagementDialogProps {
114
134
  /**
115
135
  * Is loading schedule data?
136
+ *
137
+ * @deprecated read `isLoading` from `useScheduledEmailManagementDialogContext()` instead. Prop will
138
+ * be removed.
116
139
  */
117
- isLoadingScheduleData: boolean;
140
+ isLoadingScheduleData?: boolean;
118
141
  /**
119
142
  * Error occurred while loading schedule data?
143
+ *
144
+ * @deprecated not read by the default dialog. Prop will be removed.
120
145
  */
121
146
  scheduleDataError?: GoodDataSdkError;
122
147
  /**
123
148
  * Notification channels in organization
149
+ *
150
+ * @deprecated not read by the default dialog. Prop will be removed.
124
151
  */
125
- notificationChannels: INotificationChannelIdentifier[] | INotificationChannelMetadataObject[];
152
+ notificationChannels?: INotificationChannelIdentifier[] | INotificationChannelMetadataObject[];
126
153
  /**
127
154
  * Automations in workspace
155
+ *
156
+ * @deprecated read `automations` from `useScheduledEmailManagementDialogContext()` instead. Prop
157
+ * will be removed.
128
158
  */
129
- automations: IAutomationMetadataObject[];
159
+ automations?: IAutomationMetadataObject[];
130
160
  /**
131
161
  * Callback to be called, when user adds new scheduled email item.
132
162
  */
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/presentation/automations/scheduledEmail/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/presentation/automations/scheduledEmail/types.ts"],"names":[],"mappings":"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"}
@@ -20,7 +20,7 @@ export function DashboardLoading(props) {
20
20
  // can tell the rendering has started even before any dashboard data is loaded.
21
21
  // The element is a hidden sibling (same as the gd-dashboard-meta export data),
22
22
  // so it cannot affect the layout of the loading indicator.
23
- return (_jsxs(_Fragment, { children: [exportData ? _jsx("div", { style: { display: "none" }, ...exportData }) : null, _jsx(LoadingComponent, {})
23
+ return (_jsxs(_Fragment, { children: [exportData ? _jsx("div", { style: { display: "none" }, ...exportData }) : null, _jsx(LoadingComponent, { className: "sdk-dashboard-loading s-loading" })
24
24
  ] }));
25
25
  }
26
26
  return _jsx(DashboardInner, { ...props });
@@ -6,30 +6,25 @@ export declare function useSlideData(renderMode: RenderMode | undefined): {
6
6
  slideWidth: number;
7
7
  slideHeight: number;
8
8
  } | undefined;
9
- export declare function useSlideSizeStyle(renderMode: RenderMode | undefined, type: LayoutElementType, parentLayoutPath?: ILayoutItemPath): {
9
+ export declare function useSlideSizeStyle(renderMode: RenderMode | undefined, type: LayoutElementType, parentLayoutPath?: ILayoutItemPath, hasHeaderRow?: boolean): {
10
10
  width?: undefined;
11
- gridTemplateRows?: undefined;
12
- overflow?: undefined;
13
11
  height?: undefined;
14
12
  } | {
15
13
  width: string;
16
- gridTemplateRows?: undefined;
17
- overflow?: undefined;
18
14
  height?: undefined;
19
15
  } | {
20
16
  width?: undefined;
21
- gridTemplateRows: string;
17
+ gridTemplateRows?: string | undefined;
18
+ gridAutoRows: string;
22
19
  height: string;
23
- overflow?: undefined;
24
20
  } | {
25
21
  width?: undefined;
26
- gridTemplateRows?: undefined;
22
+ gridTemplateRows?: string | undefined;
23
+ gridAutoRows: string;
27
24
  height: string;
28
25
  overflow: string;
29
26
  } | {
30
27
  width?: undefined;
31
- gridTemplateRows?: undefined;
32
- overflow?: undefined;
33
28
  height: string;
34
29
  };
35
30
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"useSlideData.d.ts","sourceRoot":"","sources":["../../../src/presentation/dashboardContexts/useSlideData.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,eAAe,EAAE,KAAK,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAIvE,KAAK,iBAAiB,GAAG,MAAM,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,GAAG,WAAW,CAAC;AAE9E,eAAO,MAAM,mBAAmB,OAAO,CAAC;AACxC,eAAO,MAAM,oBAAoB,OAAO,CAAC;AAEzC,wBAAgB,YAAY,CAAC,UAAU,EAAE,UAAU,GAAG,SAAS;;;cAW9D;AAED,wBAAgB,iBAAiB,CAC7B,UAAU,EAAE,UAAU,GAAG,SAAS,EAClC,IAAI,EAAE,iBAAiB,EACvB,gBAAgB,CAAC,EAAE,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;EA6BrC"}
1
+ {"version":3,"file":"useSlideData.d.ts","sourceRoot":"","sources":["../../../src/presentation/dashboardContexts/useSlideData.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,eAAe,EAAE,KAAK,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAIvE,KAAK,iBAAiB,GAAG,MAAM,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,GAAG,WAAW,CAAC;AAE9E,eAAO,MAAM,mBAAmB,OAAO,CAAC;AACxC,eAAO,MAAM,oBAAoB,OAAO,CAAC;AAEzC,wBAAgB,YAAY,CAAC,UAAU,EAAE,UAAU,GAAG,SAAS;;;cAW9D;AAED,wBAAgB,iBAAiB,CAC7B,UAAU,EAAE,UAAU,GAAG,SAAS,EAClC,IAAI,EAAE,iBAAiB,EACvB,gBAAgB,CAAC,EAAE,eAAe,EAClC,YAAY,UAAQ;;;;;;;;;;;;;;;;;;;;EAmCvB"}
@@ -12,7 +12,7 @@ export function useSlideData(renderMode) {
12
12
  slideHeight: slideConfig?.height ?? DEFAULT_SLIDE_HEIGHT,
13
13
  };
14
14
  }
15
- export function useSlideSizeStyle(renderMode, type, parentLayoutPath) {
15
+ export function useSlideSizeStyle(renderMode, type, parentLayoutPath, hasHeaderRow = false) {
16
16
  const data = useSlideData(renderMode);
17
17
  if (!data) {
18
18
  return {};
@@ -23,15 +23,21 @@ export function useSlideSizeStyle(renderMode, type, parentLayoutPath) {
23
23
  };
24
24
  }
25
25
  if (type === "section") {
26
- return parentLayoutPath && parentLayoutPath.length > 0
27
- ? {
28
- gridTemplateRows: "max-content",
29
- height: "100%",
30
- }
31
- : {
32
- height: `${data.slideHeight}px`,
33
- overflow: "hidden",
34
- };
26
+ return {
27
+ // Widgets in export mode have no min-height, their height comes solely from the
28
+ // `height: 100%` chain below the grid item, so the row tracks must have a definite size.
29
+ // Tracks sized from content (`auto`, `max-content`) collapse to the widget title only,
30
+ // because visualizations are absolutely positioned and contribute no intrinsic height.
31
+ //
32
+ // The section header, when rendered, is the first grid item and must take just the space
33
+ // it needs; the remaining rows split what is left. `minmax(0, 1fr)` (rather than plain
34
+ // `1fr`) keeps tall content from pushing the rows over the slide height.
35
+ ...(hasHeaderRow ? { gridTemplateRows: "max-content" } : {}),
36
+ gridAutoRows: "minmax(0, 1fr)",
37
+ ...(parentLayoutPath && parentLayoutPath.length > 0
38
+ ? { height: "100%" }
39
+ : { height: `${data.slideHeight}px`, overflow: "hidden" }),
40
+ };
35
41
  }
36
42
  return {
37
43
  height: "100%",
@@ -1 +1 @@
1
- {"version":3,"file":"DashboardLayoutSection.d.ts","sourceRoot":"","sources":["../../../../src/presentation/flexibleLayout/DefaultDashboardLayoutRenderer/DashboardLayoutSection.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,YAAY,EAAW,MAAM,OAAO,CAAC;AAEnD,OAAO,EAAE,KAAK,gCAAgC,EAAE,MAAM,qBAAqB,CAAC;AAE5E,OAAO,EAEH,KAAK,6BAA6B,EACrC,MAAM,iEAAiE,CAAC;AAEzE,OAAO,EAAE,KAAK,eAAe,EAAE,KAAK,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAS1E,OAAO,EACH,KAAK,+BAA+B,EACpC,KAAK,6BAA6B,EAClC,KAAK,4BAA4B,EACjC,KAAK,qCAAqC,EAC1C,KAAK,gCAAgC,EACrC,KAAK,+BAA+B,EACpC,KAAK,8BAA8B,EACtC,MAAM,iBAAiB,CAAC;AAEzB;;GAEG;AACH,MAAM,WAAW,4BAA4B,CAAC,OAAO;IACjD,OAAO,EAAE,6BAA6B,CAAC,OAAO,CAAC,CAAC;IAChD,gBAAgB,CAAC,EAAE,gCAAgC,CAAC,OAAO,CAAC,CAAC;IAC7D,eAAe,CAAC,EAAE,+BAA+B,CAAC,OAAO,CAAC,CAAC;IAC3D,qBAAqB,CAAC,EAAE,qCAAqC,CAAC,OAAO,CAAC,CAAC;IACvE,aAAa,CAAC,EAAE,6BAA6B,CAAC,OAAO,CAAC,CAAC;IACvD,YAAY,CAAC,EAAE,4BAA4B,CAAC,OAAO,CAAC,CAAC;IACrD,cAAc,EAAE,8BAA8B,CAAC,OAAO,CAAC,CAAC;IACxD,eAAe,CAAC,EAAE,+BAA+B,CAAC,OAAO,CAAC,CAAC;IAC3D,mBAAmB,EAAE,MAAM,OAAO,CAAC;IACnC,UAAU,EAAE,UAAU,CAAC;IACvB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,oBAAoB,CAAC,EAAE,gCAAgC,CAAC;IACxD,gBAAgB,EAAE,eAAe,GAAG,SAAS,CAAC;CACjD;AAaD,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,EAC5C,OAAO,EACP,eAAwC,EACxC,qBAA6C,EAC7C,aAAoC,EACpC,eAAe,EACf,YAAY,EACZ,cAAc,EACd,mBAAmB,EACnB,UAAU,EACV,oBAAoB,EACpB,gBAAgB,EACnB,EAAE,4BAA4B,CAAC,OAAO,CAAC,GAAG,YAAY,CA+FtD"}
1
+ {"version":3,"file":"DashboardLayoutSection.d.ts","sourceRoot":"","sources":["../../../../src/presentation/flexibleLayout/DefaultDashboardLayoutRenderer/DashboardLayoutSection.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,YAAY,EAAW,MAAM,OAAO,CAAC;AAInD,OAAO,EAAE,KAAK,gCAAgC,EAAE,MAAM,qBAAqB,CAAC;AAE5E,OAAO,EAEH,KAAK,6BAA6B,EACrC,MAAM,iEAAiE,CAAC;AAGzE,OAAO,EAAE,KAAK,eAAe,EAAE,KAAK,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAS1E,OAAO,EACH,KAAK,+BAA+B,EACpC,KAAK,6BAA6B,EAClC,KAAK,4BAA4B,EACjC,KAAK,qCAAqC,EAC1C,KAAK,gCAAgC,EACrC,KAAK,+BAA+B,EACpC,KAAK,8BAA8B,EACtC,MAAM,iBAAiB,CAAC;AAEzB;;GAEG;AACH,MAAM,WAAW,4BAA4B,CAAC,OAAO;IACjD,OAAO,EAAE,6BAA6B,CAAC,OAAO,CAAC,CAAC;IAChD,gBAAgB,CAAC,EAAE,gCAAgC,CAAC,OAAO,CAAC,CAAC;IAC7D,eAAe,CAAC,EAAE,+BAA+B,CAAC,OAAO,CAAC,CAAC;IAC3D,qBAAqB,CAAC,EAAE,qCAAqC,CAAC,OAAO,CAAC,CAAC;IACvE,aAAa,CAAC,EAAE,6BAA6B,CAAC,OAAO,CAAC,CAAC;IACvD,YAAY,CAAC,EAAE,4BAA4B,CAAC,OAAO,CAAC,CAAC;IACrD,cAAc,EAAE,8BAA8B,CAAC,OAAO,CAAC,CAAC;IACxD,eAAe,CAAC,EAAE,+BAA+B,CAAC,OAAO,CAAC,CAAC;IAC3D,mBAAmB,EAAE,MAAM,OAAO,CAAC;IACnC,UAAU,EAAE,UAAU,CAAC;IACvB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,oBAAoB,CAAC,EAAE,gCAAgC,CAAC;IACxD,gBAAgB,EAAE,eAAe,GAAG,SAAS,CAAC;CACjD;AA2BD,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,EAC5C,OAAO,EACP,eAAwC,EACxC,qBAA6C,EAC7C,aAAoC,EACpC,eAAe,EACf,YAAY,EACZ,cAAc,EACd,mBAAmB,EACnB,UAAU,EACV,oBAAoB,EACpB,gBAAgB,EACnB,EAAE,4BAA4B,CAAC,OAAO,CAAC,GAAG,YAAY,CAwGtD"}
@@ -1,6 +1,8 @@
1
1
  import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  // (C) 2007-2026 GoodData Corporation
3
3
  import { useMemo } from "react";
4
+ import { isEmpty } from "lodash-es";
5
+ import { getLayoutConfiguration } from "../../../_staging/dashboard/flexibleLayout/layoutConfiguration.js";
4
6
  import { getItemIndex, serializeLayoutItemPath } from "../../../_staging/layout/coordinates.js";
5
7
  import { useScreenSize } from "../../dashboard/components/DashboardScreenSizeContext.js";
6
8
  import { useSlideSizeStyle } from "../../dashboardContexts/useSlideData.js";
@@ -12,10 +14,35 @@ import { DashboardLayoutSectionRenderer } from "./DashboardLayoutSectionRenderer
12
14
  const defaultSectionRenderer = (props) => (_jsx(DashboardLayoutSectionRenderer, { ...props }));
13
15
  const defaultHeaderRenderer = (props) => (_jsx(DashboardLayoutSectionHeaderRenderer, { ...props }));
14
16
  const defaultItemKeyGetter = ({ item }) => serializeLayoutItemPath(item.index());
17
+ /**
18
+ * Whether the section header has anything to render, i.e. whether it occupies a grid row of the
19
+ * section. Mirrors the conditions of {@link DashboardLayoutViewSectionHeader} and of the section
20
+ * header renderers, which for an empty header emit a grid item that `.gd-grid-layout__item:empty`
21
+ * takes out of the flow.
22
+ *
23
+ * The export slide sizing needs this to know which grid row is the header one. Only ever consulted
24
+ * together with the node the header renderer actually returned - see `hasHeaderRow` below.
25
+ */
26
+ function hasVisibleSectionHeader(section) {
27
+ const { sections } = getLayoutConfiguration(section.layout().raw());
28
+ return sections.areHeadersEnabled && (!isEmpty(section.title()) || !isEmpty(section.description()));
29
+ }
15
30
  export function DashboardLayoutSection({ section, sectionRenderer = defaultSectionRenderer, sectionHeaderRenderer = defaultHeaderRenderer, itemKeyGetter = defaultItemKeyGetter, gridRowRenderer, itemRenderer, widgetRenderer, getLayoutDimensions, renderMode, parentLayoutItemSize, parentLayoutPath, }) {
16
31
  const showBorders = parentLayoutPath === undefined || parentLayoutPath.length === 0;
17
32
  const exportData = useSectionExportData(parentLayoutPath?.length ?? 0);
18
- const exportStyles = useSlideSizeStyle(renderMode, "section", parentLayoutPath);
33
+ const header = sectionHeaderRenderer({
34
+ section,
35
+ DefaultSectionHeaderRenderer: DashboardLayoutSectionHeaderRenderer,
36
+ parentLayoutItemSize,
37
+ parentLayoutPath,
38
+ exportData,
39
+ });
40
+ // sectionHeaderRenderer is a swappable callback, so the section metadata alone does not decide
41
+ // whether a header row exists - a custom renderer may return null for a section that has a title.
42
+ // Require both, so we never reserve a content-sized row that then gets filled by the first
43
+ // widget (which would collapse it, the very thing the export row sizing is fixing).
44
+ const hasHeaderRow = header !== null && header !== undefined && hasVisibleSectionHeader(section);
45
+ const exportStyles = useSlideSizeStyle(renderMode, "section", parentLayoutPath, hasHeaderRow);
19
46
  const renderProps = {
20
47
  section,
21
48
  renderMode,
@@ -57,12 +84,6 @@ export function DashboardLayoutSection({ section, sectionRenderer = defaultSecti
57
84
  ...renderProps,
58
85
  exportStyles,
59
86
  DefaultSectionRenderer: DashboardLayoutSectionRenderer,
60
- children: (_jsxs(_Fragment, { children: [sectionHeaderRenderer({
61
- section,
62
- DefaultSectionHeaderRenderer: DashboardLayoutSectionHeaderRenderer,
63
- parentLayoutItemSize,
64
- parentLayoutPath,
65
- exportData,
66
- }), items] })),
87
+ children: (_jsxs(_Fragment, { children: [header, items] })),
67
88
  });
68
89
  }
@@ -1 +1 @@
1
- {"version":3,"file":"DashboardLayoutSectionHeaderDescription.d.ts","sourceRoot":"","sources":["../../../../src/presentation/flexibleLayout/DefaultDashboardLayoutRenderer/DashboardLayoutSectionHeaderDescription.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,OAAO,CAAC;AAI3C,OAAO,EAAE,KAAK,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAOvE,OAAO,EAAE,KAAK,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAEnE;;GAEG;AACH,MAAM,WAAW,6CAA6C;IAC1D,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,qBAAqB,CAAC;IACnC,gBAAgB,CAAC,EAAE,aAAa,CAAC;IACjC,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,OAAO,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,wBAAgB,uCAAuC,CAAC,EACpD,WAAW,EACX,UAAU,EACV,gBAAgB,EAChB,gBAAgB,EAChB,OAAO,EACV,EAAE,6CAA6C,2CA6B/C"}
1
+ {"version":3,"file":"DashboardLayoutSectionHeaderDescription.d.ts","sourceRoot":"","sources":["../../../../src/presentation/flexibleLayout/DefaultDashboardLayoutRenderer/DashboardLayoutSectionHeaderDescription.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,OAAO,CAAC;AAI3C,OAAO,EAAE,KAAK,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAOvE,OAAO,EAAE,KAAK,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAEnE;;GAEG;AACH,MAAM,WAAW,6CAA6C;IAC1D,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,qBAAqB,CAAC;IACnC,gBAAgB,CAAC,EAAE,aAAa,CAAC;IACjC,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,OAAO,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,wBAAgB,uCAAuC,CAAC,EACpD,WAAW,EACX,UAAU,EACV,gBAAgB,EAChB,gBAAgB,EAChB,OAAO,EACV,EAAE,6CAA6C,2CA2B/C"}
@@ -3,17 +3,15 @@ import cx from "classnames";
3
3
  import { RichText } from "@gooddata/sdk-ui-kit";
4
4
  import { useSectionDescriptionFilters } from "../../../_staging/sharedHooks/useRichTextFilters.js";
5
5
  import { useDashboardSelector } from "../../../model/react/DashboardStoreProvider.js";
6
+ import { useDashboardExecConfig } from "../../../model/react/useWidgetExecConfig.js";
6
7
  import { selectSeparators } from "../../../model/store/config/configSelectors.js";
7
- import { selectExecutionTimestamp } from "../../../model/store/ui/uiSelectors.js";
8
8
  export function DashboardLayoutSectionHeaderDescription({ description, exportData, LoadingComponent, onLoadingChanged, onError, }) {
9
9
  const { loading, filters } = useSectionDescriptionFilters();
10
10
  const separators = useDashboardSelector(selectSeparators);
11
- const executionTimestamp = useDashboardSelector(selectExecutionTimestamp);
11
+ const execConfig = useDashboardExecConfig();
12
12
  const className = cx("gd-paragraph", "description", "s-fluid-layout-row-description");
13
13
  return (_jsx("div", { className: className, ...exportData?.description, children: _jsx(RichText, { className: "gd-layout-row-description-richtext", value: description, renderMode: "view", rawContent: {
14
14
  show: !!exportData?.richText,
15
15
  dataAttributes: exportData?.richText?.markdown,
16
- }, execConfig: {
17
- timestamp: executionTimestamp,
18
- }, referencesEnabled: true, filters: filters, isFiltersLoading: loading, separators: separators, LoadingComponent: LoadingComponent, onLoadingChanged: onLoadingChanged, onError: onError }) }));
16
+ }, execConfig: execConfig, referencesEnabled: true, filters: filters, isFiltersLoading: loading, separators: separators, LoadingComponent: LoadingComponent, onLoadingChanged: onLoadingChanged, onError: onError }) }));
19
17
  }
@@ -1 +1 @@
1
- {"version":3,"file":"SectionHeaderEditable.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/flexibleLayout/DefaultDashboardLayoutRenderer/EditableHeader/SectionHeaderEditable.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,YAAY,EAAoC,MAAM,OAAO,CAAC;AAO5E,OAAO,EAAE,KAAK,6BAA6B,EAAE,MAAM,oEAAoE,CAAC;AAkBxH,MAAM,WAAW,2BAA2B;IACxC,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,OAAO,EAAE,6BAA6B,CAAC,OAAO,CAAC,CAAC;CACnD;AAED,wBAAgB,qBAAqB,CAAC,EAClC,KAAK,EAAE,QAAa,EACpB,WAAW,EAAE,cAAmB,EAChC,OAAO,EACV,EAAE,2BAA2B,GAAG,YAAY,CA0H5C"}
1
+ {"version":3,"file":"SectionHeaderEditable.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/flexibleLayout/DefaultDashboardLayoutRenderer/EditableHeader/SectionHeaderEditable.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,YAAY,EAAoC,MAAM,OAAO,CAAC;AAO5E,OAAO,EAAE,KAAK,6BAA6B,EAAE,MAAM,oEAAoE,CAAC;AAkBxH,MAAM,WAAW,2BAA2B;IACxC,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,OAAO,EAAE,6BAA6B,CAAC,OAAO,CAAC,CAAC;CACnD;AAED,wBAAgB,qBAAqB,CAAC,EAClC,KAAK,EAAE,QAAa,EACpB,WAAW,EAAE,cAAmB,EAChC,OAAO,EACV,EAAE,2BAA2B,GAAG,YAAY,CAwH5C"}
@@ -8,9 +8,9 @@ import { serializeLayoutSectionPath } from "../../../../_staging/layout/coordina
8
8
  import { useSectionDescriptionFilters } from "../../../../_staging/sharedHooks/useRichTextFilters.js";
9
9
  import { changeNestedLayoutSectionHeader } from "../../../../model/commands/layout.js";
10
10
  import { useDashboardDispatch, useDashboardSelector, } from "../../../../model/react/DashboardStoreProvider.js";
11
+ import { useDashboardExecConfig } from "../../../../model/react/useWidgetExecConfig.js";
11
12
  import { selectSeparators } from "../../../../model/store/config/configSelectors.js";
12
13
  import { uiActions } from "../../../../model/store/ui/index.js";
13
- import { selectExecutionTimestamp } from "../../../../model/store/ui/uiSelectors.js";
14
14
  import { useDashboardComponentsContext } from "../../../dashboardContexts/DashboardComponentsContext.js";
15
15
  import { EditableLabelWithBubble } from "./EditableLabelWithBubble.js";
16
16
  import { MAX_TITLE_LENGTH, TITLE_LENGTH_WARNING_LIMIT, getTitle } from "./sectionHeaderHelper.js";
@@ -58,15 +58,13 @@ export function SectionHeaderEditable({ title: rawTitle = "", description: rawDe
58
58
  }, [rawDescription]);
59
59
  const serializedSectionIndex = serializeLayoutSectionPath(section.index());
60
60
  const isNestedLayout = section.layout().path() !== undefined;
61
- const executionTimestamp = useDashboardSelector(selectExecutionTimestamp);
61
+ const execConfig = useDashboardExecConfig();
62
62
  return (_jsxs("div", { className: cx("gd-row-header-edit", { "gd-row-header-edit--nested": isNestedLayout }), children: [
63
63
  _jsx("div", { className: "gd-editable-label-container gd-row-header-title-wrapper", children: _jsx(EditableLabelWithBubble, { className: cx(`gd-title-for-${serializedSectionIndex}`, "s-fluid-layout-row-title-input", "title", {
64
64
  "gd-heading-2": !isNestedLayout,
65
65
  "gd-heading-3": isNestedLayout,
66
66
  }), maxRows: 10, value: title || "", maxLength: MAX_TITLE_LENGTH, warningLimit: TITLE_LENGTH_WARNING_LIMIT, placeholderMessage: intl.formatMessage({ id: "layout.header.add.title.placeholder" }), alignTo: `.gd-title-for-${serializedSectionIndex}`, onSubmit: onTitleSubmit, onEditingStart: onEditingStart, onCancel: onEditingEnd }) }), _jsx("div", { className: "gd-editable-label-container gd-row-header-description-wrapper", children: _jsx("div", { className: cx("gd-editable-label-richtext s-fluid-layout-row-description-input", {
67
67
  "is-editing": isRichTextEditing,
68
- }), onClick: onDescriptionClick, onBlur: onDescriptionBlur, children: _jsx(RichTextWithTooltip, { value: richTextValue, renderMode: isRichTextEditing ? "edit" : "view", onChange: onRichTextChange, editRows: 10, editPlaceholder: placeholder, emptyElement: _jsx("div", { className: "gd-editable-label-richtext-empty", children: placeholder }), showTooltip: isRichTextEditing, tooltipAlignPoints: richTextTooltipAlignPoints, autoResize: true, referencesEnabled: true, filters: filters, isFiltersLoading: loading, separators: separators, LoadingComponent: LoadingComponent, execConfig: {
69
- timestamp: executionTimestamp,
70
- } }) }) })
68
+ }), onClick: onDescriptionClick, onBlur: onDescriptionBlur, children: _jsx(RichTextWithTooltip, { value: richTextValue, renderMode: isRichTextEditing ? "edit" : "view", onChange: onRichTextChange, editRows: 10, editPlaceholder: placeholder, emptyElement: _jsx("div", { className: "gd-editable-label-richtext-empty", children: placeholder }), showTooltip: isRichTextEditing, tooltipAlignPoints: richTextTooltipAlignPoints, autoResize: true, referencesEnabled: true, filters: filters, isFiltersLoading: loading, separators: separators, LoadingComponent: LoadingComponent, execConfig: execConfig }) }) })
71
69
  ] }));
72
70
  }
@@ -1,3 +1,3 @@
1
1
  import { type IDashboardLayoutSectionRenderProps } from "./interfaces.js";
2
- export declare function ExportableDashboardLayoutSectionRenderer({ children, parentLayoutItemSize, parentLayoutPath, className, isHidden, exportData }: IDashboardLayoutSectionRenderProps<unknown> & object): import("react/jsx-runtime").JSX.Element;
2
+ export declare function ExportableDashboardLayoutSectionRenderer({ children, parentLayoutItemSize, className, isHidden, exportData, exportStyles }: IDashboardLayoutSectionRenderProps<unknown> & object): import("react/jsx-runtime").JSX.Element;
3
3
  //# sourceMappingURL=ExportableDashboardLayoutSectionRenderer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ExportableDashboardLayoutSectionRenderer.d.ts","sourceRoot":"","sources":["../../../../src/presentation/flexibleLayout/DefaultDashboardLayoutRenderer/ExportableDashboardLayoutSectionRenderer.tsx"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,kCAAkC,EAAE,MAAM,iBAAiB,CAAC;AAK1E,wBAAgB,wCAAwC,CAAC,EACrD,QAAQ,EACR,oBAAoB,EACpB,gBAAgB,EAChB,SAAS,EACT,QAAQ,EACR,UAAU,EACb,EAAE,kCAAkC,CAAC,OAAO,CAAC,GAAG,MAAM,2CAiBtD"}
1
+ {"version":3,"file":"ExportableDashboardLayoutSectionRenderer.d.ts","sourceRoot":"","sources":["../../../../src/presentation/flexibleLayout/DefaultDashboardLayoutRenderer/ExportableDashboardLayoutSectionRenderer.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,kCAAkC,EAAE,MAAM,iBAAiB,CAAC;AAK1E,wBAAgB,wCAAwC,CAAC,EACrD,QAAQ,EACR,oBAAoB,EACpB,SAAS,EACT,QAAQ,EACR,UAAU,EACV,YAAY,EACf,EAAE,kCAAkC,CAAC,OAAO,CAAC,GAAG,MAAM,2CAetD"}
@@ -1,12 +1,9 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
2
  // (C) 2007-2026 GoodData Corporation
3
- import { useSlideSizeStyle } from "../../dashboardContexts/useSlideData.js";
4
3
  import { GridLayoutElement } from "./GridLayoutElement.js";
5
4
  const isHiddenStyle = { height: 0, width: 0, overflow: "hidden", flex: 0 };
6
5
  const defaultStyle = {};
7
- export function ExportableDashboardLayoutSectionRenderer({ children, parentLayoutItemSize, parentLayoutPath, className, isHidden, exportData, }) {
6
+ export function ExportableDashboardLayoutSectionRenderer({ children, parentLayoutItemSize, className, isHidden, exportData, exportStyles, }) {
8
7
  const style = isHidden ? isHiddenStyle : defaultStyle;
9
- const type = "section";
10
- const exportStyles = useSlideSizeStyle("export", type, parentLayoutPath);
11
- return (_jsx(GridLayoutElement, { type: type, layoutItemSize: parentLayoutItemSize, className: className, style: style, exportData: exportData, exportStyles: exportStyles, children: children }));
8
+ return (_jsx(GridLayoutElement, { type: "section", layoutItemSize: parentLayoutItemSize, className: className, style: style, exportData: exportData, exportStyles: exportStyles, children: children }));
12
9
  }
@@ -1 +1 @@
1
- {"version":3,"file":"InsightList.d.ts","sourceRoot":"","sources":["../../../src/presentation/insightList/InsightList.tsx"],"names":[],"mappings":"AAMA,OAAO,EACH,KAAK,QAAQ,EAShB,MAAM,qBAAqB,CAAC;AAkC7B,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAKpD,UAAU,gBAAgB;IACtB,OAAO,EAAE,QAAQ,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;CACvB;AAED,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,QAAQ,GAAG,gBAAgB,CAO5E;AAsCD;;GAEG;AACH,wBAAgB,WAAW,CAAC,EACxB,MAAM,EACN,KAAkB,EAClB,eAAe,EACf,UAAU,EACV,WAAW,EACX,QAAQ,EACX,EAAE,iBAAiB,2CA0OnB"}
1
+ {"version":3,"file":"InsightList.d.ts","sourceRoot":"","sources":["../../../src/presentation/insightList/InsightList.tsx"],"names":[],"mappings":"AAMA,OAAO,EACH,KAAK,QAAQ,EAShB,MAAM,qBAAqB,CAAC;AAgC7B,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAKpD,UAAU,gBAAgB;IACtB,OAAO,EAAE,QAAQ,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;CACvB;AAED,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,QAAQ,GAAG,gBAAgB,CAO5E;AAsCD;;GAEG;AACH,wBAAgB,WAAW,CAAC,EACxB,MAAM,EACN,KAAkB,EAClB,eAAe,EACf,UAAU,EACV,WAAW,EACX,QAAQ,EACX,EAAE,iBAAiB,2CAwOnB"}