@gooddata/sdk-ui-dashboard 11.36.0-alpha.2 → 11.36.0-alpha.6

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 (163) hide show
  1. package/NOTICE +63 -115
  2. package/esm/__version.d.ts +1 -1
  3. package/esm/__version.js +1 -1
  4. package/esm/index.d.ts +5 -13
  5. package/esm/index.js +2 -10
  6. package/esm/internal.d.ts +1 -1
  7. package/esm/model/commandHandlers/dashboard/common/filterViews.js +24 -1
  8. package/esm/model/commandHandlers/dashboard/common/parameterHydration.d.ts +7 -1
  9. package/esm/model/commandHandlers/dashboard/common/parameterHydration.js +16 -2
  10. package/esm/model/commandHandlers/dashboard/common/stateInitializers.js +4 -2
  11. package/esm/model/commandHandlers/drill/resolveDrillToCustomUrl.d.ts +7 -1
  12. package/esm/model/commandHandlers/drill/resolveDrillToCustomUrl.js +80 -4
  13. package/esm/model/commandHandlers/filterContext/filterViewHandler.js +10 -0
  14. package/esm/model/commandHandlers/filterContext/filterViewParameters.d.ts +7 -0
  15. package/esm/model/commandHandlers/filterContext/filterViewParameters.js +11 -0
  16. package/esm/model/commandHandlers/scheduledEmail/initializeAutomationsHandler.js +7 -1
  17. package/esm/model/store/config/configSelectors.d.ts +0 -6
  18. package/esm/model/store/config/configSelectors.js +0 -8
  19. package/esm/model/store/tabs/index.d.ts +4 -0
  20. package/esm/model/store/tabs/parameters/parametersReducers.d.ts +11 -1
  21. package/esm/model/store/tabs/parameters/parametersReducers.js +16 -8
  22. package/esm/model/store/tabs/parameters/parametersSelectors.d.ts +7 -0
  23. package/esm/model/store/tabs/parameters/parametersSelectors.js +17 -0
  24. package/esm/model/types/commonTypes.d.ts +11 -2
  25. package/esm/model/utils/measureValueFilterUtils.d.ts +14 -0
  26. package/esm/model/utils/measureValueFilterUtils.js +21 -0
  27. package/esm/presentation/alerting/DefaultAlertingDialog/{DefaultAlertingDialogNew.d.ts → DefaultAlertingDialog.d.ts} +1 -1
  28. package/esm/presentation/alerting/DefaultAlertingDialog/{DefaultAlertingDialogNew.js → DefaultAlertingDialog.js} +6 -12
  29. package/esm/presentation/alerting/DefaultAlertingDialog/components/AlertAttributeSelect.js +43 -9
  30. package/esm/presentation/alerting/DefaultAlertingDialog/hooks/useSaveAlertToBackend.js +13 -25
  31. package/esm/presentation/alerting/types.d.ts +1 -72
  32. package/esm/presentation/automationFilters/hooks/useValidateExistingAutomationFilters.d.ts +1 -2
  33. package/esm/presentation/automationFilters/hooks/useValidateExistingAutomationFilters.js +5 -5
  34. package/esm/presentation/dashboard/DashboardHeader/AlertingDialogProvider.js +1 -8
  35. package/esm/presentation/dashboard/DashboardHeader/ScheduledEmailDialogProvider.js +17 -8
  36. package/esm/presentation/dashboard/DashboardHeader/ShareDialogDashboardHeader.js +5 -2
  37. package/esm/presentation/dashboard/components/DashboardRenderer.js +2 -2
  38. package/esm/presentation/drill/DrillConfigPanel/DrillToUrl/CustomUrlEditor.js +97 -13
  39. package/esm/presentation/drill/DrillConfigPanel/DrillToUrl/CustomUrlEditorParameters.d.ts +1 -1
  40. package/esm/presentation/drill/DrillConfigPanel/DrillToUrl/CustomUrlEditorParameters.js +3 -3
  41. package/esm/presentation/drill/DrillConfigPanel/DrillToUrl/CustomUrlEditorParametersSections/DashboardParametersSection.d.ts +3 -2
  42. package/esm/presentation/drill/DrillConfigPanel/DrillToUrl/CustomUrlEditorParametersSections/DashboardParametersSection.js +17 -4
  43. package/esm/presentation/drill/DrillConfigPanel/DrillToUrl/CustomUrlEditorParametersSections/InsightParametersSection.d.ts +4 -2
  44. package/esm/presentation/drill/DrillConfigPanel/DrillToUrl/CustomUrlEditorParametersSections/InsightParametersSection.js +37 -4
  45. package/esm/presentation/drill/DrillConfigPanel/DrillToUrl/CustomUrlEditorParametersSections/Parameter.d.ts +4 -3
  46. package/esm/presentation/drill/DrillConfigPanel/DrillToUrl/CustomUrlEditorParametersSections/Parameter.js +3 -4
  47. package/esm/presentation/filterBar/attributeFilter/DefaultDashboardAttributeFilter.js +4 -1
  48. package/esm/presentation/filterBar/filterBar/DefaultDashboardFilterGroup.js +4 -1
  49. package/esm/presentation/localization/bundles/de-DE.localization-bundle.d.ts +2 -9
  50. package/esm/presentation/localization/bundles/de-DE.localization-bundle.js +2 -9
  51. package/esm/presentation/localization/bundles/en-AU.localization-bundle.d.ts +2 -9
  52. package/esm/presentation/localization/bundles/en-AU.localization-bundle.js +2 -9
  53. package/esm/presentation/localization/bundles/en-GB.localization-bundle.d.ts +2 -9
  54. package/esm/presentation/localization/bundles/en-GB.localization-bundle.js +2 -9
  55. package/esm/presentation/localization/bundles/en-US.localization-bundle.d.ts +4 -36
  56. package/esm/presentation/localization/bundles/en-US.localization-bundle.js +4 -36
  57. package/esm/presentation/localization/bundles/es-419.localization-bundle.d.ts +2 -9
  58. package/esm/presentation/localization/bundles/es-419.localization-bundle.js +2 -9
  59. package/esm/presentation/localization/bundles/es-ES.localization-bundle.d.ts +2 -9
  60. package/esm/presentation/localization/bundles/es-ES.localization-bundle.js +2 -9
  61. package/esm/presentation/localization/bundles/fi-FI.localization-bundle.d.ts +2 -9
  62. package/esm/presentation/localization/bundles/fi-FI.localization-bundle.js +2 -9
  63. package/esm/presentation/localization/bundles/fr-CA.localization-bundle.d.ts +2 -9
  64. package/esm/presentation/localization/bundles/fr-CA.localization-bundle.js +2 -9
  65. package/esm/presentation/localization/bundles/fr-FR.localization-bundle.d.ts +2 -9
  66. package/esm/presentation/localization/bundles/fr-FR.localization-bundle.js +2 -9
  67. package/esm/presentation/localization/bundles/id-ID.localization-bundle.d.ts +2 -9
  68. package/esm/presentation/localization/bundles/id-ID.localization-bundle.js +2 -9
  69. package/esm/presentation/localization/bundles/it-IT.localization-bundle.d.ts +2 -9
  70. package/esm/presentation/localization/bundles/it-IT.localization-bundle.js +2 -9
  71. package/esm/presentation/localization/bundles/ja-JP.localization-bundle.d.ts +2 -9
  72. package/esm/presentation/localization/bundles/ja-JP.localization-bundle.js +2 -9
  73. package/esm/presentation/localization/bundles/ko-KR.localization-bundle.d.ts +2 -9
  74. package/esm/presentation/localization/bundles/ko-KR.localization-bundle.js +2 -9
  75. package/esm/presentation/localization/bundles/nl-NL.localization-bundle.d.ts +2 -9
  76. package/esm/presentation/localization/bundles/nl-NL.localization-bundle.js +2 -9
  77. package/esm/presentation/localization/bundles/pl-PL.localization-bundle.d.ts +2 -9
  78. package/esm/presentation/localization/bundles/pl-PL.localization-bundle.js +2 -9
  79. package/esm/presentation/localization/bundles/pt-BR.localization-bundle.d.ts +2 -9
  80. package/esm/presentation/localization/bundles/pt-BR.localization-bundle.js +2 -9
  81. package/esm/presentation/localization/bundles/pt-PT.localization-bundle.d.ts +2 -9
  82. package/esm/presentation/localization/bundles/pt-PT.localization-bundle.js +2 -9
  83. package/esm/presentation/localization/bundles/ru-RU.localization-bundle.d.ts +2 -9
  84. package/esm/presentation/localization/bundles/ru-RU.localization-bundle.js +2 -9
  85. package/esm/presentation/localization/bundles/sl-SI.localization-bundle.d.ts +2 -9
  86. package/esm/presentation/localization/bundles/sl-SI.localization-bundle.js +2 -9
  87. package/esm/presentation/localization/bundles/th-TH.localization-bundle.d.ts +2 -9
  88. package/esm/presentation/localization/bundles/th-TH.localization-bundle.js +2 -9
  89. package/esm/presentation/localization/bundles/tr-TR.localization-bundle.d.ts +2 -9
  90. package/esm/presentation/localization/bundles/tr-TR.localization-bundle.js +2 -9
  91. package/esm/presentation/localization/bundles/uk-UA.localization-bundle.d.ts +2 -9
  92. package/esm/presentation/localization/bundles/uk-UA.localization-bundle.js +2 -9
  93. package/esm/presentation/localization/bundles/vi-VN.localization-bundle.d.ts +2 -9
  94. package/esm/presentation/localization/bundles/vi-VN.localization-bundle.js +2 -9
  95. package/esm/presentation/localization/bundles/zh-HK.localization-bundle.d.ts +2 -9
  96. package/esm/presentation/localization/bundles/zh-HK.localization-bundle.js +2 -9
  97. package/esm/presentation/localization/bundles/zh-Hans.localization-bundle.d.ts +2 -9
  98. package/esm/presentation/localization/bundles/zh-Hans.localization-bundle.js +2 -9
  99. package/esm/presentation/localization/bundles/zh-Hant.localization-bundle.d.ts +2 -9
  100. package/esm/presentation/localization/bundles/zh-Hant.localization-bundle.js +2 -9
  101. package/esm/presentation/scheduledEmail/DefaultScheduledEmailDialog/DefaultScheduledEmailDialog.js +26 -59
  102. package/esm/presentation/scheduledEmail/DefaultScheduledEmailDialog/hooks/useEditScheduledEmail.d.ts +2 -6
  103. package/esm/presentation/scheduledEmail/DefaultScheduledEmailDialog/hooks/useEditScheduledEmail.js +22 -104
  104. package/esm/presentation/scheduledEmail/DefaultScheduledEmailDialog/hooks/useSaveScheduledEmailToBackend.js +12 -33
  105. package/esm/presentation/scheduledEmail/hooks/useWidgetAutomationFilters.d.ts +3 -0
  106. package/esm/presentation/scheduledEmail/hooks/useWidgetAutomationFilters.js +46 -0
  107. package/esm/presentation/scheduledEmail/types.d.ts +1 -7
  108. package/esm/presentation/scheduledEmail/utils/filters.d.ts +2 -0
  109. package/esm/presentation/scheduledEmail/utils/filters.js +5 -0
  110. package/esm/presentation/shareDialog/DefaultShareDialog.d.ts +1 -1
  111. package/esm/presentation/shareDialog/DefaultShareDialog.js +2 -2
  112. package/esm/presentation/shareDialog/types.d.ts +5 -1
  113. package/esm/presentation/widget/insight/configuration/DrillTargets/useInvalidFilteringParametersIdentifiers.d.ts +2 -2
  114. package/esm/presentation/widget/insight/configuration/DrillTargets/useInvalidFilteringParametersIdentifiers.js +36 -5
  115. package/esm/presentation/widget/insight/configuration/InsightAlertConfig/EditAlert.js +2 -2
  116. package/esm/presentation/widget/insight/configuration/InsightAlertConfig/hooks/useInsightWidgetAlerting.js +3 -6
  117. package/esm/presentation/widget/insight/configuration/InsightAlerts.js +1 -9
  118. package/esm/sdk-ui-dashboard.d.ts +28 -240
  119. package/package.json +20 -20
  120. package/esm/model/react/filtering/shared.d.ts +0 -6
  121. package/esm/model/react/filtering/shared.js +0 -38
  122. package/esm/model/react/filtering/useAutomationAvailableDashboardFilters.d.ts +0 -13
  123. package/esm/model/react/filtering/useAutomationAvailableDashboardFilters.js +0 -54
  124. package/esm/model/react/filtering/useDashboardScheduledExportFilters.d.ts +0 -19
  125. package/esm/model/react/filtering/useDashboardScheduledExportFilters.js +0 -18
  126. package/esm/model/react/filtering/useScheduledExportFilters.d.ts +0 -26
  127. package/esm/model/react/filtering/useScheduledExportFilters.js +0 -23
  128. package/esm/model/react/filtering/useWidgetAlertFilters.d.ts +0 -33
  129. package/esm/model/react/filtering/useWidgetAlertFilters.js +0 -48
  130. package/esm/model/react/filtering/useWidgetScheduledExportFilters.d.ts +0 -33
  131. package/esm/model/react/filtering/useWidgetScheduledExportFilters.js +0 -48
  132. package/esm/model/react/useDashboardAlerting/useEnableAutomationFilterContext.d.ts +0 -4
  133. package/esm/model/react/useDashboardAlerting/useEnableAutomationFilterContext.js +0 -20
  134. package/esm/model/react/useDashboardAlertsOld.d.ts +0 -32
  135. package/esm/model/react/useDashboardAlertsOld.js +0 -141
  136. package/esm/presentation/alerting/DefaultAlertingDialog/DefaultAlertingDialogOld.d.ts +0 -5
  137. package/esm/presentation/alerting/DefaultAlertingDialog/DefaultAlertingDialogOld.js +0 -36
  138. package/esm/presentation/alerting/DefaultAlertingDialog/components/AlertAttributeSelectOld.d.ts +0 -17
  139. package/esm/presentation/alerting/DefaultAlertingDialog/components/AlertAttributeSelectOld.js +0 -103
  140. package/esm/presentation/alerting/DefaultAlertingManagementDialog/DefaultAlertingManagementDialogOld.d.ts +0 -5
  141. package/esm/presentation/alerting/DefaultAlertingManagementDialog/DefaultAlertingManagementDialogOld.js +0 -53
  142. package/esm/presentation/alerting/DefaultAlertingManagementDialog/components/AlertOld.d.ts +0 -9
  143. package/esm/presentation/alerting/DefaultAlertingManagementDialog/components/AlertOld.js +0 -84
  144. package/esm/presentation/alerting/DefaultAlertingManagementDialog/components/AlertsListOld.d.ts +0 -11
  145. package/esm/presentation/alerting/DefaultAlertingManagementDialog/components/AlertsListOld.js +0 -16
  146. package/esm/presentation/dashboard/DashboardHeader/AlertingDialogProviderOld.d.ts +0 -1
  147. package/esm/presentation/dashboard/DashboardHeader/AlertingDialogProviderOld.js +0 -12
  148. package/esm/presentation/scheduledEmail/DefaultScheduledEmailDialog/components/AttachmentsOld/AttachmentFilters.d.ts +0 -29
  149. package/esm/presentation/scheduledEmail/DefaultScheduledEmailDialog/components/AttachmentsOld/AttachmentFilters.js +0 -61
  150. package/esm/presentation/scheduledEmail/DefaultScheduledEmailDialog/components/AttachmentsOld/AttachmentFiltersList.d.ts +0 -6
  151. package/esm/presentation/scheduledEmail/DefaultScheduledEmailDialog/components/AttachmentsOld/AttachmentFiltersList.js +0 -12
  152. package/esm/presentation/scheduledEmail/DefaultScheduledEmailDialog/components/AttachmentsOld/AttachmentItems.d.ts +0 -17
  153. package/esm/presentation/scheduledEmail/DefaultScheduledEmailDialog/components/AttachmentsOld/AttachmentItems.js +0 -68
  154. package/esm/presentation/scheduledEmail/DefaultScheduledEmailDialog/components/AttachmentsOld/AttachmentsWrapper.d.ts +0 -4
  155. package/esm/presentation/scheduledEmail/DefaultScheduledEmailDialog/components/AttachmentsOld/AttachmentsWrapper.js +0 -6
  156. package/esm/presentation/scheduledEmail/DefaultScheduledEmailDialog/components/AttachmentsOld/DashboardAttachments.d.ts +0 -15
  157. package/esm/presentation/scheduledEmail/DefaultScheduledEmailDialog/components/AttachmentsOld/DashboardAttachments.js +0 -42
  158. package/esm/presentation/scheduledEmail/DefaultScheduledEmailDialog/components/AttachmentsOld/WidgetAttachments.d.ts +0 -18
  159. package/esm/presentation/scheduledEmail/DefaultScheduledEmailDialog/components/AttachmentsOld/WidgetAttachments.js +0 -25
  160. package/esm/presentation/scheduledEmail/DefaultScheduledEmailDialog/types.d.ts +0 -2
  161. package/esm/presentation/scheduledEmail/DefaultScheduledEmailDialog/types.js +0 -2
  162. package/esm/presentation/widget/insight/configuration/InsightAlertsOld.d.ts +0 -2
  163. package/esm/presentation/widget/insight/configuration/InsightAlertsOld.js +0 -43
