@gooddata/sdk-ui-dashboard 11.54.0-alpha.6 → 11.54.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (138) hide show
  1. package/NOTICE +1 -1
  2. package/esm/__version.d.ts +1 -1
  3. package/esm/__version.d.ts.map +1 -1
  4. package/esm/__version.js +1 -1
  5. package/esm/presentation/automations/alerting/DefaultAlertingDialog/DefaultAlertingDialog.d.ts.map +1 -1
  6. package/esm/presentation/automations/alerting/DefaultAlertingDialog/DefaultAlertingDialog.js +25 -111
  7. package/esm/presentation/automations/alerting/DefaultAlertingDialog/hooks/useAlertSubmit.d.ts +19 -14
  8. package/esm/presentation/automations/alerting/DefaultAlertingDialog/hooks/useAlertSubmit.d.ts.map +1 -1
  9. package/esm/presentation/automations/alerting/DefaultAlertingDialog/hooks/useAlertSubmit.js +18 -2
  10. package/esm/presentation/automations/alerting/state/AlertActionsContext.d.ts +1 -10
  11. package/esm/presentation/automations/alerting/state/AlertActionsContext.d.ts.map +1 -1
  12. package/esm/presentation/automations/alerting/state/AlertDataContext.d.ts +1 -11
  13. package/esm/presentation/automations/alerting/state/AlertDataContext.d.ts.map +1 -1
  14. package/esm/presentation/automations/alerting/state/AlertDraftContext.d.ts +1 -11
  15. package/esm/presentation/automations/alerting/state/AlertDraftContext.d.ts.map +1 -1
  16. package/esm/presentation/automations/alerting/state/AlertFiltersContext.d.ts +1 -13
  17. package/esm/presentation/automations/alerting/state/AlertFiltersContext.d.ts.map +1 -1
  18. package/esm/presentation/automations/alerting/state/AlertingDialogStateProvider.d.ts.map +1 -1
  19. package/esm/presentation/automations/alerting/state/types.d.ts +156 -0
  20. package/esm/presentation/automations/alerting/state/types.d.ts.map +1 -0
  21. package/esm/presentation/automations/alerting/state/types.js +2 -0
  22. package/esm/presentation/automations/alerting/state/useAlertFiltersModel.d.ts +2 -8
  23. package/esm/presentation/automations/alerting/state/useAlertFiltersModel.d.ts.map +1 -1
  24. package/esm/presentation/automations/alerting/state/useAlertFormState.d.ts +4 -34
  25. package/esm/presentation/automations/alerting/state/useAlertFormState.d.ts.map +1 -1
  26. package/esm/presentation/automations/alerting/state/useAlertSupportedMetrics.d.ts +2 -11
  27. package/esm/presentation/automations/alerting/state/useAlertSupportedMetrics.d.ts.map +1 -1
  28. package/esm/presentation/automations/alerting/state/useAlertSupportedMetrics.js +2 -2
  29. package/esm/presentation/automations/alerting/state/useAlertingDialogRegionProps.d.ts +82 -0
  30. package/esm/presentation/automations/alerting/state/useAlertingDialogRegionProps.d.ts.map +1 -0
  31. package/esm/presentation/automations/alerting/state/useAlertingDialogRegionProps.js +152 -0
  32. package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/DefaultScheduledEmailDialog.d.ts.map +1 -1
  33. package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/DefaultScheduledEmailDialog.js +34 -145
  34. package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/hooks/useSaveScheduledEmailToBackend.d.ts +17 -2
  35. package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/hooks/useSaveScheduledEmailToBackend.d.ts.map +1 -1
  36. package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/hooks/useSaveScheduledEmailToBackend.js +16 -5
  37. package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/hooks/useScheduleTimezone.d.ts +2 -29
  38. package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/hooks/useScheduleTimezone.d.ts.map +1 -1
  39. package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/hooks/useScheduleTimezone.js +0 -14
  40. package/esm/presentation/automations/scheduledEmail/state/ScheduledEmailDialogStateProvider.d.ts.map +1 -1
  41. package/esm/presentation/automations/scheduledEmail/state/ScheduledEmailDialogStateProvider.js +3 -3
  42. package/esm/presentation/automations/scheduledEmail/state/ScheduledExportActionsContext.d.ts +1 -16
  43. package/esm/presentation/automations/scheduledEmail/state/ScheduledExportActionsContext.d.ts.map +1 -1
  44. package/esm/presentation/automations/scheduledEmail/state/ScheduledExportDataContext.d.ts +1 -12
  45. package/esm/presentation/automations/scheduledEmail/state/ScheduledExportDataContext.d.ts.map +1 -1
  46. package/esm/presentation/automations/scheduledEmail/state/ScheduledExportDraftContext.d.ts +1 -15
  47. package/esm/presentation/automations/scheduledEmail/state/ScheduledExportDraftContext.d.ts.map +1 -1
  48. package/esm/presentation/automations/scheduledEmail/state/ScheduledExportFiltersContext.d.ts +2 -14
  49. package/esm/presentation/automations/scheduledEmail/state/ScheduledExportFiltersContext.d.ts.map +1 -1
  50. package/esm/presentation/automations/scheduledEmail/state/types.d.ts +204 -0
  51. package/esm/presentation/automations/scheduledEmail/state/types.d.ts.map +1 -0
  52. package/esm/presentation/automations/scheduledEmail/state/types.js +2 -0
  53. package/esm/presentation/automations/scheduledEmail/state/useScheduledEmailDialogRegionProps.d.ts +105 -0
  54. package/esm/presentation/automations/scheduledEmail/state/useScheduledEmailDialogRegionProps.d.ts.map +1 -0
  55. package/esm/presentation/automations/scheduledEmail/state/useScheduledEmailDialogRegionProps.js +196 -0
  56. package/esm/presentation/automations/scheduledEmail/state/useScheduledEmailExportSettings.d.ts +3 -11
  57. package/esm/presentation/automations/scheduledEmail/state/useScheduledEmailExportSettings.d.ts.map +1 -1
  58. package/esm/presentation/automations/scheduledEmail/state/useScheduledEmailFiltersModel.d.ts +2 -20
  59. package/esm/presentation/automations/scheduledEmail/state/useScheduledEmailFiltersModel.d.ts.map +1 -1
  60. package/esm/presentation/automations/scheduledEmail/state/useScheduledEmailFiltersModel.js +1 -1
  61. package/esm/presentation/automations/scheduledEmail/state/useScheduledEmailFormState.d.ts +3 -20
  62. package/esm/presentation/automations/scheduledEmail/state/useScheduledEmailFormState.d.ts.map +1 -1
  63. package/esm/presentation/localization/bundles/de-DE.localization-bundle.d.ts +0 -1
  64. package/esm/presentation/localization/bundles/de-DE.localization-bundle.d.ts.map +1 -1
  65. package/esm/presentation/localization/bundles/de-DE.localization-bundle.js +0 -1
  66. package/esm/presentation/localization/bundles/en-AU.localization-bundle.d.ts +0 -1
  67. package/esm/presentation/localization/bundles/en-AU.localization-bundle.d.ts.map +1 -1
  68. package/esm/presentation/localization/bundles/en-AU.localization-bundle.js +0 -1
  69. package/esm/presentation/localization/bundles/en-GB.localization-bundle.d.ts +0 -1
  70. package/esm/presentation/localization/bundles/en-GB.localization-bundle.d.ts.map +1 -1
  71. package/esm/presentation/localization/bundles/en-GB.localization-bundle.js +0 -1
  72. package/esm/presentation/localization/bundles/es-419.localization-bundle.d.ts +0 -1
  73. package/esm/presentation/localization/bundles/es-419.localization-bundle.d.ts.map +1 -1
  74. package/esm/presentation/localization/bundles/es-419.localization-bundle.js +0 -1
  75. package/esm/presentation/localization/bundles/es-ES.localization-bundle.d.ts +0 -1
  76. package/esm/presentation/localization/bundles/es-ES.localization-bundle.d.ts.map +1 -1
  77. package/esm/presentation/localization/bundles/es-ES.localization-bundle.js +0 -1
  78. package/esm/presentation/localization/bundles/fi-FI.localization-bundle.d.ts +0 -1
  79. package/esm/presentation/localization/bundles/fi-FI.localization-bundle.d.ts.map +1 -1
  80. package/esm/presentation/localization/bundles/fi-FI.localization-bundle.js +0 -1
  81. package/esm/presentation/localization/bundles/fr-CA.localization-bundle.d.ts +0 -1
  82. package/esm/presentation/localization/bundles/fr-CA.localization-bundle.d.ts.map +1 -1
  83. package/esm/presentation/localization/bundles/fr-CA.localization-bundle.js +0 -1
  84. package/esm/presentation/localization/bundles/fr-FR.localization-bundle.d.ts +0 -1
  85. package/esm/presentation/localization/bundles/fr-FR.localization-bundle.d.ts.map +1 -1
  86. package/esm/presentation/localization/bundles/fr-FR.localization-bundle.js +0 -1
  87. package/esm/presentation/localization/bundles/id-ID.localization-bundle.d.ts +0 -1
  88. package/esm/presentation/localization/bundles/id-ID.localization-bundle.d.ts.map +1 -1
  89. package/esm/presentation/localization/bundles/id-ID.localization-bundle.js +0 -1
  90. package/esm/presentation/localization/bundles/it-IT.localization-bundle.d.ts +0 -1
  91. package/esm/presentation/localization/bundles/it-IT.localization-bundle.d.ts.map +1 -1
  92. package/esm/presentation/localization/bundles/it-IT.localization-bundle.js +0 -1
  93. package/esm/presentation/localization/bundles/ja-JP.localization-bundle.d.ts +0 -1
  94. package/esm/presentation/localization/bundles/ja-JP.localization-bundle.d.ts.map +1 -1
  95. package/esm/presentation/localization/bundles/ja-JP.localization-bundle.js +0 -1
  96. package/esm/presentation/localization/bundles/ko-KR.localization-bundle.d.ts +0 -1
  97. package/esm/presentation/localization/bundles/ko-KR.localization-bundle.d.ts.map +1 -1
  98. package/esm/presentation/localization/bundles/ko-KR.localization-bundle.js +0 -1
  99. package/esm/presentation/localization/bundles/nl-NL.localization-bundle.d.ts +0 -1
  100. package/esm/presentation/localization/bundles/nl-NL.localization-bundle.d.ts.map +1 -1
  101. package/esm/presentation/localization/bundles/nl-NL.localization-bundle.js +0 -1
  102. package/esm/presentation/localization/bundles/pl-PL.localization-bundle.d.ts +0 -1
  103. package/esm/presentation/localization/bundles/pl-PL.localization-bundle.d.ts.map +1 -1
  104. package/esm/presentation/localization/bundles/pl-PL.localization-bundle.js +0 -1
  105. package/esm/presentation/localization/bundles/pt-BR.localization-bundle.d.ts +0 -1
  106. package/esm/presentation/localization/bundles/pt-BR.localization-bundle.d.ts.map +1 -1
  107. package/esm/presentation/localization/bundles/pt-BR.localization-bundle.js +0 -1
  108. package/esm/presentation/localization/bundles/pt-PT.localization-bundle.d.ts +0 -1
  109. package/esm/presentation/localization/bundles/pt-PT.localization-bundle.d.ts.map +1 -1
  110. package/esm/presentation/localization/bundles/pt-PT.localization-bundle.js +0 -1
  111. package/esm/presentation/localization/bundles/ru-RU.localization-bundle.d.ts +0 -1
  112. package/esm/presentation/localization/bundles/ru-RU.localization-bundle.d.ts.map +1 -1
  113. package/esm/presentation/localization/bundles/ru-RU.localization-bundle.js +0 -1
  114. package/esm/presentation/localization/bundles/sl-SI.localization-bundle.d.ts +0 -1
  115. package/esm/presentation/localization/bundles/sl-SI.localization-bundle.d.ts.map +1 -1
  116. package/esm/presentation/localization/bundles/sl-SI.localization-bundle.js +0 -1
  117. package/esm/presentation/localization/bundles/th-TH.localization-bundle.d.ts +0 -1
  118. package/esm/presentation/localization/bundles/th-TH.localization-bundle.d.ts.map +1 -1
  119. package/esm/presentation/localization/bundles/th-TH.localization-bundle.js +0 -1
  120. package/esm/presentation/localization/bundles/tr-TR.localization-bundle.d.ts +0 -1
  121. package/esm/presentation/localization/bundles/tr-TR.localization-bundle.d.ts.map +1 -1
  122. package/esm/presentation/localization/bundles/tr-TR.localization-bundle.js +0 -1
  123. package/esm/presentation/localization/bundles/uk-UA.localization-bundle.d.ts +0 -1
  124. package/esm/presentation/localization/bundles/uk-UA.localization-bundle.d.ts.map +1 -1
  125. package/esm/presentation/localization/bundles/uk-UA.localization-bundle.js +0 -1
  126. package/esm/presentation/localization/bundles/vi-VN.localization-bundle.d.ts +0 -1
  127. package/esm/presentation/localization/bundles/vi-VN.localization-bundle.d.ts.map +1 -1
  128. package/esm/presentation/localization/bundles/vi-VN.localization-bundle.js +0 -1
  129. package/esm/presentation/localization/bundles/zh-HK.localization-bundle.d.ts +0 -1
  130. package/esm/presentation/localization/bundles/zh-HK.localization-bundle.d.ts.map +1 -1
  131. package/esm/presentation/localization/bundles/zh-HK.localization-bundle.js +0 -1
  132. package/esm/presentation/localization/bundles/zh-Hans.localization-bundle.d.ts +0 -1
  133. package/esm/presentation/localization/bundles/zh-Hans.localization-bundle.d.ts.map +1 -1
  134. package/esm/presentation/localization/bundles/zh-Hans.localization-bundle.js +0 -1
  135. package/esm/presentation/localization/bundles/zh-Hant.localization-bundle.d.ts +0 -1
  136. package/esm/presentation/localization/bundles/zh-Hant.localization-bundle.d.ts.map +1 -1
  137. package/esm/presentation/localization/bundles/zh-Hant.localization-bundle.js +0 -1
  138. package/package.json +25 -25
