@gooddata/sdk-ui-dashboard 11.44.0-alpha.3 → 11.44.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (84) hide show
  1. package/esm/__version.d.ts +1 -1
  2. package/esm/__version.d.ts.map +1 -1
  3. package/esm/__version.js +1 -1
  4. package/esm/index.d.ts +1 -1
  5. package/esm/index.d.ts.map +1 -1
  6. package/esm/index.js +1 -1
  7. package/esm/model/commandHandlers/drill/crossFilteringHandler.d.ts.map +1 -1
  8. package/esm/model/commandHandlers/drill/crossFilteringHandler.js +2 -3
  9. package/esm/model/commandHandlers/drill/drillToDashboardHandler.d.ts.map +1 -1
  10. package/esm/model/commandHandlers/drill/drillToDashboardHandler.js +1 -3
  11. package/esm/model/store/config/configSelectors.d.ts +0 -42
  12. package/esm/model/store/config/configSelectors.d.ts.map +1 -1
  13. package/esm/model/store/config/configSelectors.js +0 -56
  14. package/esm/model/store/tabs/layout/layoutSelectors.d.ts.map +1 -1
  15. package/esm/model/store/tabs/layout/layoutSelectors.js +2 -3
  16. package/esm/presentation/automations/alerting/DefaultAlertingDialog/hooks/useEditAlert.d.ts.map +1 -1
  17. package/esm/presentation/automations/alerting/DefaultAlertingDialog/hooks/useEditAlert.js +2 -2
  18. package/esm/presentation/automations/connectors/ScheduledEmailConnector.d.ts.map +1 -1
  19. package/esm/presentation/automations/connectors/ScheduledEmailConnector.js +49 -6
  20. package/esm/presentation/automations/connectors/ScheduledEmailConnector.test.d.ts +2 -0
  21. package/esm/presentation/automations/connectors/ScheduledEmailConnector.test.d.ts.map +1 -0
  22. package/esm/presentation/automations/connectors/ScheduledEmailConnector.test.js +165 -0
  23. package/esm/presentation/automations/connectors/hooks/useBuildAutomationsContext.d.ts.map +1 -1
  24. package/esm/presentation/automations/connectors/hooks/useBuildAutomationsContext.js +10 -5
  25. package/esm/presentation/automations/connectors/hooks/useBuildAutomationsContext.test.js +1 -1
  26. package/esm/presentation/automations/connectors/hooks/useBuildScheduledEmailDialogContext.d.ts.map +1 -1
  27. package/esm/presentation/automations/connectors/hooks/useBuildScheduledEmailDialogContext.js +2 -8
  28. package/esm/presentation/automations/connectors/hooks/useBuildScheduledEmailDialogContext.test.js +0 -1
  29. package/esm/presentation/automations/connectors/hooks/useBuildScheduledEmailManagementDialogContext.d.ts +3 -0
  30. package/esm/presentation/automations/connectors/hooks/useBuildScheduledEmailManagementDialogContext.d.ts.map +1 -0
  31. package/esm/presentation/automations/connectors/hooks/useBuildScheduledEmailManagementDialogContext.js +38 -0
  32. package/esm/presentation/automations/connectors/hooks/useBuildScheduledEmailManagementDialogContext.test.d.ts +2 -0
  33. package/esm/presentation/automations/connectors/hooks/useBuildScheduledEmailManagementDialogContext.test.d.ts.map +1 -0
  34. package/esm/presentation/automations/connectors/hooks/useBuildScheduledEmailManagementDialogContext.test.js +42 -0
  35. package/esm/presentation/automations/contexts/AutomationsContext.d.ts +12 -1
  36. package/esm/presentation/automations/contexts/AutomationsContext.d.ts.map +1 -1
  37. package/esm/presentation/automations/contexts/ScheduledEmailDialogContext.d.ts +1 -6
  38. package/esm/presentation/automations/contexts/ScheduledEmailDialogContext.d.ts.map +1 -1
  39. package/esm/presentation/automations/contexts/ScheduledEmailManagementDialogContext.d.ts +54 -0
  40. package/esm/presentation/automations/contexts/ScheduledEmailManagementDialogContext.d.ts.map +1 -0
  41. package/esm/presentation/automations/contexts/ScheduledEmailManagementDialogContext.js +11 -0
  42. package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/hooks/useEditScheduledEmail.d.ts.map +1 -1
  43. package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/hooks/useEditScheduledEmail.js +2 -2
  44. package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/hooks/useScheduleValidation.js +2 -2
  45. package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailManagementDialog/DefaultScheduledEmailManagementDialog.d.ts.map +1 -1
  46. package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailManagementDialog/DefaultScheduledEmailManagementDialog.js +5 -35
  47. package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailManagementDialog/DefaultScheduledEmailManagementDialogContentBasic.d.ts.map +1 -1
  48. package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailManagementDialog/DefaultScheduledEmailManagementDialogContentBasic.js +5 -15
  49. package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailManagementDialog/DefaultScheduledEmailManagementDialogContentEnhanced.d.ts.map +1 -1
  50. package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailManagementDialog/DefaultScheduledEmailManagementDialogContentEnhanced.js +7 -25
  51. package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailManagementDialog/components/DeleteScheduleConfirmDialog.d.ts.map +1 -1
  52. package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailManagementDialog/components/DeleteScheduleConfirmDialog.js +3 -5
  53. package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailManagementDialog/components/ScheduledEmail.d.ts.map +1 -1
  54. package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailManagementDialog/components/ScheduledEmail.js +3 -6
  55. package/esm/presentation/automations/scheduledEmail/hooks/useScheduleEmailDialogAccessibility.d.ts.map +1 -1
  56. package/esm/presentation/automations/scheduledEmail/hooks/useScheduleEmailDialogAccessibility.js +3 -4
  57. package/esm/presentation/automations/shared/automationFilters/components/AutomationDateFilter.test.js +2 -1
  58. package/esm/presentation/dashboard/DashboardSidebar/CreationPanel.d.ts.map +1 -1
  59. package/esm/presentation/dashboard/DashboardSidebar/CreationPanel.js +2 -4
  60. package/esm/presentation/dashboard/DashboardSidebar/FloatingToolbar.d.ts.map +1 -1
  61. package/esm/presentation/dashboard/DashboardSidebar/FloatingToolbar.js +2 -3
  62. package/esm/presentation/dragAndDrop/draggableFilterDropZone/DraggableFilterDropZone.d.ts.map +1 -1
  63. package/esm/presentation/dragAndDrop/draggableFilterDropZone/DraggableFilterDropZone.js +1 -3
  64. package/esm/presentation/filterBar/attributeFilter/addAttributeFilter/AddAttributeFilterPlaceholder.d.ts.map +1 -1
  65. package/esm/presentation/filterBar/attributeFilter/addAttributeFilter/AddAttributeFilterPlaceholder.js +1 -4
  66. package/esm/presentation/filterBar/attributeFilter/addAttributeFilter/AttributesDropdown.d.ts.map +1 -1
  67. package/esm/presentation/filterBar/attributeFilter/addAttributeFilter/AttributesDropdown.js +11 -6
  68. package/esm/presentation/filterBar/attributeFilter/dashboardDropdownBody/configuration/hooks/useAvailableDatasetsForItems.d.ts.map +1 -1
  69. package/esm/presentation/filterBar/attributeFilter/dashboardDropdownBody/configuration/hooks/useAvailableDatasetsForItems.js +1 -4
  70. package/esm/presentation/filterBar/attributeFilter/dashboardDropdownBody/configuration/limitValues/LimitValuesConfiguration.d.ts.map +1 -1
  71. package/esm/presentation/filterBar/attributeFilter/dashboardDropdownBody/configuration/limitValues/LimitValuesConfiguration.js +1 -3
  72. package/esm/presentation/filterBar/attributeFilter/dashboardDropdownBody/configuration/limitValues/dialog/ParentFiltersPage.d.ts.map +1 -1
  73. package/esm/presentation/filterBar/attributeFilter/dashboardDropdownBody/configuration/limitValues/dialog/ParentFiltersPage.js +1 -4
  74. package/esm/presentation/filterBar/filterBar/filterViews/FilterViewsList.d.ts.map +1 -1
  75. package/esm/presentation/filterBar/filterBar/filterViews/FilterViewsList.js +9 -3
  76. package/esm/presentation/widget/insight/ViewModeDashboardInsight/DashboardInsightWithDrillDialog.d.ts.map +1 -1
  77. package/esm/presentation/widget/insight/ViewModeDashboardInsight/DashboardInsightWithDrillDialog.js +2 -3
  78. package/esm/presentation/widget/insight/configuration/InsightAlertConfig/hooks/useEditAlert.d.ts.map +1 -1
  79. package/esm/presentation/widget/insight/configuration/InsightAlertConfig/hooks/useEditAlert.js +2 -3
  80. package/esm/presentation/widget/insight/configuration/InsightCrossFiltering.d.ts +1 -1
  81. package/esm/presentation/widget/insight/configuration/InsightCrossFiltering.d.ts.map +1 -1
  82. package/esm/presentation/widget/insight/configuration/InsightCrossFiltering.js +1 -6
  83. package/esm/sdk-ui-dashboard.d.ts +0 -49
  84. package/package.json +20 -20
