@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
@@ -1,10 +1,10 @@
1
1
  import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  // (C) 2019-2026 GoodData Corporation
3
- import { useCallback, useMemo } from "react";
3
+ import { useCallback, useMemo, useState } from "react";
4
4
  import cx from "classnames";
5
5
  import { FormattedMessage, useIntl } from "react-intl";
6
6
  import { areObjRefsEqual, } from "@gooddata/sdk-model";
7
- import { Dropdown, DropdownButton, UiMenu, } from "@gooddata/sdk-ui-kit";
7
+ import { Dropdown, DropdownButton, InvertableSelectSearchBar, Item, Separator, UiMenu, } from "@gooddata/sdk-ui-kit";
8
8
  import { getSelectedCatalogAttribute, getSelectedCatalogAttributeValue } from "../utils/getters.js";
9
9
  const createInteractiveItem = (id, title, attribute, value, isSelected, subItems) => ({
10
10
  type: "interactive",
@@ -26,6 +26,34 @@ const createSeparator = (id) => ({
26
26
  function CustomStaticItem({ item: _item }) {
27
27
  return _jsx("div", { className: "gd-alert-attribute-select__dropdown-separator" });
28
28
  }
29
+ function AttributeValuesSearchContent({ attribute, values, isSelected, selectedAttributeValue, onAttributeChange, onClose, }) {
30
+ const intl = useIntl();
31
+ const [searchString, setSearchString] = useState("");
32
+ const filteredValues = useMemo(() => {
33
+ if (!searchString) {
34
+ return values;
35
+ }
36
+ const loweredSearch = searchString.toLowerCase();
37
+ return values.filter((item) => (item.title ?? item.name ?? "").toLowerCase().includes(loweredSearch));
38
+ }, [searchString, values]);
39
+ return (_jsxs("div", { className: cx("gd-alert-attribute-select__submenu-content", "s-alert-attribute-submenu-content"), children: [
40
+ _jsx("div", { children: _jsx(InvertableSelectSearchBar, { onSearch: setSearchString, searchString: searchString, searchPlaceholder: intl.formatMessage({
41
+ id: "attributesDropdown.placeholder",
42
+ }), className: "gd-alert-attribute-select__menu-item_search" }) }), _jsx(Item, { className: "gd-alert-attribute-select__menu-item_wrapper", checked: Boolean(isSelected && !selectedAttributeValue), onClick: (e) => {
43
+ onAttributeChange(attribute, undefined);
44
+ onClose();
45
+ e.preventDefault();
46
+ e.stopPropagation();
47
+ }, children: _jsxs("div", { className: "gd-alert-attribute-select__menu-item s-menu-alert-attribute-item-value", children: [intl.formatMessage({
48
+ id: "insightAlert.config.selectAttribute",
49
+ }), " ", "(", values.length, ")"] }) }), _jsx(Separator, {}), _jsx("div", { className: "gd-alert-attribute-select__menu-item__values", children: filteredValues.map((value, index) => (_jsx(Item, { checked: Boolean(isSelected && value.value === selectedAttributeValue?.value), className: "gd-alert-attribute-select__menu-item_wrapper", onClick: (e) => {
50
+ onAttributeChange(attribute, value);
51
+ onClose();
52
+ e.preventDefault();
53
+ e.stopPropagation();
54
+ }, children: _jsx("div", { className: "gd-alert-attribute-select__menu-item s-menu-alert-attribute-item-value", children: (value.title ?? value.name) || `(${intl.formatMessage({ id: "empty_value" })})` }) }, index))) })
55
+ ] }));
56
+ }
29
57
  export function AlertAttributeSelect({ id, selectedAttribute: selectedAttributeProp, getAttributeValues, isResultLoading, selectedValue, onAttributeChange, attributes, catalogAttributes, catalogDateDatasets, showLabel = true, closeOnParentScroll, }) {
30
58
  const intl = useIntl();
31
59
  const availableAttributes = useMemo(() => {
@@ -47,17 +75,22 @@ export function AlertAttributeSelect({ id, selectedAttribute: selectedAttributeP
47
75
  }
48
76
  const values = getAttributeValues(item);
49
77
  const hasDisplayForm = selectedAttribute?.displayForms.some((df) => areObjRefsEqual(df.ref, attribute.attribute.attribute.displayForm));
50
- // Create sub-items for attribute values
78
+ const isSelected = Boolean(hasDisplayForm);
79
+ if (values.length > 5) {
80
+ attributeItems.push({
81
+ type: "content",
82
+ id: `attribute-${item.id}`,
83
+ stringTitle: item.title || intl.formatMessage({ id: "empty_value" }),
84
+ data: undefined,
85
+ Component: ({ onClose }) => (_jsx(AttributeValuesSearchContent, { attribute: attribute, values: values, isSelected: isSelected, selectedAttributeValue: selectedAttributeValue, onAttributeChange: onAttributeChange, onClose: onClose })),
86
+ });
87
+ continue;
88
+ }
51
89
  const subItems = [
52
- // "All" option
53
90
  createInteractiveItem(`all-${item.id}`, `${accessibilityAriaLabel} (${values.length})`, attribute, undefined, Boolean(hasDisplayForm && !selectedAttributeValue)),
54
- // Separator after All option
55
91
  createSeparator(`separator-${item.id}`),
92
+ ...values.map((value) => createInteractiveItem(`value-${value.value}`, (value.title ?? value.name) || intl.formatMessage({ id: "empty_value" }), attribute, value, Boolean(hasDisplayForm && selectedAttributeValue?.value === value.value))),
56
93
  ];
57
- // Add individual value items
58
- for (const value of values) {
59
- subItems.push(createInteractiveItem(`value-${value.value}`, (value.title ?? value.name) || intl.formatMessage({ id: "empty_value" }), attribute, value, Boolean(hasDisplayForm && selectedAttributeValue?.value === value.value)));
60
- }
61
94
  // Check if any child is selected to determine parent selection state
62
95
  const hasSelectedChild = subItems.some((item) => item.type === "interactive" && "isSelected" in item && item.isSelected);
63
96
  // Create attribute item with submenu
@@ -81,6 +114,7 @@ export function AlertAttributeSelect({ id, selectedAttribute: selectedAttributeP
81
114
  catalogDateDatasets,
82
115
  getAttributeValues,
83
116
  intl,
117
+ onAttributeChange,
84
118
  selectedAttribute,
85
119
  selectedAttributeValue,
86
120
  ]);
@@ -1,9 +1,7 @@
1
1
  // (C) 2019-2026 GoodData Corporation
2
2
  import { useCallback } from "react";
3
3
  import { omit } from "lodash-es";
4
- import { isAllValuesAttributeFilter, isNoopAllTimeDateFilter, } from "@gooddata/sdk-model";
5
- import { useDashboardSelector } from "../../../../model/react/DashboardStoreProvider.js";
6
- import { selectEnableAutomationFilterContext } from "../../../../model/store/config/configSelectors.js";
4
+ import { isAllValuesAttributeFilter, } from "@gooddata/sdk-model";
7
5
  import { useCreateAlert } from "./useCreateAlert.js";
8
6
  import { useUpdateAlert } from "./useUpdateAlert.js";
9
7
  /**
@@ -18,44 +16,43 @@ import { useUpdateAlert } from "./useUpdateAlert.js";
18
16
  * @param onResumeError - callback to be called when alert resuming fails
19
17
  */
20
18
  export function useSaveAlertToBackend({ onCreateSuccess, onCreateError, onUpdateSuccess, onUpdateError, onPauseSuccess, onPauseError, onResumeSuccess, onResumeError, }) {
21
- const enableAutomationFilterContext = useDashboardSelector(selectEnableAutomationFilterContext);
22
19
  const alertCreator = useCreateAlert({
23
20
  onSuccess: (alert) => onCreateSuccess?.(alert),
24
21
  onError: onCreateError,
25
22
  });
26
23
  const handleCreateAlert = useCallback((alert) => {
27
- const sanitizedAlert = sanitizeAutomation(alert, enableAutomationFilterContext);
24
+ const sanitizedAlert = sanitizeAutomation(alert);
28
25
  alertCreator.create(sanitizedAlert);
29
- }, [alertCreator, enableAutomationFilterContext]);
26
+ }, [alertCreator]);
30
27
  const alertUpdater = useUpdateAlert({
31
28
  onSuccess: onUpdateSuccess,
32
29
  onError: onUpdateError,
33
30
  });
34
31
  const handleUpdateAlert = useCallback((alert) => {
35
- const sanitizedAlert = sanitizeAutomation(alert, enableAutomationFilterContext);
32
+ const sanitizedAlert = sanitizeAutomation(alert);
36
33
  alertUpdater.save(sanitizedAlert);
37
- }, [alertUpdater, enableAutomationFilterContext]);
34
+ }, [alertUpdater]);
38
35
  const alertPauser = useUpdateAlert({
39
36
  onSuccess: onPauseSuccess,
40
37
  onError: onPauseError,
41
38
  });
42
39
  const handlePauseAlert = useCallback((alert) => {
43
- alertPauser.save(sanitizeAutomation(alert, enableAutomationFilterContext));
44
- }, [alertPauser, enableAutomationFilterContext]);
40
+ alertPauser.save(sanitizeAutomation(alert));
41
+ }, [alertPauser]);
45
42
  const alertResumer = useUpdateAlert({
46
43
  onSuccess: onResumeSuccess,
47
44
  onError: onResumeError,
48
45
  });
49
46
  const handleResumeAlert = useCallback((alert) => {
50
- alertResumer.save(sanitizeAutomation(alert, enableAutomationFilterContext));
51
- }, [alertResumer, enableAutomationFilterContext]);
47
+ alertResumer.save(sanitizeAutomation(alert));
48
+ }, [alertResumer]);
52
49
  const isSavingAlert = alertCreator.creationStatus === "running" ||
53
50
  alertUpdater.savingStatus === "running" ||
54
51
  alertPauser.savingStatus === "running" ||
55
52
  alertResumer.savingStatus === "running";
56
53
  return { handleCreateAlert, handleUpdateAlert, handlePauseAlert, handleResumeAlert, isSavingAlert };
57
54
  }
