@gooddata/sdk-ui-dashboard 11.52.0-alpha.6 → 11.52.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.
- package/esm/__version.d.ts +1 -1
- package/esm/__version.d.ts.map +1 -1
- package/esm/__version.js +1 -1
- package/esm/index.d.ts +5 -4
- package/esm/index.d.ts.map +1 -1
- package/esm/index.js +5 -4
- package/esm/kdaDialog/composition/hooks/usePeriodChangeHandler.js +5 -0
- package/esm/model/store/config/configSelectors.d.ts +6 -0
- package/esm/model/store/config/configSelectors.d.ts.map +1 -1
- package/esm/model/store/config/configSelectors.js +8 -0
- package/esm/model/store/keyDriverAnalysis/const.d.ts +6 -6
- package/esm/model/store/keyDriverAnalysis/const.d.ts.map +1 -1
- package/esm/model/store/keyDriverAnalysis/const.js +12 -26
- package/esm/model/store/widgetDrills/widgetDrillSelectors.d.ts.map +1 -1
- package/esm/model/store/widgetDrills/widgetDrillSelectors.js +5 -5
- package/esm/presentation/automations/alerting/DefaultAlertingDialog/DefaultAlertingDialog.d.ts +1 -1
- package/esm/presentation/automations/alerting/DefaultAlertingDialog/DefaultAlertingDialog.d.ts.map +1 -1
- package/esm/presentation/automations/alerting/DefaultAlertingDialog/DefaultAlertingDialog.js +3 -4
- package/esm/presentation/automations/alerting/state/AlertingDialogStateProvider.d.ts +5 -1
- package/esm/presentation/automations/alerting/state/AlertingDialogStateProvider.d.ts.map +1 -1
- package/esm/presentation/automations/alerting/state/AlertingDialogStateProvider.js +5 -1
- package/esm/presentation/automations/alerting/types.d.ts +15 -1
- package/esm/presentation/automations/alerting/types.d.ts.map +1 -1
- package/esm/presentation/automations/contexts/AlertingDialogContext.d.ts +26 -0
- package/esm/presentation/automations/contexts/AlertingDialogContext.d.ts.map +1 -1
- package/esm/presentation/automations/contexts/AlertingDialogContext.js +26 -0
- package/esm/presentation/automations/contexts/ScheduledEmailDialogContext.d.ts +10 -1
- package/esm/presentation/automations/contexts/ScheduledEmailDialogContext.d.ts.map +1 -1
- package/esm/presentation/automations/contexts/ScheduledEmailDialogContext.js +9 -0
- package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/DefaultScheduledEmailDialog.d.ts +1 -1
- package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/DefaultScheduledEmailDialog.d.ts.map +1 -1
- package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/DefaultScheduledEmailDialog.js +19 -17
- package/esm/presentation/automations/scheduledEmail/ScheduledEmailDialog.d.ts +3 -0
- package/esm/presentation/automations/scheduledEmail/ScheduledEmailDialog.d.ts.map +1 -1
- package/esm/presentation/automations/scheduledEmail/ScheduledEmailDialog.js +5 -1
- package/esm/presentation/automations/scheduledEmail/state/ScheduledEmailDialogStateProvider.d.ts +22 -0
- package/esm/presentation/automations/scheduledEmail/state/ScheduledEmailDialogStateProvider.d.ts.map +1 -0
- package/esm/presentation/automations/scheduledEmail/state/ScheduledEmailDialogStateProvider.js +150 -0
- package/esm/presentation/automations/scheduledEmail/state/ScheduledExportActionsContext.d.ts +28 -0
- package/esm/presentation/automations/scheduledEmail/state/ScheduledExportActionsContext.d.ts.map +1 -0
- package/esm/presentation/automations/scheduledEmail/state/ScheduledExportActionsContext.js +20 -0
- package/esm/presentation/automations/scheduledEmail/state/ScheduledExportDataContext.d.ts +25 -0
- package/esm/presentation/automations/scheduledEmail/state/ScheduledExportDataContext.d.ts.map +1 -0
- package/esm/presentation/automations/scheduledEmail/state/ScheduledExportDataContext.js +20 -0
- package/esm/presentation/automations/scheduledEmail/state/ScheduledExportDraftContext.d.ts +25 -0
- package/esm/presentation/automations/scheduledEmail/state/ScheduledExportDraftContext.d.ts.map +1 -0
- package/esm/presentation/automations/scheduledEmail/state/ScheduledExportDraftContext.js +20 -0
- package/esm/presentation/automations/scheduledEmail/state/ScheduledExportFiltersContext.d.ts +26 -0
- package/esm/presentation/automations/scheduledEmail/state/ScheduledExportFiltersContext.d.ts.map +1 -0
- package/esm/presentation/automations/scheduledEmail/state/ScheduledExportFiltersContext.js +20 -0
- package/esm/presentation/automations/scheduledEmail/state/exportDefinitions.d.ts.map +1 -0
- package/esm/presentation/automations/scheduledEmail/{DefaultScheduledEmailDialog/utils → state}/exportDefinitions.js +1 -1
- package/esm/presentation/automations/scheduledEmail/state/missingScheduledExportStateProvider.d.ts +7 -0
- package/esm/presentation/automations/scheduledEmail/state/missingScheduledExportStateProvider.d.ts.map +1 -0
- package/esm/presentation/automations/scheduledEmail/state/missingScheduledExportStateProvider.js +9 -0
- package/esm/presentation/automations/scheduledEmail/{DefaultScheduledEmailDialog/hooks → state}/useScheduledEmailEffectiveFilters.d.ts +2 -2
- package/esm/presentation/automations/scheduledEmail/state/useScheduledEmailEffectiveFilters.d.ts.map +1 -0
- package/esm/presentation/automations/scheduledEmail/{DefaultScheduledEmailDialog/hooks → state}/useScheduledEmailEffectiveFilters.js +4 -4
- package/esm/presentation/automations/scheduledEmail/{DefaultScheduledEmailDialog/hooks → state}/useScheduledEmailExportSettings.d.ts +12 -25
- package/esm/presentation/automations/scheduledEmail/state/useScheduledEmailExportSettings.d.ts.map +1 -0
- package/esm/presentation/automations/scheduledEmail/{DefaultScheduledEmailDialog/hooks → state}/useScheduledEmailExportSettings.js +38 -86
- package/esm/presentation/automations/scheduledEmail/{DefaultScheduledEmailDialog/hooks/useScheduledEmailFilters.d.ts → state/useScheduledEmailFiltersModel.d.ts} +7 -7
- package/esm/presentation/automations/scheduledEmail/state/useScheduledEmailFiltersModel.d.ts.map +1 -0
- package/esm/presentation/automations/scheduledEmail/{DefaultScheduledEmailDialog/hooks/useScheduledEmailFilters.js → state/useScheduledEmailFiltersModel.js} +26 -9
- package/esm/presentation/automations/scheduledEmail/state/useScheduledEmailFormState.d.ts.map +1 -0
- package/esm/presentation/automations/scheduledEmail/{DefaultScheduledEmailDialog/hooks → state}/useScheduledEmailFormState.js +25 -25
- package/esm/presentation/automations/scheduledEmail/state/useScheduledEmailFormValidity.d.ts.map +1 -0
- package/esm/presentation/automations/scheduledEmail/{DefaultScheduledEmailDialog/hooks → state}/useScheduledEmailFormValidity.js +3 -3
- package/esm/presentation/automations/scheduledEmail/state/useScheduledExportAttachments.d.ts +39 -0
- package/esm/presentation/automations/scheduledEmail/state/useScheduledExportAttachments.d.ts.map +1 -0
- package/esm/presentation/automations/scheduledEmail/state/useScheduledExportAttachments.js +102 -0
- package/esm/presentation/automations/scheduledEmail/state/useScheduledExportDialogValidity.d.ts +13 -0
- package/esm/presentation/automations/scheduledEmail/state/useScheduledExportDialogValidity.d.ts.map +1 -0
- package/esm/presentation/automations/scheduledEmail/state/useScheduledExportDialogValidity.js +34 -0
- package/esm/presentation/automations/scheduledEmail/types.d.ts +15 -1
- package/esm/presentation/automations/scheduledEmail/types.d.ts.map +1 -1
- package/esm/presentation/drill/DrillSelect/DrillSelectDropdown.d.ts +2 -1
- package/esm/presentation/drill/DrillSelect/DrillSelectDropdown.d.ts.map +1 -1
- package/esm/presentation/drill/DrillSelect/DrillSelectDropdown.js +6 -2
- package/esm/presentation/drill/utils/kdaUtils.d.ts +1 -1
- package/esm/presentation/drill/utils/kdaUtils.d.ts.map +1 -1
- package/esm/presentation/drill/utils/kdaUtils.js +6 -5
- package/esm/presentation/filterBar/dateFilter/DefaultDashboardDateFilter.d.ts +1 -1
- package/esm/presentation/filterBar/dateFilter/DefaultDashboardDateFilter.d.ts.map +1 -1
- package/esm/presentation/filterBar/dateFilter/DefaultDashboardDateFilter.js +2 -2
- package/esm/presentation/filterBar/dateFilter/types.d.ts +8 -1
- package/esm/presentation/filterBar/dateFilter/types.d.ts.map +1 -1
- package/esm/presentation/filterBar/dateFilter/types.js +1 -1
- package/esm/presentation/localization/bundles/de-DE.localization-bundle.d.ts +2 -0
- package/esm/presentation/localization/bundles/de-DE.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/de-DE.localization-bundle.js +9 -7
- package/esm/presentation/localization/bundles/en-AU.localization-bundle.d.ts +2 -0
- package/esm/presentation/localization/bundles/en-AU.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/en-AU.localization-bundle.js +9 -7
- package/esm/presentation/localization/bundles/en-GB.localization-bundle.d.ts +2 -0
- package/esm/presentation/localization/bundles/en-GB.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/en-GB.localization-bundle.js +9 -7
- package/esm/presentation/localization/bundles/es-419.localization-bundle.d.ts +2 -0
- package/esm/presentation/localization/bundles/es-419.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/es-419.localization-bundle.js +9 -7
- package/esm/presentation/localization/bundles/es-ES.localization-bundle.d.ts +2 -0
- package/esm/presentation/localization/bundles/es-ES.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/es-ES.localization-bundle.js +9 -7
- package/esm/presentation/localization/bundles/fi-FI.localization-bundle.d.ts +2 -0
- package/esm/presentation/localization/bundles/fi-FI.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/fi-FI.localization-bundle.js +9 -7
- package/esm/presentation/localization/bundles/fr-CA.localization-bundle.d.ts +2 -0
- package/esm/presentation/localization/bundles/fr-CA.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/fr-CA.localization-bundle.js +9 -7
- package/esm/presentation/localization/bundles/fr-FR.localization-bundle.d.ts +2 -0
- package/esm/presentation/localization/bundles/fr-FR.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/fr-FR.localization-bundle.js +9 -7
- package/esm/presentation/localization/bundles/id-ID.localization-bundle.d.ts +2 -0
- package/esm/presentation/localization/bundles/id-ID.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/id-ID.localization-bundle.js +9 -7
- package/esm/presentation/localization/bundles/it-IT.localization-bundle.d.ts +2 -0
- package/esm/presentation/localization/bundles/it-IT.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/it-IT.localization-bundle.js +9 -7
- package/esm/presentation/localization/bundles/ja-JP.localization-bundle.d.ts +2 -0
- package/esm/presentation/localization/bundles/ja-JP.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/ja-JP.localization-bundle.js +9 -7
- package/esm/presentation/localization/bundles/ko-KR.localization-bundle.d.ts +2 -0
- package/esm/presentation/localization/bundles/ko-KR.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/ko-KR.localization-bundle.js +9 -7
- package/esm/presentation/localization/bundles/nl-NL.localization-bundle.d.ts +2 -0
- package/esm/presentation/localization/bundles/nl-NL.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/nl-NL.localization-bundle.js +9 -7
- package/esm/presentation/localization/bundles/pl-PL.localization-bundle.d.ts +2 -0
- package/esm/presentation/localization/bundles/pl-PL.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/pl-PL.localization-bundle.js +9 -7
- package/esm/presentation/localization/bundles/pt-BR.localization-bundle.d.ts +2 -0
- package/esm/presentation/localization/bundles/pt-BR.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/pt-BR.localization-bundle.js +9 -7
- package/esm/presentation/localization/bundles/pt-PT.localization-bundle.d.ts +2 -0
- package/esm/presentation/localization/bundles/pt-PT.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/pt-PT.localization-bundle.js +9 -7
- package/esm/presentation/localization/bundles/ru-RU.localization-bundle.d.ts +2 -0
- package/esm/presentation/localization/bundles/ru-RU.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/ru-RU.localization-bundle.js +9 -7
- package/esm/presentation/localization/bundles/sl-SI.localization-bundle.d.ts +2 -0
- package/esm/presentation/localization/bundles/sl-SI.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/sl-SI.localization-bundle.js +9 -7
- package/esm/presentation/localization/bundles/th-TH.localization-bundle.d.ts +2 -0
- package/esm/presentation/localization/bundles/th-TH.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/th-TH.localization-bundle.js +9 -7
- package/esm/presentation/localization/bundles/tr-TR.localization-bundle.d.ts +2 -0
- package/esm/presentation/localization/bundles/tr-TR.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/tr-TR.localization-bundle.js +9 -7
- package/esm/presentation/localization/bundles/uk-UA.localization-bundle.d.ts +2 -0
- package/esm/presentation/localization/bundles/uk-UA.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/uk-UA.localization-bundle.js +9 -7
- package/esm/presentation/localization/bundles/vi-VN.localization-bundle.d.ts +2 -0
- package/esm/presentation/localization/bundles/vi-VN.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/vi-VN.localization-bundle.js +9 -7
- package/esm/presentation/localization/bundles/zh-HK.localization-bundle.d.ts +2 -0
- package/esm/presentation/localization/bundles/zh-HK.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/zh-HK.localization-bundle.js +9 -7
- package/esm/presentation/localization/bundles/zh-Hans.localization-bundle.d.ts +2 -0
- package/esm/presentation/localization/bundles/zh-Hans.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/zh-Hans.localization-bundle.js +9 -7
- package/esm/presentation/localization/bundles/zh-Hant.localization-bundle.d.ts +2 -0
- package/esm/presentation/localization/bundles/zh-Hant.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/zh-Hant.localization-bundle.js +9 -7
- package/esm/sdk-ui-dashboard.d.ts +126 -18
- package/package.json +21 -21
- package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/hooks/useEditScheduledEmail.d.ts +0 -89
- package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/hooks/useEditScheduledEmail.d.ts.map +0 -1
- package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/hooks/useEditScheduledEmail.js +0 -131
- package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/hooks/useScheduledEmailEffectiveFilters.d.ts.map +0 -1
- package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/hooks/useScheduledEmailExportSettings.d.ts.map +0 -1
- package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/hooks/useScheduledEmailFilters.d.ts.map +0 -1
- package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/hooks/useScheduledEmailFormState.d.ts.map +0 -1
- package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/hooks/useScheduledEmailFormValidity.d.ts.map +0 -1
- package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/utils/exportDefinitions.d.ts.map +0 -1
- /package/esm/presentation/automations/scheduledEmail/{DefaultScheduledEmailDialog/utils → state}/exportDefinitions.d.ts +0 -0
- /package/esm/presentation/automations/scheduledEmail/{DefaultScheduledEmailDialog/hooks → state}/useScheduledEmailFormState.d.ts +0 -0
- /package/esm/presentation/automations/scheduledEmail/{DefaultScheduledEmailDialog/hooks → state}/useScheduledEmailFormValidity.d.ts +0 -0
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
// (C) 2026 GoodData Corporation
|
|
2
|
-
import { useState } from "react";
|
|
3
|
-
import { setExportParametersByTab } from "
|
|
4
|
-
import { useAutomationsContext } from "
|
|
5
|
-
import { useScheduledEmailDialogContext } from "
|
|
6
|
-
import { convertExternalRecipientToAutomationRecipient, convertUserToAutomationRecipient, } from "
|
|
7
|
-
import { toModifiedISOStringToTimezone, toNormalizedFirstRunAndCron, toNormalizedStartDate, } from "
|
|
8
|
-
import { getUserTimezone } from "
|
|
9
|
-
import { newDashboardExportDefinitionMetadataObjectDefinition, newWidgetExportDefinitionMetadataObjectDefinition, } from "
|
|
2
|
+
import { useCallback, useMemo, useState } from "react";
|
|
3
|
+
import { setExportParametersByTab } from "../../../../_staging/automation/index.js";
|
|
4
|
+
import { useAutomationsContext } from "../../contexts/AutomationsContext.js";
|
|
5
|
+
import { useScheduledEmailDialogContext } from "../../contexts/ScheduledEmailDialogContext.js";
|
|
6
|
+
import { convertExternalRecipientToAutomationRecipient, convertUserToAutomationRecipient, } from "../../shared/utils/automationUtils.js";
|
|
7
|
+
import { toModifiedISOStringToTimezone, toNormalizedFirstRunAndCron, toNormalizedStartDate, } from "../utils/date.js";
|
|
8
|
+
import { getUserTimezone } from "../utils/timezone.js";
|
|
9
|
+
import { newDashboardExportDefinitionMetadataObjectDefinition, newWidgetExportDefinitionMetadataObjectDefinition, } from "./exportDefinitions.js";
|
|
10
10
|
/**
|
|
11
11
|
* Owns the scheduled-email dialog's `editedAutomation` draft (initialized either from
|
|
12
12
|
* `scheduledExportToEdit` or via `newAutomationMetadataObjectDefinition`), its `originalAutomation`
|
|
@@ -27,10 +27,10 @@ export function useScheduledEmailFormState({ scheduledExportToEdit, widget, insi
|
|
|
27
27
|
const isWidget = !!widget && !!insight;
|
|
28
28
|
// Determine target tab ID if widget is present
|
|
29
29
|
const targetTabId = widget?.localIdentifier ? widgetTabMap[widget.localIdentifier] : undefined;
|
|
30
|
-
const defaultUser = convertUserToAutomationRecipient(currentUser);
|
|
31
|
-
const defaultRecipient = externalRecipientOverride
|
|
30
|
+
const defaultUser = useMemo(() => convertUserToAutomationRecipient(currentUser), [currentUser]);
|
|
31
|
+
const defaultRecipient = useMemo(() => externalRecipientOverride
|
|
32
32
|
? convertExternalRecipientToAutomationRecipient(externalRecipientOverride)
|
|
33
|
-
: convertUserToAutomationRecipient(currentUser);
|
|
33
|
+
: convertUserToAutomationRecipient(currentUser), [externalRecipientOverride, currentUser]);
|
|
34
34
|
const firstChannel = notificationChannels[0]?.id;
|
|
35
35
|
const [editedAutomation, setEditedAutomation] = useState(() => scheduledExportToEdit ??
|
|
36
36
|
newAutomationMetadataObjectDefinition(isWidget
|
|
@@ -70,11 +70,11 @@ export function useScheduledEmailFormState({ scheduledExportToEdit, widget, insi
|
|
|
70
70
|
const [isTitleValid, setIsTitleValid] = useState(true);
|
|
71
71
|
const [isSubjectValid, setIsSubjectValid] = useState(true);
|
|
72
72
|
const [isOnMessageValid, setIsOnMessageValid] = useState(true);
|
|
73
|
-
const onTitleChange = (value, isValid) => {
|
|
73
|
+
const onTitleChange = useCallback((value, isValid) => {
|
|
74
74
|
setIsTitleValid(isValid);
|
|
75
75
|
setEditedAutomation((s) => ({ ...s, title: value }));
|
|
76
|
-
};
|
|
77
|
-
const onRecurrenceChange = (cronExpression, startDate, isValid) => {
|
|
76
|
+
}, []);
|
|
77
|
+
const onRecurrenceChange = useCallback((cronExpression, startDate, isValid) => {
|
|
78
78
|
setIsCronValid(isValid);
|
|
79
79
|
setEditedAutomation((s) => ({
|
|
80
80
|
...s,
|
|
@@ -84,26 +84,26 @@ export function useScheduledEmailFormState({ scheduledExportToEdit, widget, insi
|
|
|
84
84
|
firstRun: toModifiedISOStringToTimezone(startDate ?? new Date(), timezone).iso,
|
|
85
85
|
},
|
|
86
86
|
}));
|
|
87
|
-
};
|
|
88
|
-
const onEvaluationModeChange = (isShared) => {
|
|
87
|
+
}, [timezone]);
|
|
88
|
+
const onEvaluationModeChange = useCallback((isShared) => {
|
|
89
89
|
setEditedAutomation((s) => ({
|
|
90
90
|
...s,
|
|
91
91
|
evaluationMode: isShared ? "SHARED" : "PER_RECIPIENT",
|
|
92
92
|
}));
|
|
93
|
-
};
|
|
94
|
-
const onDestinationChange = (notificationChannelId) => {
|
|
93
|
+
}, []);
|
|
94
|
+
const onDestinationChange = useCallback((notificationChannelId) => {
|
|
95
95
|
setEditedAutomation((s) => ({
|
|
96
96
|
...s,
|
|
97
97
|
notificationChannel: notificationChannelId,
|
|
98
98
|
}));
|
|
99
|
-
};
|
|
100
|
-
const onRecipientsChange = (updatedRecipients) => {
|
|
99
|
+
}, []);
|
|
100
|
+
const onRecipientsChange = useCallback((updatedRecipients) => {
|
|
101
101
|
setEditedAutomation((s) => ({
|
|
102
102
|
...s,
|
|
103
103
|
recipients: updatedRecipients,
|
|
104
104
|
}));
|
|
105
|
-
};
|
|
106
|
-
const onSubjectChange = (value, isValid) => {
|
|
105
|
+
}, []);
|
|
106
|
+
const onSubjectChange = useCallback((value, isValid) => {
|
|
107
107
|
setIsSubjectValid(isValid);
|
|
108
108
|
setEditedAutomation((s) => ({
|
|
109
109
|
...s,
|
|
@@ -112,8 +112,8 @@ export function useScheduledEmailFormState({ scheduledExportToEdit, widget, insi
|
|
|
112
112
|
subject: value,
|
|
113
113
|
},
|
|
114
114
|
}));
|
|
115
|
-
};
|
|
116
|
-
const onMessageChange = (value, isValid) => {
|
|
115
|
+
}, []);
|
|
116
|
+
const onMessageChange = useCallback((value, isValid) => {
|
|
117
117
|
setIsOnMessageValid(isValid);
|
|
118
118
|
setEditedAutomation((s) => ({
|
|
119
119
|
...s,
|
|
@@ -122,7 +122,7 @@ export function useScheduledEmailFormState({ scheduledExportToEdit, widget, insi
|
|
|
122
122
|
message: value,
|
|
123
123
|
},
|
|
124
124
|
}));
|
|
125
|
-
};
|
|
125
|
+
}, []);
|
|
126
126
|
return {
|
|
127
127
|
editedAutomation,
|
|
128
128
|
setEditedAutomation,
|
package/esm/presentation/automations/scheduledEmail/state/useScheduledEmailFormValidity.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useScheduledEmailFormValidity.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/automations/scheduledEmail/state/useScheduledEmailFormValidity.ts"],"names":[],"mappings":"AAIA,OAAO,EACH,KAAK,yBAAyB,EAC9B,KAAK,mCAAmC,EACxC,KAAK,oBAAoB,EACzB,KAAK,8BAA8B,EACnC,KAAK,kCAAkC,EAI1C,MAAM,qBAAqB,CAAC;AAM7B,MAAM,WAAW,mCAAmC;IAChD,gBAAgB,EAAE,mCAAmC,CAAC;IACtD,kBAAkB,EAAE,mCAAmC,CAAC;IACxD,qBAAqB,CAAC,EAAE,yBAAyB,CAAC;IAClD,oBAAoB,EAAE,8BAA8B,EAAE,GAAG,kCAAkC,EAAE,CAAC;IAC9F,gBAAgB,EAAE,oBAAoB,CAAC;IACvC,wBAAwB,EAAE,MAAM,CAAC;IACjC,WAAW,EAAE,OAAO,CAAC;IACrB,YAAY,EAAE,OAAO,CAAC;IACtB,cAAc,EAAE,OAAO,CAAC;IACxB,gBAAgB,EAAE,OAAO,CAAC;CAC7B;AAED,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,mCAAmC,GAAG;IAIvF,gBAAgB,EAAE,OAAO,GAAG,SAAS,CAAC;IACtC,sBAAsB,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3C,aAAa,EAAE,OAAO,CAAC;IACvB,uBAAuB,EAAE,OAAO,CAAC;IACjC,6BAA6B,EAAE,OAAO,CAAC;CAC1C,CAsEA"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
// (C) 2026 GoodData Corporation
|
|
2
2
|
import { useIntl } from "react-intl";
|
|
3
3
|
import { isAutomationExternalUserRecipient, isAutomationUnknownUserRecipient, isAutomationUserRecipient, } from "@gooddata/sdk-model";
|
|
4
|
-
import { areAutomationsEqual } from "
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
4
|
+
import { areAutomationsEqual } from "../../shared/utils/automationUtils.js";
|
|
5
|
+
import { useScheduleValidation } from "../DefaultScheduledEmailDialog/hooks/useScheduleValidation.js";
|
|
6
|
+
import { isEmail } from "../utils/validate.js";
|
|
7
7
|
export function useScheduledEmailFormValidity(props) {
|
|
8
8
|
const { editedAutomation, originalAutomation, scheduledExportToEdit, notificationChannels, defaultRecipient, maxAutomationsRecipients, isCronValid, isTitleValid, isSubjectValid, isOnMessageValid, } = props;
|
|
9
9
|
const intl = useIntl();
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Reads what the scheduled-export dialog's attachment section displays: the selected formats, which
|
|
3
|
+
* export kinds are present, the per-format settings with their fallbacks, and the slides template
|
|
4
|
+
* chosen per format.
|
|
5
|
+
*
|
|
6
|
+
* Derived per consumer rather than published on a context: every value is a pure function of the
|
|
7
|
+
* draft and of workspace settings, and no consumer observes their identity. The handlers that
|
|
8
|
+
* *change* attachments are on {@link useScheduledExportActions}, because they capture the stored
|
|
9
|
+
* export-parameter wire, which must exist once per dialog.
|
|
10
|
+
*
|
|
11
|
+
* @internal
|
|
12
|
+
*/
|
|
13
|
+
export declare function useScheduledExportAttachments(): {
|
|
14
|
+
selectedAttachments: ("CSV" | "CSV_RAW" | "HTML" | "PDF" | "PDF_SLIDES" | "PDF_TABULAR" | "PNG" | "PPTX" | "XLSX")[];
|
|
15
|
+
isDashboardExportSelected: boolean;
|
|
16
|
+
isCsvExportSelected: boolean;
|
|
17
|
+
isXlsxExportSelected: boolean;
|
|
18
|
+
xlsxSettings: {
|
|
19
|
+
mergeHeaders: boolean;
|
|
20
|
+
exportInfo: boolean;
|
|
21
|
+
};
|
|
22
|
+
pdfSettings: {
|
|
23
|
+
pageSize: import("../utils/pdfPageSize.js").PdfPageSize;
|
|
24
|
+
orientation: "landscape" | "portrait";
|
|
25
|
+
exportInfo: boolean;
|
|
26
|
+
};
|
|
27
|
+
csvSettings: {
|
|
28
|
+
delimiter: string;
|
|
29
|
+
};
|
|
30
|
+
csvRawSettings: {
|
|
31
|
+
delimiter: string;
|
|
32
|
+
};
|
|
33
|
+
slidesTemplateIds: {
|
|
34
|
+
PPTX: string | undefined;
|
|
35
|
+
PDF_SLIDES: string | undefined;
|
|
36
|
+
PDF: string | undefined;
|
|
37
|
+
};
|
|
38
|
+
};
|
|
39
|
+
//# sourceMappingURL=useScheduledExportAttachments.d.ts.map
|
package/esm/presentation/automations/scheduledEmail/state/useScheduledExportAttachments.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useScheduledExportAttachments.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/automations/scheduledEmail/state/useScheduledExportAttachments.ts"],"names":[],"mappings":"AAgBA;;;;;;;;;;;GAWG;AACH,wBAAgB,6BAA6B;;;;;;;;;;;;;;;;;;;;;;;;;EAwH5C"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
// (C) 2019-2026 GoodData Corporation
|
|
2
|
+
import { useMemo } from "react";
|
|
3
|
+
import { DEFAULT_CSV_DELIMITER, isExportDefinitionDashboardRequestPayload, isExportDefinitionVisualizationObjectRequestPayload, } from "@gooddata/sdk-model";
|
|
4
|
+
import { useAutomationsContext } from "../../contexts/AutomationsContext.js";
|
|
5
|
+
import { useScheduledEmailDialogContext } from "../../contexts/ScheduledEmailDialogContext.js";
|
|
6
|
+
import { getDefaultPdfPageSize } from "../utils/pdfPageSize.js";
|
|
7
|
+
import { useScheduledExportDraft } from "./ScheduledExportDraftContext.js";
|
|
8
|
+
/**
|
|
9
|
+
* Reads what the scheduled-export dialog's attachment section displays: the selected formats, which
|
|
10
|
+
* export kinds are present, the per-format settings with their fallbacks, and the slides template
|
|
11
|
+
* chosen per format.
|
|
12
|
+
*
|
|
13
|
+
* Derived per consumer rather than published on a context: every value is a pure function of the
|
|
14
|
+
* draft and of workspace settings, and no consumer observes their identity. The handlers that
|
|
15
|
+
* *change* attachments are on {@link useScheduledExportActions}, because they capture the stored
|
|
16
|
+
* export-parameter wire, which must exist once per dialog.
|
|
17
|
+
*
|
|
18
|
+
* @internal
|
|
19
|
+
*/
|
|
20
|
+
export function useScheduledExportAttachments() {
|
|
21
|
+
const { settings } = useAutomationsContext();
|
|
22
|
+
const { widget, insight } = useScheduledEmailDialogContext();
|
|
23
|
+
const { editedAutomation } = useScheduledExportDraft();
|
|
24
|
+
const resolvedDefaultCsvDelimiter = settings?.exportCsvCustomDelimiter ?? DEFAULT_CSV_DELIMITER;
|
|
25
|
+
const defaultPdfPageSize = getDefaultPdfPageSize(settings?.formatLocale);
|
|
26
|
+
const isWidget = !!widget && !!insight;
|
|
27
|
+
const selectedAttachments = useMemo(() => {
|
|
28
|
+
return (editedAutomation.exportDefinitions
|
|
29
|
+
?.map((exportDefinition) => exportDefinition.requestPayload.format)
|
|
30
|
+
.filter(Boolean) ?? []);
|
|
31
|
+
}, [editedAutomation.exportDefinitions]);
|
|
32
|
+
const isDashboardExportSelected = editedAutomation.exportDefinitions?.some((exportDefinition) => isExportDefinitionDashboardRequestPayload(exportDefinition.requestPayload)) ?? true;
|
|
33
|
+
const isCsvExportSelected = editedAutomation.exportDefinitions?.some((exportDefinition) => {
|
|
34
|
+
if (isExportDefinitionVisualizationObjectRequestPayload(exportDefinition.requestPayload)) {
|
|
35
|
+
return exportDefinition.requestPayload.format === "CSV";
|
|
36
|
+
}
|
|
37
|
+
return false;
|
|
38
|
+
}) ?? false;
|
|
39
|
+
const isXlsxExportSelected = editedAutomation.exportDefinitions?.some((exportDefinition) => {
|
|
40
|
+
if (isExportDefinitionVisualizationObjectRequestPayload(exportDefinition.requestPayload)) {
|
|
41
|
+
return exportDefinition.requestPayload.format === "XLSX";
|
|
42
|
+
}
|
|
43
|
+
return false;
|
|
44
|
+
}) ?? false;
|
|
45
|
+
const xlsxExportSettings = editedAutomation.exportDefinitions?.find((exportDefinition) => exportDefinition.requestPayload.format === "XLSX")?.requestPayload.settings;
|
|
46
|
+
const xlsxSettings = {
|
|
47
|
+
mergeHeaders: xlsxExportSettings?.mergeHeaders ?? true,
|
|
48
|
+
exportInfo: xlsxExportSettings?.exportInfo ?? true,
|
|
49
|
+
};
|
|
50
|
+
const pdfVisualizationSettings = editedAutomation.exportDefinitions?.find((exportDefinition) => isExportDefinitionVisualizationObjectRequestPayload(exportDefinition.requestPayload) &&
|
|
51
|
+
exportDefinition.requestPayload.format === "PDF_TABULAR")?.requestPayload.settings;
|
|
52
|
+
const pdfTabularSettings = pdfVisualizationSettings && "pageSize" in pdfVisualizationSettings
|
|
53
|
+
? pdfVisualizationSettings
|
|
54
|
+
: undefined;
|
|
55
|
+
const pdfSettings = {
|
|
56
|
+
pageSize: pdfTabularSettings?.pageSize ?? defaultPdfPageSize ?? "A4",
|
|
57
|
+
orientation: pdfTabularSettings?.orientation ?? "portrait",
|
|
58
|
+
exportInfo: pdfTabularSettings?.exportInfo ?? true,
|
|
59
|
+
};
|
|
60
|
+
const csvExportDefinition = editedAutomation.exportDefinitions?.find((exportDefinition) => isExportDefinitionVisualizationObjectRequestPayload(exportDefinition.requestPayload) &&
|
|
61
|
+
exportDefinition.requestPayload.format === "CSV");
|
|
62
|
+
const csvExportSettings = csvExportDefinition &&
|
|
63
|
+
isExportDefinitionVisualizationObjectRequestPayload(csvExportDefinition.requestPayload)
|
|
64
|
+
? csvExportDefinition.requestPayload.settings
|
|
65
|
+
: undefined;
|
|
66
|
+
const csvSettings = {
|
|
67
|
+
delimiter: csvExportSettings?.delimiter ?? resolvedDefaultCsvDelimiter,
|
|
68
|
+
};
|
|
69
|
+
const csvRawExportDefinition = editedAutomation.exportDefinitions?.find((exportDefinition) => isExportDefinitionVisualizationObjectRequestPayload(exportDefinition.requestPayload) &&
|
|
70
|
+
exportDefinition.requestPayload.format === "CSV_RAW");
|
|
71
|
+
const csvRawExportSettings = csvRawExportDefinition &&
|
|
72
|
+
isExportDefinitionVisualizationObjectRequestPayload(csvRawExportDefinition.requestPayload)
|
|
73
|
+
? csvRawExportDefinition.requestPayload.settings
|
|
74
|
+
: undefined;
|
|
75
|
+
const csvRawSettings = {
|
|
76
|
+
delimiter: csvRawExportSettings?.delimiter ?? resolvedDefaultCsvDelimiter,
|
|
77
|
+
};
|
|
78
|
+
// Extract templateId per slides format, scoped to the current dialog mode
|
|
79
|
+
const getTemplateIdForFormat = (format) => {
|
|
80
|
+
const def = editedAutomation.exportDefinitions?.find((ed) => ed.requestPayload.format === format &&
|
|
81
|
+
(isWidget
|
|
82
|
+
? isExportDefinitionVisualizationObjectRequestPayload(ed.requestPayload)
|
|
83
|
+
: isExportDefinitionDashboardRequestPayload(ed.requestPayload)));
|
|
84
|
+
return def?.requestPayload.templateId;
|
|
85
|
+
};
|
|
86
|
+
const slidesTemplateIds = {
|
|
87
|
+
PPTX: getTemplateIdForFormat("PPTX"),
|
|
88
|
+
PDF_SLIDES: getTemplateIdForFormat("PDF_SLIDES"),
|
|
89
|
+
PDF: getTemplateIdForFormat("PDF"),
|
|
90
|
+
};
|
|
91
|
+
return {
|
|
92
|
+
selectedAttachments,
|
|
93
|
+
isDashboardExportSelected,
|
|
94
|
+
isCsvExportSelected,
|
|
95
|
+
isXlsxExportSelected,
|
|
96
|
+
xlsxSettings,
|
|
97
|
+
pdfSettings,
|
|
98
|
+
csvSettings,
|
|
99
|
+
csvRawSettings,
|
|
100
|
+
slidesTemplateIds,
|
|
101
|
+
};
|
|
102
|
+
}
|
package/esm/presentation/automations/scheduledEmail/state/useScheduledExportDialogValidity.d.ts
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { useScheduledEmailFormValidity } from "./useScheduledEmailFormValidity.js";
|
|
2
|
+
/**
|
|
3
|
+
* Reads the scheduled-export dialog's validity: whether submit is enabled, the validation message to
|
|
4
|
+
* show, whether the schedule's source widget still exists, and which recipient kinds the selected
|
|
5
|
+
* notification channel permits.
|
|
6
|
+
*
|
|
7
|
+
* Derived per consumer rather than published on a context: it is a pure function of the draft, the
|
|
8
|
+
* recipient defaults and the dialog's own context, and no consumer observes its identity.
|
|
9
|
+
*
|
|
10
|
+
* @internal
|
|
11
|
+
*/
|
|
12
|
+
export declare function useScheduledExportDialogValidity(): ReturnType<typeof useScheduledEmailFormValidity>;
|
|
13
|
+
//# sourceMappingURL=useScheduledExportDialogValidity.d.ts.map
|
package/esm/presentation/automations/scheduledEmail/state/useScheduledExportDialogValidity.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useScheduledExportDialogValidity.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/automations/scheduledEmail/state/useScheduledExportDialogValidity.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,6BAA6B,EAAE,MAAM,oCAAoC,CAAC;AAEnF;;;;;;;;;GASG;AACH,wBAAgB,gCAAgC,IAAI,UAAU,CAAC,OAAO,6BAA6B,CAAC,CAyBnG"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
// (C) 2026 GoodData Corporation
|
|
2
|
+
import { useAutomationsContext } from "../../contexts/AutomationsContext.js";
|
|
3
|
+
import { useScheduledEmailDialogContext } from "../../contexts/ScheduledEmailDialogContext.js";
|
|
4
|
+
import { useScheduledExportData } from "./ScheduledExportDataContext.js";
|
|
5
|
+
import { useScheduledExportDraft } from "./ScheduledExportDraftContext.js";
|
|
6
|
+
import { useScheduledEmailFormValidity } from "./useScheduledEmailFormValidity.js";
|
|
7
|
+
/**
|
|
8
|
+
* Reads the scheduled-export dialog's validity: whether submit is enabled, the validation message to
|
|
9
|
+
* show, whether the schedule's source widget still exists, and which recipient kinds the selected
|
|
10
|
+
* notification channel permits.
|
|
11
|
+
*
|
|
12
|
+
* Derived per consumer rather than published on a context: it is a pure function of the draft, the
|
|
13
|
+
* recipient defaults and the dialog's own context, and no consumer observes its identity.
|
|
14
|
+
*
|
|
15
|
+
* @internal
|
|
16
|
+
*/
|
|
17
|
+
export function useScheduledExportDialogValidity() {
|
|
18
|
+
const { maxAutomationsRecipients } = useAutomationsContext();
|
|
19
|
+
const { scheduledExportToEdit, notificationChannels } = useScheduledEmailDialogContext();
|
|
20
|
+
const { editedAutomation, originalAutomation, isCronValid, isTitleValid, isSubjectValid, isOnMessageValid, } = useScheduledExportDraft();
|
|
21
|
+
const { defaultRecipient } = useScheduledExportData();
|
|
22
|
+
return useScheduledEmailFormValidity({
|
|
23
|
+
editedAutomation,
|
|
24
|
+
originalAutomation,
|
|
25
|
+
scheduledExportToEdit,
|
|
26
|
+
notificationChannels,
|
|
27
|
+
defaultRecipient,
|
|
28
|
+
maxAutomationsRecipients,
|
|
29
|
+
isCronValid,
|
|
30
|
+
isTitleValid,
|
|
31
|
+
isSubjectValid,
|
|
32
|
+
isOnMessageValid,
|
|
33
|
+
});
|
|
34
|
+
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type ComponentType } from "react";
|
|
1
|
+
import { type ComponentType, type ReactNode } from "react";
|
|
2
2
|
import { type FilterContextItem, type IAutomationMetadataObject, type IAutomationMetadataObjectDefinition, type IFilter, type IInsight, type INotificationChannelIdentifier, type INotificationChannelMetadataObject, type IWidget } from "@gooddata/sdk-model";
|
|
3
3
|
import { type GoodDataSdkError } from "@gooddata/sdk-ui";
|
|
4
4
|
/**
|
|
@@ -73,6 +73,20 @@ export interface IScheduledEmailDialogProps {
|
|
|
73
73
|
* @deprecated read `isLoading` from `useScheduledEmailDialogContext()` instead. Prop will be removed.
|
|
74
74
|
*/
|
|
75
75
|
isLoading?: boolean;
|
|
76
|
+
/**
|
|
77
|
+
* Custom content rendered as the first child of the dialog content area, above the default form.
|
|
78
|
+
*
|
|
79
|
+
* @remarks
|
|
80
|
+
* Use this to surface an application-specific banner or warning without replacing the whole dialog.
|
|
81
|
+
*/
|
|
82
|
+
topContent?: ReactNode;
|
|
83
|
+
/**
|
|
84
|
+
* Custom content rendered as the last child of the dialog content area, below the default form.
|
|
85
|
+
*
|
|
86
|
+
* @remarks
|
|
87
|
+
* Use this to surface an application-specific note or disclaimer without replacing the whole dialog.
|
|
88
|
+
*/
|
|
89
|
+
bottomContent?: ReactNode;
|
|
76
90
|
/**
|
|
77
91
|
* Callback to be called, when user submits the scheduled email dialog.
|
|
78
92
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/presentation/automations/scheduledEmail/types.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/presentation/automations/scheduledEmail/types.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAE3D,OAAO,EACH,KAAK,iBAAiB,EACtB,KAAK,yBAAyB,EAC9B,KAAK,mCAAmC,EACxC,KAAK,OAAO,EACZ,KAAK,QAAQ,EACb,KAAK,8BAA8B,EACnC,KAAK,kCAAkC,EACvC,KAAK,OAAO,EACf,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAMzD;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACvC;;;;OAIG;IACH,qBAAqB,CAAC,EAAE,yBAAyB,CAAC;IAElD;;;;;OAKG;IACH,oBAAoB,CAAC,EAAE,8BAA8B,EAAE,GAAG,kCAAkC,EAAE,CAAC;IAE/F;;;;;;;;;OASG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IAEjB;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,QAAQ,CAAC;IAEnB;;;;;;;;;;;;;OAaG;IACH,gBAAgB,CAAC,EAAE,iBAAiB,EAAE,CAAC;IAEvC;;;;;;;;;;;;;OAaG;IACH,aAAa,CAAC,EAAE,OAAO,EAAE,CAAC;IAE1B;;;;OAIG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB;;;;;OAKG;IACH,UAAU,CAAC,EAAE,SAAS,CAAC;IAEvB;;;;;OAKG;IACH,aAAa,CAAC,EAAE,SAAS,CAAC;IAE1B;;OAEG;IACH,QAAQ,CAAC,EAAE,CACP,wBAAwB,EAAE,yBAAyB,GAAG,mCAAmC,KACxF,IAAI,CAAC;IAEV;;OAEG;IACH,MAAM,CAAC,EAAE,CAAC,wBAAwB,EAAE,yBAAyB,KAAK,IAAI,CAAC;IAEvE;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IAEtB;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IAEpB;;OAEG;IACH,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,gBAAgB,KAAK,IAAI,CAAC;IAE5C;;OAEG;IACH,SAAS,CAAC,EAAE,CAAC,wBAAwB,EAAE,yBAAyB,KAAK,IAAI,CAAC;IAE1E;;OAEG;IACH,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,gBAAgB,KAAK,IAAI,CAAC;IAEhD;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,IAAI,CAAC;IAE3B;;OAEG;IACH,eAAe,CAAC,EAAE,MAAM,IAAI,CAAC;IAE7B;;OAEG;IACH,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,gBAAgB,KAAK,IAAI,CAAC;CACrD;AAED;;;GAGG;AACH,MAAM,WAAW,oCAAoC;IACjD;;;;;OAKG;IACH,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAEhC;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,gBAAgB,CAAC;IAErC;;;;OAIG;IACH,oBAAoB,CAAC,EAAE,8BAA8B,EAAE,GAAG,kCAAkC,EAAE,CAAC;IAE/F;;;;;OAKG;IACH,WAAW,CAAC,EAAE,yBAAyB,EAAE,CAAC;IAE1C;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,IAAI,CAAC;IAEnB;;OAEG;IACH,MAAM,CAAC,EAAE,CAAC,aAAa,EAAE,yBAAyB,KAAK,IAAI,CAAC;IAE5D;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IAErB;;OAEG;IACH,eAAe,CAAC,EAAE,MAAM,IAAI,CAAC;IAE7B;;OAEG;IACH,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,gBAAgB,KAAK,IAAI,CAAC;CACrD;AAMD;;GAEG;AACH,MAAM,MAAM,mCAAmC,GAAG,aAAa,CAAC,0BAA0B,CAAC,CAAC;AAE5F;;GAEG;AACH,MAAM,MAAM,6CAA6C,GACrD,aAAa,CAAC,oCAAoC,CAAC,CAAC"}
|
|
@@ -12,7 +12,7 @@ export interface IDrillSelectDropdownProps extends IDrillSelectContext {
|
|
|
12
12
|
onSelect: (item: DashboardDrillDefinition, context: unknown) => void;
|
|
13
13
|
}
|
|
14
14
|
export declare function DrillSelectDropdown({ isOpen, dropDownAnchorClass, onClose, onCloseReturnFocus, onSelect, drillDefinitions, drillEvent }: IDrillSelectDropdownProps): import("react/jsx-runtime").JSX.Element | null;
|
|
15
|
-
export declare const createDrillSelectItems: ({ drillDefinitions, drillEvent, insights, dashboardList, dashboardTitle, intl, widget, attributeDisplayForms, }: {
|
|
15
|
+
export declare const createDrillSelectItems: ({ drillDefinitions, drillEvent, insights, dashboardList, dashboardTitle, intl, widget, attributeDisplayForms, enableSecondGranularities, }: {
|
|
16
16
|
drillDefinitions: DashboardDrillDefinition[];
|
|
17
17
|
drillEvent: IDrillEvent;
|
|
18
18
|
insights: ObjRefMap<IInsight>;
|
|
@@ -21,5 +21,6 @@ export declare const createDrillSelectItems: ({ drillDefinitions, drillEvent, in
|
|
|
21
21
|
intl: IntlShape;
|
|
22
22
|
widget?: IWidget | undefined;
|
|
23
23
|
attributeDisplayForms: Record<string, IAttributeDisplayFormMetadataObject>;
|
|
24
|
+
enableSecondGranularities?: boolean | undefined;
|
|
24
25
|
}) => IDrillSelectItem[];
|
|
25
26
|
//# sourceMappingURL=DrillSelectDropdown.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DrillSelectDropdown.d.ts","sourceRoot":"","sources":["../../../../src/presentation/drill/DrillSelect/DrillSelectDropdown.tsx"],"names":[],"mappings":"AAMA,OAAO,EAAE,KAAK,SAAS,EAAW,MAAM,YAAY,CAAC;AAGrD,OAAO,EACH,KAAK,mCAAmC,EACxC,KAAK,QAAQ,EACb,KAAK,gBAAgB,EACrB,KAAK,OAAO,EAcf,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,KAAK,WAAW,EAAsB,MAAM,kBAAkB,CAAC;AAIxE,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,yCAAyC,CAAC;
|
|
1
|
+
{"version":3,"file":"DrillSelectDropdown.d.ts","sourceRoot":"","sources":["../../../../src/presentation/drill/DrillSelect/DrillSelectDropdown.tsx"],"names":[],"mappings":"AAMA,OAAO,EAAE,KAAK,SAAS,EAAW,MAAM,YAAY,CAAC;AAGrD,OAAO,EACH,KAAK,mCAAmC,EACxC,KAAK,QAAQ,EACb,KAAK,gBAAgB,EACrB,KAAK,OAAO,EAcf,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,KAAK,WAAW,EAAsB,MAAM,kBAAkB,CAAC;AAIxE,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAQzE,OAAO,EAAE,KAAK,wBAAwB,EAAyB,MAAM,mBAAmB,CAAC;AAazF,OAAO,EAAa,KAAK,mBAAmB,EAAE,KAAK,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAExF,MAAM,WAAW,yBAA0B,SAAQ,mBAAmB;IAClE,mBAAmB,EAAE,MAAM,CAAC;IAC5B,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,kBAAkB,EAAE,MAAM,IAAI,CAAC;IAC/B,QAAQ,EAAE,CAAC,IAAI,EAAE,wBAAwB,EAAE,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;CACxE;AAED,wBAAgB,mBAAmB,CAAC,EAChC,MAAM,EACN,mBAAmB,EACnB,OAAO,EACP,kBAAkB,EAClB,QAAQ,EACR,gBAAgB,EAChB,UAAU,EACb,EAAE,yBAAyB,kDA0K3B;AAqFD,eAAO,MAAM,sBAAsB;;;;;;;;;;wBA6JlC,CAAC"}
|
|
@@ -12,6 +12,7 @@ import { getDrillOriginLocalIdentifier } from "../../../_staging/drills/drilling
|
|
|
12
12
|
import { useDashboardSelector } from "../../../model/react/DashboardStoreProvider.js";
|
|
13
13
|
import { selectAccessibleDashboards } from "../../../model/store/accessibleDashboards/accessibleDashboardsSelectors.js";
|
|
14
14
|
import { selectCatalogAttributeDisplayFormsById } from "../../../model/store/catalog/catalogSelectors.js";
|
|
15
|
+
import { selectEnableSecondGranularities } from "../../../model/store/config/configSelectors.js";
|
|
15
16
|
import { selectInsightsMap } from "../../../model/store/insights/insightsSelectors.js";
|
|
16
17
|
import { selectDashboardTitle } from "../../../model/store/meta/metaSelectors.js";
|
|
17
18
|
import { selectWidgetByRef } from "../../../model/store/tabs/layout/layoutSelectors.js";
|
|
@@ -31,6 +32,7 @@ export function DrillSelectDropdown({ isOpen, dropDownAnchorClass, onClose, onCl
|
|
|
31
32
|
const insights = useDashboardSelector(selectInsightsMap);
|
|
32
33
|
const widget = useDashboardSelector(selectWidgetByRef(drillEvent.widgetRef));
|
|
33
34
|
const attributeDisplayForms = useDashboardSelector(selectCatalogAttributeDisplayFormsById);
|
|
35
|
+
const enableSecondGranularities = useDashboardSelector(selectEnableSecondGranularities);
|
|
34
36
|
const stopPropagation = useCallback((e) => {
|
|
35
37
|
e.stopPropagation();
|
|
36
38
|
}, []);
|
|
@@ -77,6 +79,7 @@ export function DrillSelectDropdown({ isOpen, dropDownAnchorClass, onClose, onCl
|
|
|
77
79
|
attributeDisplayForms,
|
|
78
80
|
intl,
|
|
79
81
|
widget: widget,
|
|
82
|
+
enableSecondGranularities,
|
|
80
83
|
}), [
|
|
81
84
|
drillDefinitions,
|
|
82
85
|
drillEvent,
|
|
@@ -86,6 +89,7 @@ export function DrillSelectDropdown({ isOpen, dropDownAnchorClass, onClose, onCl
|
|
|
86
89
|
intl,
|
|
87
90
|
widget,
|
|
88
91
|
attributeDisplayForms,
|
|
92
|
+
enableSecondGranularities,
|
|
89
93
|
]);
|
|
90
94
|
const grouped = groupBy(drillSelectItems, (item) => {
|
|
91
95
|
if (isDrillDownDefinition(item.drillDefinition)) {
|
|
@@ -208,7 +212,7 @@ function calculateAlignPoints(anchorClass, drillEvent) {
|
|
|
208
212
|
},
|
|
209
213
|
];
|
|
210
214
|
}
|
|
211
|
-
export const createDrillSelectItems = ({ drillDefinitions, drillEvent, insights, dashboardList, dashboardTitle, intl, widget, attributeDisplayForms, }) => {
|
|
215
|
+
export const createDrillSelectItems = ({ drillDefinitions, drillEvent, insights, dashboardList, dashboardTitle, intl, widget, attributeDisplayForms, enableSecondGranularities = false, }) => {
|
|
212
216
|
const totalDrillToUrls = getTotalDrillToUrlCount(drillDefinitions);
|
|
213
217
|
return drillDefinitions.flatMap((drillDefinition) => {
|
|
214
218
|
invariant(!isDrillToLegacyDashboard(drillDefinition), "Drill to pixel perfect dashboards from insight is not supported.");
|
|
@@ -296,7 +300,7 @@ export const createDrillSelectItems = ({ drillDefinitions, drillEvent, insights,
|
|
|
296
300
|
};
|
|
297
301
|
}
|
|
298
302
|
if (isKeyDriveAnalysis(drillDefinition)) {
|
|
299
|
-
const items = getKdaKeyDriverCombinations(drillDefinition, drillEvent);
|
|
303
|
+
const items = getKdaKeyDriverCombinations(drillDefinition, drillEvent, enableSecondGranularities);
|
|
300
304
|
return items.map((item) => {
|
|
301
305
|
return {
|
|
302
306
|
name: getKeyDriverCombinationItemTitle(intl, item),
|
|
@@ -5,7 +5,7 @@ import type { IDashboardKeyDriverCombinationItem } from "../../../model/events/d
|
|
|
5
5
|
/**
|
|
6
6
|
* @internal
|
|
7
7
|
*/
|
|
8
|
-
export declare function getKdaKeyDriverCombinations(drillDefinition: IKeyDriveAnalysis, drillEvent: IDrillEvent): IDashboardKeyDriverCombinationItem[];
|
|
8
|
+
export declare function getKdaKeyDriverCombinations(drillDefinition: IKeyDriveAnalysis, drillEvent: IDrillEvent, enableSecondGranularities?: boolean): IDashboardKeyDriverCombinationItem[];
|
|
9
9
|
/**
|
|
10
10
|
* @internal
|
|
11
11
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kdaUtils.d.ts","sourceRoot":"","sources":["../../../../src/presentation/drill/utils/kdaUtils.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,OAAO,EAEH,KAAK,iBAAiB,
|
|
1
|
+
{"version":3,"file":"kdaUtils.d.ts","sourceRoot":"","sources":["../../../../src/presentation/drill/utils/kdaUtils.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,OAAO,EAEH,KAAK,iBAAiB,EAMzB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAEH,KAAK,WAAW,EAgBnB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,KAAK,EAAE,kCAAkC,EAAE,MAAM,gCAAgC,CAAC;AAGzF;;GAEG;AACH,wBAAgB,2BAA2B,CACvC,eAAe,EAAE,iBAAiB,EAClC,UAAU,EAAE,WAAW,EACvB,yBAAyB,UAAQ,GAClC,kCAAkC,EAAE,CA6DtC;AAiVD;;GAEG;AACH,wBAAgB,gCAAgC,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,kCAAkC,UAsCzG"}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
// (C) 2025-2026 GoodData Corporation
|
|
2
|
-
import { isAttributeDescriptor, isMeasureDescriptor, isMeasureGroupDescriptor, } from "@gooddata/sdk-model";
|
|
2
|
+
import { isAttributeDescriptor, isMeasureDescriptor, isMeasureGroupDescriptor, isYearGranularity, } from "@gooddata/sdk-model";
|
|
3
3
|
import { DataViewFacade, isAttributeScope, isDrillIntersectionAttributeItem, isDrillIntersectionDateAttributeItem, isMeasureScope, isTableMeasureValue, isValueColumnDefinition, isValueRowDefinition, } from "@gooddata/sdk-ui";
|
|
4
|
-
import {
|
|
4
|
+
import { getKeyDriverAnalysisSupportedStringGranularities } from "../../../model/store/keyDriverAnalysis/const.js";
|
|
5
5
|
/**
|
|
6
6
|
* @internal
|
|
7
7
|
*/
|
|
8
|
-
export function getKdaKeyDriverCombinations(drillDefinition, drillEvent) {
|
|
8
|
+
export function getKdaKeyDriverCombinations(drillDefinition, drillEvent, enableSecondGranularities = false) {
|
|
9
9
|
//TODO: Special implementation for headline
|
|
10
10
|
const dv = DataViewFacade.for(drillEvent.dataView);
|
|
11
11
|
const combinations = findHeadersCombinations(dv, drillDefinition, drillEvent);
|
|
@@ -14,7 +14,8 @@ export function getKdaKeyDriverCombinations(drillDefinition, drillEvent) {
|
|
|
14
14
|
return [];
|
|
15
15
|
}
|
|
16
16
|
//Find granularity
|
|
17
|
-
const
|
|
17
|
+
const supportedStringGranularities = getKeyDriverAnalysisSupportedStringGranularities(enableSecondGranularities);
|
|
18
|
+
const validGranularity = supportedStringGranularities.includes(combinations.dateHeader.attributeHeader.granularity ?? "");
|
|
18
19
|
if (!validGranularity) {
|
|
19
20
|
return [];
|
|
20
21
|
}
|
|
@@ -265,7 +266,7 @@ function createYearToYear(combinations, table, rows, columns, dims, current) {
|
|
|
265
266
|
}
|
|
266
267
|
const attribute = current.scope.descriptor.attributeHeader;
|
|
267
268
|
const attributeItem = current.scope.header.attributeHeaderItem;
|
|
268
|
-
const isYear =
|
|
269
|
+
const isYear = isYearGranularity(attribute.granularity);
|
|
269
270
|
// Year to year is not available for year granularity, it not makes sense
|
|
270
271
|
if (isYear) {
|
|
271
272
|
return undefined;
|
|
@@ -7,5 +7,5 @@ import { type IDashboardDateFilterProps } from "./types.js";
|
|
|
7
7
|
*
|
|
8
8
|
* @alpha
|
|
9
9
|
*/
|
|
10
|
-
export declare function DefaultDashboardDateFilter({ filter, workingFilter, onFilterChanged, config, readonly, autoOpen, ButtonComponent, overlayPositionType, tabId }: IDashboardDateFilterProps): ReactElement;
|
|
10
|
+
export declare function DefaultDashboardDateFilter({ filter, workingFilter, onFilterChanged, config, readonly, autoOpen, ButtonComponent, overlayPositionType, tabId, customRangeHint }: IDashboardDateFilterProps): ReactElement;
|
|
11
11
|
//# sourceMappingURL=DefaultDashboardDateFilter.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DefaultDashboardDateFilter.d.ts","sourceRoot":"","sources":["../../../../src/presentation/filterBar/dateFilter/DefaultDashboardDateFilter.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,YAAY,EAAkC,MAAM,OAAO,CAAC;AAmC1E,OAAO,EAAE,KAAK,yBAAyB,EAAE,MAAM,YAAY,CAAC;AAmB5D;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CAAC,EACvC,MAAM,EACN,aAAa,EACb,eAAe,EACf,MAAM,EACN,QAAQ,EACR,QAAQ,EACR,eAAe,EACf,mBAAmB,EACnB,KAAK,
|
|
1
|
+
{"version":3,"file":"DefaultDashboardDateFilter.d.ts","sourceRoot":"","sources":["../../../../src/presentation/filterBar/dateFilter/DefaultDashboardDateFilter.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,YAAY,EAAkC,MAAM,OAAO,CAAC;AAmC1E,OAAO,EAAE,KAAK,yBAAyB,EAAE,MAAM,YAAY,CAAC;AAmB5D;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CAAC,EACvC,MAAM,EACN,aAAa,EACb,eAAe,EACf,MAAM,EACN,QAAQ,EACR,QAAQ,EACR,eAAe,EACf,mBAAmB,EACnB,KAAK,EACL,eAAe,EAClB,EAAE,yBAAyB,GAAG,YAAY,CA2L1C"}
|
|
@@ -32,7 +32,7 @@ function relevantDateDimensionHasSeconds(dateDatasets, dataSetRef) {
|
|
|
32
32
|
*
|
|
33
33
|
* @alpha
|
|
34
34
|
*/
|
|
35
|
-
export function DefaultDashboardDateFilter({ filter, workingFilter, onFilterChanged, config, readonly, autoOpen, ButtonComponent, overlayPositionType, tabId, }) {
|
|
35
|
+
export function DefaultDashboardDateFilter({ filter, workingFilter, onFilterChanged, config, readonly, autoOpen, ButtonComponent, overlayPositionType, tabId, customRangeHint, }) {
|
|
36
36
|
const intl = useIntl();
|
|
37
37
|
const settings = useDashboardSelector(selectSettings);
|
|
38
38
|
const capabilities = useDashboardSelector(selectBackendCapabilities);
|
|
@@ -109,5 +109,5 @@ export function DefaultDashboardDateFilter({ filter, workingFilter, onFilterChan
|
|
|
109
109
|
}, [intl, filter?.dateFilter.dataSet, defaultDateFilterName]);
|
|
110
110
|
return (_jsx(DateFilter, { excludeCurrentPeriod: excludeCurrentPeriod, selectedFilterOption: dateFilterOption, workingExcludeCurrentPeriod: isApplyAllAtOnceEnabledAndSet ? workingExcludeCurrentPeriod : undefined, workingSelectedFilterOption: isApplyAllAtOnceEnabledAndSet ? workingFilterOption : undefined, dateFilterMode: readonly
|
|
111
111
|
? DashboardDateFilterConfigModeValues.READONLY
|
|
112
|
-
: DashboardDateFilterConfigModeValues.ACTIVE, filterOptions: dateFilterOptions, availableGranularities: availableGranularities, customFilterName: title, onApply: onApply, onSelect: isApplyAllAtOnceEnabledAndSet ? onSelect : undefined, dateFormat: dateFormat, locale: locale, isTimeForAbsoluteRangeEnabled: isTimeForAbsoluteRangeEnabled, isSecondsForAbsoluteRangeEnabled: isSecondsForAbsoluteRangeEnabled, isEditMode: isInEditMode, openOnInit: autoOpen, weekStart: weekStart, customIcon: visibilityIcon, showDropDownHeaderMessage: !filter?.dateFilter.dataSet, FilterConfigurationComponent: isConfigurationEnabled ? FilterConfigurationComponent : undefined, withoutApply: isApplyAllAtOnceEnabledAndSet, ButtonComponent: ButtonComponent, overlayPositionType: overlayPositionType, activeCalendars: activeCalendars, enableEmptyDateValues: enableEmptyDateValues, hideDisabledExclude: true }));
|
|
112
|
+
: DashboardDateFilterConfigModeValues.ACTIVE, filterOptions: dateFilterOptions, availableGranularities: availableGranularities, customFilterName: title, onApply: onApply, onSelect: isApplyAllAtOnceEnabledAndSet ? onSelect : undefined, dateFormat: dateFormat, locale: locale, isTimeForAbsoluteRangeEnabled: isTimeForAbsoluteRangeEnabled, isSecondsForAbsoluteRangeEnabled: isSecondsForAbsoluteRangeEnabled, isEditMode: isInEditMode, openOnInit: autoOpen, weekStart: weekStart, customIcon: visibilityIcon, showDropDownHeaderMessage: !filter?.dateFilter.dataSet, FilterConfigurationComponent: isConfigurationEnabled ? FilterConfigurationComponent : undefined, withoutApply: isApplyAllAtOnceEnabledAndSet, ButtonComponent: ButtonComponent, overlayPositionType: overlayPositionType, activeCalendars: activeCalendars, enableEmptyDateValues: enableEmptyDateValues, hideDisabledExclude: true, customRangeHint: customRangeHint }));
|
|
113
113
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type ComponentType } from "react";
|
|
1
|
+
import { type ComponentType, type ReactNode } from "react";
|
|
2
2
|
import { type DateFilterGranularity, type IDashboardDateFilter } from "@gooddata/sdk-model";
|
|
3
3
|
import { type IDateFilterButtonProps, type IDateFilterOptionsByType } from "@gooddata/sdk-ui-filters";
|
|
4
4
|
import { type OverlayPositionType } from "@gooddata/sdk-ui-kit";
|
|
@@ -82,6 +82,13 @@ export interface IDashboardDateFilterProps {
|
|
|
82
82
|
* @internal
|
|
83
83
|
*/
|
|
84
84
|
tabId?: string;
|
|
85
|
+
/**
|
|
86
|
+
* Custom content rendered at the end of the hint area of the static period (absolute range) form,
|
|
87
|
+
* after the default date/time format hints.
|
|
88
|
+
*
|
|
89
|
+
* @alpha
|
|
90
|
+
*/
|
|
91
|
+
customRangeHint?: ReactNode;
|
|
85
92
|
}
|
|
86
93
|
/**
|
|
87
94
|
* @public
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/presentation/filterBar/dateFilter/types.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/presentation/filterBar/dateFilter/types.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAE3D,OAAO,EAAE,KAAK,qBAAqB,EAAE,KAAK,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC5F,OAAO,EAAE,KAAK,sBAAsB,EAAE,KAAK,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AACtG,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAEhE;;;;GAIG;AACH,MAAM,WAAW,0BAA0B;IACvC;;;OAGG;IACH,sBAAsB,EAAE,qBAAqB,EAAE,CAAC;IAEhD;;;OAGG;IACH,iBAAiB,EAAE,wBAAwB,CAAC;IAE5C;;OAEG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,yBAAyB;IACtC;;OAEG;IACH,MAAM,EAAE,oBAAoB,GAAG,SAAS,CAAC;IAEzC;;OAEG;IACH,aAAa,EAAE,oBAAoB,GAAG,SAAS,CAAC;IAEhD;;;;;;;OAOG;IACH,eAAe,EAAE,CACb,MAAM,EAAE,oBAAoB,GAAG,SAAS,EACxC,uBAAuB,CAAC,EAAE,MAAM,EAChC,wBAAwB,CAAC,EAAE,OAAO,KACjC,IAAI,CAAC;IAEV;;OAEG;IACH,MAAM,EAAE,0BAA0B,CAAC;IAEnC;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB;;OAEG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IAEtB;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB;;;;OAIG;IACH,eAAe,CAAC,EAAE,aAAa,CAAC,sBAAsB,CAAC,CAAC;IAExD;;OAEG;IACH,mBAAmB,CAAC,EAAE,mBAAmB,CAAC;IAE1C;;;;;;;;;;OAUG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf;;;;;OAKG;IACH,eAAe,CAAC,EAAE,SAAS,CAAC;CAC/B;AAED;;GAEG;AACH,MAAM,MAAM,kCAAkC,GAAG,aAAa,CAAC,yBAAyB,CAAC,CAAC"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
// (C) 2021-
|
|
1
|
+
// (C) 2021-2026 GoodData Corporation
|
|
2
2
|
export {};
|
|
@@ -111,7 +111,9 @@ export declare const de_DE: {
|
|
|
111
111
|
"settingsDashboardDialog.section.timezone.defaultTimezone": string;
|
|
112
112
|
"settingsDashboardDialog.section.timezone.defaultTimezone.tooltip": string;
|
|
113
113
|
"settingsDashboardDialog.section.timezone.defaultTimezone.workspace": string;
|
|
114
|
+
"settingsDashboardDialog.section.timezone.defaultTimezone.workspace.tooltip": string;
|
|
114
115
|
"settingsDashboardDialog.section.timezone.defaultTimezone.fromBrowser": string;
|
|
116
|
+
"settingsDashboardDialog.section.timezone.defaultTimezone.fromBrowser.tooltip": string;
|
|
115
117
|
"settingsDashboardDialog.section.timezone.allowUserOverride.toggle": string;
|
|
116
118
|
"settingsDashboardDialog.section.timezone.allowUserOverride.toggle.tooltip": string;
|
|
117
119
|
"settingsDashboardDialog.section.timezone.showTimezoneInfo.toggle": string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"de-DE.localization-bundle.d.ts","sourceRoot":"","sources":["../../../../src/presentation/localization/bundles/de-DE.localization-bundle.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,KAAK
|
|
1
|
+
{"version":3,"file":"de-DE.localization-bundle.d.ts","sourceRoot":"","sources":["../../../../src/presentation/localization/bundles/de-DE.localization-bundle.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAg4BjB,CAAC"}
|
|
@@ -110,10 +110,12 @@ export const de_DE = {
|
|
|
110
110
|
"settingsDashboardDialog.section.alert.note": "<strong>Hinweis:</strong> Gilt nur für neue Warnungen — verwenden Sie die API, um vorhandene zu aktualisieren.",
|
|
111
111
|
"settingsDashboardDialog.section.alert.label": "Bewertungshäufigkeit",
|
|
112
112
|
"settingsDashboardDialog.section.timezone": "Zeitzone",
|
|
113
|
-
"settingsDashboardDialog.section.timezone.defaultTimezone": "
|
|
114
|
-
"settingsDashboardDialog.section.timezone.defaultTimezone.tooltip": "Zeitzone, die
|
|
115
|
-
"settingsDashboardDialog.section.timezone.defaultTimezone.workspace": "
|
|
116
|
-
"settingsDashboardDialog.section.timezone.defaultTimezone.
|
|
113
|
+
"settingsDashboardDialog.section.timezone.defaultTimezone": "Dashboard-Zeitzone",
|
|
114
|
+
"settingsDashboardDialog.section.timezone.defaultTimezone.tooltip": "Zeitzone, die für Datumsfilter und Datumswerte auf diesem Dashboard verwendet wird.",
|
|
115
|
+
"settingsDashboardDialog.section.timezone.defaultTimezone.workspace": "Standard",
|
|
116
|
+
"settingsDashboardDialog.section.timezone.defaultTimezone.workspace.tooltip": "Folgt der Zeitzone, die für Ihre Organisation, Ihren Workspace oder Ihr Benutzerkonto festgelegt ist. Sie wird automatisch aktualisiert, wenn sich diese Einstellung ändert.",
|
|
117
|
+
"settingsDashboardDialog.section.timezone.defaultTimezone.fromBrowser": "Gerätezeitzone",
|
|
118
|
+
"settingsDashboardDialog.section.timezone.defaultTimezone.fromBrowser.tooltip": "Verwendet die vom Browser des Betrachters gemeldete Zeitzone. Kann für jeden Betrachter unterschiedlich sein.",
|
|
117
119
|
"settingsDashboardDialog.section.timezone.allowUserOverride.toggle": "Benutzern erlauben, die Dashboard-Zeitzone zu ändern",
|
|
118
120
|
"settingsDashboardDialog.section.timezone.allowUserOverride.toggle.tooltip": "Wenn aktiviert, können Betrachtende die Dashboard-Zeitzone vorübergehend ändern. Die Änderung wird nicht gespeichert.",
|
|
119
121
|
"settingsDashboardDialog.section.timezone.showTimezoneInfo.toggle": "Zeitzone anzeigen",
|
|
@@ -121,10 +123,10 @@ export const de_DE = {
|
|
|
121
123
|
"settingsDashboardDialog.section.timezone.select.searchPlaceholder": "Suchen…",
|
|
122
124
|
"settingsDashboardDialog.section.timezone.select.noMatch": "Keine passende Zeitzone.",
|
|
123
125
|
"timezoneDialog.title": "Zeitzone ändern",
|
|
124
|
-
"timezoneDialog.description": "<b>Hinweis:</b> Beim Neuladen der Seite wird die Zeitzone auf den Standard
|
|
126
|
+
"timezoneDialog.description": "<b>Hinweis:</b> Beim Neuladen der Seite wird die Zeitzone auf den Standard zurückgesetzt.",
|
|
125
127
|
"timezoneDialog.description.ariaLabel": "Informationsmeldung im Dialog zum Ändern der Zeitzone",
|
|
126
|
-
"timezoneDialog.default": "Standard
|
|
127
|
-
"timezoneDialog.fromBrowser": "
|
|
128
|
+
"timezoneDialog.default": "Standard",
|
|
129
|
+
"timezoneDialog.fromBrowser": "Gerätezeitzone ({timezone})",
|
|
128
130
|
"timezoneDialog.select.searchPlaceholder": "Suchen…",
|
|
129
131
|
"timezoneDialog.select.noMatch": "Keine passende Zeitzone.",
|
|
130
132
|
"timezoneDialog.currentTime": "Jetzt {time}",
|