@@ -0,0 +1,54 @@
1
+ /**
2
+ * Sub-context for the scheduled-email management dialog.
3
+ * The connector hydrates this from dashboard state.
4
+ *
5
+ * Values already available on AutomationsContext (locale, currentUser, timezone,
6
+ * isWhiteLabeled, isExecutionTimestampMode, externalRecipient, features.*) are NOT
7
+ * duplicated here — consumers read those from useAutomationsContext().
8
+ *
9
+ * @internal
10
+ */
11
+ export interface IScheduledEmailManagementDialogContextValue {
12
+ /**
13
+ * Whether the scheduled-email create/edit dialog is currently open (from store UI slice).
14
+ * Used by the management dialog tree's focus-return logic (refocus when the edit dialog closes).
15
+ */
16
+ isScheduleEmailDialogOpen: boolean;
17
+ /**
18
+ * Monotonic counter that increments whenever the automation list is invalidated.
19
+ * Consumers can use this as a cache-bust key for re-fetching.
20
+ */
21
+ automationsInvalidationId?: number;
22
+ /**
23
+ * Whether accessibility mode is active (for aria/keyboard focus management).
24
+ */
25
+ enableAccessibilityMode: boolean;
26
+ /**
27
+ * Whether the dashboard is rendered in an embedded (iframe) context.
28
+ */
29
+ isEmbedded: boolean;
30
+ /**
31
+ * Id of the dashboard the management dialog is rendered on (mirrors alerting management ctx).
32
+ * Used to preselect the dashboard filter in the enhanced automations list.
33
+ */
34
+ dashboardId?: string;
35
+ /**
36
+ * Title of the dashboard the management dialog is rendered on (mirrors alerting management ctx).
37
+ * Used as the label of the preselected dashboard filter in the enhanced automations list.
38
+ */
39
+ dashboardTitle?: string;
40
+ /**
41
+ * Maximum number of automations allowed (derived connector-side from the
42
+ * max-automations entitlement, falling back to DEFAULT_MAX_AUTOMATIONS).
43
+ * Combined with the dialog's automations count to gate the create button.
44
+ */
45
+ maxAutomations: number;
46
+ /**
47
+ * Whether the unlimited-automations entitlement is present. When true the
48
+ * max-automations limit is not enforced.
49
+ */
50
+ unlimitedAutomations: boolean;
51
+ }
52
+ export declare const ScheduledEmailManagementDialogContextProvider: import("react").Provider<IScheduledEmailManagementDialogContextValue | undefined>;
53
+ export declare function useScheduledEmailManagementDialogContext(): IScheduledEmailManagementDialogContextValue;
54
+ //# sourceMappingURL=ScheduledEmailManagementDialogContext.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ScheduledEmailManagementDialogContext.d.ts","sourceRoot":"","sources":["../../../../src/presentation/automations/contexts/ScheduledEmailManagementDialogContext.ts"],"names":[],"mappings":"AAIA;;;;;;;;;GASG;AACH,MAAM,WAAW,2CAA2C;IACxD;;;OAGG;IACH,yBAAyB,EAAE,OAAO,CAAC;IACnC;;;OAGG;IACH,yBAAyB,CAAC,EAAE,MAAM,CAAC;IACnC;;OAEG;IACH,uBAAuB,EAAE,OAAO,CAAC;IACjC;;OAEG;IACH,UAAU,EAAE,OAAO,CAAC;IACpB;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;;;OAIG;IACH,cAAc,EAAE,MAAM,CAAC;IACvB;;;OAGG;IACH,oBAAoB,EAAE,OAAO,CAAC;CACjC;AAMD,eAAO,MAAM,6CAA6C,mFAAiD,CAAC;AAE5G,wBAAgB,wCAAwC,IAAI,2CAA2C,CAQtG"}
@@ -0,0 +1,11 @@
1
+ // (C) 2026 GoodData Corporation
2
+ import { createContext, useContext } from "react";
3
+ const ScheduledEmailManagementDialogContext = createContext(undefined);
4
+ export const ScheduledEmailManagementDialogContextProvider = ScheduledEmailManagementDialogContext.Provider;
5
+ export function useScheduledEmailManagementDialogContext() {
6
+ const ctx = useContext(ScheduledEmailManagementDialogContext);
7
+ if (!ctx) {
8
+ throw new Error("useScheduledEmailManagementDialogContext must be used within ScheduledEmailManagementDialogContextProvider");
9
+ }
10
+ return ctx;
11
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"useEditScheduledEmail.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/hooks/useEditScheduledEmail.ts"],"names":[],"mappings":"AAOA,OAAO,EAGH,KAAK,uBAAuB,EAC5B,KAAK,iBAAiB,EACtB,KAAK,yBAAyB,EAE9B,KAAK,mCAAmC,EACxC,KAAK,oBAAoB,EACzB,KAAK,wBAAwB,EAC7B,KAAK,yBAAyB,EAE9B,KAAK,4CAA4C,EACjD,KAAK,OAAO,EACZ,KAAK,QAAQ,EACb,KAAK,8BAA8B,EACnC,KAAK,kCAAkC,EACvC,KAAK,OAAO,EACZ,KAAK,cAAc,EACnB,KAAK,oBAAoB,EAQ5B,MAAM,qBAAqB,CAAC;AAM7B,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,+CAA+C,CAAC;AA2B3F,MAAM,WAAW,2BAA2B;IACxC,qBAAqB,CAAC,EAAE,yBAAyB,CAAC;IAClD,oBAAoB,EAAE,8BAA8B,EAAE,GAAG,kCAAkC,EAAE,CAAC;IAC9F,wBAAwB,EAAE,MAAM,CAAC;IACjC,iFAAiF;IACjF,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,QAAQ,CAAC;IACnB,aAAa,CAAC,EAAE,OAAO,EAAE,CAAC;IAC1B,uBAAuB,CAAC,EAAE,iBAAiB,EAAE,CAAC;IAC9C,gBAAgB,CAAC,EAAE,iBAAiB,EAAE,CAAC;IACvC,0BAA0B,EAAE,CAAC,OAAO,EAAE,iBAAiB,EAAE,KAAK,IAAI,CAAC;IAEnE;;;OAGG;IACH,4BAA4B,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,EAAE,CAAC,CAAC;IACnE;;;OAGG;IACH,+BAA+B,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,EAAE,CAAC,KAAK,IAAI,CAAC;IACzF,gBAAgB,CAAC,EAAE,qBAAqB,EAAE,GAAG,SAAS,CAAC;IACvD,gCAAgC,CAAC,EAAE,wBAAwB,EAAE,GAAG,SAAS,CAAC;IAC1E,qCAAqC,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,wBAAwB,EAAE,CAAC,CAAC;IAEnF,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,eAAe,EAAE,CAAC,YAAY,EAAE,OAAO,KAAK,IAAI,CAAC;IACjD,uBAAuB,EAAE,iBAAiB,EAAE,CAAC;IAC7C,yBAAyB,CAAC,EAAE,MAAM,CAAC;IACnC,wBAAwB,EAAE,OAAO,CAAC;IAClC,kBAAkB,CAAC,EAAE,4CAA4C,CAAC,UAAU,CAAC,CAAC;CACjF;AAED,wBAAgB,qBAAqB,CAAC,EAClC,qBAAqB,EACrB,oBAAoB,EACpB,OAAO,EACP,MAAM,EACN,KAAK,EACL,uBAAuB,EACvB,gBAAgB,EAChB,4BAA4B,EAC5B,wBAAwB,EACxB,0BAA0B,EAC1B,+BAA+B,EAC/B,gCAAgC,EAChC,YAAY,EACZ,eAAe,EACf,uBAAuB,EACvB,yBAAyB,EACzB,wBAAwB,EACxB,kBAAkB,EAClB,gBAAgB,EAChB,qCAAqC,EACxC,EAAE,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA42B7B"}
1
+ {"version":3,"file":"useEditScheduledEmail.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/hooks/useEditScheduledEmail.ts"],"names":[],"mappings":"AAOA,OAAO,EAGH,KAAK,uBAAuB,EAC5B,KAAK,iBAAiB,EACtB,KAAK,yBAAyB,EAE9B,KAAK,mCAAmC,EACxC,KAAK,oBAAoB,EACzB,KAAK,wBAAwB,EAC7B,KAAK,yBAAyB,EAE9B,KAAK,4CAA4C,EACjD,KAAK,OAAO,EACZ,KAAK,QAAQ,EACb,KAAK,8BAA8B,EACnC,KAAK,kCAAkC,EACvC,KAAK,OAAO,EACZ,KAAK,cAAc,EACnB,KAAK,oBAAoB,EAQ5B,MAAM,qBAAqB,CAAC;AAM7B,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,+CAA+C,CAAC;AA2B3F,MAAM,WAAW,2BAA2B;IACxC,qBAAqB,CAAC,EAAE,yBAAyB,CAAC;IAClD,oBAAoB,EAAE,8BAA8B,EAAE,GAAG,kCAAkC,EAAE,CAAC;IAC9F,wBAAwB,EAAE,MAAM,CAAC;IACjC,iFAAiF;IACjF,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,QAAQ,CAAC;IACnB,aAAa,CAAC,EAAE,OAAO,EAAE,CAAC;IAC1B,uBAAuB,CAAC,EAAE,iBAAiB,EAAE,CAAC;IAC9C,gBAAgB,CAAC,EAAE,iBAAiB,EAAE,CAAC;IACvC,0BAA0B,EAAE,CAAC,OAAO,EAAE,iBAAiB,EAAE,KAAK,IAAI,CAAC;IAEnE;;;OAGG;IACH,4BAA4B,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,EAAE,CAAC,CAAC;IACnE;;;OAGG;IACH,+BAA+B,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,EAAE,CAAC,KAAK,IAAI,CAAC;IACzF,gBAAgB,CAAC,EAAE,qBAAqB,EAAE,GAAG,SAAS,CAAC;IACvD,gCAAgC,CAAC,EAAE,wBAAwB,EAAE,GAAG,SAAS,CAAC;IAC1E,qCAAqC,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,wBAAwB,EAAE,CAAC,CAAC;IAEnF,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,eAAe,EAAE,CAAC,YAAY,EAAE,OAAO,KAAK,IAAI,CAAC;IACjD,uBAAuB,EAAE,iBAAiB,EAAE,CAAC;IAC7C,yBAAyB,CAAC,EAAE,MAAM,CAAC;IACnC,wBAAwB,EAAE,OAAO,CAAC;IAClC,kBAAkB,CAAC,EAAE,4CAA4C,CAAC,UAAU,CAAC,CAAC;CACjF;AAED,wBAAgB,qBAAqB,CAAC,EAClC,qBAAqB,EACrB,oBAAoB,EACpB,OAAO,EACP,MAAM,EACN,KAAK,EACL,uBAAuB,EACvB,gBAAgB,EAChB,4BAA4B,EAC5B,wBAAwB,EACxB,0BAA0B,EAC1B,+BAA+B,EAC/B,gCAAgC,EAChC,YAAY,EACZ,eAAe,EACf,uBAAuB,EACvB,yBAAyB,EACzB,wBAAwB,EACxB,kBAAkB,EAClB,gBAAgB,EAChB,qCAAqC,EACxC,EAAE,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA22B7B"}
@@ -16,7 +16,7 @@ import { isEmail } from "../../utils/validate.js";
16
16
  import { useScheduleValidation } from "./useScheduleValidation.js";