@@ -1,6 +1,21 @@
1
- import { type IAutomationMetadataObject, type IAutomationMetadataObjectDefinition } from "@gooddata/sdk-model";
2
1
  import { type IScheduledEmailDialogProps } from "../../types.js";
3
- export declare function useSaveScheduledEmailToBackend(automation: IAutomationMetadataObject | IAutomationMetadataObjectDefinition, { onSuccess, onError, onSubmit, onSaveSuccess, onSaveError, onSave }: Pick<IScheduledEmailDialogProps, "onSuccess" | "onError" | "onSubmit" | "onSaveSuccess" | "onSaveError" | "onSave">): {
2
+ /**
3
+ * Lifecycle callbacks of {@link useSaveScheduledEmailToBackend}: `onSubmit`/`onSuccess`/`onError`
4
+ * (create) and `onSave`/`onSaveSuccess`/`onSaveError` (edit).
5
+ *
6
+ * @internal
7
+ */
8
+ export type IUseSaveScheduledEmailCallbacks = Pick<IScheduledEmailDialogProps, "onSuccess" | "onError" | "onSubmit" | "onSaveSuccess" | "onSaveError" | "onSave">;
9
+ /**
10
+ * Saves the scheduled-export dialog's draft: creates a new schedule or updates the edited one after
11
+ * sanitizing it, keeps a 400 response's detail as an in-dialog error message, and routes everything
12
+ * else to the matching callback.
13
+ *
14
+ * Reads the draft from the scheduled-export state contexts, so it throws outside them.
15
+ *
16
+ * @internal
17
+ */
18
+ export declare function useSaveScheduledEmailToBackend({ onSuccess, onError, onSubmit, onSaveSuccess, onSaveError, onSave }: IUseSaveScheduledEmailCallbacks): {
4
19
  handleSaveScheduledEmail: () => void;
5
20
  isSavingScheduledEmail: boolean;
6
21
  savingErrorMessage: string | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"useSaveScheduledEmailToBackend.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/hooks/useSaveScheduledEmailToBackend.ts"],"names":[],"mappings":"AAOA,OAAO,EACH,KAAK,yBAAyB,EAC9B,KAAK,mCAAmC,EAO3C,MAAM,qBAAqB,CAAC;AAI7B,OAAO,EAAE,KAAK,0BAA0B,EAAE,MAAM,gBAAgB,CAAC;AAEjE,wBAAgB,8BAA8B,CAC1C,UAAU,EAAE,yBAAyB,GAAG,mCAAmC,EAC3E,EACI,SAAS,EACT,OAAO,EACP,QAAQ,EACR,aAAa,EACb,WAAW,EACX,MAAM,EACT,EAAE,IAAI,CACH,0BAA0B,EAC1B,WAAW,GAAG,SAAS,GAAG,UAAU,GAAG,eAAe,GAAG,aAAa,GAAG,QAAQ,CACpF;;;;EAwEJ"}