@@ -7,7 +7,7 @@ import { ValidationContextStore, createInvalidNode, useValidationContextValue }
7
7
  import { Button, ConfirmDialogBase, ContentDivider, Hyperlink, Message, Overlay, OverlayController, OverlayControllerProvider, RecurrenceForm, ScrollablePanel, UiIcon, UiTabs, isEnterKey, useIdPrefixed, } from "@gooddata/sdk-ui-kit";
8
8
  import { useDashboardSelector } from "../../../model/react/DashboardStoreProvider.js";
9
9
  import { useExportTemplates } from "../../../model/react/useExportTemplates.js";
10
- import { selectDateFormat, selectEnableAutomationFilterContext, selectEnableAutomationManagement, selectEnableCustomizableCsvDelimiter, selectEnableNewScheduledExport, selectExternalRecipient, selectIsWhiteLabeled, selectLocale, selectSettings, selectWeekStart, } from "../../../model/store/config/configSelectors.js";
10
+ import { selectDateFormat, selectEnableAutomationManagement, selectEnableCustomizableCsvDelimiter, selectEnableNewScheduledExport, selectExternalRecipient, selectIsWhiteLabeled, selectLocale, selectSettings, selectWeekStart, } from "../../../model/store/config/configSelectors.js";
11
11
  import { selectIsCrossFiltering } from "../../../model/store/drill/drillSelectors.js";