17
17
  export function useEditScheduledEmail({ scheduledExportToEdit, notificationChannels, insight, widget, users, editedAutomationFilters, dashboardFilters, editedAutomationFiltersByTab, maxAutomationsRecipients, setEditedAutomationFilters, setEditedAutomationFiltersByTab, availableFiltersAsVisibleFilters, storeFilters, setStoreFilters, filtersForNewAutomation, externalRecipientOverride, enableNewScheduledExport, defaultPdfPageSize, filtersDataByTab, availableFiltersAsVisibleFiltersByTab, }) {
18
18
  const intl = useIntl();
19
- const { settings, timezone, currentUser, features: { enableExternalRecipients: enabledExternalRecipients, enableAutomationEvaluationMode }, } = useAutomationsContext();
19
+ const { settings, timezone, currentUser, features: { enableAutomationEvaluationMode }, } = useAutomationsContext();
20
20
  const { dashboardId, dashboardTitle, hiddenFilters: dashboardHiddenFilters, commonDateFilterId, widgetLocalIdToTabIdMap: widgetTabMap, exportParametersByTab: effectiveExportParametersByTab, } = useScheduledEmailDialogContext();
21
21
  const [isCronValid, setIsCronValid] = useState(true);
22
22
  const [isTitleValid, setIsTitleValid] = useState(true);
@@ -541,7 +541,7 @@ export function useEditScheduledEmail({ scheduledExportToEdit, notificationChann
541
541
  };
542
542
  const startDate = toNormalizedStartDate(editedAutomation.schedule?.firstRun, editedAutomation.schedule?.timezone);
543
543
  const selectedNotificationChannel = notificationChannels.find((channel) => channel.id === editedAutomation.notificationChannel);
544
- const allowExternalRecipients = selectedNotificationChannel?.allowedRecipients === "external" && enabledExternalRecipients;
544
+ const allowExternalRecipients = selectedNotificationChannel?.allowedRecipients === "external";
545
545
  const allowOnlyLoggedUserRecipients = selectedNotificationChannel?.allowedRecipients === "creator";
546
546
  const { isValid: isParentValid } = useScheduleValidation(originalAutomation);
547
547
  const validationErrorMessage = isParentValid
@@ -1,8 +1,8 @@
1
1
  // (C) 2024-2026 GoodData Corporation
2
2
  import { isExportDefinitionDashboardRequestPayload, isExportDefinitionVisualizationObjectRequestPayload, } from "@gooddata/sdk-model";
3
- import { useScheduledEmailDialogContext } from "../../../contexts/ScheduledEmailDialogContext.js";
3
+ import { useAutomationsContext } from "../../../contexts/AutomationsContext.js";
4
4
  export const useScheduleValidation = (schedule) => {
5
- const { widgetExistsByRef } = useScheduledEmailDialogContext();
5
+ const { widgetExistsByRef } = useAutomationsContext();
6
6
  const isDashboardSchedule = schedule.exportDefinitions?.some((exportDefinition) => isExportDefinitionDashboardRequestPayload(exportDefinition.requestPayload));
7
7
  const widgetLocalId = schedule.exportDefinitions?.find((exportDefinition) => isExportDefinitionVisualizationObjectRequestPayload(exportDefinition.requestPayload))?.requestPayload.content?.widget;
8
8
  const widgetRef = widgetLocalId ? { identifier: widgetLocalId } : undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"DefaultScheduledEmailManagementDialog.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/automations/scheduledEmail/DefaultScheduledEmailManagementDialog/DefaultScheduledEmailManagementDialog.tsx"],"names":[],"mappings":"AAeA,OAAO,EAAE,KAAK,oCAAoC,EAAE,MAAM,aAAa,CAAC;AAMxE;;GAEG;AACH,wBAAgB,8BAA8B,CAAC,EAC3C,KAAK,EACL,MAAM,EACN,eAAe,EAAE,QAAQ,EACzB,OAAO,EACP,aAAa,EACb,qBAAqB,EACrB,WAAW,EACX,oBAAoB,EACvB,EAAE,oCAAoC,2CAoFtC"}
1
+ {"version":3,"file":"DefaultScheduledEmailManagementDialog.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/automations/scheduledEmail/DefaultScheduledEmailManagementDialog/DefaultScheduledEmailManagementDialog.tsx"],"names":[],"mappings":"AAOA,OAAO,EAAE,KAAK,oCAAoC,EAAE,MAAM,aAAa,CAAC;AAMxE;;GAEG;AACH,wBAAgB,8BAA8B,CAAC,EAC3C,KAAK,EACL,MAAM,EACN,eAAe,EAAE,QAAQ,EACzB,OAAO,EACP,aAAa,EACb,qBAAqB,EACrB,WAAW,EACX,oBAAoB,EACvB,EAAE,oCAAoC,2CAwDtC"}
@@ -1,10 +1,7 @@
1
1
  import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  // (C) 2022-2026 GoodData Corporation
3
3
  import { useCallback, useState } from "react";
4
- import { buildAutomationUrl, navigate, useWorkspace } from "@gooddata/sdk-ui";
5
- import { useDashboardSelector } from "../../../../model/react/DashboardStoreProvider.js";
6
- import { selectEnableAutomationManagement, selectExternalRecipient, selectIsEmbedded, selectSettings, } from "../../../../model/store/config/configSelectors.js";
7
- import { selectDashboardId } from "../../../../model/store/meta/metaSelectors.js";
4
+ import { useAutomationsContext } from "../../contexts/AutomationsContext.js";
8
5
  import { DeleteScheduleConfirmDialog } from "./components/DeleteScheduleConfirmDialog.js";
9
6
  import { DefaultScheduledEmailManagementDialogContentBasic } from "./DefaultScheduledEmailManagementDialogContentBasic.js";
10
7
  import { DefaultScheduledEmailManagementDialogContentEnhanced } from "./DefaultScheduledEmailManagementDialogContentEnhanced.js";
@@ -13,40 +10,13 @@ import { DefaultScheduledEmailManagementDialogContentEnhanced } from "./DefaultS
13
10
  */