58
- function sanitizeAutomation(automationToSave, enableAutomationFilterContext) {
55
+ function sanitizeAutomation(automationToSave) {
59
56
  let automation = {
60
57
  ...automationToSave,
61
58
  };
@@ -71,7 +68,7 @@ function sanitizeAutomation(automationToSave, enableAutomationFilterContext) {
71
68
  ...automation.alert,
72
69
  execution: {
73
70
  ...automation.alert.execution,
74
- filters: removeNoopFiltersFromAlertFilters(automation.alert.execution.filters, enableAutomationFilterContext),
71
+ filters: removeNoopFiltersFromAlertFilters(automation.alert.execution.filters),
75
72
  },
76
73
  },
77
74
  };
@@ -81,16 +78,7 @@ function sanitizeAutomation(automationToSave, enableAutomationFilterContext) {
81
78
  /**
82
79
  * Strip noop filters that have no effect on execution and should not appear in alert email notifications.
83
80
  * - "All values" attribute filters are always stripped.
84
- * - "All time" date filters are stripped only for the legacy path (new path handles this in getAppliedWidgetFilters).
85
81
  */
86
- function removeNoopFiltersFromAlertFilters(filters, enableAutomationFilterContext) {
87
- return filters.filter((filter) => {
88
- if (isAllValuesAttributeFilter(filter)) {
89
- return false;
90
- }
91
- if (!enableAutomationFilterContext && isNoopAllTimeDateFilter(filter)) {
92
- return false;
93
- }
94
- return true;
95
- });
82
+ function removeNoopFiltersFromAlertFilters(filters) {
83
+ return filters.filter((filter) => !isAllValuesAttributeFilter(filter));
96
84
  }
@@ -1,5 +1,5 @@
1
1
  import { type ComponentType } from "react";
2
- import { type DateAttributeGranularity, type IAttribute, type IAutomationMetadataObject, type IDataSetMetadataObject, type IInsight, type IInsightWidget, type IMeasure, type INotificationChannelIdentifier, type INotificationChannelMetadataObject, type IWorkspaceUser } from "@gooddata/sdk-model";
2
+ import { type DateAttributeGranularity, type IAttribute, type IAutomationMetadataObject, type IDataSetMetadataObject, type IInsight, type IMeasure, 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
5
  /**
@@ -67,31 +67,6 @@ export interface IAlertingDialogProps {
67
67
  */
68
68
  onDeleteError?: (error: GoodDataSdkError) => void;
69
69
  }
70
- /**
71
- * @alpha
72
- */
73
- export interface IAlertingDialogOldProps {
74
- /**
75
- * Alert to be edited in the dialog.
76
- */
77
- editAlert?: IAutomationMetadataObject;
78
- /**
79
- * Callback to be called, when user save the existing alert.
80
- */
81
- onUpdate?: (alertingDefinition: IAutomationMetadataObject) => void;
82
- /**
83
- * Callback to be called, when user closes the alerting dialog.
84
- */
85
- onCancel?: () => void;
86
- /**
87
- * Widget to be edited in the dialog.
88
- */
89
- editWidget?: IInsightWidget;
90
- /**
91
- * Anchor element for the dialog.
92
- */
93
- anchorEl?: HTMLElement | null;
94
- }
95
70
  /**
96
71
  * @alpha
97
72
  */
@@ -146,52 +121,6 @@ export interface IAlertingManagementDialogProps {
146
121
  */
147
122
  onPauseError: (error: GoodDataSdkError, pause: boolean) => void;
148
123
  }
149
- /**
150
- * @alpha
151
- */
152
- export interface IAlertingManagementDialogOldProps {
153
- /**
154
- * Callback to be called, when user clicks alert item for editing.
155
- */
156
- onEdit?: (alertingDefinition: IAutomationMetadataObject, widget: IInsightWidget | undefined, anchor: HTMLElement | null, onClosed: () => void) => void;
157
- /**
158
- * Callback to be called, when user closes the alert management dialog.
159
- */
160
- onClose?: () => void;
161
- /**
162
- * Is loading alert data?
163
- */
164
- isLoadingAlertingData: boolean;
165
- /**
166
- * Error occurred while loading alert data?
167
- */
168
- alertingDataError?: GoodDataSdkError;
169
- /**
170
- * Automations in workspace
171
- */
172
- automations: IAutomationMetadataObject[];
173
- /**
174
- * Callback to be called, when alert is deleted.
175
- * @param alert - alert that was deleted
176
- */
177
- onDeleteSuccess?: (alert: IAutomationMetadataObject) => void;
178
- /**
179
- * Callback to be called, when alert fails to delete.
180
- */
181
- onDeleteError?: (error: GoodDataSdkError) => void;
182
- /**
183
- * Callback to be called, when alert is paused.
184
- * @param alert - alert that was paused
185
- * @param pause - true if alert was paused, false if it was resumed
186
- */
187
- onPauseSuccess: (alert: IAutomationMetadataObject, pause: boolean) => void;
188
- /**
189
- * Callback to be called, when alert fails to pause.
190
- * @param error - error that occurred
191
- * @param pause - true if alert was paused, false if it was resumed
192
- */
193
- onPauseError: (error: GoodDataSdkError, pause: boolean) => void;
194
- }
195
124
  /**
196
125
  * @alpha
197
126
  */
@@ -13,11 +13,10 @@ export interface IAutomationValidationResult {
13
13
  visibleFiltersAreMissing: boolean;
14
14
  incompatibleSelectionTypeIsAppliedInSavedFilters: boolean;
15
15
  }
16
- export declare function useValidateExistingAutomationFilters({ automationToEdit, widget, insight, enableAutomationFilterContext }: {
16
+ export declare function useValidateExistingAutomationFilters({ automationToEdit, widget, insight }: {
17
17
  automationToEdit?: IAutomationMetadataObject;
18
18
  widget?: ExtendedDashboardWidget;
19
19
  insight?: IInsight;
20
- enableAutomationFilterContext?: boolean;
21
20
  }): IAutomationValidationResult;
22
21
  /**
23
22
  * Validate existing automation filters against current dashboard filter context and optionally saved widget / insight.
@@ -17,8 +17,8 @@ function sanitizeCommonDateFilter(filter, commonDateFilterId) {
17
17
  }
18
18
  return filter;
19
19
  }
20
- function shouldSkipValidation(enableAutomationFilterContext, automationToEdit, widget, savedDashboardFilters) {
21
- if (!enableAutomationFilterContext || !automationToEdit) {
20
+ function shouldSkipValidation(automationToEdit, widget, savedDashboardFilters, savedDashboardFiltersByTab) {
21
+ if (!automationToEdit) {
22
22
  return true;
23
23
  }
24
24
  // Handle case, when dashboard scheduled export filters are not saved (undefined === always use latest dashboard filters in the scheduled export)
@@ -26,7 +26,7 @@ function shouldSkipValidation(enableAutomationFilterContext, automationToEdit, w
26
26
  if (widget) {
27
27
  return !isInsightWidget(widget);
28
28
  }
29
- return typeof savedDashboardFilters === "undefined";
29
+ return typeof savedDashboardFilters === "undefined" && typeof savedDashboardFiltersByTab === "undefined";
30
30
  }
31
31
  function hasMatchingPerTabFormat(widget, dashboardFiltersByTab, savedAutomationVisibleFiltersByTab, savedDashboardFiltersByTab) {
32
32
  return (!widget &&
@@ -52,7 +52,7 @@ const defaultValidState = {
52
52
  visibleFiltersAreMissing: false,
53
53
  incompatibleSelectionTypeIsAppliedInSavedFilters: false,
54
54
  };
55
- export function useValidateExistingAutomationFilters({ automationToEdit, widget, insight, enableAutomationFilterContext, }) {
55
+ export function useValidateExistingAutomationFilters({ automationToEdit, widget, insight, }) {
56
56
  const lockedFilters = useDashboardSelector(selectDashboardLockedFilters);
57
57
  const hiddenFilters = useDashboardSelector(selectDashboardHiddenFilters);
58
58
  const dashboardFilters = useDashboardSelector(selectDashboardFiltersWithoutCrossFiltering);
@@ -67,7 +67,7 @@ export function useValidateExistingAutomationFilters({ automationToEdit, widget,
67
67
  const savedAlertFilters = getAutomationAlertFilters(automationToEdit);
68
68
  const savedDashboardFilters = getAutomationDashboardFilters(automationToEdit);
69
69
  const savedDashboardFiltersByTab = getAutomationDashboardFiltersByTab(automationToEdit);
70
- if (shouldSkipValidation(enableAutomationFilterContext, automationToEdit, widget, savedDashboardFilters)) {
70
+ if (shouldSkipValidation(automationToEdit, widget, savedDashboardFilters, savedDashboardFiltersByTab)) {
71
71
  return defaultValidState;
72
72
  }
73
73
  // Check for matching format scenario: both automation and dashboard have per-tab structure
@@ -1,13 +1,6 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
2
  // (C) 2022-2026 GoodData Corporation
3
- import { useDashboardSelector } from "../../../model/react/DashboardStoreProvider.js";
4
- import { selectEnableAutomationFilterContext } from "../../../model/store/config/configSelectors.js";
5
3
  import { AlertingDialogProviderNew } from "./AlertingDialogProviderNew.js";
6
- import { AlertingDialogProviderOld } from "./AlertingDialogProviderOld.js";
7
4
  export function AlertingDialogProvider() {
8
- const enableAutomationFilters = useDashboardSelector(selectEnableAutomationFilterContext);
9
- if (enableAutomationFilters) {
10
- return _jsx(AlertingDialogProviderNew, {});
11
- }
12
- return _jsx(AlertingDialogProviderOld, {});
5
+ return _jsx(AlertingDialogProviderNew, {});
13
6
  }
@@ -1,10 +1,14 @@
1
1
  import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  // (C) 2022-2026 GoodData Corporation
3
- import { useScheduledExportFilters } from "../../../model/react/filtering/useScheduledExportFilters.js";
3
+ import { getAutomationDashboardFilters, getAutomationVisualizationFilters, } from "../../../_staging/automation/index.js";
4
+ import { useDashboardSelector } from "../../../model/react/DashboardStoreProvider.js";
4
5
  import { useDashboardScheduledEmails } from "../../../model/react/useDasboardScheduledEmails/useDashboardScheduledEmails.js";
5
6
  import { useWorkspaceUsers } from "../../../model/react/useWorkspaceUsers.js";
7
+ import { selectAutomationDefaultSelectedFilters, selectDashboardHiddenFilters, } from "../../../model/store/filtering/dashboardFilterSelectors.js";
8
+ import { useWidgetAutomationFilters } from "../../scheduledEmail/hooks/useWidgetAutomationFilters.js";
6
9
  import { ScheduledEmailDialog } from "../../scheduledEmail/ScheduledEmailDialog.js";
7
10
  import { ScheduledEmailManagementDialog } from "../../scheduledEmail/ScheduledEmailManagementDialog.js";
11
+ import { getAppliedDashboardFilters } from "../../scheduledEmail/utils/filters.js";
8
12
  export function ScheduledEmailDialogProvider() {
9
13
  const {
10
14
  // Shared Local State
@@ -15,13 +19,18 @@ export function ScheduledEmailDialogProvider() {
15
19
  isScheduleEmailingDialogOpen, onScheduleEmailingCancel, onScheduleEmailingBack, onScheduleEmailingCreateSuccess, onScheduleEmailingCreateError, onScheduleEmailingSaveSuccess, onScheduleEmailingSaveError,
16
20
  // Management / List Dialog
17
21
  isScheduleEmailingManagementDialogOpen, onScheduleEmailingManagementClose, onScheduleEmailingManagementAdd, onScheduleEmailingManagementEdit, onScheduleEmailingManagementDeleteSuccess, onScheduleEmailingManagementDeleteError, } = useDashboardScheduledEmails();
18
- const { widgetFilters, dashboardFilters, widgetFiltersError, widgetFiltersLoading } = useScheduledExportFilters({
19
- scheduledExportToEdit,
20
- widget,
21
- insight,
22
- });
23
- const isLoading = [widgetFiltersLoading, automationsLoading].some(Boolean);
24
- const loadingError = [widgetFiltersError, automationsError].find(Boolean);
22
+ const automationDefaultSelectedFilters = useDashboardSelector(selectAutomationDefaultSelectedFilters);
23
+ const dashboardHiddenFilters = useDashboardSelector(selectDashboardHiddenFilters);
24
+ const { executionFilters: savedWidgetFilters } = getAutomationVisualizationFilters(scheduledExportToEdit);
25
+ const savedDashboardFilters = getAutomationDashboardFilters(scheduledExportToEdit);
26
+ const { result: liveWidgetFilters, status: widgetFiltersStatus, error: widgetFiltersError, } = useWidgetAutomationFilters(widget, insight);
27
+ const widgetFilters = savedWidgetFilters ?? liveWidgetFilters;
28
+ const shouldLoadWidgetFilters = !!widget && !savedWidgetFilters;
29
+ const dashboardFilters = savedDashboardFilters ??
30
+ getAppliedDashboardFilters(automationDefaultSelectedFilters, dashboardHiddenFilters, true);
31
+ const isLoading = automationsLoading ||
32
+ (shouldLoadWidgetFilters && (widgetFiltersStatus === "pending" || widgetFiltersStatus === "running"));
33
+ const loadingError = (shouldLoadWidgetFilters ? widgetFiltersError : undefined) ?? automationsError;
25
34
  if (!isInitialized) {
26
35
  return null;
27
36
  }
@@ -13,6 +13,7 @@ import { selectDashboardPermissions } from "../../../model/store/dashboardPermis
13
13
  import { selectPersistedDashboard } from "../../../model/store/meta/metaSelectors.js";
14
14
  import { selectCanManageWorkspace } from "../../../model/store/permissions/permissionsSelectors.js";
15
15
  import { selectFilterContextFilters } from "../../../model/store/tabs/filterContext/filterContextSelectors.js";
16
+ import { selectFilterViewParameters } from "../../../model/store/tabs/parameters/parametersSelectors.js";
16
17
  import { selectIsDashboardShareLinkVisible, selectIsShareGrantVisible, } from "../../../model/store/topBar/topBarSelectors.js";
17
18
  import { uiActions } from "../../../model/store/ui/index.js";
18
19
  import { selectIsShareDialogOpen } from "../../../model/store/ui/uiSelectors.js";
@@ -28,6 +29,7 @@ const useShareDialogDashboardHeader = () => {
28
29
  const isWorkspaceManager = useDashboardSelector(selectCanManageWorkspace);
29
30
  const dashboardPermissions = useDashboardSelector(selectDashboardPermissions);
30
31
  const dashboardFilters = useDashboardSelector(selectFilterContextFilters);
32
+ const dashboardParameters = useDashboardSelector(selectFilterViewParameters);
31
33
  const isShareGrantHidden = !useDashboardSelector(selectIsShareGrantVisible);
32
34
  const isDashboardShareDialogLinkEnabled = useDashboardSelector(selectEnableDashboardShareDialogLink);
33
35
  const showDashboardShareLink = useDashboardSelector(selectIsDashboardShareLinkVisible);
@@ -78,6 +80,7 @@ const useShareDialogDashboardHeader = () => {
78
80
  isCurrentUserWorkspaceManager: isWorkspaceManager,
79
81
  dashboardPermissions,
80
82
  dashboardFilters,
83
+ dashboardParameters,
81
84
  isShareGrantHidden,
82
85
  applyShareGrantOnSelect,
83
86
  showDashboardShareLink,
@@ -89,7 +92,7 @@ const useShareDialogDashboardHeader = () => {
89
92
  * @internal
90
93
  */
91
94
  export function ShareDialogDashboardHeader() {
92
- const { backend, workspace, isShareDialogOpen, persistedDashboard, currentUser, onCloseShareDialog, onApplyShareDialog, onErrorShareDialog, onInteractionShareDialog, isLockingSupported, isCurrentUserWorkspaceManager, dashboardPermissions, dashboardFilters, isShareGrantHidden, applyShareGrantOnSelect, showDashboardShareLink, onShareLinkCopy, isGranteeShareLoading, } = useShareDialogDashboardHeader();
95
+ const { backend, workspace, isShareDialogOpen, persistedDashboard, currentUser, onCloseShareDialog, onApplyShareDialog, onErrorShareDialog, onInteractionShareDialog, isLockingSupported, isCurrentUserWorkspaceManager, dashboardPermissions, dashboardFilters, dashboardParameters, isShareGrantHidden, applyShareGrantOnSelect, showDashboardShareLink, onShareLinkCopy, isGranteeShareLoading, } = useShareDialogDashboardHeader();
93
96
  if (!isShareDialogOpen) {
94
97
  return null;
95
98
  }
@@ -100,5 +103,5 @@ export function ShareDialogDashboardHeader() {
100
103
  canShareLockedAffectedObject: dashboardPermissions.canShareLockedDashboard,
101
104
  canViewAffectedObject: dashboardPermissions.canViewDashboard,
102
105
  };
103
- return (_jsx(ShareDialog, { backend: backend, workspace: workspace, isVisible: isShareDialogOpen, currentUser: currentUser, sharedObject: persistedDashboard, onCancel: onCloseShareDialog, onApply: onApplyShareDialog, onError: onErrorShareDialog, isLockingSupported: isLockingSupported, isCurrentUserWorkspaceManager: isCurrentUserWorkspaceManager, currentUserPermissions: currentUserPermissions, dashboardFilters: dashboardFilters, onInteraction: onInteractionShareDialog, isShareGrantHidden: isShareGrantHidden, applyShareGrantOnSelect: applyShareGrantOnSelect, showDashboardShareLink: showDashboardShareLink, onShareLinkCopy: onShareLinkCopy, isGranteeShareLoading: isGranteeShareLoading }));
106
+ return (_jsx(ShareDialog, { backend: backend, workspace: workspace, isVisible: isShareDialogOpen, currentUser: currentUser, sharedObject: persistedDashboard, onCancel: onCloseShareDialog, onApply: onApplyShareDialog, onError: onErrorShareDialog, isLockingSupported: isLockingSupported, isCurrentUserWorkspaceManager: isCurrentUserWorkspaceManager, currentUserPermissions: currentUserPermissions, dashboardFilters: dashboardFilters, dashboardParameters: dashboardParameters, onInteraction: onInteractionShareDialog, isShareGrantHidden: isShareGrantHidden, applyShareGrantOnSelect: applyShareGrantOnSelect, showDashboardShareLink: showDashboardShareLink, onShareLinkCopy: onShareLinkCopy, isGranteeShareLoading: isGranteeShareLoading }));
104
107
  }
@@ -6,7 +6,7 @@ import { BackendProvider, ErrorComponent as DefaultError, LoadingComponent as De
6
6
  import { OverlayController, OverlayControllerProvider } from "@gooddata/sdk-ui-kit";
7
7
  import { ThemeProvider } from "@gooddata/sdk-ui-theme-provider";
8
8
  import { DashboardStoreProvider } from "../../../model/react/DashboardStoreProvider.js";
9
- import { DefaultAlertingDialogNew } from "../../alerting/DefaultAlertingDialog/DefaultAlertingDialogNew.js";
9
+ import { DefaultAlertingDialog } from "../../alerting/DefaultAlertingDialog/DefaultAlertingDialog.js";
10
10
  import { DefaultAlertingManagementDialogNew } from "../../alerting/DefaultAlertingManagementDialog/DefaultAlertingManagementDialogNew.js";
11
11
  import { DASHBOARD_OVERLAYS_Z_INDEX } from "../../constants/zIndex.js";
12
12
  import { DashboardComponentsProvider } from "../../dashboardContexts/DashboardComponentsContext.js";
@@ -58,7 +58,7 @@ function resolveDialogComponents(props) {
58
58
  ScheduledEmailManagementDialogComponent: props.ScheduledEmailManagementDialogComponent ?? DefaultScheduledEmailManagementDialog,
59
59
  ShareDialogComponent: props.ShareDialogComponent ?? DefaultShareDialog,
60
60
  AlertingManagementDialogComponent: props.AlertingManagementDialogComponent ?? DefaultAlertingManagementDialogNew,
61
- AlertingDialogComponent: props.AlertingDialogComponent ?? DefaultAlertingDialogNew,
61
+ AlertingDialogComponent: props.AlertingDialogComponent ?? DefaultAlertingDialog,
62
62
  SaveAsDialogComponent: props.SaveAsDialogComponent ?? DefaultSaveAsDialog,
63
63
  DashboardSettingsDialogComponent: props.DashboardSettingsDialogComponent ?? DefaultDashboardSettingsDialog,
64
64
  };