12
12
  import { selectEntitlementMinimumRecurrenceMinutes, selectMaxAutomationRecipients, } from "../../../model/store/entitlements/entitlementsSelectors.js";
13
13
  import { selectDashboardTitle } from "../../../model/store/meta/metaSelectors.js";
@@ -17,8 +17,7 @@ import { getWidgetTitle } from "../../../model/utils/dashboardItemUtils.js";
17
17
  import { ApplyCurrentFiltersConfirmDialog } from "../../automationFilters/components/ApplyLatestFiltersConfirmDialog.js";
18
18
  import { AutomationFiltersSelect } from "../../automationFilters/components/AutomationFiltersSelect.js";
19
19
  import { useValidateExistingAutomationFilters } from "../../automationFilters/hooks/useValidateExistingAutomationFilters.js";
20
- import { getAvailableFiltersFromFiltersByTab, useAutomationFiltersSelect, } from "../../automationFilters/useAutomationFiltersSelect.js";
21
- import { validateAllFilterLocalIdentifiers } from "../../automationFilters/utils.js";
20
+ import { useAutomationFiltersSelect } from "../../automationFilters/useAutomationFiltersSelect.js";
22
21
  import { DASHBOARD_DIALOG_OVERS_Z_INDEX } from "../../constants/zIndex.js";
23
22
  import { IntlWrapper } from "../../localization/IntlWrapper.js";
24
23
  import { DeleteScheduleConfirmDialog } from "../DefaultScheduledEmailManagementDialog/components/DeleteScheduleConfirmDialog.js";
@@ -29,8 +28,6 @@ import { isMobileView } from "../utils/responsive.js";
29
28
  import { TIMEZONE_DEFAULT } from "../utils/timezone.js";
30
29
  import { DashboardAttachments } from "./components/Attachments/DashboardAttachments.js";
31
30
  import { WidgetAttachments } from "./components/Attachments/WidgetAttachments.js";
32
- import { DashboardAttachments as DashboardAttachmentsOld } from "./components/AttachmentsOld/DashboardAttachments.js";
33
- import { WidgetAttachments as WidgetAttachmentsOld } from "./components/AttachmentsOld/WidgetAttachments.js";
34
31
  import { DestinationSelect } from "./components/DestinationSelect/DestinationSelect.js";
35
32
  import { EvaluationModeCheckbox } from "./components/EvaluationModeCheckbox/EvaluationModeCheckbox.js";
36
33
  import { ScheduledEmailDialogHeader } from "./components/Header/ScheduleEmailDialogHeader.js";
@@ -40,7 +37,6 @@ import { SubjectForm } from "./components/SubjectForm/SubjectForm.js";
40
37
  import { SCHEDULED_EMAIL_DIALOG_ID } from "./constants.js";
41
38
  import { DefaultLoadingScheduledEmailDialog } from "./DefaultLoadingScheduledEmailDialog.js";
42
39
  import { useEditScheduledEmail } from "./hooks/useEditScheduledEmail.js";
43
- import { useFiltersForDashboardScheduledExportInfo } from "./hooks/useFiltersForDashboardScheduledExportInfo.js";
44
40
  import { useSaveScheduledEmailToBackend } from "./hooks/useSaveScheduledEmailToBackend.js";
45
41
  const DEFAULT_MIN_RECURRENCE_MINUTES = "60";
46
42
  const OVERLAY_POSITION_TYPE = "sameAsTarget";
@@ -73,11 +69,8 @@ export function ScheduledMailDialogRenderer({ scheduledExportToEdit, users, user
73
69
  automationToEdit: scheduledExportToEdit,
74
70
  widget,
75
71
  });