14
11
  export function ScheduledEmailManagementDialog({ onAdd, onEdit, onDeleteSuccess: onDelete, onClose, onDeleteError, isLoadingScheduleData, automations, notificationChannels, }) {
15
12
  const [scheduledEmailToDelete, setScheduledEmailToDelete] = useState(null);
16
- const workspace = useWorkspace();
17
- const enableAutomationManagement = useDashboardSelector(selectEnableAutomationManagement);
18
- const dashboardId = useDashboardSelector(selectDashboardId);
19
- const isEmbedded = useDashboardSelector(selectIsEmbedded);
20
- const externalRecipientOverride = useDashboardSelector(selectExternalRecipient);
21
- const settings = useDashboardSelector(selectSettings);
22
- const useHostRoute = Boolean(settings.enableShellApplication) && Boolean(settings.enableShellApplication_dashboards);
13
+ const { features: { enableAutomationManagement }, } = useAutomationsContext();
14
+ const handleScheduleEdit = useCallback((scheduledEmail) => {
15
+ onEdit?.(scheduledEmail);
16
+ }, [onEdit]);
23
17
  const handleScheduleDelete = useCallback((scheduledEmail) => {
24
18
  setScheduledEmailToDelete(scheduledEmail);
25
19
  }, []);
26
- const handleScheduleEdit = useCallback((scheduledEmail) => {
27
- if (enableAutomationManagement && scheduledEmail.dashboard?.id !== dashboardId) {
28
- navigate(buildAutomationUrl({
29
- workspaceId: workspace,
30
- dashboardId: scheduledEmail.dashboard?.id,
31
- automationId: scheduledEmail.id,
32
- isEmbedded,
33
- useHostRoute,
34
- queryParams: externalRecipientOverride
35
- ? { recipient: externalRecipientOverride }
36
- : undefined,
37
- }));
38
- return;
39
- }
40
- onEdit?.(scheduledEmail);
41
- }, [
42
- onEdit,
43
- enableAutomationManagement,
44
- dashboardId,
45
- workspace,
46
- isEmbedded,
47
- useHostRoute,
48
- externalRecipientOverride,
49
- ]);
50
20
  const handleScheduleDeleteSuccess = useCallback(() => {
51
21
  onDelete?.();
52
22
  setScheduledEmailToDelete(null);
@@ -1 +1 @@
1
- {"version":3,"file":"DefaultScheduledEmailManagementDialogContentBasic.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/automations/scheduledEmail/DefaultScheduledEmailManagementDialog/DefaultScheduledEmailManagementDialogContentBasic.tsx"],"names":[],"mappings":"AAMA,OAAO,EACH,KAAK,yBAAyB,EAC9B,KAAK,8BAA8B,EACnC,KAAK,kCAAkC,EAC1C,MAAM,qBAAqB,CAAC;AA+B7B,UAAU,uDAAuD;IAC7D,KAAK,CAAC,EAAE,MAAM,IAAI,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,QAAQ,EAAE,CAAC,cAAc,EAAE,yBAAyB,KAAK,IAAI,CAAC;IAC9D,MAAM,EAAE,CAAC,cAAc,EAAE,yBAAyB,KAAK,IAAI,CAAC;IAC5D,qBAAqB,EAAE,OAAO,CAAC;IAC/B,WAAW,EAAE,yBAAyB,EAAE,CAAC;IACzC,oBAAoB,EAAE,8BAA8B,EAAE,GAAG,kCAAkC,EAAE,CAAC;CACjG;AAED,wBAAgB,iDAAiD,CAAC,EAC9D,KAAK,EACL,OAAO,EACP,QAAQ,EACR,MAAM,EACN,qBAAqB,EACrB,WAAW,EACX,oBAAoB,EACvB,EAAE,uDAAuD,2CA+FzD"}
1
+ {"version":3,"file":"DefaultScheduledEmailManagementDialogContentBasic.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/automations/scheduledEmail/DefaultScheduledEmailManagementDialog/DefaultScheduledEmailManagementDialogContentBasic.tsx"],"names":[],"mappings":"AAMA,OAAO,EACH,KAAK,yBAAyB,EAC9B,KAAK,8BAA8B,EACnC,KAAK,kCAAkC,EAC1C,MAAM,qBAAqB,CAAC;AAuB7B,UAAU,uDAAuD;IAC7D,KAAK,CAAC,EAAE,MAAM,IAAI,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,QAAQ,EAAE,CAAC,cAAc,EAAE,yBAAyB,KAAK,IAAI,CAAC;IAC9D,MAAM,EAAE,CAAC,cAAc,EAAE,yBAAyB,KAAK,IAAI,CAAC;IAC5D,qBAAqB,EAAE,OAAO,CAAC;IAC/B,WAAW,EAAE,yBAAyB,EAAE,CAAC;IACzC,oBAAoB,EAAE,8BAA8B,EAAE,GAAG,kCAAkC,EAAE,CAAC;CACjG;AAED,wBAAgB,iDAAiD,CAAC,EAC9D,KAAK,EACL,OAAO,EACP,QAAQ,EACR,MAAM,EACN,qBAAqB,EACrB,WAAW,EACX,oBAAoB,EACvB,EAAE,uDAAuD,2CA+FzD"}
@@ -4,14 +4,9 @@ import { useMemo } from "react";
4
4
  import { FormattedMessage, defineMessage, useIntl } from "react-intl";
5
5
  import { AddButton, Button, Dialog, Hyperlink, OverlayController, OverlayControllerProvider, Typography, useId, } from "@gooddata/sdk-ui-kit";
6
6
  import { messages } from "../../../../locales.js";
7
- import { useDashboardSelector } from "../../../../model/react/DashboardStoreProvider.js";
8
- import { DEFAULT_MAX_AUTOMATIONS } from "../../../../model/react/useDashboardAutomations/constants.js";
9
- import { selectIsWhiteLabeled } from "../../../../model/store/config/configSelectors.js";
10
- import { selectEntitlementMaxAutomations, selectEntitlementUnlimitedAutomations, } from "../../../../model/store/entitlements/entitlementsSelectors.js";
11
- import { selectCanCreateAutomation } from "../../../../model/store/permissions/permissionsSelectors.js";
12
- import { selectExecutionTimestamp } from "../../../../model/store/ui/uiSelectors.js";
13
- import { selectCurrentUser } from "../../../../model/store/user/userSelectors.js";
14
7
  import { DASHBOARD_DIALOG_OVERS_Z_INDEX } from "../../../constants/zIndex.js";
8
+ import { useAutomationsContext } from "../../contexts/AutomationsContext.js";
9
+ import { useScheduledEmailManagementDialogContext } from "../../contexts/ScheduledEmailManagementDialogContext.js";
15
10
  import { useScheduleEmailDialogAccessibility } from "../hooks/useScheduleEmailDialogAccessibility.js";
16
11
  import { isMobileView } from "../utils/responsive.js";
17
12
  import { ScheduledEmails } from "./components/ScheduledEmailsList.js";
@@ -19,15 +14,10 @@ const overlayController = OverlayController.getInstance(DASHBOARD_DIALOG_OVERS_Z
19
14
  export function DefaultScheduledEmailManagementDialogContentBasic({ onAdd, onClose, onDelete, onEdit, isLoadingScheduleData, automations, notificationChannels, }) {
20
15
  const intl = useIntl();
21
16
  const isMobile = isMobileView();
22
- const currentUser = useDashboardSelector(selectCurrentUser);
23
- const canCreateAutomation = useDashboardSelector(selectCanCreateAutomation);
24
- const isWhiteLabeled = useDashboardSelector(selectIsWhiteLabeled);
25
- const isExecutionTimestampMode = !!useDashboardSelector(selectExecutionTimestamp);
26
- const maxAutomationsEntitlement = useDashboardSelector(selectEntitlementMaxAutomations);
27
- const unlimitedAutomationsEntitlement = useDashboardSelector(selectEntitlementUnlimitedAutomations);
17
+ const { currentUser, isWhiteLabeled, isExecutionTimestampMode, features: { canCreateAutomation }, } = useAutomationsContext();
18
+ const { maxAutomations, unlimitedAutomations } = useScheduledEmailManagementDialogContext();
28
19
  const { returnFocusTo } = useScheduleEmailDialogAccessibility();
29
- const maxAutomations = parseInt(maxAutomationsEntitlement?.value ?? DEFAULT_MAX_AUTOMATIONS, 10);
30
- const maxAutomationsReached = automations.length >= maxAutomations && !unlimitedAutomationsEntitlement;
20
+ const maxAutomationsReached = automations.length >= maxAutomations && !unlimitedAutomations;
31
21
  const isAddButtonDisabled = useMemo(() => isLoadingScheduleData || maxAutomationsReached || isExecutionTimestampMode, [isLoadingScheduleData, maxAutomationsReached, isExecutionTimestampMode]);
32
22
  const helpTextId = isMobile
33
23
  ? defineMessage({ id: "dialogs.schedule.email.footer.title.short" }).id
@@ -1 +1 @@
1
- {"version":3,"file":"DefaultScheduledEmailManagementDialogContentEnhanced.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/automations/scheduledEmail/DefaultScheduledEmailManagementDialog/DefaultScheduledEmailManagementDialogContentEnhanced.tsx"],"names":[],"mappings":"AAOA,OAAO,EAAE,KAAK,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AA+CrE,UAAU,0DAA0D;IAChE,KAAK,CAAC,EAAE,MAAM,IAAI,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,MAAM,EAAE,CAAC,cAAc,EAAE,yBAAyB,KAAK,IAAI,CAAC;IAC5D,qBAAqB,EAAE,OAAO,CAAC;IAC/B,WAAW,EAAE,yBAAyB,EAAE,CAAC;CAC5C;AAED,wBAAgB,oDAAoD,CAAC,EACjE,KAAK,EACL,OAAO,EACP,MAAM,EACN,qBAAqB,EACrB,WAAW,EACd,EAAE,0DAA0D,2CAyJ5D"}
1
+ {"version":3,"file":"DefaultScheduledEmailManagementDialogContentEnhanced.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/automations/scheduledEmail/DefaultScheduledEmailManagementDialog/DefaultScheduledEmailManagementDialogContentEnhanced.tsx"],"names":[],"mappings":"AAOA,OAAO,EAAE,KAAK,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AA2BrE,UAAU,0DAA0D;IAChE,KAAK,CAAC,EAAE,MAAM,IAAI,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,MAAM,EAAE,CAAC,cAAc,EAAE,yBAAyB,KAAK,IAAI,CAAC;IAC5D,qBAAqB,EAAE,OAAO,CAAC;IAC/B,WAAW,EAAE,yBAAyB,EAAE,CAAC;CAC5C;AAED,wBAAgB,oDAAoD,CAAC,EACjE,KAAK,EACL,OAAO,EACP,MAAM,EACN,qBAAqB,EACrB,WAAW,EACd,EAAE,0DAA0D,2CA6J5D"}
@@ -7,15 +7,10 @@ import { buildDashboardUrl, useBackend, useWorkspace } from "@gooddata/sdk-ui";
7
7
  import { Automations } from "@gooddata/sdk-ui-ext";
8
8
  import { Button, ContentDivider, Dialog, Hyperlink, OverlayController, OverlayControllerProvider, Typography, UiTooltip, useId, } from "@gooddata/sdk-ui-kit";
9
9
  import { messages } from "../../../../locales.js";
10
- import { useDashboardSelector } from "../../../../model/react/DashboardStoreProvider.js";
11
- import { DEFAULT_MAX_AUTOMATIONS } from "../../../../model/react/useDashboardAutomations/constants.js";
12
- import { selectEnableAccessibilityMode, selectExternalRecipient, selectIsEmbedded, selectIsWhiteLabeled, selectLocale, selectSettings, selectTimezone, } from "../../../../model/store/config/configSelectors.js";
13
- import { selectEntitlementMaxAutomations, selectEntitlementUnlimitedAutomations, } from "../../../../model/store/entitlements/entitlementsSelectors.js";
14
- import { selectDashboardId, selectDashboardTitle } from "../../../../model/store/meta/metaSelectors.js";
15
- import { selectCanCreateAutomation } from "../../../../model/store/permissions/permissionsSelectors.js";
16
- import { selectAutomationsInvalidationId, selectExecutionTimestamp, selectIsScheduleEmailDialogOpen, } from "../../../../model/store/ui/uiSelectors.js";
17
10
  import { AUTOMATIONS_COLUMN_CONFIG, AUTOMATIONS_MAX_HEIGHT } from "../../../constants/automations.js";
18
11
  import { DASHBOARD_DIALOG_OVERS_Z_INDEX } from "../../../constants/zIndex.js";
12
+ import { useAutomationsContext } from "../../contexts/AutomationsContext.js";
13
+ import { useScheduledEmailManagementDialogContext } from "../../contexts/ScheduledEmailManagementDialogContext.js";
19
14
  import { SCHEDULED_EMAIL_DIALOG_ID } from "../DefaultScheduledEmailDialog/constants.js";
20
15
  import { useScheduleEmailDialogAccessibility } from "../hooks/useScheduleEmailDialogAccessibility.js";
21
16
  import { isMobileView } from "../utils/responsive.js";
@@ -25,25 +20,12 @@ export function DefaultScheduledEmailManagementDialogContentEnhanced({ onAdd, on
25
20
  const isMobile = isMobileView();
26
21
  const workspace = useWorkspace();
27
22
  const backend = useBackend();
28
- const timezone = useDashboardSelector(selectTimezone);
29
- const locale = useDashboardSelector(selectLocale);
30
- const dashboardId = useDashboardSelector(selectDashboardId);
31
- const dashboardTitle = useDashboardSelector(selectDashboardTitle);
32
- const externalRecipientOverride = useDashboardSelector(selectExternalRecipient);
33
- const enableBulkActions = !useDashboardSelector(selectEnableAccessibilityMode);
34
- const isEditDialogOpen = useDashboardSelector(selectIsScheduleEmailDialogOpen);
35
- const canCreateAutomation = useDashboardSelector(selectCanCreateAutomation);
36
- const isWhiteLabeled = useDashboardSelector(selectIsWhiteLabeled);
37
- const isExecutionTimestampMode = !!useDashboardSelector(selectExecutionTimestamp);
38
- const maxAutomationsEntitlement = useDashboardSelector(selectEntitlementMaxAutomations);
39
- const unlimitedAutomationsEntitlement = useDashboardSelector(selectEntitlementUnlimitedAutomations);
40
- const automationsInvalidationId = useDashboardSelector(selectAutomationsInvalidationId);
41
- const isEmbedded = useDashboardSelector(selectIsEmbedded);
42
- const settings = useDashboardSelector(selectSettings);
43
- const useHostRoute = Boolean(settings.enableShellApplication) && Boolean(settings.enableShellApplication_dashboards);
23
+ const { timezone, locale, settings, isWhiteLabeled, isExecutionTimestampMode, externalRecipient: externalRecipientOverride, features: { canCreateAutomation }, } = useAutomationsContext();
24
+ const { dashboardId, dashboardTitle, enableAccessibilityMode, isScheduleEmailDialogOpen: isEditDialogOpen, automationsInvalidationId, isEmbedded, maxAutomations, unlimitedAutomations, } = useScheduledEmailManagementDialogContext();
25
+ const enableBulkActions = !enableAccessibilityMode;
26
+ const useHostRoute = Boolean(settings?.enableShellApplication) && Boolean(settings?.enableShellApplication_dashboards);
44
27
  const { returnFocusTo } = useScheduleEmailDialogAccessibility();
45
- const maxAutomations = parseInt(maxAutomationsEntitlement?.value ?? DEFAULT_MAX_AUTOMATIONS, 10);
46
- const maxAutomationsReached = automations.length >= maxAutomations && !unlimitedAutomationsEntitlement;
28
+ const maxAutomationsReached = automations.length >= maxAutomations && !unlimitedAutomations;
47
29
  const isAddButtonDisabled = useMemo(() => isLoadingScheduleData || maxAutomationsReached || isExecutionTimestampMode, [isLoadingScheduleData, maxAutomationsReached, isExecutionTimestampMode]);
48
30
  const availableFilters = externalRecipientOverride
49
31
  ? ["dashboard", "status"]
@@ -1 +1 @@
1
- {"version":3,"file":"DeleteScheduleConfirmDialog.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/automations/scheduledEmail/DefaultScheduledEmailManagementDialog/components/DeleteScheduleConfirmDialog.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAkB,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAIvD,OAAO,EACH,KAAK,yBAAyB,EAC9B,KAAK,mCAAmC,EAC3C,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,KAAK,gBAAgB,EAAsD,MAAM,kBAAkB,CAAC;AAO7G,UAAU,iCAAiC;IACvC,cAAc,EAAE,yBAAyB,GAAG,mCAAmC,CAAC;IAChF,aAAa,CAAC,EAAE,SAAS,CAAC,WAAW,CAAC,GAAG,MAAM,CAAC;IAChD,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,gBAAgB,KAAK,IAAI,CAAC;CAC/C;AAED,wBAAgB,2BAA2B,CAAC,EACxC,cAAc,EACd,aAAa,EACb,QAAQ,EACR,SAAS,EACT,OAAO,EACV,EAAE,iCAAiC,2CA0DnC"}
1
+ {"version":3,"file":"DeleteScheduleConfirmDialog.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/automations/scheduledEmail/DefaultScheduledEmailManagementDialog/components/DeleteScheduleConfirmDialog.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAkB,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAIvD,OAAO,EACH,KAAK,yBAAyB,EAC9B,KAAK,mCAAmC,EAC3C,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,KAAK,gBAAgB,EAAsD,MAAM,kBAAkB,CAAC;AAK7G,UAAU,iCAAiC;IACvC,cAAc,EAAE,yBAAyB,GAAG,mCAAmC,CAAC;IAChF,aAAa,CAAC,EAAE,SAAS,CAAC,WAAW,CAAC,GAAG,MAAM,CAAC;IAChD,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,gBAAgB,KAAK,IAAI,CAAC;CAC/C;AAED,wBAAgB,2BAA2B,CAAC,EACxC,cAAc,EACd,aAAa,EACb,QAAQ,EACR,SAAS,EACT,OAAO,EACV,EAAE,iCAAiC,2CA0DnC"}
@@ -2,15 +2,13 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { FormattedMessage, useIntl } from "react-intl";
3
3
  import { convertError, useBackendStrict, useWorkspaceStrict } from "@gooddata/sdk-ui";
4
4
  import { ConfirmDialog } from "@gooddata/sdk-ui-kit";
5
- import { useDashboardSelector } from "../../../../../model/react/DashboardStoreProvider.js";
6
- import { selectCanManageWorkspace } from "../../../../../model/store/permissions/permissionsSelectors.js";
7
- import { selectCurrentUser } from "../../../../../model/store/user/userSelectors.js";
5
+ import { useAutomationsContext } from "../../../contexts/AutomationsContext.js";
8
6
  export function DeleteScheduleConfirmDialog({ scheduledEmail, returnFocusTo, onCancel, onSuccess, onError, }) {
9
7
  const effectiveBackend = useBackendStrict();
10
8
  const effectiveWorkspace = useWorkspaceStrict();
11
9
  const intl = useIntl();
12
- const currentUser = useDashboardSelector(selectCurrentUser);
13
- const canManageAutomations = useDashboardSelector(selectCanManageWorkspace);
10
+ const { currentUser, features } = useAutomationsContext();
11
+ const canManageAutomations = features.canManageWorkspace;
14
12
  const handleDeleteScheduledMail = async () => {
15
13
  const alertCreatorId = scheduledEmail.createdBy?.login;
16
14
  const currentUserId = currentUser?.login;
@@ -1 +1 @@
1
- {"version":3,"file":"ScheduledEmail.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/automations/scheduledEmail/DefaultScheduledEmailManagementDialog/components/ScheduledEmail.tsx"],"names":[],"mappings":"AAOA,OAAO,EACH,KAAK,yBAAyB,EAC9B,KAAK,8BAA8B,EACnC,KAAK,kCAAkC,EAC1C,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAMH,kBAAkB,EAErB,MAAM,sBAAsB,CAAC;AAU9B,KAAK,OAAO,GAAG,eAAe,GAAG,QAAQ,GAAG,OAAO,kBAAkB,CAAC;AAEtE,UAAU,oBAAoB;IAC1B,QAAQ,EAAE,CAAC,cAAc,EAAE,yBAAyB,KAAK,IAAI,CAAC;IAC9D,MAAM,EAAE,CAAC,cAAc,EAAE,yBAAyB,KAAK,IAAI,CAAC;IAC5D,cAAc,EAAE,yBAAyB,CAAC;IAC1C,oBAAoB,EAAE,8BAA8B,EAAE,GAAG,kCAAkC,EAAE,CAAC;IAC9F,aAAa,CAAC,EAAE,OAAO,CAAC;CAC3B;AAYD,wBAAgB,cAAc,CAAC,EAC3B,cAAc,EACd,QAAQ,EACR,MAAM,EACN,oBAAoB,EACpB,aAAa,EAChB,EAAE,oBAAoB,2CA0FtB"}
1
+ {"version":3,"file":"ScheduledEmail.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/automations/scheduledEmail/DefaultScheduledEmailManagementDialog/components/ScheduledEmail.tsx"],"names":[],"mappings":"AAOA,OAAO,EACH,KAAK,yBAAyB,EAC9B,KAAK,8BAA8B,EACnC,KAAK,kCAAkC,EAC1C,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAMH,kBAAkB,EAErB,MAAM,sBAAsB,CAAC;AAQ9B,KAAK,OAAO,GAAG,eAAe,GAAG,QAAQ,GAAG,OAAO,kBAAkB,CAAC;AAEtE,UAAU,oBAAoB;IAC1B,QAAQ,EAAE,CAAC,cAAc,EAAE,yBAAyB,KAAK,IAAI,CAAC;IAC9D,MAAM,EAAE,CAAC,cAAc,EAAE,yBAAyB,KAAK,IAAI,CAAC;IAC5D,cAAc,EAAE,yBAAyB,CAAC;IAC1C,oBAAoB,EAAE,8BAA8B,EAAE,GAAG,kCAAkC,EAAE,CAAC;IAC9F,aAAa,CAAC,EAAE,OAAO,CAAC;CAC3B;AAYD,wBAAgB,cAAc,CAAC,EAC3B,cAAc,EACd,QAAQ,EACR,MAAM,EACN,oBAAoB,EACpB,aAAa,EAChB,EAAE,oBAAoB,2CAyFtB"}
@@ -5,10 +5,8 @@ import cx from "classnames";
5
5
  import { FormattedMessage, useIntl } from "react-intl";
6
6
  import { Bubble, BubbleHoverTrigger, IconInsight, IconSimplifiedDashboard, IconWarning, SELECT_ITEM_ACTION, ShortenedText, } from "@gooddata/sdk-ui-kit";
7
7
  import { useTheme } from "@gooddata/sdk-ui-theme-provider";
8
- import { useDashboardSelector } from "../../../../../model/react/DashboardStoreProvider.js";
9
- import { selectCanManageWorkspace } from "../../../../../model/store/permissions/permissionsSelectors.js";
10
- import { selectCurrentUser } from "../../../../../model/store/user/userSelectors.js";
11
8
  import { gdColorNegative, gdColorStateBlank } from "../../../../constants/colors.js";
9
+ import { useAutomationsContext } from "../../../contexts/AutomationsContext.js";
12
10
  import { isVisualisationAutomation } from "../../../shared/utils/automationUtils.js";
13
11
  import { useScheduleValidation } from "../../DefaultScheduledEmailDialog/hooks/useScheduleValidation.js";
14
12
  const ICON_TOOLTIP_ALIGN_POINTS = [
@@ -21,9 +19,8 @@ const TEXT_TOOLTIP_ALIGN_POINTS = [
21
19
  ];
22
20
  export function ScheduledEmail({ scheduledEmail, onDelete, onEdit, notificationChannels, focusedAction, }) {
23
21
  const theme = useTheme();
24
- const currentUser = useDashboardSelector(selectCurrentUser);
25
- const canManageWorkspace = useDashboardSelector(selectCanManageWorkspace);
26
- const canEdit = canManageWorkspace || (currentUser && currentUser.login === scheduledEmail.createdBy?.login);
22
+ const { currentUser, features } = useAutomationsContext();
23
+ const canEdit = features.canManageWorkspace || (currentUser && currentUser.login === scheduledEmail.createdBy?.login);
27
24
  const { isValid } = useScheduleValidation(scheduledEmail);
28
25
  const intl = useIntl();
29
26
  const cronDescription = scheduledEmail.schedule?.cronDescription;
@@ -1 +1 @@
1
- {"version":3,"file":"useScheduleEmailDialogAccessibility.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/automations/scheduledEmail/hooks/useScheduleEmailDialogAccessibility.ts"],"names":[],"mappings":"AAQA,eAAO,MAAM,mCAAmC;;CAW/C,CAAC"}
1
+ {"version":3,"file":"useScheduleEmailDialogAccessibility.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/automations/scheduledEmail/hooks/useScheduleEmailDialogAccessibility.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,mCAAmC;;CAW/C,CAAC"}
@@ -1,11 +1,10 @@
1
1
  // (C) 2025-2026 GoodData Corporation
2
2
  import { useMemo } from "react";
3
3
  import { DEFAULT_MENU_BUTTON_ID } from "../../../../_staging/accessibility/elementId.js";
4
- import { useDashboardSelector } from "../../../../model/react/DashboardStoreProvider.js";
5
- import { selectScheduleEmailDialogReturnFocusTo } from "../../../../model/store/ui/uiSelectors.js";
4
+ import { useAutomationsContext } from "../../contexts/AutomationsContext.js";
6
5
  export const useScheduleEmailDialogAccessibility = () => {
7
- const emailDialogReturnFocusTo = useDashboardSelector(selectScheduleEmailDialogReturnFocusTo);
8
- const returnFocusTo = useMemo(() => emailDialogReturnFocusTo || DEFAULT_MENU_BUTTON_ID, [emailDialogReturnFocusTo]);
6
+ const { scheduleEmailDialogReturnFocusTo } = useAutomationsContext();
7
+ const returnFocusTo = useMemo(() => scheduleEmailDialogReturnFocusTo || DEFAULT_MENU_BUTTON_ID, [scheduleEmailDialogReturnFocusTo]);
9
8
  return {
10
9
  returnFocusTo,
11
10
  };
@@ -67,7 +67,6 @@ function createAutomationsContextValue(overrides) {
67
67
  enableAutomationManagement: false,
68
68
  canUseAiAssistant: false,
69
69
  enableComparisonInAlerting: false,
70
- enableExternalRecipients: false,
71
70
  enableAlertAttributes: false,
72
71
  canManageWorkspace: false,
73
72
  enableCustomizableCsvDelimiter: false,
@@ -75,6 +74,8 @@ function createAutomationsContextValue(overrides) {
75
74
  },
76
75
  getCatalogAttributeByRef: () => undefined,
77
76
  getAttributeFilterDisplayForm: () => undefined,
77
+ widgetExistsByRef: () => false,
78
+ scheduleEmailDialogReturnFocusTo: undefined,
78
79
  };
79
80
  }
80
81
  describe("AutomationDateFilter", () => {
@@ -1 +1 @@
1
- {"version":3,"file":"CreationPanel.d.ts","sourceRoot":"","sources":["../../../../src/presentation/dashboard/DashboardSidebar/CreationPanel.tsx"],"names":[],"mappings":"AAkBA,OAAO,EACH,KAAK,2BAA2B,EAChC,KAAK,iCAAiC,EACtC,KAAK,yBAAyB,EAC9B,KAAK,0BAA0B,EAC/B,KAAK,uCAAuC,EAC/C,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EACH,KAAK,qCAAqC,EAC1C,KAAK,qCAAqC,EAC7C,MAAM,4BAA4B,CAAC;AAIpC,UAAU,mBAAmB;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oCAAoC,CAAC,EAAE,qCAAqC,CAAC;IAC7E,oCAAoC,CAAC,EAAE,qCAAqC,CAAC;IAC7E,2BAA2B,CAAC,EAAE,2BAA2B,CAAC;IAC1D,yBAAyB,CAAC,EAAE,yBAAyB,CAAC;IACtD,0BAA0B,CAAC,EAAE,0BAA0B,CAAC;IACxD,uCAAuC,CAAC,EAAE,uCAAuC,CAAC;IAClF,iCAAiC,CAAC,EAAE,iCAAiC,CAAC;CACzE;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,mBAAmB,2CAoEvD"}
1
+ {"version":3,"file":"CreationPanel.d.ts","sourceRoot":"","sources":["../../../../src/presentation/dashboard/DashboardSidebar/CreationPanel.tsx"],"names":[],"mappings":"AAcA,OAAO,EACH,KAAK,2BAA2B,EAChC,KAAK,iCAAiC,EACtC,KAAK,yBAAyB,EAC9B,KAAK,0BAA0B,EAC/B,KAAK,uCAAuC,EAC/C,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EACH,KAAK,qCAAqC,EAC1C,KAAK,qCAAqC,EAC7C,MAAM,4BAA4B,CAAC;AAIpC,UAAU,mBAAmB;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oCAAoC,CAAC,EAAE,qCAAqC,CAAC;IAC7E,oCAAoC,CAAC,EAAE,qCAAqC,CAAC;IAC7E,2BAA2B,CAAC,EAAE,2BAA2B,CAAC;IAC1D,yBAAyB,CAAC,EAAE,yBAAyB,CAAC;IACtD,0BAA0B,CAAC,EAAE,0BAA0B,CAAC;IACxD,uCAAuC,CAAC,EAAE,uCAAuC,CAAC;IAClF,iCAAiC,CAAC,EAAE,iCAAiC,CAAC;CACzE;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,mBAAmB,2CAkEvD"}
@@ -7,14 +7,13 @@ import { FormattedMessage } from "react-intl";
7
7
  import { Typography } from "@gooddata/sdk-ui-kit";
8
8
  import { useDashboardSelector } from "../../../model/react/DashboardStoreProvider.js";
9
9
  import { selectSupportsRichTextWidgets } from "../../../model/store/backendCapabilities/backendCapabilitiesSelectors.js";
10
- import { selectEnableKDRichText, selectEnableVisualizationSwitcher, selectSettings, } from "../../../model/store/config/configSelectors.js";
10
+ import { selectEnableKDRichText, selectSettings } from "../../../model/store/config/configSelectors.js";
11
11
  import { selectIsNewDashboard } from "../../../model/store/meta/metaSelectors.js";
12
12
  import { DraggableInsightList } from "./DraggableInsightList/DraggableInsightList.js";
13
13
  export function CreationPanel(props) {
14
14
  const { className, WrapCreatePanelItemWithDragComponent, WrapInsightListItemWithDragComponent } = props;
15
15
  const supportsRichText = useDashboardSelector(selectSupportsRichTextWidgets);
16
16
  const enableRichText = useDashboardSelector(selectEnableKDRichText);
17
- const enableVisualizationSwitcher = useDashboardSelector(selectEnableVisualizationSwitcher);
18
17
  const isNewDashboard = useDashboardSelector(selectIsNewDashboard);
19
18
  const settings = useDashboardSelector(selectSettings);
20
19
  const AttributeFilterComponentSet = props.AttributeFilterComponentSet;
@@ -27,7 +26,7 @@ export function CreationPanel(props) {
27
26
  InsightWidgetComponentSet.creating,
28
27
  AttributeFilterComponentSet.creating,
29
28
  DashboardLayoutWidgetComponentSet.creating,
30
- enableVisualizationSwitcher && VisualizationSwitcherWidgetComponentSet.creating,
29
+ VisualizationSwitcherWidgetComponentSet.creating,
31
30
  supportsRichText && enableRichText && RichTextWidgetComponentSet.creating,
32
31
  ]);
33
32
  return sortBy(items, (item) => item.priority ?? 0).map(({ CreatePanelListItemComponent, type }) => {
@@ -41,7 +40,6 @@ export function CreationPanel(props) {
41
40
  DashboardLayoutWidgetComponentSet,
42
41
  supportsRichText,
43
42
  enableRichText,
44
- enableVisualizationSwitcher,
45
43
  WrapCreatePanelItemWithDragComponent,
46
44
  ]);
47
45
  return (_jsx("div", { className: cx("configuration-panel creation-panel", className), children: _jsxs("div", { className: "configuration-panel-content", children: [
@@ -1 +1 @@
1
- {"version":3,"file":"FloatingToolbar.d.ts","sourceRoot":"","sources":["../../../../src/presentation/dashboard/DashboardSidebar/FloatingToolbar.tsx"],"names":[],"mappings":"AAqLA;;GAEG;AACH,wBAAgB,eAAe,4CAyN9B"}
1
+ {"version":3,"file":"FloatingToolbar.d.ts","sourceRoot":"","sources":["../../../../src/presentation/dashboard/DashboardSidebar/FloatingToolbar.tsx"],"names":[],"mappings":"AAiLA;;GAEG;AACH,wBAAgB,eAAe,4CAkN9B"}
@@ -14,7 +14,7 @@ import { useDashboardDispatch, useDashboardSelector } from "../../../model/react
14
14
  import { useWidgetSelection } from "../../../model/react/useWidgetSelection.js";
15
15
  import { dispatchAndWaitFor } from "../../../model/store/_infra/dispatchAndWaitFor.js";
16
16
  import { selectBackendCapabilities, selectSupportsRichTextWidgets, } from "../../../model/store/backendCapabilities/backendCapabilitiesSelectors.js";
17
- import { selectEnableKDRichText, selectEnableVisualizationSwitcher, selectSettings, } from "../../../model/store/config/configSelectors.js";
17
+ import { selectEnableKDRichText, selectSettings } from "../../../model/store/config/configSelectors.js";
18
18
  import { selectIsInEditMode } from "../../../model/store/renderMode/renderModeSelectors.js";
19
19
  import { selectFilterContextFilters } from "../../../model/store/tabs/filterContext/filterContextSelectors.js";
20
20
  import { selectLayout } from "../../../model/store/tabs/layout/layoutSelectors.js";
@@ -108,7 +108,6 @@ export function FloatingToolbar() {
108
108
  const primaryColor = theme?.palette?.primary?.base ?? GD_COLOR_HIGHLIGHT;
109
109
  const supportsRichText = useDashboardSelector(selectSupportsRichTextWidgets);
110
110
  const enableRichText = useDashboardSelector(selectEnableKDRichText);
111
- const enableVisualizationSwitcher = useDashboardSelector(selectEnableVisualizationSwitcher);
112
111
  const layout = useDashboardSelector(selectLayout);
113
112
  const settings = useDashboardSelector(selectSettings);
114
113
  const filterContextFilters = useDashboardSelector(selectFilterContextFilters);
@@ -231,7 +230,7 @@ export function FloatingToolbar() {
231
230
  }
232
231
  }, children: [
233
232
  _jsx(IconInsightPicker, { color: isInsightPickerOpen ? primaryColor : iconColor, width: ICON_SIZE, height: ICON_SIZE }), _jsx("span", { className: "gd-floating-toolbar__button-label", children: intl.formatMessage({ id: "addPanel.savedVisualizations" }) })
234
- ] }), _jsx(DraggableToolbarButton, { icon: _jsx(IconInsight, { color: iconColor, width: ICON_SIZE, height: ICON_SIZE }), label: intl.formatMessage({ id: "addPanel.newVisualization" }), dragItem: INSIGHT_PLACEHOLDER_DRAG_ITEM, testSelector: "s-floating-toolbar-new-visualization", onMouseDown: closeInsightPicker, onActivate: handleInsightPlaceholderActivate }), _jsx(DraggableToolbarButton, { icon: _jsx(IconColumnContainer, { color: iconColor, width: ICON_SIZE, height: ICON_SIZE }), label: intl.formatMessage({ id: "addPanel.dashboardLayout" }), dragItem: DASHBOARD_LAYOUT_DRAG_ITEM, testSelector: "s-floating-toolbar-dashboard-layout", onMouseDown: closeInsightPicker, onActivate: handleDashboardLayoutActivate }), enableVisualizationSwitcher ? (_jsx(DraggableToolbarButton, { icon: _jsx(IconVisualizationSwitcher, { color: iconColor, width: ICON_SIZE, height: ICON_SIZE }), label: intl.formatMessage({ id: "addPanel.visualizationSwitcher" }), dragItem: VIS_SWITCHER_DRAG_ITEM, testSelector: "s-floating-toolbar-visualization-switcher", onMouseDown: closeInsightPicker, onActivate: handleVisSwitcherActivate })) : null, supportsRichText && enableRichText ? (_jsx(DraggableToolbarButton, { icon: _jsx(IconRichText, { color: iconColor, width: ICON_SIZE, height: ICON_SIZE }), label: intl.formatMessage({ id: "addPanel.richTextWidget" }), dragItem: RICH_TEXT_DRAG_ITEM, testSelector: "s-floating-toolbar-rich-text", onMouseDown: closeInsightPicker, onActivate: handleRichTextActivate })) : null, _jsx(DraggableToolbarButton, { icon: _jsx(IconAttributeFilter, { color: iconColor, width: ICON_SIZE, height: ICON_SIZE }), label: intl.formatMessage({ id: "addPanel.dashboardFilter" }), dragItem: ATTRIBUTE_FILTER_DRAG_ITEM, testSelector: "s-floating-toolbar-attribute-filter", onMouseDown: closeInsightPicker, onActivate: handleFilterActivate })
233
+ ] }), _jsx(DraggableToolbarButton, { icon: _jsx(IconInsight, { color: iconColor, width: ICON_SIZE, height: ICON_SIZE }), label: intl.formatMessage({ id: "addPanel.newVisualization" }), dragItem: INSIGHT_PLACEHOLDER_DRAG_ITEM, testSelector: "s-floating-toolbar-new-visualization", onMouseDown: closeInsightPicker, onActivate: handleInsightPlaceholderActivate }), _jsx(DraggableToolbarButton, { icon: _jsx(IconColumnContainer, { color: iconColor, width: ICON_SIZE, height: ICON_SIZE }), label: intl.formatMessage({ id: "addPanel.dashboardLayout" }), dragItem: DASHBOARD_LAYOUT_DRAG_ITEM, testSelector: "s-floating-toolbar-dashboard-layout", onMouseDown: closeInsightPicker, onActivate: handleDashboardLayoutActivate }), _jsx(DraggableToolbarButton, { icon: _jsx(IconVisualizationSwitcher, { color: iconColor, width: ICON_SIZE, height: ICON_SIZE }), label: intl.formatMessage({ id: "addPanel.visualizationSwitcher" }), dragItem: VIS_SWITCHER_DRAG_ITEM, testSelector: "s-floating-toolbar-visualization-switcher", onMouseDown: closeInsightPicker, onActivate: handleVisSwitcherActivate }), supportsRichText && enableRichText ? (_jsx(DraggableToolbarButton, { icon: _jsx(IconRichText, { color: iconColor, width: ICON_SIZE, height: ICON_SIZE }), label: intl.formatMessage({ id: "addPanel.richTextWidget" }), dragItem: RICH_TEXT_DRAG_ITEM, testSelector: "s-floating-toolbar-rich-text", onMouseDown: closeInsightPicker, onActivate: handleRichTextActivate })) : null, _jsx(DraggableToolbarButton, { icon: _jsx(IconAttributeFilter, { color: iconColor, width: ICON_SIZE, height: ICON_SIZE }), label: intl.formatMessage({ id: "addPanel.dashboardFilter" }), dragItem: ATTRIBUTE_FILTER_DRAG_ITEM, testSelector: "s-floating-toolbar-attribute-filter", onMouseDown: closeInsightPicker, onActivate: handleFilterActivate })
235
234
  ] })
236
235
  ] }));
237
236
  }
