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