76
- const { locale, dashboardTitle, dateFormat, weekStart, maxAutomationsRecipients, allowHourlyRecurrence, isCrossFiltering, isExecutionTimestampMode, enableAutomationFilterContext, enableNewScheduledExport, enableCustomizableCsvDelimiter, defaultPdfPageSize, } = useDefaultScheduledEmailDialogData({
77
- filters: availableFilters ?? [],
78
- filtersByTab: getAvailableFiltersFromFiltersByTab(filtersByTab),
79
- });
80
- const { defaultUser, editedAutomation, originalAutomation, isSubmitDisabled, xlsxSettings, pdfSettings, csvSettings, csvRawSettings, startDate, allowExternalRecipients, allowOnlyLoggedUserRecipients, isDashboardExportSelected, isCsvExportSelected, isXlsxExportSelected, areDashboardFiltersChanged, validationErrorMessage, selectedAttachments, isParentValid, onDashboardAttachmentsChange, onDashboardAttachmentsChangeOld, onWidgetAttachmentsChange, onWidgetAttachmentsChangeOld, onXlsxSettingsChange, onPdfSettingsChange, onCsvSettingsChange, onCsvRawSettingsChange, slidesTemplateIds, onSlidesTemplateIdChange, onDestinationChange, onMessageChange, onRecipientsChange, onRecurrenceChange, onEvaluationModeChange, onSubjectChange, onTitleChange, onFiltersChange, onApplyCurrentFilters, onStoreFiltersChange, onFiltersByTabChange, enableAutomationEvaluationMode, } = useEditScheduledEmail({
72
+ const { locale, dashboardTitle, dateFormat, weekStart, maxAutomationsRecipients, allowHourlyRecurrence, isCrossFiltering, isExecutionTimestampMode, enableNewScheduledExport, enableCustomizableCsvDelimiter, defaultPdfPageSize, } = useDefaultScheduledEmailDialogData();
73
+ 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, enableAutomationEvaluationMode, } = useEditScheduledEmail({
81
74
  notificationChannels,
82
75
  insight,
83
76
  widget,
@@ -90,7 +83,6 @@ export function ScheduledMailDialogRenderer({ scheduledExportToEdit, users, user
90
83
  setEditedAutomationFilters,
91
84
  setStoreFilters,
92
85
  availableFiltersAsVisibleFilters,
93
- enableAutomationFilterContext,
94
86
  filtersForNewAutomation,
95
87
  externalRecipientOverride,
96
88
  enableNewScheduledExport,
@@ -103,7 +95,6 @@ export function ScheduledMailDialogRenderer({ scheduledExportToEdit, users, user
103
95
  automationToEdit: scheduledExportToEdit,
104
96
  widget,
105
97
  insight,
106
- enableAutomationFilterContext,
107
98
  });
108
99
  const [isApplyCurrentFiltersDialogOpen, setIsApplyCurrentFiltersDialogOpen] = useState(!isValid);
109
100
  const { handleSaveScheduledEmail, isSavingScheduledEmail, savingErrorMessage } = useSaveScheduledEmailToBackend(editedAutomation, {
@@ -120,9 +111,6 @@ export function ScheduledMailDialogRenderer({ scheduledExportToEdit, users, user
120
111
  const validationContextValue = useValidationContextValue(createInvalidNode({ id: "ScheduledEmailDialog" }));
121
112
  const { getInvalidDatapoints } = validationContextValue;
122
113
  const errorMessage = savingErrorMessage ?? validationErrorMessage ?? missingAttachmentsErrorMessage;
123
- const dashboardScheduledExportFiltersInfo = useFiltersForDashboardScheduledExportInfo({
124
- effectiveFilters: dashboardFilters,
125
- });
126
114
  const helpTextId = isMobileView()
127
115
  ? defineMessage({ id: "dialogs.schedule.email.footer.title.short" }).id
128
116
  : defineMessage({ id: "dialogs.schedule.email.footer.title" }).id;
@@ -153,34 +141,22 @@ export function ScheduledMailDialogRenderer({ scheduledExportToEdit, users, user
153
141
  } })),
154
142
  };
155
143
  }, [widget, dashboardTitle, intl]);
156
- const tabs = useMemo(() => {
157
- const tabsList = [
158
- {
159
- id: "general",
160
- label: intl.formatMessage({ id: "dialogs.schedule.email.tabs.general" }),
161
- },
162
- ];
163
- // Only show Filters tab when automation filter context is enabled
164
- if (enableAutomationFilterContext) {
165
- tabsList.push({
166
- id: "filters",
167
- label: intl.formatMessage({ id: "dialogs.schedule.email.tabs.filters" }),
168
- });
169
- }
170
- return tabsList;
171
- }, [intl, enableAutomationFilterContext]);
144
+ const tabs = useMemo(() => [
145
+ {
146
+ id: "general",
147
+ label: intl.formatMessage({ id: "dialogs.schedule.email.tabs.general" }),
148
+ },
149
+ {
150
+ id: "filters",
151
+ label: intl.formatMessage({ id: "dialogs.schedule.email.tabs.filters" }),
152
+ },
153
+ ], [intl]);
172
154
  const handleTabSelect = useCallback((tab) => {
173
155
  setSelectedTabId(tab.id);
174
156
  }, []);
175
- // Reset to General tab if Filters tab is not available
176
- useEffect(() => {
177
- if (!enableAutomationFilterContext && selectedTabId === "filters") {
178
- setSelectedTabId("general");
179
- }
180
- }, [enableAutomationFilterContext, selectedTabId]);
181
157
  // Measure General tab content height to maintain consistent dialog size
182
158
  useEffect(() => {
183
- if (enableAutomationFilterContext && generalTabContentRef.current && selectedTabId === "general") {
159
+ if (generalTabContentRef.current && selectedTabId === "general") {
184
160
  // Use requestAnimationFrame to ensure DOM is fully rendered
185
161
  requestAnimationFrame(() => {
186
162
  if (generalTabContentRef.current) {
@@ -189,9 +165,8 @@ export function ScheduledMailDialogRenderer({ scheduledExportToEdit, users, user
189
165
  }
190
166
  });
191
167
  }
192
- }, [enableAutomationFilterContext, selectedTabId]);
193
- // This should be visible only when enableAutomationFilterContext is true
194
- if (isApplyCurrentFiltersDialogOpen && enableAutomationFilterContext) {
168
+ }, [selectedTabId]);
169
+ if (isApplyCurrentFiltersDialogOpen) {
195
170
  return (_jsx(ApplyCurrentFiltersConfirmDialog, { automationType: "schedule", onCancel: () => onCancel?.(), onEdit: () => {
196
171
  onApplyCurrentFilters();
197
172
  setIsApplyCurrentFiltersDialogOpen(false);
@@ -226,23 +201,24 @@ export function ScheduledMailDialogRenderer({ scheduledExportToEdit, users, user
226
201
  id: "dialogs.schedule.email.accessibilityTitle",
227
202
  }),
228
203
  }, disableBottomBorder: true })) : null, _jsxs(ScrollablePanel, { className: cx("gd-notifications-channel-dialog-content-wrapper", {
229
- "gd-notification-channel-dialog-with-automation-filters": enableAutomationFilterContext,
204
+ "gd-notification-channel-dialog-with-automation-filters": true,
230
205
  "gd-notification-channel-dialog-with-tabs": tabs.length > 1,
231
206
  }), children: [
232
- _jsx("div", { className: "gd-divider-with-margin" }), enableAutomationFilterContext && selectedTabId === "filters" ? (_jsx("div", { ref: filtersTabContentRef, className: "gd-schedule-dialog-tab-content", style: tabContentHeight
207
+ _jsx("div", { className: "gd-divider-with-margin" }), selectedTabId === "filters" ? (_jsx("div", { ref: filtersTabContentRef, className: "gd-schedule-dialog-tab-content", style: tabContentHeight
233
208
  ? { minHeight: `${tabContentHeight}px` }
234
- : undefined, children: _jsx(AutomationFiltersSelect, { availableFilters: availableFilters, selectedFilters: editedAutomationFilters, onFiltersChange: onFiltersChange, storeFilters: storeFilters, onStoreFiltersChange: onStoreFiltersChange, isDashboardAutomation: isDashboardExportSelected, overlayPositionType: OVERLAY_POSITION_TYPE, hideTitle: true, showAllFilters: true, filtersByTab: filtersByTab, editedFiltersByTab: editedAutomationFiltersByTab, onFiltersByTabChange: onFiltersByTabChange }) })) : (_jsxs("div", { ref: generalTabContentRef, className: "gd-schedule-dialog-tab-content", children: [enableAutomationFilterContext ? (_jsx(Message, { type: "progress", className: "gd-schedule-dialog-tab-content-info", children: intl.formatMessage({
209
+ : undefined, children: _jsx(AutomationFiltersSelect, { availableFilters: availableFilters, selectedFilters: editedAutomationFilters, onFiltersChange: onFiltersChange, storeFilters: storeFilters, onStoreFiltersChange: onStoreFiltersChange, isDashboardAutomation: !widget, overlayPositionType: OVERLAY_POSITION_TYPE, hideTitle: true, showAllFilters: true, filtersByTab: filtersByTab, editedFiltersByTab: editedAutomationFiltersByTab, onFiltersByTabChange: onFiltersByTabChange }) })) : (_jsxs("div", { ref: generalTabContentRef, className: "gd-schedule-dialog-tab-content", children: [
210
+ _jsx(Message, { type: "progress", className: "gd-schedule-dialog-tab-content-info", children: intl.formatMessage({
235
211
  id: "dialogs.schedule.email.tabs.info",
236
- }) })) : null, _jsx(RecurrenceForm, { startDate: startDate, cronExpression: editedAutomation.schedule?.cron ??
212
+ }) }), _jsx(RecurrenceForm, { startDate: startDate, cronExpression: editedAutomation.schedule?.cron ??
237
213
  getDefaultCronExpression(startDate), cronDescription: editedAutomation.schedule?.cronDescription, timezone: editedAutomation.schedule?.timezone ??
238
214
  TIMEZONE_DEFAULT.identifier, dateFormat: dateFormat ?? "MM/dd/yyyy", locale: locale, weekStart: weekStart, onChange: onRecurrenceChange, allowHourlyRecurrence: allowHourlyRecurrence, isWhiteLabeled: isWhiteLabeled, closeDropdownsOnParentScroll: CLOSE_ON_PARENT_SCROLL, onKeyDownSubmit: handleSubmitForm }), _jsx(ContentDivider, { className: "gd-divider-with-margin" }), _jsx(DestinationSelect, { notificationChannels: notificationChannels, selectedItemId: editedAutomation.notificationChannel, onChange: onDestinationChange, closeOnParentScroll: CLOSE_ON_PARENT_SCROLL, overlayPositionType: OVERLAY_POSITION_TYPE }), _jsx(ContentDivider, { className: "gd-divider-with-margin" }), _jsx(RecipientsSelect, { id: "schedule.email.recipients", loggedUser: defaultUser, users: users, usersError: usersError, value: editedAutomation.recipients ?? [], originalValue: originalAutomation.recipients || [], onChange: onRecipientsChange, allowEmptySelection: true, allowOnlyLoggedUserRecipients: allowOnlyLoggedUserRecipients, allowExternalRecipients: allowExternalRecipients, maxRecipients: maxAutomationsRecipients, notificationChannels: notificationChannels, notificationChannelId: editedAutomation.notificationChannel, onKeyDownSubmit: handleSubmitForm, externalRecipientOverride: externalRecipientOverride }), isInPlatformChannel ? null : (_jsxs(_Fragment, { children: [
239
215
  _jsx(SubjectForm, { dashboardTitle: dashboardTitle, editedAutomation: editedAutomation, onChange: onSubjectChange, onKeyDownSubmit: handleSaveScheduledEmail, isSubmitDisabled: isSubmitDisabled }), _jsx(MessageForm, { onChange: onMessageChange, value: editedAutomation.details?.message ?? "" })
240
- ] })), widget ? (enableNewScheduledExport ? (_jsx(WidgetAttachments, { selectedAttachments: selectedAttachments, onWidgetAttachmentsChange: onWidgetAttachmentsChange, xlsxSettings: xlsxSettings, pdfSettings: pdfSettings, onXlsxSettingsChange: onXlsxSettingsChange, onPdfSettingsChange: onPdfSettingsChange, csvSettings: csvSettings, onCsvSettingsChange: onCsvSettingsChange, csvRawSettings: csvRawSettings, onCsvRawSettingsChange: onCsvRawSettingsChange, isCsvSettingsEnabled: enableCustomizableCsvDelimiter, defaultPdfPageSize: defaultPdfPageSize, exportTemplates: exportTemplates, slidesTemplateIds: slidesTemplateIds, onSlidesTemplateIdChange: onSlidesTemplateIdChange })) : (_jsx(WidgetAttachmentsOld, { widgetFilters: widgetFilters, areDashboardFiltersChanged: areDashboardFiltersChanged, isCrossFiltering: isCrossFiltering, scheduledExportToEdit: scheduledExportToEdit, csvSelected: isCsvExportSelected, xlsxSelected: isXlsxExportSelected, settings: xlsxSettings, onWidgetAttachmentsSelectionChange: onWidgetAttachmentsChangeOld, onAttachmentsSettingsChange: onXlsxSettingsChange, enableAutomationFilterContext: enableAutomationFilterContext, closeOnParentScroll: CLOSE_ON_PARENT_SCROLL, overlayPositionType: OVERLAY_POSITION_TYPE }))) : enableNewScheduledExport ? (_jsx(DashboardAttachments, { selectedAttachments: selectedAttachments, dashboardFilters: dashboardFilters, isCrossFiltering: isCrossFiltering, onDashboardAttachmentsChange: onDashboardAttachmentsChange, xlsxSettings: xlsxSettings, onXlsxSettingsChange: onXlsxSettingsChange, defaultPdfPageSize: defaultPdfPageSize, exportTemplates: exportTemplates, slidesTemplateIds: slidesTemplateIds, onSlidesTemplateIdChange: onSlidesTemplateIdChange })) : (_jsx(DashboardAttachmentsOld, { dashboardSelected: isDashboardExportSelected, scheduledExportToEdit: scheduledExportToEdit, areDashboardFiltersChanged: areDashboardFiltersChanged, dashboardFilters: dashboardFilters, isCrossFiltering: isCrossFiltering, filtersToDisplayInfo: dashboardScheduledExportFiltersInfo, onDashboardAttachmentsSelectionChange: onDashboardAttachmentsChangeOld, enableAutomationFilterContext: enableAutomationFilterContext })), enableAutomationEvaluationMode ? (_jsx(EvaluationModeCheckbox, { isShared: editedAutomation.evaluationMode === "SHARED", onChange: onEvaluationModeChange })) : null, errorMessage ? (_jsx(Message, { type: "error", className: cx("gd-notifications-channels-dialog-error", {
241
- "gd-notifications-channels-dialog-error-scrollable": enableAutomationFilterContext,
216
+ ] })), widget ? (_jsx(WidgetAttachments, { selectedAttachments: selectedAttachments, onWidgetAttachmentsChange: onWidgetAttachmentsChange, xlsxSettings: xlsxSettings, pdfSettings: pdfSettings, onXlsxSettingsChange: onXlsxSettingsChange, onPdfSettingsChange: onPdfSettingsChange, csvSettings: csvSettings, onCsvSettingsChange: onCsvSettingsChange, csvRawSettings: csvRawSettings, onCsvRawSettingsChange: onCsvRawSettingsChange, isCsvSettingsEnabled: enableCustomizableCsvDelimiter, defaultPdfPageSize: defaultPdfPageSize, exportTemplates: exportTemplates, slidesTemplateIds: slidesTemplateIds, onSlidesTemplateIdChange: onSlidesTemplateIdChange })) : (_jsx(DashboardAttachments, { selectedAttachments: selectedAttachments, dashboardFilters: dashboardFilters, isCrossFiltering: isCrossFiltering, onDashboardAttachmentsChange: onDashboardAttachmentsChange, xlsxSettings: xlsxSettings, onXlsxSettingsChange: onXlsxSettingsChange, defaultPdfPageSize: defaultPdfPageSize, exportTemplates: exportTemplates, slidesTemplateIds: slidesTemplateIds, onSlidesTemplateIdChange: onSlidesTemplateIdChange })), enableAutomationEvaluationMode ? (_jsx(EvaluationModeCheckbox, { isShared: editedAutomation.evaluationMode === "SHARED", onChange: onEvaluationModeChange })) : null, errorMessage ? (_jsx(Message, { type: "error", className: cx("gd-notifications-channels-dialog-error", {
217
+ "gd-notifications-channels-dialog-error-scrollable": true,
242
218
  }), children: errorMessage })) : null, getInvalidDatapoints()
243
219
  .filter((invalidDatapoint) => invalidDatapoint.severity === "error")
244
220
  .map((invalidDatapoint) => (_jsx(Message, { id: invalidDatapoint.id, type: "error", className: cx("gd-notifications-channels-dialog-error", {
245
- "gd-notifications-channels-dialog-error-scrollable": enableAutomationFilterContext,
221
+ "gd-notifications-channels-dialog-error-scrollable": true,
246
222
  }), children: invalidDatapoint.message }, invalidDatapoint.id)))] }))] })
247
223
  ] }) }) }) }), scheduledEmailToDelete ? (_jsx(DeleteScheduleConfirmDialog, { scheduledEmail: scheduledEmailToDelete, onCancel: () => setScheduledEmailToDelete(null), onSuccess: handleScheduleDeleteSuccess, onError: onDeleteError })) : null] }));
248
224
  }