@@ -1 +1 @@
1
- {"version":3,"file":"DraggableFilterDropZone.d.ts","sourceRoot":"","sources":["../../../../src/presentation/dragAndDrop/draggableFilterDropZone/DraggableFilterDropZone.tsx"],"names":[],"mappings":"AAkBA,MAAM,MAAM,4BAA4B,GAAG;IACvC,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,IAAI,CAAC;CACzC,CAAC;AAEF,wBAAgB,uBAAuB,CAAC,EAAE,WAAW,EAAE,MAAM,EAAE,EAAE,4BAA4B,kDA4E5F"}
1
+ {"version":3,"file":"DraggableFilterDropZone.d.ts","sourceRoot":"","sources":["../../../../src/presentation/dragAndDrop/draggableFilterDropZone/DraggableFilterDropZone.tsx"],"names":[],"mappings":"AAiBA,MAAM,MAAM,4BAA4B,GAAG;IACvC,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,IAAI,CAAC;CACzC,CAAC;AAEF,wBAAgB,uBAAuB,CAAC,EAAE,WAAW,EAAE,MAAM,EAAE,EAAE,4BAA4B,kDA0E5F"}
@@ -6,14 +6,12 @@ import { useTheme } from "@gooddata/sdk-ui-theme-provider";
6
6
  import { messages } from "../../../locales.js";