1
+ {"version":3,"file":"useSaveScheduledEmailToBackend.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/hooks/useSaveScheduledEmailToBackend.ts"],"names":[],"mappings":"AAqBA,OAAO,EAAE,KAAK,0BAA0B,EAAE,MAAM,gBAAgB,CAAC;AAEjE;;;;;GAKG;AACH,MAAM,MAAM,+BAA+B,GAAG,IAAI,CAC9C,0BAA0B,EAC1B,WAAW,GAAG,SAAS,GAAG,UAAU,GAAG,eAAe,GAAG,aAAa,GAAG,QAAQ,CACpF,CAAC;AAEF;;;;;;;;GAQG;AACH,wBAAgB,8BAA8B,CAAC,EAC3C,SAAS,EACT,OAAO,EACP,QAAQ,EACR,aAAa,EACb,WAAW,EACX,MAAM,EACT,EAAE,+BAA+B,GAAG;IACjC,wBAAwB,EAAE,MAAM,IAAI,CAAC;IACrC,sBAAsB,EAAE,OAAO,CAAC;IAChC,kBAAkB,EAAE,MAAM,GAAG,SAAS,CAAC;CAC1C,CAwEA"}
@@ -4,11 +4,22 @@ import { omit } from "lodash-es";
4
4
  import { useIntl } from "react-intl";
5
5
  import { isAllValuesAttributeFilter, isAllValuesDashboardAttributeFilter, isExportDefinitionDashboardRequestPayload, isExportDefinitionVisualizationObjectRequestPayload, } from "@gooddata/sdk-model";
6
6
  import { useScheduledEmailDialogContext } from "../../../contexts/ScheduledEmailDialogContext.js";