@@ -257,7 +233,7 @@ export function DefaultScheduledEmailDialog(props) {
257
233
  }
258
234
  return (_jsx(IntlWrapper, { locale: locale, children: _jsx(ScheduledMailDialogRenderer, { ...props }) }));
259
235
  }
260
- function useDefaultScheduledEmailDialogData({ filters, filtersByTab, }) {
236
+ function useDefaultScheduledEmailDialogData() {
261
237
  const locale = useDashboardSelector(selectLocale);
262
238
  const dashboardTitle = useDashboardSelector(selectDashboardTitle);
263
239
  const dateFormat = useDashboardSelector(selectDateFormat);
@@ -269,14 +245,6 @@ function useDefaultScheduledEmailDialogData({ filters, filtersByTab, }) {
269
245
  const allowHourlyRecurrence = parseInt(minimumRecurrenceMinutesEntitlement?.value ?? DEFAULT_MIN_RECURRENCE_MINUTES, 10) === 60;
270
246
  const isCrossFiltering = useDashboardSelector(selectIsCrossFiltering);
271
247
  const isExecutionTimestampMode = !!useDashboardSelector(selectExecutionTimestamp);
272
- const enableAutomationFilterContextFlag = useDashboardSelector(selectEnableAutomationFilterContext);
273
- const enableAutomationFilterContext = useMemo(() => {
274
- const doAllDashboardFiltersHaveLocalIdentifiers = validateAllFilterLocalIdentifiers(filters);
275
- const doAllDashboardFiltersByTabHaveLocalIdentifiers = Object.values(filtersByTab).every((tabFilters) => validateAllFilterLocalIdentifiers(tabFilters));
276
- return (enableAutomationFilterContextFlag &&
277
- doAllDashboardFiltersHaveLocalIdentifiers &&
278
- doAllDashboardFiltersByTabHaveLocalIdentifiers);
279
- }, [filters, filtersByTab, enableAutomationFilterContextFlag]);
280
248
  const enableNewScheduledExport = useDashboardSelector(selectEnableNewScheduledExport);
281
249
  const enableCustomizableCsvDelimiter = useDashboardSelector(selectEnableCustomizableCsvDelimiter);
282
250
  const defaultPdfPageSize = getDefaultPdfPageSize(formatLocale);
@@ -289,7 +257,6 @@ function useDefaultScheduledEmailDialogData({ filters, filtersByTab, }) {
289
257
  allowHourlyRecurrence,
290
258
  isCrossFiltering,
291
259
  isExecutionTimestampMode,
292
- enableAutomationFilterContext,
293
260
  enableNewScheduledExport,
294
261
  enableCustomizableCsvDelimiter,
295
262
  defaultPdfPageSize,
@@ -1,7 +1,6 @@
1
1
  import { type DashboardAttachmentType, type FilterContextItem, type IAutomationMetadataObject, type IAutomationMetadataObjectDefinition, type IAutomationRecipient, type IAutomationVisibleFilter, type IExportDefinitionVisualizationObjectSettings, type IFilter, type IInsight, type INotificationChannelIdentifier, type INotificationChannelMetadataObject, type WidgetAttachmentType } from "@gooddata/sdk-model";
2
2
  import { type IAutomationFiltersTab } from "../../../../model/store/filtering/dashboardFilterSelectors.js";
3
3
  import { type ExtendedDashboardWidget } from "../../../../model/types/layoutTypes.js";
4
- import { type OldWidgetAttachmentType } from "../types.js";
5
4
  export interface IUseEditScheduledEmailProps {
6
5
  scheduledExportToEdit?: IAutomationMetadataObject;
7
6
  notificationChannels: INotificationChannelIdentifier[] | INotificationChannelMetadataObject[];
@@ -27,13 +26,12 @@ export interface IUseEditScheduledEmailProps {
27
26
  availableFiltersAsVisibleFiltersByTab?: Record<string, IAutomationVisibleFilter[]>;
28
27
  storeFilters?: boolean;
29
28
  setStoreFilters: (storeFilters: boolean) => void;
30
- enableAutomationFilterContext?: boolean;
31
29
  filtersForNewAutomation: FilterContextItem[];
32
30
  externalRecipientOverride?: string;
33
31
  enableNewScheduledExport: boolean;
34
32
  defaultPdfPageSize?: IExportDefinitionVisualizationObjectSettings["pageSize"];
35
33
  }
36
- export declare function useEditScheduledEmail({ scheduledExportToEdit, notificationChannels, insight, widget, editedAutomationFilters, dashboardFilters, editedAutomationFiltersByTab, widgetFilters, maxAutomationsRecipients, setEditedAutomationFilters, setEditedAutomationFiltersByTab, availableFiltersAsVisibleFilters, storeFilters, setStoreFilters, enableAutomationFilterContext, filtersForNewAutomation, externalRecipientOverride, enableNewScheduledExport, defaultPdfPageSize, filtersDataByTab, availableFiltersAsVisibleFiltersByTab }: IUseEditScheduledEmailProps): {
34
+ export declare function useEditScheduledEmail({ scheduledExportToEdit, notificationChannels, insight, widget, editedAutomationFilters, dashboardFilters, editedAutomationFiltersByTab, maxAutomationsRecipients, setEditedAutomationFilters, setEditedAutomationFiltersByTab, availableFiltersAsVisibleFilters, storeFilters, setStoreFilters, filtersForNewAutomation, externalRecipientOverride, enableNewScheduledExport, defaultPdfPageSize, filtersDataByTab, availableFiltersAsVisibleFiltersByTab }: IUseEditScheduledEmailProps): {
37
35
  defaultUser: import("@gooddata/sdk-model").IWorkspaceUser;
38
36
  areDashboardFiltersChanged: boolean;
39
37
  originalAutomation: IAutomationMetadataObjectDefinition;
@@ -73,10 +71,8 @@ export declare function useEditScheduledEmail({ scheduledExportToEdit, notificat
73
71
  onRecipientsChange: (updatedRecipients: IAutomationRecipient[]) => void;
74
72
  onSubjectChange: (value: string | number, isValid: boolean) => void;
75
73
  onMessageChange: (value: string, isValid: boolean) => void;
76
- onDashboardAttachmentsChange: (formats: DashboardAttachmentType[], dashboardFiltersFromComponent?: FilterContextItem[] | undefined) => void;
77
- onDashboardAttachmentsChangeOld: (dashboardSelected: boolean, dashboardFilters?: FilterContextItem[] | undefined) => void;
74
+ onDashboardAttachmentsChange: (formats: DashboardAttachmentType[]) => void;
78
75
  onWidgetAttachmentsChange: (formats: WidgetAttachmentType[]) => void;
79
- onWidgetAttachmentsChangeOld: (selected: boolean, format: OldWidgetAttachmentType, widgetFilters?: IFilter[] | undefined) => void;
80
76
  onXlsxSettingsChange: (settings: IExportDefinitionVisualizationObjectSettings) => void;
81
77
  onPdfSettingsChange: (settings: IExportDefinitionVisualizationObjectSettings) => void;
82
78
  onCsvSettingsChange: (settings: IExportDefinitionVisualizationObjectSettings) => void;
@@ -3,7 +3,7 @@ import { useCallback, useMemo, useState } from "react";
3
3
  import { useIntl } from "react-intl";
4
4
  import { invariant } from "ts-invariant";
5
5
  import { DEFAULT_CSV_DELIMITER, insightProperties, isAutomationExternalUserRecipient, isAutomationUnknownUserRecipient, isAutomationUserRecipient, isExportDefinitionDashboardRequestPayload, isExportDefinitionVisualizationObjectRequestPayload, isInsightWidget, isWidget, } from "@gooddata/sdk-model";
6
- import { areAutomationsEqual, convertCurrentUserToAutomationRecipient, convertCurrentUserToWorkspaceUser, convertExternalRecipientToAutomationRecipient, isCsvVisualizationAutomation, isCsvVisualizationExportDefinition, isDashboardAutomation, isXlsxVisualizationAutomation, isXlsxVisualizationExportDefinition, } from "../../../../_staging/automation/index.js";
6
+ import { areAutomationsEqual, convertCurrentUserToAutomationRecipient, convertCurrentUserToWorkspaceUser, convertExternalRecipientToAutomationRecipient, } from "../../../../_staging/automation/index.js";
7
7
  import { useDashboardSelector } from "../../../../model/react/DashboardStoreProvider.js";
8
8
  import { selectEnableAutomationEvaluationMode, selectEnableExternalRecipients, selectSettings, selectTimezone, } from "../../../../model/store/config/configSelectors.js";
9
9
  import { selectAutomationCommonDateFilterId, selectDashboardHiddenFilters, } from "../../../../model/store/filtering/dashboardFilterSelectors.js";
@@ -17,7 +17,7 @@ import { toModifiedISOStringToTimezone, toNormalizedFirstRunAndCron, toNormalize
17
17
  import { getUserTimezone } from "../../utils/timezone.js";
18
18
  import { isEmail } from "../../utils/validate.js";
19
19
  import { useScheduleValidation } from "./useScheduleValidation.js";
20
- export function useEditScheduledEmail({ scheduledExportToEdit, notificationChannels, insight, widget, editedAutomationFilters, dashboardFilters, editedAutomationFiltersByTab, widgetFilters, maxAutomationsRecipients, setEditedAutomationFilters, setEditedAutomationFiltersByTab, availableFiltersAsVisibleFilters, storeFilters, setStoreFilters, enableAutomationFilterContext, filtersForNewAutomation, externalRecipientOverride, enableNewScheduledExport, defaultPdfPageSize, filtersDataByTab, availableFiltersAsVisibleFiltersByTab, }) {
20
+ export function useEditScheduledEmail({ scheduledExportToEdit, notificationChannels, insight, widget, editedAutomationFilters, dashboardFilters, editedAutomationFiltersByTab, maxAutomationsRecipients, setEditedAutomationFilters, setEditedAutomationFiltersByTab, availableFiltersAsVisibleFilters, storeFilters, setStoreFilters, filtersForNewAutomation, externalRecipientOverride, enableNewScheduledExport, defaultPdfPageSize, filtersDataByTab, availableFiltersAsVisibleFiltersByTab, }) {
21
21
  const intl = useIntl();
22
22
  const [isCronValid, setIsCronValid] = useState(true);
23
23
  const [isTitleValid, setIsTitleValid] = useState(true);
@@ -45,21 +45,13 @@ export function useEditScheduledEmail({ scheduledExportToEdit, notificationChann
45
45
  const widgetTabMap = useDashboardSelector(selectWidgetLocalIdToTabIdMap);
46
46
  // Determine target tab ID if widget is present
47
47
  const targetTabId = widget?.localIdentifier ? widgetTabMap[widget.localIdentifier] : undefined;
48
- const effectiveWidgetFilters = enableAutomationFilterContext
49
- ? getAppliedWidgetFilters(editedAutomationFilters ?? [], dashboardHiddenFilters, widget, insight, commonDateFilterId, false)
50
- : widgetFilters;
51
- const effectiveWidgetFiltersWithInsight = enableAutomationFilterContext
52
- ? getAppliedWidgetFilters(editedAutomationFilters ?? [], dashboardHiddenFilters, widget, insight, commonDateFilterId, true)
53
- : widgetFilters;
54
- const effectiveVisibleWidgetFilters = enableAutomationFilterContext
55
- ? getVisibleFiltersByFilters(editedAutomationFilters, availableFiltersAsVisibleFilters, true)
56
- : undefined;
57
- const effectiveDashboardFilters = enableAutomationFilterContext
58
- ? getAppliedDashboardFilters(editedAutomationFilters ?? [], dashboardHiddenFilters, isWidget ? true : storeFilters)
59
- : dashboardFilters;
48
+ const effectiveWidgetFilters = getAppliedWidgetFilters(editedAutomationFilters ?? [], dashboardHiddenFilters, widget, insight, commonDateFilterId, false);
49
+ const effectiveWidgetFiltersWithInsight = getAppliedWidgetFilters(editedAutomationFilters ?? [], dashboardHiddenFilters, widget, insight, commonDateFilterId, true);
50
+ const effectiveVisibleWidgetFilters = getVisibleFiltersByFilters(editedAutomationFilters, availableFiltersAsVisibleFilters, true);
51
+ const effectiveDashboardFilters = getAppliedDashboardFilters(editedAutomationFilters ?? [], dashboardHiddenFilters, isWidget ? true : storeFilters);
60
52
  // Process filters per tab if provided (for dashboard automations with tabs enabled)
61
53
  const effectiveDashboardFiltersByTab = useMemo(() => {
62
- if (!editedAutomationFiltersByTab || !enableAutomationFilterContext || !storeFilters) {
54
+ if (!editedAutomationFiltersByTab || !storeFilters) {
63
55
  return undefined;
64
56
  }
65
57
  // Apply the same processing as effectiveDashboardFilters to each tab's filters
@@ -72,13 +64,9 @@ export function useEditScheduledEmail({ scheduledExportToEdit, notificationChann
72
64
  }
73
65
  return acc;
74
66
  }, {});
75
- }, [editedAutomationFiltersByTab, enableAutomationFilterContext, filtersDataByTab, storeFilters]);
76
- const effectiveVisibleDashboardFilters = enableAutomationFilterContext
77
- ? getVisibleFiltersByFilters(editedAutomationFilters ?? [], availableFiltersAsVisibleFilters, storeFilters)
78
- : undefined;
79
- const effectiveVisibleDashboardFiltersByTab = enableAutomationFilterContext
80
- ? getVisibleFiltersByFiltersByTab(editedAutomationFiltersByTab, availableFiltersAsVisibleFiltersByTab, storeFilters)
81
- : undefined;
67
+ }, [editedAutomationFiltersByTab, filtersDataByTab, storeFilters]);
68
+ const effectiveVisibleDashboardFilters = getVisibleFiltersByFilters(editedAutomationFilters ?? [], availableFiltersAsVisibleFilters, storeFilters);
69
+ const effectiveVisibleDashboardFiltersByTab = getVisibleFiltersByFiltersByTab(editedAutomationFiltersByTab, availableFiltersAsVisibleFiltersByTab, storeFilters);
82
70
  const [editedAutomation, setEditedAutomation] = useState(scheduledExportToEdit ??
83
71
  newAutomationMetadataObjectDefinition(isWidget
84
72
  ? {
@@ -170,12 +158,7 @@ export function useEditScheduledEmail({ scheduledExportToEdit, notificationChann
170
158
  },
171
159
  }));
172
160
  };
173
- const onDashboardAttachmentsChange = (formats,
174
- // this needs to be here for compatibility with old component that doesn't use enableAutomationFilterContext
175
- dashboardFiltersFromComponent) => {
176
- const filtersToSave = enableAutomationFilterContext
177
- ? effectiveDashboardFilters
178
- : (dashboardFiltersFromComponent ?? effectiveDashboardFilters);
161
+ const onDashboardAttachmentsChange = (formats) => {
179
162
  setEditedAutomation((s) => {
180
163
  const currentExportDefinitions = s.exportDefinitions || [];
181
164
  const currentDashboardExportDefinitions = currentExportDefinitions.filter((exportDefinition) => isExportDefinitionDashboardRequestPayload(exportDefinition.requestPayload));
@@ -186,7 +169,7 @@ export function useEditScheduledEmail({ scheduledExportToEdit, notificationChann
186
169
  const newExportDefinitions = formatsToAdd.map((format) => newDashboardExportDefinitionMetadataObjectDefinition({
187
170
  dashboardId: dashboardId,
188
171
  dashboardTitle,
189
- dashboardFilters: storeFilters ? filtersToSave : undefined,
172
+ dashboardFilters: storeFilters ? effectiveDashboardFilters : undefined,
190
173
  filtersByTab: storeFilters ? effectiveDashboardFiltersByTab : undefined,
191
174
  format,
192
175
  }));
@@ -224,71 +207,6 @@ export function useEditScheduledEmail({ scheduledExportToEdit, notificationChann
224
207
  };
225
208
  });
226
209
  };
227
- const onDashboardAttachmentsChangeOld = (dashboardSelected, dashboardFilters) => {
228
- if (dashboardSelected) {
229
- const dashboardExportDefinition = newDashboardExportDefinitionMetadataObjectDefinition({
230
- dashboardId: dashboardId,
231
- dashboardTitle,
232
- dashboardFilters,
233
- format: "PDF",
234
- });
235
- const dashboardExportDefinitionExists = isDashboardAutomation(editedAutomation);
236
- const updatedExportDefinitions = dashboardExportDefinitionExists
237
- ? editedAutomation.exportDefinitions?.map((exportDefinition) => isExportDefinitionDashboardRequestPayload(exportDefinition.requestPayload)
238
- ? dashboardExportDefinition
239
- : exportDefinition)
240
- : [...(editedAutomation.exportDefinitions ?? []), dashboardExportDefinition];
241
- setEditedAutomation((s) => ({
242
- ...s,
243
- exportDefinitions: updatedExportDefinitions,
244
- }));
245
- }
246
- else {
247
- setEditedAutomation((s) => ({
248
- ...s,
249
- exportDefinitions: s.exportDefinitions?.filter((exportDefinition) => !isExportDefinitionDashboardRequestPayload(exportDefinition.requestPayload)),
250
- }));
251
- }
252
- };
253
- const onWidgetAttachmentsChangeOld = (selected, format,
254
- /**
255
- * This prop may be removed in the future, once all automations are using new
256
- * automation filter context. (enableAutomationFilterContext)
257
- */
258
- widgetFilters) => {
259
- const automationTypeGuard = format === "CSV" ? isCsvVisualizationAutomation : isXlsxVisualizationAutomation;
260
- const exportDefinitionTypeGuard = format === "CSV" ? isCsvVisualizationExportDefinition : isXlsxVisualizationExportDefinition;
261
- invariant(isWidget, "Widget or insight is missing in scheduling dialog context.");
262
- if (selected) {
263
- const newExportDefinition = newWidgetExportDefinitionMetadataObjectDefinition({
264
- insight,
265
- widget,
266
- dashboardId: dashboardId,
267
- format,
268
- widgetFilters: enableAutomationFilterContext ? effectiveWidgetFilters : widgetFilters,
269
- widgetFiltersWithInsight: enableAutomationFilterContext
270
- ? effectiveWidgetFiltersWithInsight
271
- : widgetFilters,
272
- dashboardFilters: effectiveDashboardFilters,
273
- enableNewScheduledExport,
274
- defaultPdfPageSize,
275
- });
276
- const exportDefinitionExists = automationTypeGuard(editedAutomation);
277
- const updatedExportDefinitions = exportDefinitionExists
278
- ? editedAutomation.exportDefinitions?.map((exportDefinition) => exportDefinitionTypeGuard(exportDefinition) ? newExportDefinition : exportDefinition)
279
- : [...(editedAutomation.exportDefinitions ?? []), newExportDefinition];
280
- setEditedAutomation((s) => ({
281
- ...s,
282
- exportDefinitions: updatedExportDefinitions,
283
- }));
284
- }
285
- else {
286
- setEditedAutomation((s) => ({
287
- ...s,
288
- exportDefinitions: s.exportDefinitions?.filter((exportDefinition) => !exportDefinitionTypeGuard(exportDefinition)),
289
- }));
290
- }
291
- };
292
210
  const onXlsxSettingsChange = useCallback((settings) => {
293
211
  setEditedAutomation((s) => ({
294
212
  ...s,
@@ -489,14 +407,16 @@ export function useEditScheduledEmail({ scheduledExportToEdit, notificationChann
489
407
  // Update the editedFiltersByTab state
490
408
  setEditedAutomationFiltersByTab?.(newFiltersByTab);
491
409
  const shouldStoreFilters = storeFiltersParam ?? storeFilters;
492
- const newEffectiveFiltersByTab = Object.entries(newFiltersByTab).reduce((acc, [tabId, filters]) => {
493
- const tabHiddenFilters = filtersDataByTab?.find((tab) => tab.tabId === tabId)?.hiddenFilters ?? [];
494
- const appliedFilters = getAppliedDashboardFilters(filters ?? [], tabHiddenFilters, shouldStoreFilters);
495
- if (appliedFilters) {
496
- acc[tabId] = appliedFilters;
497
- }
498
- return acc;
499
- }, {});
410
+ const newEffectiveFiltersByTab = shouldStoreFilters
411
+ ? Object.entries(newFiltersByTab).reduce((acc, [tabId, filters]) => {
412
+ const tabHiddenFilters = filtersDataByTab?.find((tab) => tab.tabId === tabId)?.hiddenFilters ?? [];
413
+ const appliedFilters = getAppliedDashboardFilters(filters ?? [], tabHiddenFilters, true);
414
+ if (appliedFilters) {
415
+ acc[tabId] = appliedFilters;
416
+ }
417
+ return acc;
418
+ }, {})
419
+ : undefined;
500
420
  const newVisibleFiltersByTab = getVisibleFiltersByFiltersByTab(newFiltersByTab, availableFiltersAsVisibleFiltersByTab, shouldStoreFilters);
501
421
  // Sync to export definitions AND metadata
502
422
  setEditedAutomation((s) => ({
@@ -685,9 +605,7 @@ export function useEditScheduledEmail({ scheduledExportToEdit, notificationChann
685
605
  onSubjectChange,
686
606
  onMessageChange,
687
607
  onDashboardAttachmentsChange,
688
- onDashboardAttachmentsChangeOld,
689
608
  onWidgetAttachmentsChange,
690
- onWidgetAttachmentsChangeOld,
691
609
  onXlsxSettingsChange,
692
610
  onPdfSettingsChange,
693
611
  onCsvSettingsChange,
@@ -2,14 +2,11 @@
2
2
  import { useCallback, useState } from "react";
3
3
  import { omit } from "lodash-es";
4
4
  import { useIntl } from "react-intl";
5
- import { isAllValuesAttributeFilter, isAllValuesDashboardAttributeFilter, isExportDefinitionDashboardRequestPayload, isExportDefinitionVisualizationObjectRequestPayload, isNoopAllTimeDashboardDateFilter, isNoopAllTimeDateFilter, } from "@gooddata/sdk-model";
6
- import { useDashboardSelector } from "../../../../model/react/DashboardStoreProvider.js";
7
- import { selectEnableAutomationFilterContext } from "../../../../model/store/config/configSelectors.js";
5
+ import { isAllValuesAttributeFilter, isAllValuesDashboardAttributeFilter, isExportDefinitionDashboardRequestPayload, isExportDefinitionVisualizationObjectRequestPayload, } from "@gooddata/sdk-model";
8
6
  import { useCreateScheduledEmail } from "./useCreateScheduledEmail.js";
9
7
  import { useUpdateScheduledEmail } from "./useUpdateScheduledEmail.js";
10
8
  export function useSaveScheduledEmailToBackend(automation, { onSuccess, onError, onSubmit, onSaveSuccess, onSaveError, onSave, }) {
11
9
  const intl = useIntl();
12
- const enableAutomationFilterContext = useDashboardSelector(selectEnableAutomationFilterContext);
13
10
  const [savingErrorMessage, setSavingErrorMessage] = useState(undefined);
14
11
  const scheduledEmailCreator = useCreateScheduledEmail({
15
12
  onSuccess: (scheduledEmail) => {
@@ -33,9 +30,9 @@ export function useSaveScheduledEmailToBackend(automation, { onSuccess, onError,
33
30
  },
34
31
  });
35
32
  const handleCreateScheduledEmail = useCallback((scheduledEmail) => {
36
- const sanitizedAutomation = sanitizeAutomation(scheduledEmail, intl, enableAutomationFilterContext);
33
+ const sanitizedAutomation = sanitizeAutomation(scheduledEmail, intl);
37
34
  scheduledEmailCreator.create(sanitizedAutomation);
38
- }, [scheduledEmailCreator, enableAutomationFilterContext, intl]);
35
+ }, [scheduledEmailCreator, intl]);
39
36
  const scheduledEmailUpdater = useUpdateScheduledEmail({
40
37
  onSuccess: onSaveSuccess,
41
38
  onError: (error) => {
@@ -56,11 +53,11 @@ export function useSaveScheduledEmailToBackend(automation, { onSuccess, onError,
56
53
  },
57
54
  });
58
55
  const handleUpdateScheduledEmail = useCallback((scheduledEmail) => {
59
- const sanitizedAutomation = sanitizeAutomation(scheduledEmail, intl, enableAutomationFilterContext);
56
+ const sanitizedAutomation = sanitizeAutomation(scheduledEmail, intl);
60
57
  scheduledEmailUpdater.save(sanitizedAutomation);
61
- }, [scheduledEmailUpdater, enableAutomationFilterContext, intl]);
58
+ }, [scheduledEmailUpdater, intl]);
62
59
  const handleSaveScheduledEmail = () => {
63
- const sanitizedAutomation = sanitizeAutomation(automation, intl, enableAutomationFilterContext);
60
+ const sanitizedAutomation = sanitizeAutomation(automation, intl);
64
61
  if (sanitizedAutomation.id) {
65
62
  handleUpdateScheduledEmail(sanitizedAutomation);
66
63
  }
@@ -72,7 +69,7 @@ export function useSaveScheduledEmailToBackend(automation, { onSuccess, onError,
72
69
  scheduledEmailUpdater.savingStatus === "running";
73
70
  return { handleSaveScheduledEmail, isSavingScheduledEmail, savingErrorMessage };
74
71
  }
75
- function sanitizeAutomation(automationToSave, intl, enableAutomationFilterContext) {
72
+ function sanitizeAutomation(automationToSave, intl) {
76
73
  const automation = {
77
74
  ...automationToSave,
78
75
  };
@@ -92,16 +89,14 @@ function sanitizeAutomation(automationToSave, intl, enableAutomationFilterContex
92
89
  * - "All values" attribute filters have no effect on execution and should not appear in notifications.
93
90
  */
94
91
  if (automation.exportDefinitions) {
95
- automation.exportDefinitions = removeNoopFiltersFromExportDefinitions(automation.exportDefinitions, enableAutomationFilterContext);
92
+ automation.exportDefinitions = removeNoopFiltersFromExportDefinitions(automation.exportDefinitions);
96
93
  }
97
94
  return automation;
98
95
  }
99
- function removeNoopFiltersFromExportDefinitions(exportDefinitions, enableAutomationFilterContext) {
96
+ function removeNoopFiltersFromExportDefinitions(exportDefinitions) {
100
97
  return exportDefinitions.map((exportDefinition) => {
101
98
  if (isExportDefinitionVisualizationObjectRequestPayload(exportDefinition.requestPayload)) {
102
99
  const filters = exportDefinition.requestPayload.content.filters;
103
- const format = exportDefinition.requestPayload.format;
104
- const isTabularFormat = format === "XLSX" || format === "CSV";
105
100
  return {
106
101
  ...exportDefinition,
107
102
  requestPayload: {
@@ -110,17 +105,8 @@ function removeNoopFiltersFromExportDefinitions(exportDefinitions, enableAutomat
110
105
  ...exportDefinition.requestPayload.content,
111
106
  filters: filters?.filter((filter) => {
112
107
  // Strip noop "All values" attribute filters (handles both IFilter and FilterContextItem formats).
113
- if (isAllValuesAttributeFilter(filter) ||
114
- isAllValuesDashboardAttributeFilter(filter)) {
115
- return false;
116
- }
117
- // Strip noop "All time" date filters only for legacy path.
118
- if (!enableAutomationFilterContext) {
119
- return isTabularFormat
120
- ? !isNoopAllTimeDateFilter(filter)
121
- : !isNoopAllTimeDashboardDateFilter(filter);
122
- }
123
- return true;
108
+ return (!isAllValuesAttributeFilter(filter) &&
109
+ !isAllValuesDashboardAttributeFilter(filter));
124
110
  }),
125
111
  },
126
112
  },
@@ -135,14 +121,7 @@ function removeNoopFiltersFromExportDefinitions(exportDefinitions, enableAutomat
135
121
  ...exportDefinition.requestPayload.content,
136
122
  filters: exportDefinition.requestPayload.content.filters?.filter((filter) => {
137
123
  // Strip noop "All values" attribute filters.
138
- if (isAllValuesDashboardAttributeFilter(filter)) {
139
- return false;
140
- }
141
- // Strip noop "All time" date filters only for legacy path.
142
- if (!enableAutomationFilterContext && isNoopAllTimeDashboardDateFilter(filter)) {
143
- return false;
144
- }
145
- return true;
124
+ return !isAllValuesDashboardAttributeFilter(filter);
146
125
  }),
147
126
  },
148
127
  },
@@ -0,0 +1,3 @@
1
+ import { type IFilter, type IInsightDefinition } from "@gooddata/sdk-model";
2
+ import { type FilterableDashboardWidget } from "../../../model/types/layoutTypes.js";
3
+ export declare function useWidgetAutomationFilters(widget?: FilterableDashboardWidget, insight?: IInsightDefinition): import("../../../index.js").QueryProcessingState<IFilter[]>;
@@ -0,0 +1,46 @@
1
+ // (C) 2026 GoodData Corporation
2
+ import { useMemo } from "react";
3
+ import { filterIsEmpty, filterLocalIdentifier, isAttributeFilter, isNoopAllTimeDateFilter, } from "@gooddata/sdk-model";
4
+ import { useDashboardSelector } from "../../../model/react/DashboardStoreProvider.js";
5
+ import { useWidgetFilters } from "../../../model/react/useWidgetFilters.js";
6
+ import { selectCrossFilteringItems } from "../../../model/store/drill/drillSelectors.js";
7
+ export function useWidgetAutomationFilters(widget, insight) {
8
+ const widgetFiltersQuery = useWidgetFilters(widget, insight);
9
+ const crossFilteringItems = useDashboardSelector(selectCrossFilteringItems);
10
+ return useMemo(() => {
11
+ const { result: widgetFilters, status: widgetFiltersStatus } = widgetFiltersQuery;
12
+ const sanitizedWidgetFilters = widgetFilters
13
+ ? sanitizeWidgetFilters(widgetFilters, crossFilteringItems)
14
+ : undefined;
15
+ if (widgetFiltersStatus === "success" && sanitizedWidgetFilters) {
16
+ return {
17
+ ...widgetFiltersQuery,
18
+ result: sanitizedWidgetFilters,
19
+ };
20
+ }
21
+ return widgetFiltersQuery;
22
+ }, [crossFilteringItems, widgetFiltersQuery]);
23
+ }
24
+ function sanitizeWidgetFilters(filters, crossFilteringItems) {
25
+ const withoutCrossFiltering = removeCrossFilteringFilters(filters, crossFilteringItems);
26
+ const withoutAllTimeDateFilters = removeAllTimeDateFilters(withoutCrossFiltering);
27
+ return removeEmptyAttributeFilters(withoutAllTimeDateFilters);
28
+ }
29
+ function removeCrossFilteringFilters(filters, crossFilteringItems) {
30
+ const crossFilteringFilterLocalIdentifiers = crossFilteringItems.flatMap((c) => c.filterLocalIdentifiers);
31
+ return filters.filter((filter) => {
32
+ const filterLocalId = filterLocalIdentifier(filter);
33
+ return filterLocalId ? !crossFilteringFilterLocalIdentifiers.includes(filterLocalId) : true;
34
+ });
35
+ }
36
+ function removeEmptyAttributeFilters(filters) {
37
+ return filters.filter((filter) => {
38
+ if (isAttributeFilter(filter)) {
39
+ return !filterIsEmpty(filter);
40
+ }
41
+ return true;
42
+ });
43
+ }
44
+ function removeAllTimeDateFilters(filters) {
45
+ return filters.filter((filter) => !isNoopAllTimeDateFilter(filter));
46
+ }
@@ -1,13 +1,7 @@
1
1
  import { type ComponentType } from "react";
2
- import { type FilterContextItem, type IAutomationMetadataObject, type IAutomationMetadataObjectDefinition, type IFilter, type IInsight, type INotificationChannelIdentifier, type INotificationChannelMetadataObject, type IWorkspaceUser, type ObjRef } from "@gooddata/sdk-model";
2
+ import { type FilterContextItem, type IAutomationMetadataObject, type IAutomationMetadataObjectDefinition, type IFilter, type IInsight, type INotificationChannelIdentifier, type INotificationChannelMetadataObject, type IWorkspaceUser } from "@gooddata/sdk-model";
3
3
  import { type GoodDataSdkError } from "@gooddata/sdk-ui";
4
4
  import { type ExtendedDashboardWidget } from "../../model/types/layoutTypes.js";
5
- /**
6
- * @internal
7
- */
8
- export interface IScheduledEmailDialogPropsContext {
9
- widgetRef?: ObjRef | undefined;
10
- }
11
5
  /**
12
6
  * @alpha
13
7
  */
@@ -0,0 +1,2 @@
1
+ import { type FilterContextItem } from "@gooddata/sdk-model";
2
+ export declare function getAppliedDashboardFilters(selectedAutomationFilters: FilterContextItem[], dashboardHiddenFilters: FilterContextItem[], storeFilters?: boolean): FilterContextItem[] | undefined;
@@ -0,0 +1,5 @@
1
+ // (C) 2026 GoodData Corporation
2
+ import { getAppliedDashboardFilters as getAppliedDashboardFiltersFromAutomationFilters } from "../../automationFilters/utils.js";
3
+ export function getAppliedDashboardFilters(selectedAutomationFilters, dashboardHiddenFilters, storeFilters) {
4
+ return getAppliedDashboardFiltersFromAutomationFilters(selectedAutomationFilters, dashboardHiddenFilters, storeFilters);
5
+ }