7
7
  import { useDashboardSelector } from "../../../model/react/DashboardStoreProvider.js";
8
8
  import { selectSupportsMultipleDateFilters } from "../../../model/store/backendCapabilities/backendCapabilitiesSelectors.js";
9
- import { selectEnableMultipleDateFilters } from "../../../model/store/config/configSelectors.js";
10
9
  import { selectIsInEditMode } from "../../../model/store/renderMode/renderModeSelectors.js";
11
10
  import { getDropZoneDebugStyle } from "../debug.js";
12
11
  import { useDashboardDrop } from "../useDashboardDrop.js";
13
12
  export function DraggableFilterDropZone({ targetIndex, onDrop }) {
14
13
  const theme = useTheme();
15
14
  const isEditMode = useDashboardSelector(selectIsInEditMode);
16
- const enableMultipleDateFilters = useDashboardSelector(selectEnableMultipleDateFilters);
17
15
  const supportsMultipleDateFilters = useDashboardSelector(selectSupportsMultipleDateFilters);
18
16
  const [{ canDrop, isOver, itemType }, dropRef] = useDashboardDrop(["attributeFilter-placeholder"], {
19
17
  drop: () => onDrop(targetIndex),
@@ -26,7 +24,7 @@ export function DraggableFilterDropZone({ targetIndex, onDrop }) {
26
24
  const isActive = canDrop || isOver;
27
25
  const dropzoneClassNames = cx("attr-filter-dropzone-box", "s-last-filter-drop-position", "s-attr-filter-dropzone-box", { "attr-filter-dropzone-box-active": isActive }, { "attr-filter-dropzone-box-over": isOver });
28
26
  const debugStyle = getDropZoneDebugStyle({ isOver });
29
- const tooltip = enableMultipleDateFilters && supportsMultipleDateFilters
27
+ const tooltip = supportsMultipleDateFilters
30
28
  ? messages.filterDropzoneTooltipGeneric
31
29
  : messages.filterDropzoneTooltip;
32
30
  return (_jsx("div", { className: "attr-filter-dropzone-box-outer", style: debugStyle, ref: dropRef, children: isActive ? (_jsx("div", { className: dropzoneClassNames, children: _jsx("div", { className: "attr-filter-dropzone-box-inner", children: _jsx(FormattedMessage, { id: "filterBar.filter.drop" }) }) })) : (_jsxs(BubbleHoverTrigger, { children: [
@@ -1 +1 @@
1
- {"version":3,"file":"AddAttributeFilterPlaceholder.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/filterBar/attributeFilter/addAttributeFilter/AddAttributeFilterPlaceholder.tsx"],"names":[],"mappings":"AAQA;;GAEG;AACH,MAAM,WAAW,mCAAmC;IAChD,QAAQ,CAAC,EAAE,OAAO,CAAC;CACtB;AAED;;GAEG;AACH,wBAAgB,6BAA6B,CAAC,EAAE,QAAQ,EAAE,EAAE,mCAAmC,2CAmB9F"}
1
+ {"version":3,"file":"AddAttributeFilterPlaceholder.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/filterBar/attributeFilter/addAttributeFilter/AddAttributeFilterPlaceholder.tsx"],"names":[],"mappings":"AAKA;;GAEG;AACH,MAAM,WAAW,mCAAmC;IAChD,QAAQ,CAAC,EAAE,OAAO,CAAC;CACtB;AAED;;GAEG;AACH,wBAAgB,6BAA6B,CAAC,EAAE,QAAQ,EAAE,EAAE,mCAAmC,2CAe9F"}
@@ -2,15 +2,12 @@ import { jsx as _jsx } from "react/jsx-runtime";
2
2
  // (C) 2007-2026 GoodData Corporation
3
3
  import cx from "classnames";
4
4
  import { FormattedMessage } from "react-intl";
5
- import { useDashboardSelector } from "../../../../model/react/DashboardStoreProvider.js";
6
- import { selectEnableMultipleDateFilters } from "../../../../model/store/config/configSelectors.js";
7
5
  /**
8
6
  * @internal
9
7
  */
10
8
  export function AddAttributeFilterPlaceholder({ disabled }) {
11
- const enableMultipleDateFilters = useDashboardSelector(selectEnableMultipleDateFilters);
12
9
  const className = cx("add-item-placeholder", "add-attribute-filter-placeholder", "s-add-attribute-filter", {
13
10
  disabled,
14
11
  });
15
- return (_jsx("div", { className: className, children: _jsx(FormattedMessage, { id: enableMultipleDateFilters ? "addPanel.filter" : "addPanel.attributeFilter" }) }));
12
+ return (_jsx("div", { className: className, children: _jsx(FormattedMessage, { id: "addPanel.filter" }) }));
16
13
  }
@@ -1 +1 @@
1
- {"version":3,"file":"AttributesDropdown.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/filterBar/attributeFilter/addAttributeFilter/AttributesDropdown.tsx"],"names":[],"mappings":"AAQA,OAAO,EAGH,KAAK,aAAa,EAGrB,MAAM,qBAAqB,CAAC;AAmB7B,OAAO,EAAE,KAAK,yCAAyC,EAAE,MAAM,aAAa,CAAC;AA8D7E;;;;GAIG;AACH,MAAM,WAAW,0BAA0B;IACvC,IAAI,EAAE,WAAW,CAAC;IAClB,GAAG,EAAE,aAAa,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;CACjB;AAMD;;GAEG;AACH,MAAM,WAAW,wBAAyB,SAAQ,yCAAyC;IACvF,0FAA0F;IAC1F,UAAU,CAAC,EAAE,0BAA0B,EAAE,CAAC;IAC1C,iBAAiB,CAAC,EAAE,CAAC,GAAG,EAAE,aAAa,KAAK,IAAI,CAAC;CACpD;AA6BD;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,EAC/B,EAAE,EACF,SAAS,EACT,aAAa,EACb,OAAO,EACP,MAAM,EACN,QAAQ,EACR,UAAU,EACV,YAAY,EACZ,QAAa,EACb,UAAiB,EACjB,uBAAkD,EAClD,sBAAsB,EACtB,YAAY,EACZ,mBAAmB,EACnB,kBAAkB,EAClB,mBAAmB,EACnB,aAAa,EACb,UAAe,EACf,iBAAiB,EACpB,EAAE,wBAAwB,2CAwU1B"}
1
+ {"version":3,"file":"AttributesDropdown.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/filterBar/attributeFilter/addAttributeFilter/AttributesDropdown.tsx"],"names":[],"mappings":"AAQA,OAAO,EAGH,KAAK,aAAa,EAGrB,MAAM,qBAAqB,CAAC;AAgB7B,OAAO,EAAE,KAAK,yCAAyC,EAAE,MAAM,aAAa,CAAC;AA8D7E;;;;GAIG;AACH,MAAM,WAAW,0BAA0B;IACvC,IAAI,EAAE,WAAW,CAAC;IAClB,GAAG,EAAE,aAAa,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;CACjB;AAMD;;GAEG;AACH,MAAM,WAAW,wBAAyB,SAAQ,yCAAyC;IACvF,0FAA0F;IAC1F,UAAU,CAAC,EAAE,0BAA0B,EAAE,CAAC;IAC1C,iBAAiB,CAAC,EAAE,CAAC,GAAG,EAAE,aAAa,KAAK,IAAI,CAAC;CACpD;AA6BD;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,EAC/B,EAAE,EACF,SAAS,EACT,aAAa,EACb,OAAO,EACP,MAAM,EACN,QAAQ,EACR,UAAU,EACV,YAAY,EACZ,QAAa,EACb,UAAiB,EACjB,uBAAkD,EAClD,sBAAsB,EACtB,YAAY,EACZ,mBAAmB,EACnB,kBAAkB,EAClB,mBAAmB,EACnB,aAAa,EACb,UAAe,EACf,iBAAiB,EACpB,EAAE,wBAAwB,2CA4U1B"}
@@ -8,7 +8,7 @@ import { isCatalogAttribute, isCatalogMeasure, } from "@gooddata/sdk-model";
8
8
  import { Dropdown, DropdownList, SingleSelectListItem, UiIcon, isEscapeKey, useIdPrefixed, } from "@gooddata/sdk-ui-kit";
9
9
  import { useDashboardSelector } from "../../../../model/react/DashboardStoreProvider.js";
10
10
  import { selectSupportsMultipleDateFilters } from "../../../../model/store/backendCapabilities/backendCapabilitiesSelectors.js";
11
- import { selectEnableMeasureValueFilterKD, selectEnableMultipleDateFilters, } from "../../../../model/store/config/configSelectors.js";
11
+ import { selectEnableMeasureValueFilterKD } from "../../../../model/store/config/configSelectors.js";
12
12
  import { selectInsightsMap } from "../../../../model/store/insights/insightsSelectors.js";
13
13
  import { selectAllInsightWidgets } from "../../../../model/store/tabs/layout/layoutSelectors.js";
14
14
  import { AddAttributeFilterButton } from "./AddAttributeFilterButton.js";
@@ -102,7 +102,6 @@ export function AttributesDropdown({ id, className, bodyClassName, onClose, onOp
102
102
  }
103
103
  };
104
104
  }, []);
105
- const enableMultipleDateFilters = useDashboardSelector(selectEnableMultipleDateFilters);
106
105
  const supportsMultipleDateFilters = useDashboardSelector(selectSupportsMultipleDateFilters);
107
106
  const enableMeasureValueFilterKD = useDashboardSelector(selectEnableMeasureValueFilterKD);
108
107
  const insightsMap = useDashboardSelector(selectInsightsMap);
@@ -126,7 +125,6 @@ export function AttributesDropdown({ id, className, bodyClassName, onClose, onOp
126
125
  ? attributes.filter((a) => a.attribute.title.toLowerCase().includes(searchQuery.toLowerCase()))
127
126
  : attributes;
128
127
  }, [attributes, searchQuery]);
129
- const offerDateFilters = enableMultipleDateFilters && supportsMultipleDateFilters;
130
128
  const filteredDateDatasets = useMemo(() => {
131
129
  return searchQuery
132
130
  ? dateDatasets.filter((ds) => ds.dataSet.title.toLowerCase().includes(searchQuery.toLowerCase()))
@@ -145,7 +143,7 @@ export function AttributesDropdown({ id, className, bodyClassName, onClose, onOp
145
143
  : parameters;
146
144
  }, [parameters, searchQuery]);
147
145
  const hasAttributes = useMemo(() => attributes.length > 0, [attributes]);
148
- const hasDateFilters = useMemo(() => offerDateFilters && dateDatasets.length > 0, [dateDatasets, offerDateFilters]);
146
+ const hasDateFilters = useMemo(() => supportsMultipleDateFilters && dateDatasets.length > 0, [dateDatasets, supportsMultipleDateFilters]);
149
147
  const hasMeasures = useMemo(() => metricMeasures.length > 0, [metricMeasures]);
150
148
  const hasParameters = useMemo(() => parameters.length > 0, [parameters]);
151
149
  const defaultSelectedTabId = createDefaultSelectedTabId({
@@ -169,7 +167,7 @@ export function AttributesDropdown({ id, className, bodyClassName, onClose, onOp
169
167
  if (enableMeasureValueFilterKD && metricMeasures.length) {
170
168
  newTabs.push({ id: "metrics", iconOnly: true, icon: "gd-icon-metric" });
171
169
  }
172
- if (offerDateFilters && dateDatasets.length) {
170
+ if (supportsMultipleDateFilters && dateDatasets.length) {
173
171
  newTabs.push({ id: "dateDatasets", iconOnly: true, icon: "gd-icon-date" });
174
172
  }
175
173
  if (parameters.length) {
@@ -180,7 +178,14 @@ export function AttributesDropdown({ id, className, bodyClassName, onClose, onOp
180
178
  });
181
179
  }
182
180
  return newTabs;
183
- }, [attributes, dateDatasets, enableMeasureValueFilterKD, metricMeasures, offerDateFilters, parameters]);
181
+ }, [
182
+ attributes,
183
+ dateDatasets,
184
+ enableMeasureValueFilterKD,
185
+ metricMeasures,
186
+ supportsMultipleDateFilters,
187
+ parameters,
188
+ ]);
184
189
  const buttonTitle = intl.formatMessage({ id: "addPanel.filter" });
185
190
  const items = useMemo(() => {
186
191
  if (selectedTabId === "attributes") {
@@ -1 +1 @@
1
- {"version":3,"file":"useAvailableDatasetsForItems.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/filterBar/attributeFilter/dashboardDropdownBody/configuration/hooks/useAvailableDatasetsForItems.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,mBAAmB,EAAE,KAAK,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAWzF;;GAEG;AACH,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,mBAAmB,EAAE;;;;;;;;;;EAgDxE"}
1
+ {"version":3,"file":"useAvailableDatasetsForItems.d.ts","sourceRoot":"","sources":["../../../../../../../src/presentation/filterBar/attributeFilter/dashboardDropdownBody/configuration/hooks/useAvailableDatasetsForItems.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,mBAAmB,EAAE,KAAK,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAUzF;;GAEG;AACH,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,mBAAmB,EAAE;;;;;;;;;;EA4CxE"}