7
- export function useSaveScheduledEmailToBackend(automation, { onSuccess, onError, onSubmit, onSaveSuccess, onSaveError, onSave, }) {
7
+ import { useScheduledExportDraft } from "../../state/ScheduledExportDraftContext.js";
8
+ /**
9
+ * Saves the scheduled-export dialog's draft: creates a new schedule or updates the edited one after
10
+ * sanitizing it, keeps a 400 response's detail as an in-dialog error message, and routes everything
11
+ * else to the matching callback.
12
+ *
13
+ * Reads the draft from the scheduled-export state contexts, so it throws outside them.
14
+ *
15
+ * @internal
16
+ */
17
+ export function useSaveScheduledEmailToBackend({ onSuccess, onError, onSubmit, onSaveSuccess, onSaveError, onSave, }) {
8
18
  const intl = useIntl();
9
19
  const [savingErrorMessage, setSavingErrorMessage] = useState(undefined);
10
20
  const [isSavingScheduledEmail, setIsSavingScheduledEmail] = useState(false);
11
21
  const { createScheduledEmail, saveScheduledEmail } = useScheduledEmailDialogContext();
22
+ const { editedAutomation } = useScheduledExportDraft();
12
23
  const handleCreateScheduledEmail = useCallback(async (scheduledEmail) => {
13
24
  const sanitizedAutomation = sanitizeAutomation(scheduledEmail, intl);
14
25
  setSavingErrorMessage(undefined);
@@ -60,13 +71,13 @@ export function useSaveScheduledEmailToBackend(automation, { onSuccess, onError,
60
71
  }
61
72
  }, [saveScheduledEmail, intl, onSave, onSaveSuccess, onSaveError]);
62
73
  const handleSaveScheduledEmail = useCallback(() => {
63
- if (automation.id) {
64
- void handleUpdateScheduledEmail(automation);
74
+ if (editedAutomation.id) {
75
+ void handleUpdateScheduledEmail(editedAutomation);
65
76
  }
66
77
  else {
67
- void handleCreateScheduledEmail(automation);
78
+ void handleCreateScheduledEmail(editedAutomation);
68
79
  }
69
- }, [automation, handleUpdateScheduledEmail, handleCreateScheduledEmail]);
80
+ }, [editedAutomation, handleUpdateScheduledEmail, handleCreateScheduledEmail]);
70
81
  return { handleSaveScheduledEmail, isSavingScheduledEmail, savingErrorMessage };
71
82
  }
72
83
  function sanitizeAutomation(automationToSave, intl) {
@@ -1,6 +1,6 @@
1
1
  import { type Dispatch, type SetStateAction } from "react";
2
2
  import { type IAutomationMetadataObject, type IAutomationMetadataObjectDefinition, type IWidget } from "@gooddata/sdk-model";
3
- import { type IScheduleTimezoneSelection } from "../../types.js";
3
+ import { type IScheduleTimezoneState } from "../../state/types.js";
4
4
  export interface IUseScheduleTimezoneProps {
5
5
  scheduledExportToEdit?: IAutomationMetadataObject;
6
6
  widget?: IWidget;
@@ -16,32 +16,5 @@ export interface IUseScheduleTimezoneProps {
16
16
  * schedules offer the Default option. The cron `schedule.timezone` is a different concept (when
17
17
  * the schedule fires) and is never touched here.
18
18
  */
19
- export declare function useScheduleTimezone({ scheduledExportToEdit, widget, setEditedAutomation }: IUseScheduleTimezoneProps): {
20
- isTimezoneFeatureEnabled: boolean;
21
- canSelectScheduleTimezone: boolean;
22
- scheduleTimezoneSelection: IScheduleTimezoneSelection;
23
- /**
24
- * Concrete timezone the dashboard-schedule Default option currently resolves to
25
- * (display only).
26
- */
27
- defaultResolvedTimezone: string | undefined;
28
- onScheduleTimezoneChange: (timezoneId: string | undefined) => void;
29
- /**
30
- * True when the edited schedule cannot behave correctly as stored (widget schedule
31
- * missing a dashboard-scoped timezone); feeds the apply-current-state confirmation.
32
- */
33
- scheduleTimezoneIsStale: boolean;
34
- applyCurrentScheduleTimezone: () => void;
35
- /**
36
- * Live value for export definitions created after the dialog opened (attachment changes).
37
- * Active when the section is interactive, and also when an edited schedule carries a
38
- * stored timezone while the section is hidden — new definitions must then inherit the
39
- * stored value instead of the store-derived default.
40
- */
41
- scheduleTimezone: {
42
- active: boolean;
43
- timezoneId: string | undefined;
44
- };
45
- };
46
- export type ScheduleTimezoneState = ReturnType<typeof useScheduleTimezone>;
19
+ export declare function useScheduleTimezone({ scheduledExportToEdit, widget, setEditedAutomation }: IUseScheduleTimezoneProps): IScheduleTimezoneState;
47
20
  //# sourceMappingURL=useScheduleTimezone.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useScheduleTimezone.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/hooks/useScheduleTimezone.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,QAAQ,EAAE,KAAK,cAAc,EAAyB,MAAM,OAAO,CAAC;AAElF,OAAO,EACH,KAAK,yBAAyB,EAC9B,KAAK,mCAAmC,EACxC,KAAK,OAAO,EACf,MAAM,qBAAqB,CAAC;AAM7B,OAAO,EAAE,KAAK,0BAA0B,EAAE,MAAM,gBAAgB,CAAC;AAIjE,MAAM,WAAW,yBAAyB;IACtC,qBAAqB,CAAC,EAAE,yBAAyB,CAAC;IAClD,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,mBAAmB,EAAE,QAAQ,CAAC,cAAc,CAAC,mCAAmC,CAAC,CAAC,CAAC;CACtF;AAED;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,CAAC,EAChC,qBAAqB,EACrB,MAAM,EACN,mBAAmB,EACtB,EAAE,yBAAyB;;;;IAiEpB;;;OAGG;;;IAGH;;;OAGG;;;IAGH;;;;;OAKG;;;;;EAMV;AAED,MAAM,MAAM,qBAAqB,GAAG,UAAU,CAAC,OAAO,mBAAmB,CAAC,CAAC"}
1
+ {"version":3,"file":"useScheduleTimezone.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/hooks/useScheduleTimezone.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,QAAQ,EAAE,KAAK,cAAc,EAAyB,MAAM,OAAO,CAAC;AAElF,OAAO,EACH,KAAK,yBAAyB,EAC9B,KAAK,mCAAmC,EACxC,KAAK,OAAO,EACf,MAAM,qBAAqB,CAAC;AAM7B,OAAO,EAAE,KAAK,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAKnE,MAAM,WAAW,yBAAyB;IACtC,qBAAqB,CAAC,EAAE,yBAAyB,CAAC;IAClD,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,mBAAmB,EAAE,QAAQ,CAAC,cAAc,CAAC,mCAAmC,CAAC,CAAC,CAAC;CACtF;AAED;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,CAAC,EAChC,qBAAqB,EACrB,MAAM,EACN,mBAAmB,EACtB,EAAE,yBAAyB,GAAG,sBAAsB,CA0EpD"}
@@ -64,24 +64,10 @@ export function useScheduleTimezone({ scheduledExportToEdit, widget, setEditedAu
64
64
  isTimezoneFeatureEnabled,
65
65
  canSelectScheduleTimezone,
66
66
  scheduleTimezoneSelection: selection,
67
- /**
68
- * Concrete timezone the dashboard-schedule Default option currently resolves to
69
- * (display only).
70
- */
71
67
  defaultResolvedTimezone,
72
68
  onScheduleTimezoneChange,
73
- /**
74
- * True when the edited schedule cannot behave correctly as stored (widget schedule
75
- * missing a dashboard-scoped timezone); feeds the apply-current-state confirmation.
76
- */
77
69
  scheduleTimezoneIsStale,
78
70
  applyCurrentScheduleTimezone,
79
- /**
80
- * Live value for export definitions created after the dialog opened (attachment changes).
81
- * Active when the section is interactive, and also when an edited schedule carries a
82
- * stored timezone while the section is hidden — new definitions must then inherit the
83
- * stored value instead of the store-derived default.
84
- */
85
71
  scheduleTimezone: {
86
72
  active: canSelectScheduleTimezone || !!storedTimezoneId,
87
73
  timezoneId: selection.shouldSave ? selection.id : undefined,
@@ -1 +1 @@
1
- {"version":3,"file":"ScheduledEmailDialogStateProvider.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/automations/scheduledEmail/state/ScheduledEmailDialogStateProvider.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,SAAS,EAAW,MAAM,OAAO,CAAC;AA0BhD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,iCAAiC,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,EAAE,SAAS,CAAA;CAAE,2CAQtF"}
1
+ {"version":3,"file":"ScheduledEmailDialogStateProvider.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/automations/scheduledEmail/state/ScheduledEmailDialogStateProvider.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,SAAS,EAAW,MAAM,OAAO,CAAC;AAsBhD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,iCAAiC,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,EAAE,SAAS,CAAA;CAAE,2CAQtF"}
@@ -6,9 +6,9 @@ import { useScheduledEmailDialogContext } from "../../contexts/ScheduledEmailDia
6
6
  import { useAutomationFiltersSelect } from "../../shared/automationFilters/useAutomationFiltersSelect.js";
7
7
  import { useScheduleTimezone } from "../DefaultScheduledEmailDialog/hooks/useScheduleTimezone.js";
8
8
  import { getDefaultPdfPageSize } from "../utils/pdfPageSize.js";
9
- import { ScheduledExportActionsContextProvider, } from "./ScheduledExportActionsContext.js";
10
- import { ScheduledExportDataContextProvider, } from "./ScheduledExportDataContext.js";
11
- import { ScheduledExportDraftContextProvider, } from "./ScheduledExportDraftContext.js";
9
+ import { ScheduledExportActionsContextProvider } from "./ScheduledExportActionsContext.js";
10
+ import { ScheduledExportDataContextProvider } from "./ScheduledExportDataContext.js";
11
+ import { ScheduledExportDraftContextProvider } from "./ScheduledExportDraftContext.js";
12
12
  import { ScheduledExportFiltersContextProvider } from "./ScheduledExportFiltersContext.js";
13
13
  import { useScheduledEmailEffectiveFilters } from "./useScheduledEmailEffectiveFilters.js";
14
14
  import { useScheduledEmailExportSettings } from "./useScheduledEmailExportSettings.js";
@@ -1,19 +1,4 @@
1
- import { type useScheduleTimezone } from "../DefaultScheduledEmailDialog/hooks/useScheduleTimezone.js";
2
- import { type useScheduledEmailExportSettings } from "./useScheduledEmailExportSettings.js";
3
- import { type useScheduledEmailFormState } from "./useScheduledEmailFormState.js";
4
- /**
5
- * The scheduled-export dialog's draft mutators: the form fields' change handlers, the raw draft
6
- * setter, and the attachment handlers, which rebuild the automation's export definitions while
7
- * carrying the stored export-parameter wire across the rebuild.
8
- *
9
- * Every handler holds its identity across a keystroke, so a consumer that only mutates does not
10
- * re-render while the draft changes. The two attachment handlers are rebuilt when the filters they
11
- * write into a new export definition change. The shape is derived from `useScheduledEmailFormState`
12
- * and `useScheduledEmailExportSettings`, which own these handlers.
13
- *
14
- * @internal
15
- */
16
- export type IScheduledExportActionsContextValue = Pick<ReturnType<typeof useScheduledEmailFormState>, "setEditedAutomation" | "onTitleChange" | "onRecurrenceChange" | "onEvaluationModeChange" | "onDestinationChange" | "onRecipientsChange" | "onSubjectChange" | "onMessageChange"> & Pick<ReturnType<typeof useScheduledEmailExportSettings>, "onDashboardAttachmentsChange" | "onWidgetAttachmentsChange" | "onXlsxSettingsChange" | "onPdfSettingsChange" | "onCsvSettingsChange" | "onCsvRawSettingsChange" | "onSlidesTemplateIdChange"> & Pick<ReturnType<typeof useScheduleTimezone>, "onScheduleTimezoneChange" | "applyCurrentScheduleTimezone">;
1
+ import { type IScheduledExportActionsContextValue } from "./types.js";
17
2
  export declare const ScheduledExportActionsContextProvider: import("react").Provider<IScheduledExportActionsContextValue | undefined>;
18
3
  /**
19
4
  * Reads the scheduled-export dialog's draft mutators.
@@ -1 +1 @@
1
- {"version":3,"file":"ScheduledExportActionsContext.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/automations/scheduledEmail/state/ScheduledExportActionsContext.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,6DAA6D,CAAC;AAGvG,OAAO,EAAE,KAAK,+BAA+B,EAAE,MAAM,sCAAsC,CAAC;AAC5F,OAAO,EAAE,KAAK,0BAA0B,EAAE,MAAM,iCAAiC,CAAC;AAElF;;;;;;;;;;;GAWG;AACH,MAAM,MAAM,mCAAmC,GAAG,IAAI,CAClD,UAAU,CAAC,OAAO,0BAA0B,CAAC,EAC3C,qBAAqB,GACrB,eAAe,GACf,oBAAoB,GACpB,wBAAwB,GACxB,qBAAqB,GACrB,oBAAoB,GACpB,iBAAiB,GACjB,iBAAiB,CACtB,GACG,IAAI,CACA,UAAU,CAAC,OAAO,+BAA+B,CAAC,EAChD,8BAA8B,GAC9B,2BAA2B,GAC3B,sBAAsB,GACtB,qBAAqB,GACrB,qBAAqB,GACrB,wBAAwB,GACxB,0BAA0B,CAC/B,GACD,IAAI,CAAC,UAAU,CAAC,OAAO,mBAAmB,CAAC,EAAE,0BAA0B,GAAG,8BAA8B,CAAC,CAAC;AAO9G,eAAO,MAAM,qCAAqC,2EAAyC,CAAC;AAE5F;;;;;;;;;GASG;AACH,wBAAgB,yBAAyB,IAAI,mCAAmC,CAK/E"}
1
+ {"version":3,"file":"ScheduledExportActionsContext.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/automations/scheduledEmail/state/ScheduledExportActionsContext.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,mCAAmC,EAAE,MAAM,YAAY,CAAC;AAOtE,eAAO,MAAM,qCAAqC,2EAAyC,CAAC;AAE5F;;;;;;;;;GASG;AACH,wBAAgB,yBAAyB,IAAI,mCAAmC,CAK/E"}
@@ -1,15 +1,4 @@
1
- import { type useScheduledEmailFormState } from "./useScheduledEmailFormState.js";
2
- /**
3
- * The scheduled-export dialog's recipient defaults: the logged-in user as a recipient, and the
4
- * recipient a new schedule is seeded with, which an external-recipient override replaces.
5
- *
6
- * Changes when the current user or the override changes, so not while the draft is edited. Two
7
- * members is the whole of it: this dialog loads no execution data. The shape is derived from
8
- * `useScheduledEmailFormState`, which owns these values.
9
- *
10
- * @internal
11
- */
12
- export type IScheduledExportDataContextValue = Pick<ReturnType<typeof useScheduledEmailFormState>, "defaultUser" | "defaultRecipient">;
1
+ import { type IScheduledExportDataContextValue } from "./types.js";
13
2
  export declare const ScheduledExportDataContextProvider: import("react").Provider<IScheduledExportDataContextValue | undefined>;
14
3
  /**
15
4
  * Reads the scheduled-export dialog's recipient defaults.
@@ -1 +1 @@
1
- {"version":3,"file":"ScheduledExportDataContext.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/automations/scheduledEmail/state/ScheduledExportDataContext.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,0BAA0B,EAAE,MAAM,iCAAiC,CAAC;AAElF;;;;;;;;;GASG;AACH,MAAM,MAAM,gCAAgC,GAAG,IAAI,CAC/C,UAAU,CAAC,OAAO,0BAA0B,CAAC,EAC7C,aAAa,GAAG,kBAAkB,CACrC,CAAC;AAKF,eAAO,MAAM,kCAAkC,wEAAsC,CAAC;AAEtF;;;;;;;;;GASG;AACH,wBAAgB,sBAAsB,IAAI,gCAAgC,CAKzE"}
1
+ {"version":3,"file":"ScheduledExportDataContext.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/automations/scheduledEmail/state/ScheduledExportDataContext.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,gCAAgC,EAAE,MAAM,YAAY,CAAC;AAKnE,eAAO,MAAM,kCAAkC,wEAAsC,CAAC;AAEtF;;;;;;;;;GASG;AACH,wBAAgB,sBAAsB,IAAI,gCAAgC,CAKzE"}
@@ -1,18 +1,4 @@
1
- import { type useScheduleTimezone } from "../DefaultScheduledEmailDialog/hooks/useScheduleTimezone.js";
2
- import { type useScheduledEmailFormState } from "./useScheduledEmailFormState.js";
3
- /**
4
- * The scheduled-export dialog's edit draft: the automation being edited, the baseline it is
5
- * compared against for the submit gate, the normalized start date, and the per-field validity
6
- * flags the form fields report back.
7
- *
8
- * Changes on every keystroke; consumers re-render by design. The shape is derived from
9
- * `useScheduledEmailFormState`, which owns these values, and `useScheduleTimezone`, which owns the
10
- * "Time zone" section's view state (a timezone pick also edits the draft's export definitions, so
11
- * the selection changes together with the draft).
12
- *
13
- * @internal
14
- */
15
- export type IScheduledExportDraftContextValue = Pick<ReturnType<typeof useScheduledEmailFormState>, "editedAutomation" | "originalAutomation" | "startDate" | "isCronValid" | "isTitleValid" | "isSubjectValid" | "isOnMessageValid"> & Pick<ReturnType<typeof useScheduleTimezone>, "isTimezoneFeatureEnabled" | "canSelectScheduleTimezone" | "scheduleTimezoneSelection" | "defaultResolvedTimezone" | "scheduleTimezoneIsStale">;
1
+ import { type IScheduledExportDraftContextValue } from "./types.js";
16
2
  export declare const ScheduledExportDraftContextProvider: import("react").Provider<IScheduledExportDraftContextValue | undefined>;
17
3
  /**
18
4
  * Reads the scheduled-export dialog's edit draft.
@@ -1 +1 @@
1
- {"version":3,"file":"ScheduledExportDraftContext.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/automations/scheduledEmail/state/ScheduledExportDraftContext.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,6DAA6D,CAAC;AAGvG,OAAO,EAAE,KAAK,0BAA0B,EAAE,MAAM,iCAAiC,CAAC;AAElF;;;;;;;;;;;GAWG;AACH,MAAM,MAAM,iCAAiC,GAAG,IAAI,CAChD,UAAU,CAAC,OAAO,0BAA0B,CAAC,EAC3C,kBAAkB,GAClB,oBAAoB,GACpB,WAAW,GACX,aAAa,GACb,cAAc,GACd,gBAAgB,GAChB,kBAAkB,CACvB,GACG,IAAI,CACA,UAAU,CAAC,OAAO,mBAAmB,CAAC,EACpC,0BAA0B,GAC1B,2BAA2B,GAC3B,2BAA2B,GAC3B,yBAAyB,GACzB,yBAAyB,CAC9B,CAAC;AAKN,eAAO,MAAM,mCAAmC,yEAAuC,CAAC;AAExF;;;;;;;;;GASG;AACH,wBAAgB,uBAAuB,IAAI,iCAAiC,CAK3E"}
1
+ {"version":3,"file":"ScheduledExportDraftContext.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/automations/scheduledEmail/state/ScheduledExportDraftContext.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,iCAAiC,EAAE,MAAM,YAAY,CAAC;AAKpE,eAAO,MAAM,mCAAmC,yEAAuC,CAAC;AAExF;;;;;;;;;GASG;AACH,wBAAgB,uBAAuB,IAAI,iCAAiC,CAK3E"}
@@ -1,17 +1,5 @@
1
- import { type useScheduledEmailFiltersModel } from "./useScheduledEmailFiltersModel.js";
2
- /**
3
- * The scheduled-export dialog's filter and export-parameter model: the current selection and the
4
- * available filters, flat and per-tab, the handlers that mutate them and mirror the result into the
5
- * draft, the store-filters toggle, the staleness gate that opens the apply-current-filters dialog,
6
- * and the parameter chips with their add, change, delete and apply-latest handlers.
7
- *
8
- * The model's whole return is the context value rather than a selection from it, because the model
9
- * is the unit a replacement reads: a member cannot be dropped from it.
10
- *
11
- * @internal
12
- */
13
- export type IScheduledExportFiltersContextValue = ReturnType<typeof useScheduledEmailFiltersModel>;
14
- export declare const ScheduledExportFiltersContextProvider: import("react").Provider<import("./useScheduledEmailFiltersModel.js").IUseScheduledEmailFiltersModel | undefined>;
1
+ import { type IScheduledExportFiltersContextValue } from "./types.js";
2
+ export declare const ScheduledExportFiltersContextProvider: import("react").Provider<IScheduledExportFiltersContextValue | undefined>;
15
3
  /**
16
4
  * Reads the scheduled-export dialog's filter and export-parameter model.
17
5
  *
@@ -1 +1 @@
1
- {"version":3,"file":"ScheduledExportFiltersContext.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/automations/scheduledEmail/state/ScheduledExportFiltersContext.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,6BAA6B,EAAE,MAAM,oCAAoC,CAAC;AAExF;;;;;;;;;;GAUG;AACH,MAAM,MAAM,mCAAmC,GAAG,UAAU,CAAC,OAAO,6BAA6B,CAAC,CAAC;AAOnG,eAAO,MAAM,qCAAqC,mHAAyC,CAAC;AAE5F;;;;;;;;;GASG;AACH,wBAAgB,yBAAyB,IAAI,mCAAmC,CAK/E"}
1
+ {"version":3,"file":"ScheduledExportFiltersContext.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/automations/scheduledEmail/state/ScheduledExportFiltersContext.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,mCAAmC,EAAE,MAAM,YAAY,CAAC;AAOtE,eAAO,MAAM,qCAAqC,2EAAyC,CAAC;AAE5F;;;;;;;;;GASG;AACH,wBAAgB,yBAAyB,IAAI,mCAAmC,CAK/E"}
@@ -0,0 +1,204 @@
1
+ import { type Dispatch, type SetStateAction } from "react";
2
+ import { type DashboardAttachmentType, type FilterContextItem, type IAutomationMetadataObjectDefinition, type IAutomationRecipient, type IDashboardExportParameter, type IExportDefinitionVisualizationObjectSettings, type IdentifierRef, type ParameterValue, type WidgetAttachmentType } from "@gooddata/sdk-model";
3
+ import { type IAutomationFiltersTab } from "../../../../model/store/filtering/types.js";
4
+ import { type IAutomationParameter } from "../../shared/automationFilters/automationParameters.js";
5
+ import { type IScheduleTimezoneSelection } from "../types.js";
6
+ /**
7
+ * The scheduled-export dialog's edit draft: the automation being edited, its baseline, the derived
8
+ * start date, the per-field validity flags, and the "Time zone" section's state.
9
+ *
10
+ * Changes on every keystroke; consumers re-render by design.
11
+ *
12
+ * @internal
13
+ */
14
+ export interface IScheduledExportDraftContextValue {
15
+ editedAutomation: IAutomationMetadataObjectDefinition;
16
+ /**
17
+ * The draft as it was when the dialog opened; the dirty check compares against it.
18
+ */
19
+ originalAutomation: IAutomationMetadataObjectDefinition;
20
+ /**
21
+ * The schedule's first run in the user's timezone, normalized for the recurrence form.
22
+ */
23
+ startDate: Date;
24
+ isCronValid: boolean;
25
+ isTitleValid: boolean;
26
+ isSubjectValid: boolean;
27
+ isOnMessageValid: boolean;
28
+ /**
29
+ * The enableTimezoneChange setting; timezone-related presentation is gated by it.
30
+ */
31
+ isTimezoneFeatureEnabled: boolean;
32
+ /**
33
+ * Whether the schedule may define its own export timezone (the "Time zone" section renders).
34
+ */
35
+ canSelectScheduleTimezone: boolean;
36
+ scheduleTimezoneSelection: IScheduleTimezoneSelection;
37
+ /**
38
+ * Concrete timezone the dashboard-schedule Default option currently resolves to (display only).
39
+ */
40
+ defaultResolvedTimezone: string | undefined;
41
+ /**
42
+ * True when the edited schedule cannot behave correctly as stored (widget schedule missing a
43
+ * dashboard-scoped timezone); feeds the apply-current-state confirmation.
44
+ */
45
+ scheduleTimezoneIsStale: boolean;
46
+ }
47
+ /**
48
+ * The scheduled-export dialog's mutators: the draft setter, the form change-handlers, the
49
+ * attachment handlers and the "Time zone" section handlers.
50
+ *
51
+ * Changes rarely.
52
+ *
53
+ * @internal
54
+ */
55
+ export interface IScheduledExportActionsContextValue {
56
+ setEditedAutomation: Dispatch<SetStateAction<IAutomationMetadataObjectDefinition>>;
57
+ onTitleChange: (value: string) => void;
58
+ onRecurrenceChange: (cronExpression: string, startDate: Date | null, isValid: boolean) => void;
59
+ onEvaluationModeChange: (isShared: boolean) => void;
60
+ onDestinationChange: (notificationChannelId: string) => void;
61
+ onRecipientsChange: (recipients: IAutomationRecipient[]) => void;
62
+ onSubjectChange: (value: string | number, isValid: boolean) => void;
63
+ onMessageChange: (value: string, isValid: boolean) => void;
64
+ /**
65
+ * Replaces the dashboard export formats; new definitions inherit the current filters and timezone.
66
+ */
67
+ onDashboardAttachmentsChange: (formats: DashboardAttachmentType[]) => void;
68
+ /**
69
+ * Replaces the widget export formats; throws when the dialog has no widget.
70
+ */
71
+ onWidgetAttachmentsChange: (formats: WidgetAttachmentType[]) => void;
72
+ onXlsxSettingsChange: (settings: IExportDefinitionVisualizationObjectSettings) => void;
73
+ onPdfSettingsChange: (settings: IExportDefinitionVisualizationObjectSettings) => void;
74
+ onCsvSettingsChange: (settings: IExportDefinitionVisualizationObjectSettings) => void;
75
+ onCsvRawSettingsChange: (settings: IExportDefinitionVisualizationObjectSettings) => void;
76
+ onSlidesTemplateIdChange: (templateId: string | undefined, format: "PPTX" | "PDF_SLIDES" | "PDF") => void;
77
+ /**
78
+ * Picks the export-content timezone; undefined selects the Default option.
79
+ */
80
+ onScheduleTimezoneChange: (timezoneId: string | undefined) => void;
81
+ /**
82
+ * Repairs a stale schedule timezone with the currently effective one.
83
+ */
84
+ applyCurrentScheduleTimezone: () => void;
85
+ }
86
+ /**
87
+ * The scheduled-export dialog's recipient defaults: the logged-in user as a recipient, and the
88
+ * recipient a new schedule is seeded with, which an external-recipient override replaces.
89
+ *
90
+ * Changes when the current user or the override changes, so not while the draft is edited.
91
+ *
92
+ * @internal
93
+ */
94
+ export interface IScheduledExportDataContextValue {
95
+ defaultUser: IAutomationRecipient;
96
+ defaultRecipient: IAutomationRecipient;
97
+ }
98
+ /**
99
+ * The scheduled-export dialog's filter and export-parameter model: the current selection and
100
+ * available filters (flat and per tab), the handlers that mutate them, the staleness gate, and the
101
+ * export-parameter chips with their handlers.
102
+ *
103
+ * Changes when a filter, a parameter or the store-filters toggle is edited; never per keystroke.
104
+ *
105
+ * @internal
106
+ */
107
+ export interface IScheduledExportFiltersContextValue {
108
+ selectedFilters: FilterContextItem[];
109
+ availableFilters: FilterContextItem[] | undefined;
110
+ /**
111
+ * Whether the schedule stores its own filters instead of using the latest saved dashboard filters.
112
+ */
113
+ storeFilters: boolean;
114
+ /**
115
+ * Filters structured per dashboard tab; present with more than one tab.
116
+ */
117
+ filtersByTab: IAutomationFiltersTab[] | undefined;
118
+ editedFiltersByTab: Record<string, FilterContextItem[]> | undefined;
119
+ /**
120
+ * Replaces the selection with the complete updated array and mirrors it into the export
121
+ * definitions. `storeFiltersParam` overrides the current toggle value for this write.
122
+ */
123
+ onFiltersChange: (filters: FilterContextItem[], storeFiltersParam?: boolean) => void;
124
+ onFiltersByTabChange: (newFiltersByTab: Record<string, FilterContextItem[]>, storeFiltersParam?: boolean) => void;
125
+ /**
126
+ * Replaces the selection with the dashboard's current filters (the stale-filters repair).
127
+ */
128
+ onApplyCurrentFilters: () => void;
129
+ /**
130
+ * Toggles filter and parameter persistence. The current filters must be passed back — flat mode
131
+ * as `(value, filters, undefined)`, by-tab mode as `(value, undefined, filtersByTab)`.
132
+ */
133
+ onStoreFiltersChange: (value: boolean, filters?: FilterContextItem[], filtersByTabParam?: Record<string, FilterContextItem[]>) => void;
134
+ /**
135
+ * False when the saved filters or the saved parameters no longer match the dashboard; gates the
136
+ * stale-filters confirmation.
137
+ */
138
+ automationIsValid: boolean;
139
+ /**
140
+ * Whether the saved filters alone no longer match the dashboard.
141
+ */
142
+ filtersAreStale: boolean;
143
+ parametersEnabled: boolean;
144
+ /**
145
+ * Per-tab visible parameters to render as chips.
146
+ */
147
+ visibleParametersByTab: Record<string, IAutomationParameter[]>;
148
+ /**
149
+ * Per-tab workspace parameters addable via the "+" menu.
150
+ */
151
+ availableParametersByTab: Record<string, IAutomationParameter[]>;
152
+ /**
153
+ * The tab the flat (non-tabbed) UI edits; undefined for multi-tab dashboards or when no
154
+ * parameter context applies.
155
+ */
156
+ flatTabId: string | undefined;
157
+ onParameterAdd: (ref: IdentifierRef) => void;
158
+ onParameterChange: (ref: IdentifierRef, value: ParameterValue) => void;
159
+ onParameterDelete: (ref: IdentifierRef) => void;
160
+ onParameterAddByTab: (tabId: string, ref: IdentifierRef) => void;
161
+ onParameterChangeByTab: (tabId: string, ref: IdentifierRef, value: ParameterValue) => void;
162
+ onParameterDeleteByTab: (tabId: string, ref: IdentifierRef) => void;
163
+ /**
164
+ * Resets the parameters to the dashboard's current effective values (the "apply latest" flow).
165
+ */
166
+ applyLatest: () => void;
167
+ /**
168
+ * Re-encodes the parameters onto the automation with the new persistence value.
169
+ */
170
+ onStoreParametersChange: (storeParameters: boolean) => void;
171
+ }
172
+ /**
173
+ * Return type of `useScheduledEmailFormState`, composed from the context values it feeds.
174
+ *
175
+ * @internal
176
+ */
177
+ export type IScheduledEmailFormState = Pick<IScheduledExportDraftContextValue, "editedAutomation" | "originalAutomation" | "startDate" | "isCronValid" | "isTitleValid" | "isSubjectValid" | "isOnMessageValid"> & Pick<IScheduledExportActionsContextValue, "setEditedAutomation" | "onTitleChange" | "onRecurrenceChange" | "onEvaluationModeChange" | "onDestinationChange" | "onRecipientsChange" | "onSubjectChange" | "onMessageChange"> & IScheduledExportDataContextValue;
178
+ /**
179
+ * Return type of `useScheduledEmailExportSettings`: the attachment handlers plus the
180
+ * parameter-wire writer only the filters model consumes.
181
+ *
182
+ * @internal
183
+ */
184
+ export type IScheduledEmailExportSettings = Pick<IScheduledExportActionsContextValue, "onDashboardAttachmentsChange" | "onWidgetAttachmentsChange" | "onXlsxSettingsChange" | "onPdfSettingsChange" | "onCsvSettingsChange" | "onCsvRawSettingsChange" | "onSlidesTemplateIdChange"> & {
185
+ setParametersWire: (wire: Record<string, IDashboardExportParameter[]> | undefined) => void;
186
+ };
187
+ /**
188
+ * Return type of `useScheduleTimezone`: the "Time zone" section's state and handlers plus the live
189
+ * value export-definition rebuilds read.
190
+ *
191
+ * @internal
192
+ */
193
+ export type IScheduleTimezoneState = Pick<IScheduledExportDraftContextValue, "isTimezoneFeatureEnabled" | "canSelectScheduleTimezone" | "scheduleTimezoneSelection" | "defaultResolvedTimezone" | "scheduleTimezoneIsStale"> & Pick<IScheduledExportActionsContextValue, "onScheduleTimezoneChange" | "applyCurrentScheduleTimezone"> & {
194
+ /**
195
+ * Live value for export definitions created after the dialog opened. Active when the section
196
+ * is interactive, and also when an edited schedule carries a stored timezone while the
197
+ * section is hidden.
198
+ */
199
+ scheduleTimezone: {
200
+ active: boolean;
201
+ timezoneId: string | undefined;
202
+ };
203
+ };
204
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/automations/scheduledEmail/state/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ // (C) 2026 GoodData Corporation
2
+ export {};
@@ -0,0 +1,105 @@
1
+ import { type KeyboardEvent, type Ref } from "react";
2
+ import { type IAutomationDialogActionBarProps, type IAutomationDialogDestinationProps } from "../../shared/slots/types.js";
3
+ import { type IScheduledEmailDialogFiltersProps, type IScheduledEmailDialogRecipientsProps, type ScheduledEmailDialogHeaderDefaultProps, type ScheduledEmailDialogTimezoneDefaultProps } from "../types.js";
4
+ /**
5
+ * Inputs of {@link useScheduledEmailDialogHeaderProps} that come from the dialog rather than its state.
6
+ *
7
+ * @internal
8
+ */
9
+ export interface IUseScheduledEmailDialogHeaderPropsInput {
10
+ /**
11
+ * Returns to the management dialog; the header's back button calls it.
12
+ */
13
+ onBack?: () => void;
14
+ /**
15
+ * Key-down handler of the title input; the dialog submits on Enter through it.
16
+ */
17
+ onTitleKeyDown: (event: KeyboardEvent) => void;
18
+ /**
19
+ * The dialog's initial-focus ref, attached to the title input.
20
+ */
21
+ ref?: Ref<HTMLInputElement>;
22
+ }
23
+ /**
24
+ * The exact props the default scheduled-email dialog renders its header region with.
25
+ *
26
+ * Throws outside the scheduled-export dialog's state providers.
27
+ *
28
+ * @internal
29
+ */
30
+ export declare function useScheduledEmailDialogHeaderProps({ onBack, onTitleKeyDown, ref }: IUseScheduledEmailDialogHeaderPropsInput): ScheduledEmailDialogHeaderDefaultProps;
31
+ /**
32
+ * The exact props the default scheduled-email dialog renders its filters region with.
33
+ *
34
+ * Throws outside the scheduled-export dialog's state providers.
35
+ *
36
+ * @internal
37
+ */
38
+ export declare function useScheduledEmailDialogFiltersProps(): IScheduledEmailDialogFiltersProps;
39
+ /**
40
+ * The exact props the default scheduled-email dialog renders its destination region with.
41
+ *
42
+ * Throws outside the scheduled-export dialog's state providers.
43
+ *
44
+ * @internal
45
+ */
46
+ export declare function useScheduledEmailDialogDestinationProps(): IAutomationDialogDestinationProps;
47
+ /**
48
+ * Inputs of {@link useScheduledEmailDialogRecipientsProps} that come from the dialog rather than its state.
49
+ *
50
+ * @internal
51
+ */
52
+ export interface IUseScheduledEmailDialogRecipientsPropsInput {
53
+ /**
54
+ * Key-down handler of the recipients input; the dialog submits on Enter through it.
55
+ */
56
+ onKeyDownSubmit: (event: KeyboardEvent) => void;
57
+ }
58
+ /**
59
+ * The exact props the default scheduled-email dialog renders its recipients region with.
60
+ *
61
+ * Throws outside the scheduled-export dialog's state providers.
62
+ *
63
+ * @internal
64
+ */
65
+ export declare function useScheduledEmailDialogRecipientsProps({ onKeyDownSubmit }: IUseScheduledEmailDialogRecipientsPropsInput): IScheduledEmailDialogRecipientsProps;
66
+ /**
67
+ * The exact props the default scheduled-email dialog renders its "Time zone" section with.
68
+ *
69
+ * Throws outside the scheduled-export dialog's state providers.
70
+ *
71
+ * @internal
72
+ */
73
+ export declare function useScheduledEmailDialogTimezoneProps(): ScheduledEmailDialogTimezoneDefaultProps;
74
+ /**
75
+ * Inputs of {@link useScheduledEmailDialogActionBarProps} that come from the dialog rather than its state.
76
+ *
77
+ * @internal
78
+ */
79
+ export interface IUseScheduledEmailDialogActionBarPropsInput {
80
+ /**
81
+ * Closes the dialog without saving.
82
+ */
83
+ onCancel?: () => void;
84
+ /**
85
+ * Submits the automation; the dialog's single save path (see `useSaveScheduledEmailToBackend`).
86
+ */
87
+ onSubmit: () => void;
88
+ /**
89
+ * Whether a save is in flight.
90
+ */
91
+ isSaving: boolean;
92
+ /**
93
+ * Opens the delete confirmation. Rendered only when an existing schedule is being edited.
94
+ */
95
+ onDelete?: () => void;
96
+ }
97
+ /**
98
+ * The exact props the default scheduled-email dialog renders its action bar with.
99
+ *
100
+ * Throws outside the scheduled-export dialog's state providers.
101
+ *
102
+ * @internal
103
+ */
104
+ export declare function useScheduledEmailDialogActionBarProps({ onCancel, onSubmit, isSaving, onDelete }: IUseScheduledEmailDialogActionBarPropsInput): IAutomationDialogActionBarProps;
105
+ //# sourceMappingURL=useScheduledEmailDialogRegionProps.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useScheduledEmailDialogRegionProps.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/automations/scheduledEmail/state/useScheduledEmailDialogRegionProps.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,GAAG,EAAW,MAAM,OAAO,CAAC;AAQ9D,OAAO,EACH,KAAK,+BAA+B,EACpC,KAAK,iCAAiC,EACzC,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACH,KAAK,iCAAiC,EACtC,KAAK,oCAAoC,EACzC,KAAK,sCAAsC,EAC3C,KAAK,wCAAwC,EAChD,MAAM,aAAa,CAAC;AASrB;;;;GAIG;AACH,MAAM,WAAW,wCAAwC;IACrD;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IAEpB;;OAEG;IACH,cAAc,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,CAAC;IAE/C;;OAEG;IACH,GAAG,CAAC,EAAE,GAAG,CAAC,gBAAgB,CAAC,CAAC;CAC/B;AAED;;;;;;GAMG;AACH,wBAAgB,kCAAkC,CAAC,EAC/C,MAAM,EACN,cAAc,EACd,GAAG,EACN,EAAE,wCAAwC,GAAG,sCAAsC,CAsDnF;AAED;;;;;;GAMG;AACH,wBAAgB,mCAAmC,IAAI,iCAAiC,CA6CvF;AAED;;;;;;GAMG;AACH,wBAAgB,uCAAuC,IAAI,iCAAiC,CAU3F;AAED;;;;GAIG;AACH,MAAM,WAAW,4CAA4C;IACzD;;OAEG;IACH,eAAe,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,CAAC;CACnD;AAED;;;;;;GAMG;AACH,wBAAgB,sCAAsC,CAAC,EACnD,eAAe,EAClB,EAAE,4CAA4C,GAAG,oCAAoC,CAsBrF;AAED;;;;;;GAMG;AACH,wBAAgB,oCAAoC,IAAI,wCAAwC,CAW/F;AAED;;;;GAIG;AACH,MAAM,WAAW,2CAA2C;IACxD;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IAEtB;;OAEG;IACH,QAAQ,EAAE,MAAM,IAAI,CAAC;IAErB;;OAEG;IACH,QAAQ,EAAE,OAAO,CAAC;IAElB;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;CACzB;AAED;;;;;;GAMG;AACH,wBAAgB,qCAAqC,CAAC,EAClD,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,QAAQ,EACX,EAAE,2CAA2C,GAAG,+BAA+B,CAoC/E"}