@gooddata/sdk-ui-dashboard 11.55.0-alpha.1 → 11.55.0-alpha.3
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 +26793 -68204
- package/esm/__version.d.ts +1 -1
- package/esm/__version.js +1 -1
- package/esm/index.d.ts +42 -4
- package/esm/index.d.ts.map +1 -1
- package/esm/index.js +38 -0
- package/esm/internal.d.ts +1 -1
- package/esm/internal.d.ts.map +1 -1
- package/esm/internal.js +1 -1
- package/esm/model/commandHandlers/dashboard/initializeDashboardHandler/index.js +1 -1
- package/esm/model/store/config/configSelectors.js +1 -1
- package/esm/model/store/tabs/parameters/parametersHelpers.d.ts +10 -22
- package/esm/model/store/tabs/parameters/parametersHelpers.d.ts.map +1 -1
- package/esm/model/store/tabs/parameters/parametersHelpers.js +13 -42
- package/esm/model/store/tabs/parameters/parametersSelectors.d.ts +8 -10
- package/esm/model/store/tabs/parameters/parametersSelectors.d.ts.map +1 -1
- package/esm/model/store/tabs/parameters/parametersSelectors.js +22 -32
- package/esm/presentation/automations/alerting/DefaultAlertingDialog/DefaultAlertingDialog.d.ts +16 -9
- package/esm/presentation/automations/alerting/DefaultAlertingDialog/DefaultAlertingDialog.d.ts.map +1 -1
- package/esm/presentation/automations/alerting/DefaultAlertingDialog/DefaultAlertingDialog.js +43 -153
- package/esm/presentation/automations/alerting/DefaultAlertingDialog/DefaultAlertingDialogAttribute.d.ts +13 -0
- package/esm/presentation/automations/alerting/DefaultAlertingDialog/DefaultAlertingDialogAttribute.d.ts.map +1 -0
- package/esm/presentation/automations/alerting/DefaultAlertingDialog/{components/AlertAttributeSelect.js → DefaultAlertingDialogAttribute.js} +12 -3
- package/esm/presentation/automations/alerting/DefaultAlertingDialog/DefaultAlertingDialogComparisonOperator.d.ts +13 -0
- package/esm/presentation/automations/alerting/DefaultAlertingDialog/DefaultAlertingDialogComparisonOperator.d.ts.map +1 -0
- package/esm/presentation/automations/alerting/DefaultAlertingDialog/{components/AlertComparisonOperatorSelect.js → DefaultAlertingDialogComparisonOperator.js} +13 -4
- package/esm/presentation/automations/alerting/DefaultAlertingDialog/DefaultAlertingDialogComparisonPeriod.d.ts +14 -0
- package/esm/presentation/automations/alerting/DefaultAlertingDialog/DefaultAlertingDialogComparisonPeriod.d.ts.map +1 -0
- package/esm/presentation/automations/alerting/DefaultAlertingDialog/{components/AlertComparisonPeriodSelect.js → DefaultAlertingDialogComparisonPeriod.js} +16 -6
- package/esm/presentation/automations/alerting/DefaultAlertingDialog/DefaultAlertingDialogDestination.d.ts.map +1 -1
- package/esm/presentation/automations/alerting/DefaultAlertingDialog/DefaultAlertingDialogDestination.js +2 -2
- package/esm/presentation/automations/alerting/DefaultAlertingDialog/DefaultAlertingDialogGranularity.d.ts +12 -0
- package/esm/presentation/automations/alerting/DefaultAlertingDialog/DefaultAlertingDialogGranularity.d.ts.map +1 -0
- package/esm/presentation/automations/alerting/DefaultAlertingDialog/{components/AlertGranularitySelect.js → DefaultAlertingDialogGranularity.js} +10 -2
- package/esm/presentation/automations/alerting/DefaultAlertingDialog/DefaultAlertingDialogMeasure.d.ts +12 -0
- package/esm/presentation/automations/alerting/DefaultAlertingDialog/DefaultAlertingDialogMeasure.d.ts.map +1 -0
- package/esm/presentation/automations/alerting/DefaultAlertingDialog/{components/AlertMeasureSelect.js → DefaultAlertingDialogMeasure.js} +11 -3
- package/esm/presentation/automations/alerting/DefaultAlertingDialog/DefaultAlertingDialogRecipients.d.ts.map +1 -1
- package/esm/presentation/automations/alerting/DefaultAlertingDialog/DefaultAlertingDialogRecipients.js +2 -2
- package/esm/presentation/automations/alerting/DefaultAlertingDialog/DefaultAlertingDialogSensitivity.d.ts +12 -0
- package/esm/presentation/automations/alerting/DefaultAlertingDialog/DefaultAlertingDialogSensitivity.d.ts.map +1 -0
- package/esm/presentation/automations/alerting/DefaultAlertingDialog/{components/AlertSensitivitySelect.js → DefaultAlertingDialogSensitivity.js} +10 -2
- package/esm/presentation/automations/alerting/DefaultAlertingDialog/DefaultAlertingDialogThreshold.d.ts +12 -0
- package/esm/presentation/automations/alerting/DefaultAlertingDialog/DefaultAlertingDialogThreshold.d.ts.map +1 -0
- package/esm/presentation/automations/alerting/DefaultAlertingDialog/{components/AlertThresholdInput.js → DefaultAlertingDialogThreshold.js} +9 -1
- package/esm/presentation/automations/alerting/DefaultAlertingDialog/DefaultAlertingDialogTriggerInterval.d.ts +13 -0
- package/esm/presentation/automations/alerting/DefaultAlertingDialog/DefaultAlertingDialogTriggerInterval.d.ts.map +1 -0
- package/esm/presentation/automations/alerting/DefaultAlertingDialog/{components/AlertTriggerIntervalSelect.js → DefaultAlertingDialogTriggerInterval.js} +11 -2
- package/esm/presentation/automations/alerting/DefaultAlertingDialog/DefaultAlertingDialogTriggerMode.d.ts +12 -0
- package/esm/presentation/automations/alerting/DefaultAlertingDialog/DefaultAlertingDialogTriggerMode.d.ts.map +1 -0
- package/esm/presentation/automations/alerting/DefaultAlertingDialog/{components/AlertTriggerModeSelect.js → DefaultAlertingDialogTriggerMode.js} +10 -2
- package/esm/presentation/automations/alerting/blocks/AlertingDialogAttribute.d.ts +16 -0
- package/esm/presentation/automations/alerting/blocks/AlertingDialogAttribute.d.ts.map +1 -0
- package/esm/presentation/automations/alerting/blocks/AlertingDialogAttribute.js +28 -0
- package/esm/presentation/automations/alerting/blocks/AlertingDialogComparisonOperator.d.ts +22 -0
- package/esm/presentation/automations/alerting/blocks/AlertingDialogComparisonOperator.d.ts.map +1 -0
- package/esm/presentation/automations/alerting/blocks/AlertingDialogComparisonOperator.js +31 -0
- package/esm/presentation/automations/alerting/blocks/AlertingDialogComparisonPeriod.d.ts +18 -0
- package/esm/presentation/automations/alerting/blocks/AlertingDialogComparisonPeriod.d.ts.map +1 -0
- package/esm/presentation/automations/alerting/blocks/AlertingDialogComparisonPeriod.js +31 -0
- package/esm/presentation/automations/alerting/blocks/AlertingDialogFieldLabelWithTooltip.d.ts +11 -0
- package/esm/presentation/automations/alerting/blocks/AlertingDialogFieldLabelWithTooltip.d.ts.map +1 -0
- package/esm/presentation/automations/alerting/blocks/AlertingDialogFieldLabelWithTooltip.js +15 -0
- package/esm/presentation/automations/alerting/blocks/AlertingDialogFormFieldGroup.d.ts +10 -0
- package/esm/presentation/automations/alerting/blocks/AlertingDialogFormFieldGroup.d.ts.map +1 -0
- package/esm/presentation/automations/alerting/blocks/AlertingDialogFormFieldGroup.js +12 -0
- package/esm/presentation/automations/alerting/blocks/AlertingDialogGranularity.d.ts +15 -0
- package/esm/presentation/automations/alerting/blocks/AlertingDialogGranularity.d.ts.map +1 -0
- package/esm/presentation/automations/alerting/blocks/AlertingDialogGranularity.js +33 -0
- package/esm/presentation/automations/alerting/blocks/AlertingDialogMeasure.d.ts +30 -0
- package/esm/presentation/automations/alerting/blocks/AlertingDialogMeasure.d.ts.map +1 -0
- package/esm/presentation/automations/alerting/blocks/AlertingDialogMeasure.js +39 -0
- package/esm/presentation/automations/alerting/blocks/AlertingDialogSensitivity.d.ts +15 -0
- package/esm/presentation/automations/alerting/blocks/AlertingDialogSensitivity.d.ts.map +1 -0
- package/esm/presentation/automations/alerting/blocks/AlertingDialogSensitivity.js +30 -0
- package/esm/presentation/automations/alerting/blocks/AlertingDialogShell.d.ts +49 -0
- package/esm/presentation/automations/alerting/blocks/AlertingDialogShell.d.ts.map +1 -0
- package/esm/presentation/automations/alerting/blocks/AlertingDialogShell.js +128 -0
- package/esm/presentation/automations/alerting/blocks/AlertingDialogThreshold.d.ts +21 -0
- package/esm/presentation/automations/alerting/blocks/AlertingDialogThreshold.d.ts.map +1 -0
- package/esm/presentation/automations/alerting/blocks/AlertingDialogThreshold.js +36 -0
- package/esm/presentation/automations/alerting/blocks/AlertingDialogTriggerInterval.d.ts +15 -0
- package/esm/presentation/automations/alerting/blocks/AlertingDialogTriggerInterval.d.ts.map +1 -0
- package/esm/presentation/automations/alerting/blocks/AlertingDialogTriggerInterval.js +32 -0
- package/esm/presentation/automations/alerting/blocks/AlertingDialogTriggerMode.d.ts +15 -0
- package/esm/presentation/automations/alerting/blocks/AlertingDialogTriggerMode.d.ts.map +1 -0
- package/esm/presentation/automations/alerting/blocks/AlertingDialogTriggerMode.js +24 -0
- package/esm/presentation/automations/alerting/blocks/DefaultLoadingAlertingDialog.d.ts.map +1 -0
- package/esm/presentation/automations/alerting/{DefaultAlertingDialog/hooks → hooks}/useAlertThreshold.d.ts +1 -1
- package/esm/presentation/automations/alerting/hooks/useAlertThreshold.d.ts.map +1 -0
- package/esm/presentation/automations/alerting/{DefaultAlertingDialog/hooks → hooks}/useAlertThreshold.js +1 -1
- package/esm/presentation/automations/alerting/{DefaultAlertingDialog/hooks → hooks}/useThresholdValue.d.ts +1 -1
- package/esm/presentation/automations/alerting/hooks/useThresholdValue.d.ts.map +1 -0
- package/esm/presentation/automations/alerting/{DefaultAlertingDialog/hooks → hooks}/useThresholdValue.js +2 -2
- package/esm/presentation/automations/alerting/state/types.d.ts +2 -2
- package/esm/presentation/automations/alerting/state/types.d.ts.map +1 -1
- package/esm/presentation/automations/alerting/state/useAlertingDialogFieldProps.d.ts +87 -0
- package/esm/presentation/automations/alerting/state/useAlertingDialogFieldProps.d.ts.map +1 -0
- package/esm/presentation/automations/alerting/state/useAlertingDialogFieldProps.js +234 -0
- package/esm/presentation/automations/alerting/types.d.ts +401 -3
- package/esm/presentation/automations/alerting/types.d.ts.map +1 -1
- package/esm/presentation/automations/alerting/utils/getters.d.ts +1 -8
- package/esm/presentation/automations/alerting/utils/getters.d.ts.map +1 -1
- package/esm/presentation/automations/connectors/hooks/useBuildAlertingManagementDialogContext.d.ts.map +1 -1
- package/esm/presentation/automations/connectors/hooks/useBuildAlertingManagementDialogContext.js +7 -0
- package/esm/presentation/automations/contexts/AlertingManagementDialogContext.d.ts +12 -0
- package/esm/presentation/automations/contexts/AlertingManagementDialogContext.d.ts.map +1 -1
- package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/DefaultScheduledEmailDialog.d.ts +15 -10
- package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/DefaultScheduledEmailDialog.d.ts.map +1 -1
- package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/DefaultScheduledEmailDialog.js +45 -198
- package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/components/Attachments/DashboardAttachments.d.ts +2 -18
- package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/components/Attachments/DashboardAttachments.d.ts.map +1 -1
- package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/components/Attachments/WidgetAttachments.d.ts +2 -23
- package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/components/Attachments/WidgetAttachments.d.ts.map +1 -1
- package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/components/DefaultScheduledEmailDialogDashboardAttachments.d.ts +11 -0
- package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/components/DefaultScheduledEmailDialogDashboardAttachments.d.ts.map +1 -0
- package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/components/DefaultScheduledEmailDialogDashboardAttachments.js +12 -0
- package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/components/DefaultScheduledEmailDialogEvaluationMode.d.ts +11 -0
- package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/components/DefaultScheduledEmailDialogEvaluationMode.d.ts.map +1 -0
- package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/components/DefaultScheduledEmailDialogEvaluationMode.js +12 -0
- package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/components/DefaultScheduledEmailDialogMessage.d.ts +11 -0
- package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/components/DefaultScheduledEmailDialogMessage.d.ts.map +1 -0
- package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/components/DefaultScheduledEmailDialogMessage.js +12 -0
- package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/components/DefaultScheduledEmailDialogRecurrence.d.ts +11 -0
- package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/components/DefaultScheduledEmailDialogRecurrence.d.ts.map +1 -0
- package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/components/DefaultScheduledEmailDialogRecurrence.js +12 -0
- package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/components/DefaultScheduledEmailDialogSubject.d.ts +11 -0
- package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/components/DefaultScheduledEmailDialogSubject.d.ts.map +1 -0
- package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/components/DefaultScheduledEmailDialogSubject.js +12 -0
- package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/components/DefaultScheduledEmailDialogWidgetAttachments.d.ts +11 -0
- package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/components/DefaultScheduledEmailDialogWidgetAttachments.d.ts.map +1 -0
- package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/components/DefaultScheduledEmailDialogWidgetAttachments.js +12 -0
- package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/components/EvaluationModeCheckbox/EvaluationModeCheckbox.d.ts +2 -17
- package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/components/EvaluationModeCheckbox/EvaluationModeCheckbox.d.ts.map +1 -1
- package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/components/EvaluationModeCheckbox/EvaluationModeCheckbox.js +0 -3
- package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/components/MessageForm/MessageForm.d.ts +2 -6
- package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/components/MessageForm/MessageForm.d.ts.map +1 -1
- package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/components/RecipientsSelect/RecipientsSelect.js +1 -1
- package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/components/SubjectForm/SubjectForm.d.ts +2 -10
- package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/components/SubjectForm/SubjectForm.d.ts.map +1 -1
- package/esm/presentation/automations/scheduledEmail/blocks/DefaultLoadingScheduledEmailDialog.d.ts.map +1 -0
- package/esm/presentation/automations/scheduledEmail/blocks/ScheduledEmailDialogDashboardAttachments.d.ts +16 -0
- package/esm/presentation/automations/scheduledEmail/blocks/ScheduledEmailDialogDashboardAttachments.d.ts.map +1 -0
- package/esm/presentation/automations/scheduledEmail/blocks/ScheduledEmailDialogDashboardAttachments.js +28 -0
- package/esm/presentation/automations/scheduledEmail/blocks/ScheduledEmailDialogEvaluationMode.d.ts +16 -0
- package/esm/presentation/automations/scheduledEmail/blocks/ScheduledEmailDialogEvaluationMode.d.ts.map +1 -0
- package/esm/presentation/automations/scheduledEmail/blocks/ScheduledEmailDialogEvaluationMode.js +28 -0
- package/esm/presentation/automations/scheduledEmail/blocks/ScheduledEmailDialogMessage.d.ts +15 -0
- package/esm/presentation/automations/scheduledEmail/blocks/ScheduledEmailDialogMessage.d.ts.map +1 -0
- package/esm/presentation/automations/scheduledEmail/blocks/ScheduledEmailDialogMessage.js +27 -0
- package/esm/presentation/automations/scheduledEmail/blocks/ScheduledEmailDialogRecurrence.d.ts +16 -0
- package/esm/presentation/automations/scheduledEmail/blocks/ScheduledEmailDialogRecurrence.d.ts.map +1 -0
- package/esm/presentation/automations/scheduledEmail/blocks/ScheduledEmailDialogRecurrence.js +24 -0
- package/esm/presentation/automations/scheduledEmail/blocks/ScheduledEmailDialogShell.d.ts +59 -0
- package/esm/presentation/automations/scheduledEmail/blocks/ScheduledEmailDialogShell.d.ts.map +1 -0
- package/esm/presentation/automations/scheduledEmail/blocks/ScheduledEmailDialogShell.js +195 -0
- package/esm/presentation/automations/scheduledEmail/blocks/ScheduledEmailDialogSubject.d.ts +16 -0
- package/esm/presentation/automations/scheduledEmail/blocks/ScheduledEmailDialogSubject.d.ts.map +1 -0
- package/esm/presentation/automations/scheduledEmail/blocks/ScheduledEmailDialogSubject.js +29 -0
- package/esm/presentation/automations/scheduledEmail/blocks/ScheduledEmailDialogWidgetAttachments.d.ts +16 -0
- package/esm/presentation/automations/scheduledEmail/blocks/ScheduledEmailDialogWidgetAttachments.d.ts.map +1 -0
- package/esm/presentation/automations/scheduledEmail/blocks/ScheduledEmailDialogWidgetAttachments.js +28 -0
- package/esm/presentation/automations/scheduledEmail/state/useIsInPlatformChannel.d.ts +6 -0
- package/esm/presentation/automations/scheduledEmail/state/useIsInPlatformChannel.d.ts.map +1 -0
- package/esm/presentation/automations/scheduledEmail/state/useIsInPlatformChannel.js +13 -0
- package/esm/presentation/automations/scheduledEmail/state/useScheduledEmailDialogFieldProps.d.ts +73 -0
- package/esm/presentation/automations/scheduledEmail/state/useScheduledEmailDialogFieldProps.d.ts.map +1 -0
- package/esm/presentation/automations/scheduledEmail/state/useScheduledEmailDialogFieldProps.js +168 -0
- package/esm/presentation/automations/scheduledEmail/state/useScheduledEmailSubmitOnEnter.d.ts +30 -0
- package/esm/presentation/automations/scheduledEmail/state/useScheduledEmailSubmitOnEnter.d.ts.map +1 -0
- package/esm/presentation/automations/scheduledEmail/state/useScheduledEmailSubmitOnEnter.js +26 -0
- package/esm/presentation/automations/scheduledEmail/types.d.ts +299 -1
- package/esm/presentation/automations/scheduledEmail/types.d.ts.map +1 -1
- package/esm/presentation/automations/shared/automationFilters/components/AutomationAttributeFilter.js +1 -1
- package/esm/presentation/automations/shared/automationFilters/components/AutomationDateFilter.js +1 -1
- package/esm/presentation/automations/shared/automationFilters/components/AutomationMeasureValueFilter.js +1 -1
- package/esm/presentation/automations/shared/hooks/useWorkspaceUsersSearch.d.ts +51 -0
- package/esm/presentation/automations/shared/hooks/useWorkspaceUsersSearch.d.ts.map +1 -0
- package/esm/presentation/automations/{scheduledEmail/DefaultScheduledEmailDialog/components/RecipientsSelect → shared/hooks}/useWorkspaceUsersSearch.js +13 -0
- package/esm/presentation/automations/shared/slots/AutomationDialogFormField.d.ts +13 -0
- package/esm/presentation/automations/shared/slots/AutomationDialogFormField.d.ts.map +1 -0
- package/esm/presentation/automations/{alerting/DefaultAlertingDialog/FormField.js → shared/slots/AutomationDialogFormField.js} +10 -1
- package/esm/presentation/automations/shared/slots/types.d.ts +23 -0
- package/esm/presentation/automations/shared/slots/types.d.ts.map +1 -1
- package/esm/presentation/dashboard/components/DashboardScreenSizeContext.js +1 -1
- package/esm/presentation/localization/bundles/zh-HK.localization-bundle.js +91 -91
- package/esm/presentation/widget/insightMenu/types.js +1 -1
- package/esm/presentation/widget/richTextMenu/types.d.ts.map +1 -1
- package/esm/presentation/widget/richTextMenu/types.js +2 -1
- package/esm/sdk-ui-dashboard.d.ts +1604 -94
- package/package.json +22 -24
- package/esm/presentation/automations/alerting/DefaultAlertingDialog/DefaultLoadingAlertingDialog.d.ts.map +0 -1
- package/esm/presentation/automations/alerting/DefaultAlertingDialog/FormField.d.ts +0 -8
- package/esm/presentation/automations/alerting/DefaultAlertingDialog/FormField.d.ts.map +0 -1
- package/esm/presentation/automations/alerting/DefaultAlertingDialog/components/AlertAttributeSelect.d.ts +0 -19
- package/esm/presentation/automations/alerting/DefaultAlertingDialog/components/AlertAttributeSelect.d.ts.map +0 -1
- package/esm/presentation/automations/alerting/DefaultAlertingDialog/components/AlertComparisonOperatorSelect.d.ts +0 -19
- package/esm/presentation/automations/alerting/DefaultAlertingDialog/components/AlertComparisonOperatorSelect.d.ts.map +0 -1
- package/esm/presentation/automations/alerting/DefaultAlertingDialog/components/AlertComparisonPeriodSelect.d.ts +0 -15
- package/esm/presentation/automations/alerting/DefaultAlertingDialog/components/AlertComparisonPeriodSelect.d.ts.map +0 -1
- package/esm/presentation/automations/alerting/DefaultAlertingDialog/components/AlertGranularitySelect.d.ts +0 -12
- package/esm/presentation/automations/alerting/DefaultAlertingDialog/components/AlertGranularitySelect.d.ts.map +0 -1
- package/esm/presentation/automations/alerting/DefaultAlertingDialog/components/AlertMeasureSelect.d.ts +0 -13
- package/esm/presentation/automations/alerting/DefaultAlertingDialog/components/AlertMeasureSelect.d.ts.map +0 -1
- package/esm/presentation/automations/alerting/DefaultAlertingDialog/components/AlertSensitivitySelect.d.ts +0 -11
- package/esm/presentation/automations/alerting/DefaultAlertingDialog/components/AlertSensitivitySelect.d.ts.map +0 -1
- package/esm/presentation/automations/alerting/DefaultAlertingDialog/components/AlertThresholdInput.d.ts +0 -12
- package/esm/presentation/automations/alerting/DefaultAlertingDialog/components/AlertThresholdInput.d.ts.map +0 -1
- package/esm/presentation/automations/alerting/DefaultAlertingDialog/components/AlertTriggerIntervalSelect.d.ts +0 -11
- package/esm/presentation/automations/alerting/DefaultAlertingDialog/components/AlertTriggerIntervalSelect.d.ts.map +0 -1
- package/esm/presentation/automations/alerting/DefaultAlertingDialog/components/AlertTriggerModeSelect.d.ts +0 -12
- package/esm/presentation/automations/alerting/DefaultAlertingDialog/components/AlertTriggerModeSelect.d.ts.map +0 -1
- package/esm/presentation/automations/alerting/DefaultAlertingDialog/hooks/useAlertThreshold.d.ts.map +0 -1
- package/esm/presentation/automations/alerting/DefaultAlertingDialog/hooks/useThresholdValue.d.ts.map +0 -1
- package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/DefaultLoadingScheduledEmailDialog.d.ts.map +0 -1
- package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/components/RecipientsSelect/useWorkspaceUsersSearch.d.ts +0 -13
- package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/components/RecipientsSelect/useWorkspaceUsersSearch.d.ts.map +0 -1
- /package/esm/presentation/automations/alerting/{DefaultAlertingDialog → blocks}/DefaultLoadingAlertingDialog.d.ts +0 -0
- /package/esm/presentation/automations/alerting/{DefaultAlertingDialog → blocks}/DefaultLoadingAlertingDialog.js +0 -0
- /package/esm/presentation/automations/scheduledEmail/{DefaultScheduledEmailDialog → blocks}/DefaultLoadingScheduledEmailDialog.d.ts +0 -0
- /package/esm/presentation/automations/scheduledEmail/{DefaultScheduledEmailDialog → blocks}/DefaultLoadingScheduledEmailDialog.js +0 -0
|
@@ -196,6 +196,14 @@ export function isGatedStringEntry(entry, isStringEnabled) {
|
|
|
196
196
|
export function isGatedStringValue(value, isStringEnabled) {
|
|
197
197
|
return typeof value === "string" && !isStringEnabled;
|
|
198
198
|
}
|
|
199
|
+
/**
|
|
200
|
+
* The tab's parameter entries without the gated-off STRING entries.
|
|
201
|
+
*
|
|
202
|
+
* @internal
|
|
203
|
+
*/
|
|
204
|
+
export function ungatedTabEntries(tab, isStringEnabled) {
|
|
205
|
+
return (tab.parameters?.parameters ?? parametersInitialState.parameters).filter((entry) => !isGatedStringEntry(entry, isStringEnabled));
|
|
206
|
+
}
|
|
199
207
|
/**
|
|
200
208
|
* The insight-authored parameter values that pass the string gate — the single home of
|
|
201
209
|
* insight-level gating for both the widget-execution hook path and the selector path.
|
|
@@ -371,58 +379,21 @@ export function computeParameterResetTargets(entries, workspaceParameters, isInE
|
|
|
371
379
|
return result;
|
|
372
380
|
}
|
|
373
381
|
/**
|
|
374
|
-
* Folds
|
|
375
|
-
* `runtimeOverride`.
|
|
376
|
-
* `allowedRefs === undefined` selects all refs (whole-dashboard scope); a defined set restricts
|
|
377
|
-
* entries to those refs (widget scope). Tabs that yield no rows are omitted from the result.
|
|
382
|
+
* Folds the parameter entries of the given tabs into the wire shape, dropping entries without a
|
|
383
|
+
* `runtimeOverride`. Tabs that yield no rows are omitted from the result.
|
|
378
384
|
*
|
|
379
385
|
* @internal
|
|
380
386
|
*/
|
|
381
|
-
export function collectExportOverrides(
|
|
387
|
+
export function collectExportOverrides(tabs, workspaceParameterByRef, isStringEnabled) {
|
|
382
388
|
const result = {};
|
|
383
|
-
for (const
|
|
384
|
-
const
|
|
385
|
-
const scoped = allowedRefs
|
|
386
|
-
? entries.filter((entry) => allowedRefs.has(objRefToString(entry.parameter.ref)))
|
|
387
|
-
: entries;
|
|
388
|
-
const rows = formatEntries(scoped, workspaceParameterByRef);
|
|
389
|
+
for (const tab of tabs) {
|
|
390
|
+
const rows = formatEntries(ungatedTabEntries(tab, isStringEnabled), workspaceParameterByRef);
|
|
389
391
|
if (rows.length > 0) {
|
|
390
392
|
result[tab.localIdentifier] = rows;
|
|
391
393
|
}
|
|
392
394
|
}
|
|
393
395
|
return Object.keys(result).length === 0 ? EMPTY_EXPORT_PARAMETERS_BY_TAB : result;
|
|
394
396
|
}
|
|
395
|
-
/**
|
|
396
|
-
* Builds per-tab ref selections for a widget-scope export: each widget's owning tab is restricted
|
|
397
|
-
* to refs referenced by the widget's insight metrics. Multiple widgets on the same tab union their
|
|
398
|
-
* refs.
|
|
399
|
-
*
|
|
400
|
-
* @internal
|
|
401
|
-
*/
|
|
402
|
-
export function buildWidgetScopeTabRefSelections(widgetContexts, widgetIds, insights, measureParameters) {
|
|
403
|
-
const byTab = new Map();
|
|
404
|
-
for (const widgetId of widgetIds) {
|
|
405
|
-
const context = widgetContexts.find((ctx) => ctx.widget.identifier === widgetId);
|
|
406
|
-
if (!context) {
|
|
407
|
-
continue;
|
|
408
|
-
}
|
|
409
|
-
const insight = insights.get(context.widget.insight);
|
|
410
|
-
if (!insight) {
|
|
411
|
-
continue;
|
|
412
|
-
}
|
|
413
|
-
const referencedRefs = collectReferencedParameterRefs(insight, measureParameters);
|
|
414
|
-
if (referencedRefs.length === 0) {
|
|
415
|
-
continue;
|
|
416
|
-
}
|
|
417
|
-
const tabId = context.tab.localIdentifier;
|
|
418
|
-
const existing = byTab.get(tabId) ?? { tab: context.tab, allowedRefs: new Set() };
|
|
419
|
-
for (const ref of referencedRefs) {
|
|
420
|
-
existing.allowedRefs.add(objRefToString(ref));
|
|
421
|
-
}
|
|
422
|
-
byTab.set(tabId, existing);
|
|
423
|
-
}
|
|
424
|
-
return [...byTab.values()];
|
|
425
|
-
}
|
|
426
397
|
function formatEntries(entries, workspaceParameterByRef) {
|
|
427
398
|
const rows = [];
|
|
428
399
|
for (const entry of entries) {
|
|
@@ -183,23 +183,21 @@ export declare const selectReferencedInsightParameterValuesForWidget: (ref: ObjR
|
|
|
183
183
|
*/
|
|
184
184
|
export declare const selectEffectiveDashboardParametersForWidget: (ref: ObjRef | undefined) => DashboardSelector<IDashboardParameter[]>;
|
|
185
185
|
/**
|
|
186
|
-
* Returns the per-tab parameter overrides to send on dashboard
|
|
187
|
-
*
|
|
186
|
+
* Returns the per-tab parameter overrides to send on dashboard export, keyed by tab
|
|
187
|
+
* `localIdentifier`. The shape matches the backend's `dashboardTabsParametersOverrides`
|
|
188
188
|
* field directly.
|
|
189
189
|
*
|
|
190
190
|
* @remarks
|
|
191
|
-
*
|
|
192
|
-
*
|
|
193
|
-
*
|
|
194
|
-
* - When `widgetIds` is non-empty,
|
|
195
|
-
*
|
|
196
|
-
*
|
|
197
|
-
* map entry per owning tab; entries for the same tab are unioned and deduplicated by ref.
|
|
191
|
+
* The request sends every `runtimeOverride` entry of each tab in scope; the query drops the
|
|
192
|
+
* parameters a widget's metrics do not use.
|
|
193
|
+
* - When `widgetIds` is empty/undefined (whole-dashboard export), every tab is in scope.
|
|
194
|
+
* - When `widgetIds` is non-empty, only the owning tabs of those widgets are in scope. Send only
|
|
195
|
+
* these tabs. A non-empty map tells the backend that the map is complete, and the backend then
|
|
196
|
+
* does not resolve pinned values for any tab.
|
|
198
197
|
*
|
|
199
198
|
* Returns `{}` (signalling "omit the field on the wire") when:
|
|
200
199
|
* - `enableParameters` is off,
|
|
201
200
|
* - the workspace catalog parameters are not loaded,
|
|
202
|
-
* - (widget scope only) the `measureParameters` dependency map is not loaded,
|
|
203
201
|
* - or no in-scope parameter has a `runtimeOverride`.
|
|
204
202
|
*
|
|
205
203
|
* @alpha
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parametersSelectors.d.ts","sourceRoot":"","sources":["../../../../../src/model/store/tabs/parameters/parametersSelectors.ts"],"names":[],"mappings":"AAKA,OAAO,EACH,KAAK,yBAAyB,EAC9B,KAAK,mBAAmB,EAExB,KAAK,sBAAsB,EAC3B,KAAK,wBAAwB,EAC7B,KAAK,aAAa,EAClB,KAAK,MAAM,EACX,KAAK,cAAc,EAGtB,MAAM,qBAAqB,CAAC;AAa7B,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"parametersSelectors.d.ts","sourceRoot":"","sources":["../../../../../src/model/store/tabs/parameters/parametersSelectors.ts"],"names":[],"mappings":"AAKA,OAAO,EACH,KAAK,yBAAyB,EAC9B,KAAK,mBAAmB,EAExB,KAAK,sBAAsB,EAC3B,KAAK,wBAAwB,EAC7B,KAAK,aAAa,EAClB,KAAK,MAAM,EACX,KAAK,cAAc,EAGtB,MAAM,qBAAqB,CAAC;AAa7B,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAQxD,OAAO,EAEH,KAAK,6BAA6B,EAClC,KAAK,uBAAuB,EAiB/B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACH,KAAK,wBAAwB,EAGhC,MAAM,sBAAsB,CAAC;AAyB9B;;;;GAIG;AACH,eAAO,MAAM,yBAAyB,EAAE,iBAAiB,CAAC,mBAAmB,EAAE,CAG9E,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,4BAA4B,EAAE,iBAAiB,CAAC,WAAW,CAAC,MAAM,CAAC,CAG/E,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,+BAA+B,EAAE,iBAAiB,CAAC,wBAAwB,EAAE,CAGzF,CAAC;AAYF;;;;;GAKG;AACH,eAAO,MAAM,0BAA0B,EAAE,iBAAiB,CAAC,mBAAmB,EAAE,GAAG,SAAS,CAGvF,CAAC;AAEN;;;;;GAKG;AACH,eAAO,MAAM,iCAAiC,EAAE,iBAAiB,CAAC,mBAAmB,EAAE,GAAG,SAAS,CAG9F,CAAC;AAEN;;;;;GAKG;AACH,eAAO,MAAM,8BAA8B,EAAE,iBAAiB,CAAC,sBAAsB,EAAE,CAatF,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,kCAAkC,EAAE,CAC7C,GAAG,EAAE,MAAM,KACV,iBAAiB,CAAC,wBAAwB,GAAG,SAAS,CAI1D,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,mCAAmC,EAAE,CAC9C,GAAG,EAAE,MAAM,KACV,iBAAiB,CAAC,cAAc,GAAG,SAAS,CAEhD,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,gCAAgC,EAAE,CAC3C,GAAG,EAAE,MAAM,KACV,iBAAiB,CAAC,cAAc,GAAG,SAAS,CAIhD,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,gCAAgC,EAAE,iBAAiB,CAAC,OAAO,CAGvE,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,8BAA8B,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,iBAAiB,CAAC,cAAc,GAAG,SAAS,CAarG,CAAC;AAEN;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,kCAAkC,EAAE,iBAAiB,CAAC,MAAM,CAAC,MAAM,EAAE,mBAAmB,EAAE,CAAC,CA6BnG,CAAC;AA6BN;;;;;GAKG;AACH,eAAO,MAAM,yBAAyB,EAAE,iBAAiB,CAAC,OAAO,CAchE,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,oCAAoC,EAAE,iBAAiB,CAChE;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,cAAc,GAAG,SAAS,CAAA;CAAE,EAAE,CAavD,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,0CAA0C,EAAE,iBAAiB,CAAC,OAAO,CAGjF,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,8BAA8B,EAAE,iBAAiB,CAAC,6BAA6B,EAAE,CAezF,CAAC;AAEN;;;;;;GAMG;AACH,eAAO,MAAM,kCAAkC,EAAE,CAC7C,GAAG,EAAE,MAAM,KACV,iBAAiB,CAAC,uBAAuB,GAAG,SAAS,CAczD,CAAC;AAEF,UAAU,uBAAuB;IAC7B,OAAO,EAAE,wBAAwB,EAAE,CAAC;IACpC,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,EAAE,CAAC,CAAC;IAEnD,uBAAuB,EAAE,GAAG,CAAC,MAAM,EAAE,wBAAwB,CAAC,CAAC;IAE/D,gBAAgB,EAAE,MAAM,CAAC;IACzB,eAAe,EAAE,OAAO,CAAC;CAC5B;AAED;;;;GAIG;AACH,eAAO,MAAM,4BAA4B,EAAE,CACvC,GAAG,EAAE,MAAM,GAAG,SAAS,KACtB,iBAAiB,CAAC,uBAAuB,GAAG,SAAS,CAiCzD,CAAC;AAqBF;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,uCAAuC,EAAE,CAClD,GAAG,EAAE,MAAM,GAAG,SAAS,KACtB,iBAAiB,CAAC,sBAAsB,EAAE,CAa9C,CAAC;AAEF;;;;;;;;;;GAUG;AACH,eAAO,MAAM,+CAA+C,EAAE,CAC1D,GAAG,EAAE,MAAM,GAAG,SAAS,KACtB,iBAAiB,CAAC,sBAAsB,EAAE,CAa9C,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,2CAA2C,EAAE,CACtD,GAAG,EAAE,MAAM,GAAG,SAAS,KACtB,iBAAiB,CAAC,mBAAmB,EAAE,CAe3C,CAAC;AAEF;;;;;;;;;;;;;;;;;;;GAmBG;AACH,eAAO,MAAM,+BAA+B,EAAE,CAC1C,SAAS,EAAE,MAAM,EAAE,GAAG,SAAS,KAC9B,iBAAiB,CAAC,MAAM,CAAC,MAAM,EAAE,yBAAyB,EAAE,CAAC,CAuBjE,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,+BAA+B,EAAE,iBAAiB,CAAC,yBAAyB,EAAE,CAI1F,CAAC"}
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
// (C) 2026 GoodData Corporation
|
|
2
2
|
import { createSelector } from "@reduxjs/toolkit";
|
|
3
|
-
import { isEqual } from "lodash-es";
|
|
3
|
+
import { isEqual, uniq } from "lodash-es";
|
|
4
4
|
import { areObjRefsEqual, objRefToString, } from "@gooddata/sdk-model";
|
|
5
5
|
import { createMemoizedSelector } from "../../_infra/selectors.js";
|
|
6
6
|
import { selectCatalogMeasureParameters, selectCatalogMeasureParametersStatus, selectCatalogParameterByRef, selectCatalogParameters, selectCatalogParametersIsLoaded, } from "../../catalog/catalogSelectors.js";
|
|
7
7
|
import { selectEnableParameters, selectEnableStringParameters } from "../../config/configSelectors.js";
|
|
8
8
|
import { selectInsightsMap } from "../../insights/insightsSelectors.js";
|
|
9
9
|
import { selectIsInEditMode } from "../../renderMode/renderModeSelectors.js";
|
|
10
|
-
import { selectAllTabsInsightWidgetContexts } from "../layout/layoutSelectors.js";
|
|
10
|
+
import { selectAllTabsInsightWidgetContexts, selectAllTabsWidgetContexts, } from "../layout/layoutSelectors.js";
|
|
11
11
|
import { selectActiveOrDefaultTabLocalIdentifier, selectActiveTab, selectTabs } from "../tabsSelectors.js";
|
|
12
12
|
import { DEFAULT_TAB_ID } from "../tabsState.js";
|
|
13
|
-
import { EMPTY_EXPORT_PARAMETERS_BY_TAB, applyDisplayOverride, applyRuntimeOverride, buildPersistedByTabAndRef,
|
|
13
|
+
import { EMPTY_EXPORT_PARAMETERS_BY_TAB, applyDisplayOverride, applyRuntimeOverride, buildPersistedByTabAndRef, buildWorkspaceParametersByRef, classifyParameterReconciliation, collectExportOverrides, collectParameterReconciliations, collectReferencedParameterRefs, computeParameterResetTargets, computeParameterResetValue, displayOverride, isGatedStringEntry, resolveEffectiveParameterValuesForRefs, smartPersistResolvedEntry, ungatedInsightParameterValues, ungatedTabEntries, } from "./parametersHelpers.js";
|
|
14
14
|
import { parametersInitialState, pickTabParametersSource, } from "./parametersState.js";
|
|
15
15
|
const EMPTY_PARAMETERS = [];
|
|
16
16
|
const EMPTY_EXPORT_PARAMETERS = [];
|
|
@@ -222,9 +222,7 @@ export const selectParameterReconciliations = createSelector(selectTabs, selectC
|
|
|
222
222
|
if (!isEnabled || !isCatalogLoaded || !tabs) {
|
|
223
223
|
return EMPTY_RECONCILIATIONS;
|
|
224
224
|
}
|
|
225
|
-
const entries = tabs
|
|
226
|
-
.flatMap((tab) => tab.parameters?.parameters ?? [])
|
|
227
|
-
.filter((entry) => !isGatedStringEntry(entry, isStringEnabled));
|
|
225
|
+
const entries = tabs.flatMap((tab) => ungatedTabEntries(tab, isStringEnabled));
|
|
228
226
|
const result = collectParameterReconciliations(entries, workspaceParameters);
|
|
229
227
|
return result.length === 0 ? EMPTY_RECONCILIATIONS : result;
|
|
230
228
|
});
|
|
@@ -254,9 +252,8 @@ export const selectWidgetParameterContext = createMemoizedSelector((ref) => crea
|
|
|
254
252
|
if (!context) {
|
|
255
253
|
return undefined;
|
|
256
254
|
}
|
|
257
|
-
const entries = (context.tab.parameters?.parameters ?? parametersInitialState.parameters).filter((entry) => !isGatedStringEntry(entry, isStringEnabled));
|
|
258
255
|
return {
|
|
259
|
-
entries,
|
|
256
|
+
entries: ungatedTabEntries(context.tab, isStringEnabled),
|
|
260
257
|
measureParameters,
|
|
261
258
|
workspaceParameterByRef,
|
|
262
259
|
widgetInsightRef: context.widget.insight,
|
|
@@ -337,46 +334,39 @@ export const selectEffectiveDashboardParametersForWidget = createMemoizedSelecto
|
|
|
337
334
|
return (owningTabEntries ?? parametersInitialState.parameters).map(applyRuntimeOverride);
|
|
338
335
|
}));
|
|
339
336
|
/**
|
|
340
|
-
* Returns the per-tab parameter overrides to send on dashboard
|
|
341
|
-
*
|
|
337
|
+
* Returns the per-tab parameter overrides to send on dashboard export, keyed by tab
|
|
338
|
+
* `localIdentifier`. The shape matches the backend's `dashboardTabsParametersOverrides`
|
|
342
339
|
* field directly.
|
|
343
340
|
*
|
|
344
341
|
* @remarks
|
|
345
|
-
*
|
|
346
|
-
*
|
|
347
|
-
*
|
|
348
|
-
* - When `widgetIds` is non-empty,
|
|
349
|
-
*
|
|
350
|
-
*
|
|
351
|
-
* map entry per owning tab; entries for the same tab are unioned and deduplicated by ref.
|
|
342
|
+
* The request sends every `runtimeOverride` entry of each tab in scope; the query drops the
|
|
343
|
+
* parameters a widget's metrics do not use.
|
|
344
|
+
* - When `widgetIds` is empty/undefined (whole-dashboard export), every tab is in scope.
|
|
345
|
+
* - When `widgetIds` is non-empty, only the owning tabs of those widgets are in scope. Send only
|
|
346
|
+
* these tabs. A non-empty map tells the backend that the map is complete, and the backend then
|
|
347
|
+
* does not resolve pinned values for any tab.
|
|
352
348
|
*
|
|
353
349
|
* Returns `{}` (signalling "omit the field on the wire") when:
|
|
354
350
|
* - `enableParameters` is off,
|
|
355
351
|
* - the workspace catalog parameters are not loaded,
|
|
356
|
-
* - (widget scope only) the `measureParameters` dependency map is not loaded,
|
|
357
352
|
* - or no in-scope parameter has a `runtimeOverride`.
|
|
358
353
|
*
|
|
359
354
|
* @alpha
|
|
360
355
|
*/
|
|
361
|
-
export const selectExportEffectiveParameters = (widgetIds) =>
|
|
362
|
-
|
|
363
|
-
: selectExportEffectiveParametersDashboardScope;
|
|
364
|
-
const selectExportEffectiveParametersDashboardScope = createSelector(selectTabs, selectEnableParameters, selectEnableStringParameters, selectWorkspaceParametersByRef, selectCatalogParametersIsLoaded, (tabs, isEnabled, isStringEnabled, workspaceParameterByRef, isCatalogLoaded) => {
|
|
365
|
-
if (!isEnabled || !isCatalogLoaded || !tabs?.length) {
|
|
356
|
+
export const selectExportEffectiveParameters = createMemoizedSelector((widgetIds) => createSelector(selectTabs, selectAllTabsWidgetContexts, selectEnableParameters, selectEnableStringParameters, selectWorkspaceParametersByRef, selectCatalogParametersIsLoaded, (tabs, widgetContexts, isEnabled, isStringEnabled, workspaceParameterByRef, isCatalogLoaded) => {
|
|
357
|
+
if (!isEnabled || !isCatalogLoaded) {
|
|
366
358
|
return EMPTY_EXPORT_PARAMETERS_BY_TAB;
|
|
367
359
|
}
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
const tabRefSelections = buildWidgetScopeTabRefSelections(widgetContexts, widgetIds, insights, measureParameters);
|
|
375
|
-
return collectExportOverrides(tabRefSelections, workspaceParameterByRef, isStringEnabled);
|
|
360
|
+
const scopedTabs = widgetIds?.length
|
|
361
|
+
? uniq(widgetContexts
|
|
362
|
+
.filter((ctx) => widgetIds.includes(ctx.widget.identifier))
|
|
363
|
+
.map((ctx) => ctx.tab))
|
|
364
|
+
: (tabs ?? []);
|
|
365
|
+
return collectExportOverrides(scopedTabs, workspaceParameterByRef, isStringEnabled);
|
|
376
366
|
}));
|
|
377
367
|
/**
|
|
378
368
|
* Active-tab slice of {@link selectExportEffectiveParameters}.
|
|
379
369
|
*
|
|
380
370
|
* @internal
|
|
381
371
|
*/
|
|
382
|
-
export const selectActiveTabExportParameters = createSelector(
|
|
372
|
+
export const selectActiveTabExportParameters = createSelector(selectExportEffectiveParameters(undefined), selectActiveOrDefaultTabLocalIdentifier, (parametersByTab, activeTabId) => parametersByTab[activeTabId] ?? EMPTY_EXPORT_PARAMETERS);
|
package/esm/presentation/automations/alerting/DefaultAlertingDialog/DefaultAlertingDialog.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
+
import { type ReactElement } from "react";
|
|
1
2
|
import { type IDefaultAlertingDialogProps } from "../types.js";
|
|
2
|
-
export declare function AlertingDialogRenderer({ onCancel, onDeleteSuccess, onDeleteError, onError, onSuccess, onSaveError, onSaveSuccess, slots, topContent, bottomContent }: IDefaultAlertingDialogProps): import("react/jsx-runtime").JSX.Element;
|
|
3
3
|
/**
|
|
4
4
|
* Default implementation of the alerting create/edit dialog.
|
|
5
5
|
*
|
|
@@ -17,18 +17,25 @@ export declare function AlertingDialogRenderer({ onCancel, onDeleteSuccess, onDe
|
|
|
17
17
|
* that is what lets a wholesale replacement receive the same contexts. Rendering this component
|
|
18
18
|
* outside those providers throws at runtime.
|
|
19
19
|
*
|
|
20
|
-
* The dialog is
|
|
21
|
-
*
|
|
22
|
-
* {@link
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
*
|
|
20
|
+
* The dialog is {@link AlertingDialogShell} — the chrome: overlay, frame, header row, action bar, the
|
|
21
|
+
* dialog's messages, the stale-filters and delete confirmation steps, the loading skeleton — around the
|
|
22
|
+
* exported region renders ({@link DefaultAlertingDialogFilters}, {@link DefaultAlertingDialogDestination},
|
|
23
|
+
* {@link DefaultAlertingDialogRecipients}, fed by {@link useAlertingDialogFiltersProps} and siblings; the
|
|
24
|
+
* header and action bar are the shell's) and the connected field blocks — {@link AlertingDialogMeasure},
|
|
25
|
+
* {@link AlertingDialogAttribute}, {@link AlertingDialogComparisonOperator}, {@link AlertingDialogThreshold},
|
|
26
|
+
* {@link AlertingDialogComparisonPeriod}, {@link AlertingDialogSensitivity}, {@link AlertingDialogGranularity},
|
|
27
|
+
* {@link AlertingDialogTriggerMode}, {@link AlertingDialogTriggerInterval} — grouped under the "When" and
|
|
28
|
+
* "Do" headings by {@link AlertingDialogFormFieldGroup}; each field is a labelled
|
|
29
|
+
* {@link AutomationDialogFormField} row and the conditional ones gate themselves on the draft. A custom
|
|
30
|
+
* `AlertingDialogComponent` that keeps this chrome but owns the arrangement renders
|
|
31
|
+
* {@link AlertingDialogShell} around the blocks it wants (see its example); one that owns the chrome too
|
|
32
|
+
* places the blocks in its own markup and reads or writes the same draft through {@link useAlertDraft} and
|
|
33
|
+
* {@link useAlertActions}.
|
|
27
34
|
*
|
|
28
35
|
* Slots render only in the fully rendered dialog: not while the dialog context reports loading,
|
|
29
36
|
* and not while the stale-filters confirmation step is shown.
|
|
30
37
|
*
|
|
31
38
|
* @alpha
|
|
32
39
|
*/
|
|
33
|
-
export declare function DefaultAlertingDialog(props: IDefaultAlertingDialogProps):
|
|
40
|
+
export declare function DefaultAlertingDialog(props: IDefaultAlertingDialogProps): ReactElement;
|
|
34
41
|
//# sourceMappingURL=DefaultAlertingDialog.d.ts.map
|
package/esm/presentation/automations/alerting/DefaultAlertingDialog/DefaultAlertingDialog.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DefaultAlertingDialog.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/automations/alerting/DefaultAlertingDialog/DefaultAlertingDialog.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"DefaultAlertingDialog.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/automations/alerting/DefaultAlertingDialog/DefaultAlertingDialog.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,OAAO,CAAC;AA2B1C,OAAO,EAAE,KAAK,2BAA2B,EAAE,MAAM,aAAa,CAAC;AAM/D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,2BAA2B,GAAG,YAAY,CActF"}
|
package/esm/presentation/automations/alerting/DefaultAlertingDialog/DefaultAlertingDialog.js
CHANGED
|
@@ -1,152 +1,26 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
import {
|
|
4
|
-
import { FormattedMessage, useIntl } from "react-intl";
|
|
5
|
-
import { ValidationContextStore, createInvalidDatapoint, createInvalidNode, useValidationContextValue, } from "@gooddata/sdk-ui";
|
|
6
|
-
import { ConfirmDialogBase, ContentDivider, Message, Overlay, OverlayController, OverlayControllerProvider, ScrollablePanel, UiIconButton, UiTooltip, useId, } from "@gooddata/sdk-ui-kit";
|
|
7
|
-
import { DASHBOARD_DIALOG_OVERS_Z_INDEX } from "../../../constants/zIndex.js";
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { FormattedMessage } from "react-intl";
|
|
3
|
+
import { ContentDivider } from "@gooddata/sdk-ui-kit";
|
|
8
4
|
import { IntlWrapper } from "../../../localization/IntlWrapper.js";
|
|
9
5
|
import { useAlertingDialogContext } from "../../contexts/AlertingDialogContext.js";
|
|
10
6
|
import { useAutomationsContext } from "../../contexts/AutomationsContext.js";
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
15
|
-
import {
|
|
16
|
-
import {
|
|
17
|
-
import {
|
|
18
|
-
import {
|
|
19
|
-
import {
|
|
20
|
-
import {
|
|
7
|
+
import { AlertingDialogAttribute } from "../blocks/AlertingDialogAttribute.js";
|
|
8
|
+
import { AlertingDialogComparisonOperator } from "../blocks/AlertingDialogComparisonOperator.js";
|
|
9
|
+
import { AlertingDialogComparisonPeriod } from "../blocks/AlertingDialogComparisonPeriod.js";
|
|
10
|
+
import { AlertingDialogFormFieldGroup } from "../blocks/AlertingDialogFormFieldGroup.js";
|
|
11
|
+
import { AlertingDialogGranularity } from "../blocks/AlertingDialogGranularity.js";
|
|
12
|
+
import { AlertingDialogMeasure } from "../blocks/AlertingDialogMeasure.js";
|
|
13
|
+
import { AlertingDialogSensitivity } from "../blocks/AlertingDialogSensitivity.js";
|
|
14
|
+
import { AlertingDialogShell } from "../blocks/AlertingDialogShell.js";
|
|
15
|
+
import { AlertingDialogThreshold } from "../blocks/AlertingDialogThreshold.js";
|
|
16
|
+
import { AlertingDialogTriggerInterval } from "../blocks/AlertingDialogTriggerInterval.js";
|
|
17
|
+
import { AlertingDialogTriggerMode } from "../blocks/AlertingDialogTriggerMode.js";
|
|
18
|
+
import { DefaultLoadingAlertingDialog } from "../blocks/DefaultLoadingAlertingDialog.js";
|
|
19
|
+
import { useAlertingDialogDestinationProps, useAlertingDialogFiltersProps, useAlertingDialogRecipientsProps, } from "../state/useAlertingDialogRegionProps.js";
|
|
21
20
|
import { useAlertSubmit } from "../state/useAlertSubmit.js";
|
|
22
|
-
import { getValueSuffix } from "../utils/getters.js";
|
|
23
|
-
import { isAnomalyDetection, isChangeOrDifferenceOperator } from "../utils/guards.js";
|
|
24
|
-
import { AlertAttributeSelect } from "./components/AlertAttributeSelect.js";
|
|
25
|
-
import { AlertComparisonOperatorSelect } from "./components/AlertComparisonOperatorSelect.js";
|
|
26
|
-
//
|
|
27
|
-
//
|
|
28
|
-
import { AlertComparisonPeriodSelect } from "./components/AlertComparisonPeriodSelect.js";
|
|
29
|
-
import { AlertGranularitySelect } from "./components/AlertGranularitySelect.js";
|
|
30
|
-
import { AlertMeasureSelect } from "./components/AlertMeasureSelect.js";
|
|
31
|
-
import { AlertSensitivitySelect } from "./components/AlertSensitivitySelect.js";
|
|
32
|
-
import { AlertThresholdInput } from "./components/AlertThresholdInput.js";
|
|
33
|
-
import { AlertTriggerIntervalSelect } from "./components/AlertTriggerIntervalSelect.js";
|
|
34
|
-
import { AlertTriggerModeSelect } from "./components/AlertTriggerModeSelect.js";
|
|
35
|
-
import { ALERTING_DIALOG_ID } from "./constants.js";
|
|
36
21
|
import { DefaultAlertingDialogDestination } from "./DefaultAlertingDialogDestination.js";
|
|
37
22
|
import { DefaultAlertingDialogFilters } from "./DefaultAlertingDialogFilters.js";
|
|
38
|
-
import { DefaultAlertingDialogHeader } from "./DefaultAlertingDialogHeader.js";
|
|
39
23
|
import { DefaultAlertingDialogRecipients } from "./DefaultAlertingDialogRecipients.js";
|
|
40
|
-
import { DefaultLoadingAlertingDialog } from "./DefaultLoadingAlertingDialog.js";
|
|
41
|
-
import { FormField } from "./FormField.js";
|
|
42
|
-
import { useAlertThreshold } from "./hooks/useAlertThreshold.js";
|
|
43
|
-
const OVERLAY_POSITION_TYPE = "sameAsTarget";
|
|
44
|
-
const CLOSE_ON_PARENT_SCROLL = true;
|
|
45
|
-
const overlayController = OverlayController.getInstance(DASHBOARD_DIALOG_OVERS_Z_INDEX);
|
|
46
|
-
export function AlertingDialogRenderer({ onCancel, onDeleteSuccess, onDeleteError, onError, onSuccess, onSaveError, onSaveSuccess, slots, topContent, bottomContent, }) {
|
|
47
|
-
const HeaderSlot = slots?.Header;
|
|
48
|
-
const FiltersSlot = slots?.Filters;
|
|
49
|
-
const DestinationSlot = slots?.Destination;
|
|
50
|
-
const RecipientsSlot = slots?.Recipients;
|
|
51
|
-
const ActionBarSlot = slots?.ActionBar;
|
|
52
|
-
const intl = useIntl();
|
|
53
|
-
const dialogTitleRef = useRef(null);
|
|
54
|
-
const { features: { enableAlertOncePerInterval, enableAnomalyDetectionAlert, canUseAiAssistant: enableAiAssistant, }, catalogAttributes, catalogDateDatasets, allowHourlyRecurrence, } = useAutomationsContext();
|
|
55
|
-
const { alertToEdit, notificationChannels } = useAlertingDialogContext();
|
|
56
|
-
const [alertToDelete, setAlertToDelete] = useState(null);
|
|
57
|
-
const handleAlertDeleteSuccess = (alert) => {
|
|
58
|
-
onDeleteSuccess?.(alert);
|
|
59
|
-
setAlertToDelete(null);
|
|
60
|
-
};
|
|
61
|
-
const { editedAutomation, warningMessage } = useAlertDraft();
|
|
62
|
-
const { onMeasureChange, onAttributeChange, onComparisonOperatorChange, onRelativeOperatorChange, onAnomalyDetectionChange, onComparisonTypeChange, onTriggerModeChange, onTriggerIntervalChange, onSensitivityChange, onGranularityChange, setEditedAutomation, } = useAlertActions();
|
|
63
|
-
const { supportedMeasures, supportedAttributes, isResultLoading, getAttributeValues, getMetricValue } = useAlertData();
|
|
64
|
-
const { onApplyCurrentFilters, automationIsValid, filtersAreStale, dropStaleParameters } = useAlertFilters();
|
|
65
|
-
const { selectedMeasure, selectedComparisonOperator, selectedRelativeOperator, selectedAiOperator, selectedComparator, selectedSensitivity, selectedGranularity, selectedAttribute, selectedValue, } = useAlertSelectedValues();
|
|
66
|
-
const { value, onChange, onBlur, thresholdErrorMessage } = useAlertThreshold({
|
|
67
|
-
setEditedAutomation,
|
|
68
|
-
editedAutomation,
|
|
69
|
-
getMetricValue,
|
|
70
|
-
isNewAlert: !alertToEdit,
|
|
71
|
-
selectedRelativeOperator,
|
|
72
|
-
selectedMeasure,
|
|
73
|
-
selectedAttribute,
|
|
74
|
-
selectedValue,
|
|
75
|
-
});
|
|
76
|
-
const { validationErrorMessage, canChangeMeasure, isInvalidConnectionToInsight } = useAlertDialogValidity();
|
|
77
|
-
const [isApplyCurrentFiltersDialogOpen, setIsApplyCurrentFiltersDialogOpen] = useState(!automationIsValid);
|
|
78
|
-
const { isSaving, submit } = useAlertSubmit({ onSuccess, onError, onSaveSuccess, onSaveError });
|
|
79
|
-
const headerDefaultProps = useAlertingDialogHeaderProps({ onCancel, ref: dialogTitleRef });
|
|
80
|
-
const filtersDefaultProps = useAlertingDialogFiltersProps();
|
|
81
|
-
const destinationDefaultProps = useAlertingDialogDestinationProps();
|
|
82
|
-
const recipientsDefaultProps = useAlertingDialogRecipientsProps();
|
|
83
|
-
const actionBarDefaultProps = useAlertingDialogActionBarProps({
|
|
84
|
-
onCancel,
|
|
85
|
-
onSubmit: () => void submit(),
|
|
86
|
-
isSaving,
|
|
87
|
-
onDelete: () => setAlertToDelete(alertToEdit),
|
|
88
|
-
});
|
|
89
|
-
const validationContextValue = useValidationContextValue(createInvalidNode({ id: "AlertingDialog" }));
|
|
90
|
-
const { setInvalidDatapoints, getInvalidDatapoints } = validationContextValue;
|
|
91
|
-
const invalidDatapoints = getInvalidDatapoints();
|
|
92
|
-
useEffect(() => {
|
|
93
|
-
setInvalidDatapoints(() => [
|
|
94
|
-
!!validationErrorMessage &&
|
|
95
|
-
createInvalidDatapoint({
|
|
96
|
-
message: validationErrorMessage,
|
|
97
|
-
severity: isInvalidConnectionToInsight ? "error" : "warning",
|
|
98
|
-
}),
|
|
99
|
-
]);
|
|
100
|
-
}, [validationErrorMessage, isInvalidConnectionToInsight, setInvalidDatapoints]);
|
|
101
|
-
const titleElementId = useId();
|
|
102
|
-
if (isApplyCurrentFiltersDialogOpen) {
|
|
103
|
-
return (_jsx(ApplyCurrentFiltersConfirmDialog, { automationType: "alert", onCancel: () => onCancel?.(), onEdit: () => {
|
|
104
|
-
// Repair only what is actually stale: replace filters when they are invalid, and
|
|
105
|
-
// drop catalog-absent parameters. A valid saved filter set survives a param-only fix.
|
|
106
|
-
if (filtersAreStale) {
|
|
107
|
-
onApplyCurrentFilters();
|
|
108
|
-
}
|
|
109
|
-
dropStaleParameters();
|
|
110
|
-
setIsApplyCurrentFiltersDialogOpen(false);
|
|
111
|
-
} }));
|
|
112
|
-
}
|
|
113
|
-
return (_jsxs(_Fragment, { children: [
|
|
114
|
-
_jsx(Overlay, { className: "gd-notifications-channels-dialog-overlay", isModal: true, positionType: "fixed", ensureVisibility: true, children: _jsx(OverlayControllerProvider, { overlayController: overlayController, children: _jsx(ValidationContextStore, { value: validationContextValue, children: _jsxs(ConfirmDialogBase, { className: "gd-notifications-channels-dialog s-gd-notifications-channels-dialog gd-dialog--wide gd-notifications-channels-dialog--wide", isPositive: true, cancelButtonText: actionBarDefaultProps.cancelButtonText, submitButtonText: actionBarDefaultProps.submitButtonText, accessibilityConfig: {
|
|
115
|
-
closeButton: {
|
|
116
|
-
ariaLabel: intl.formatMessage({ id: "dialogs.alert.closeLabel" }),
|
|
117
|
-
},
|
|
118
|
-
titleElementId,
|
|
119
|
-
dialogId: ALERTING_DIALOG_ID,
|
|
120
|
-
}, showProgressIndicator: actionBarDefaultProps.isSaving, returnFocusAfterClose: false, footerLeftRenderer: ActionBarSlot
|
|
121
|
-
? undefined
|
|
122
|
-
: () => (_jsx(AutomationDialogFooterLeft, { helpLinkText: actionBarDefaultProps.helpLinkText, helpLinkHref: actionBarDefaultProps.helpLinkHref, deleteButtonText: actionBarDefaultProps.deleteButtonText, onDelete: actionBarDefaultProps.onDelete, isDeleteDisabled: actionBarDefaultProps.isSaving })), footerRenderer: ActionBarSlot
|
|
123
|
-
? () => (_jsx(ActionBarSlot, { Default: DefaultAutomationDialogActionBar, defaultProps: actionBarDefaultProps }))
|
|
124
|
-
: undefined, isSubmitDisabled: actionBarDefaultProps.isSubmitDisabled, submitButtonTooltipText: actionBarDefaultProps.submitButtonTooltipText, initialFocus: dialogTitleRef, submitOnEnterKey: false, onCancel: onCancel, onSubmit: actionBarDefaultProps.onSubmit, headline: undefined, headerLeftButtonRenderer: () => {
|
|
125
|
-
return HeaderSlot ? (_jsx(HeaderSlot, { Default: DefaultAlertingDialogHeader, defaultProps: headerDefaultProps })) : (_jsx(DefaultAlertingDialogHeader, { ...headerDefaultProps }));
|
|
126
|
-
}, children: [
|
|
127
|
-
_jsx("h2", { className: "sr-only", id: titleElementId, children: intl.formatMessage({ id: "dialogs.alert.accessibility.label.title" }) }), _jsxs(ScrollablePanel, { className: "gd-notifications-channel-dialog-content-wrapper gd-notification-channel-dialog-with-automation-filters", children: [topContent, _jsx("div", { className: "gd-divider-with-margin" }), _jsxs(_Fragment, { children: [FiltersSlot ? (_jsx(FiltersSlot, { Default: DefaultAlertingDialogFilters, defaultProps: filtersDefaultProps })) : (_jsx(DefaultAlertingDialogFilters, { ...filtersDefaultProps })), _jsx(ContentDivider, { className: "gd-divider-with-margin" })
|
|
128
|
-
] }), _jsxs(FormFieldGroup, { label: _jsx(FormattedMessage, { id: "insightAlert.config.when" }), children: [
|
|
129
|
-
_jsx(FormField, { label: intl.formatMessage({ id: "insightAlert.config.metric" }), htmlFor: "alert.measure", children: _jsx(AlertMeasureSelect, { selectedMeasure: selectedMeasure, onMeasureChange: onMeasureChange, measures: supportedMeasures, disabled: !canChangeMeasure, overlayPositionType: OVERLAY_POSITION_TYPE, id: "alert.measure", closeOnParentScroll: CLOSE_ON_PARENT_SCROLL }) }), supportedAttributes.filter((a) => a.type === "attribute").length > 0 && (_jsx(FormField, { label: _jsx(FormattedMessage, { id: "insightAlert.config.for" }), htmlFor: "alert.attribute", children: _jsx(AlertAttributeSelect, { id: "alert.attribute", disabled: !canChangeMeasure, selectedAttribute: selectedAttribute, selectedValue: selectedValue, onAttributeChange: onAttributeChange, attributes: supportedAttributes, catalogAttributes: catalogAttributes, catalogDateDatasets: catalogDateDatasets, getAttributeValues: getAttributeValues, isResultLoading: isResultLoading, showLabel: false, closeOnParentScroll: CLOSE_ON_PARENT_SCROLL }) })), _jsx(FormField, { label: _jsx(FormattedMessage, { id: "insightAlert.config.condition" }), htmlFor: "alert.condition", children: _jsx(AlertComparisonOperatorSelect, { id: "alert.condition", measure: selectedMeasure, enableAnomalyDetectionAlert: enableAnomalyDetectionAlert ? enableAiAssistant : false, selectedComparisonOperator: selectedComparisonOperator, selectedRelativeOperator: selectedRelativeOperator, selectedAiOperator: selectedAiOperator, onAnomalyDetectionChange: onAnomalyDetectionChange, onComparisonOperatorChange: onComparisonOperatorChange, onRelativeOperatorChange: onRelativeOperatorChange, overlayPositionType: OVERLAY_POSITION_TYPE, closeOnParentScroll: CLOSE_ON_PARENT_SCROLL }) }), !isAnomalyDetection(editedAutomation?.alert) && (_jsx(FormField, { label: _jsx(FormattedMessage, { id: "insightAlert.config.threshold" }), htmlFor: "alert.value", children: _jsx(AlertThresholdInput, { id: "alert.value", value: value, onChange: onChange, onBlur: onBlur, suffix: getValueSuffix(editedAutomation?.alert), errorMessage: thresholdErrorMessage }) })), isChangeOrDifferenceOperator(editedAutomation?.alert) && (_jsx(FormField, { label: _jsx(FormattedMessage, { id: "insightAlert.config.comparison" }), htmlFor: "alert.comparison", children: _jsx(AlertComparisonPeriodSelect, { id: "alert.comparison", measure: selectedMeasure, alert: editedAutomation, selectedComparison: selectedComparator?.comparator, selectedGranularity: selectedComparator?.granularity, onComparisonChange: (comparisonType, granularity) => {
|
|
130
|
-
onComparisonTypeChange(selectedMeasure, selectedRelativeOperator, comparisonType, granularity);
|
|
131
|
-
}, overlayPositionType: OVERLAY_POSITION_TYPE, closeOnParentScroll: CLOSE_ON_PARENT_SCROLL }) })), isAnomalyDetection(editedAutomation?.alert) && (_jsxs(_Fragment, { children: [
|
|
132
|
-
_jsx(FormField, { label: _jsx(FormattedMessage, { id: "insightAlert.config.sensitivity" }), htmlFor: "alert.sensitivity", children: _jsx(AlertSensitivitySelect, { id: "alert.sensitivity", selectedSensitivity: selectedSensitivity, onSensitivityChange: onSensitivityChange, overlayPositionType: OVERLAY_POSITION_TYPE, closeOnParentScroll: CLOSE_ON_PARENT_SCROLL }) }), _jsx(FormField, { label: _jsxs("div", { className: "gd-dashboard-alerting-dialog-form-field__content-container-tooltip", children: [
|
|
133
|
-
_jsx(FormattedMessage, { id: "insightAlert.config.granularity" }), _jsx(UiTooltip, { anchor: _jsx(UiIconButton, { icon: "question", variant: "tertiary", size: "xsmall", accessibilityConfig: {
|
|
134
|
-
ariaLabel: intl.formatMessage({
|
|
135
|
-
id: "insightAlert.config.granularity",
|
|
136
|
-
}),
|
|
137
|
-
} }), content: _jsx(FormattedMessage, { id: "insightAlert.config.granularity.tooltip" }), arrowPlacement: "left", optimalPlacement: true, offset: 10, width: 280, triggerBy: ["hover", "click"] })
|
|
138
|
-
] }), htmlFor: "alert.granularity", children: _jsx(AlertGranularitySelect, { id: "alert.granularity", allowHourlyRecurrence: allowHourlyRecurrence, selectedGranularity: selectedGranularity, onGranularityChange: (granularity) => {
|
|
139
|
-
onGranularityChange(selectedMeasure, granularity);
|
|
140
|
-
}, overlayPositionType: OVERLAY_POSITION_TYPE, closeOnParentScroll: CLOSE_ON_PARENT_SCROLL }) })
|
|
141
|
-
] }))] }), _jsx(ContentDivider, { className: "gd-divider-with-margin" }), _jsxs(FormFieldGroup, { label: _jsx(FormattedMessage, { id: "insightAlert.config.do" }), children: [notificationChannels.length > 1 ? (DestinationSlot ? (_jsx(DestinationSlot, { Default: DefaultAlertingDialogDestination, defaultProps: destinationDefaultProps })) : (_jsx(DefaultAlertingDialogDestination, { ...destinationDefaultProps }))) : null, _jsx(FormField, { label: _jsx(FormattedMessage, { id: "insightAlert.config.trigger" }), htmlFor: "alert.trigger", children: _jsx(AlertTriggerModeSelect, { id: "alert.trigger", selectedTriggerMode: editedAutomation?.alert?.trigger.mode ?? "ALWAYS", onTriggerModeChange: onTriggerModeChange, overlayPositionType: OVERLAY_POSITION_TYPE, closeOnParentScroll: CLOSE_ON_PARENT_SCROLL, enableAlertOncePerInterval: enableAlertOncePerInterval }) }), editedAutomation?.alert?.trigger.mode === "ONCE_PER_INTERVAL" ? (_jsx(FormField, { label: _jsxs("div", { className: "gd-dashboard-alerting-dialog-form-field__content-container-tooltip", children: [
|
|
142
|
-
_jsx(FormattedMessage, { id: "insightAlert.config.interval" }), _jsx(UiTooltip, { anchor: _jsx(UiIconButton, { icon: "question", variant: "tertiary", size: "xsmall", accessibilityConfig: {
|
|
143
|
-
ariaLabel: intl.formatMessage({
|
|
144
|
-
id: "insightAlert.config.interval",
|
|
145
|
-
}),
|
|
146
|
-
} }), content: _jsx(FormattedMessage, { id: "insightAlert.config.interval.tooltip" }), arrowPlacement: "left", optimalPlacement: true, offset: 10, width: 280, triggerBy: ["hover", "click"] })
|
|
147
|
-
] }), htmlFor: "alert.interval", children: _jsx(AlertTriggerIntervalSelect, { id: "alert.interval", selectedTriggerInterval: editedAutomation?.alert?.trigger.interval ?? "DAY", onTriggerIntervalChange: onTriggerIntervalChange, overlayPositionType: OVERLAY_POSITION_TYPE, closeOnParentScroll: CLOSE_ON_PARENT_SCROLL }) })) : null, RecipientsSlot ? (_jsx(RecipientsSlot, { Default: DefaultAlertingDialogRecipients, defaultProps: recipientsDefaultProps })) : (_jsx(DefaultAlertingDialogRecipients, { ...recipientsDefaultProps }))] }), warningMessage ? (_jsx(Message, { type: "warning", className: "gd-notifications-channels-dialog-error", children: warningMessage })) : null, invalidDatapoints.map((datapoint) => (_jsx(Message, { id: datapoint.id, type: datapoint.severity === "info" ? "progress" : datapoint.severity, className: "gd-notifications-channels-dialog-error gd-notifications-channels-dialog-error-scrollable", children: datapoint.message }, datapoint.id))), bottomContent] })
|
|
148
|
-
] }) }) }) }), alertToDelete ? (_jsx(DeleteAlertConfirmDialog, { alert: alertToDelete, onCancel: () => setAlertToDelete(null), onSuccess: handleAlertDeleteSuccess, onError: onDeleteError })) : null] }));
|
|
149
|
-
}
|
|
150
24
|
/**
|
|
151
25
|
* Default implementation of the alerting create/edit dialog.
|
|
152
26
|
*
|
|
@@ -164,13 +38,20 @@ export function AlertingDialogRenderer({ onCancel, onDeleteSuccess, onDeleteErro
|
|
|
164
38
|
* that is what lets a wholesale replacement receive the same contexts. Rendering this component
|
|
165
39
|
* outside those providers throws at runtime.
|
|
166
40
|
*
|
|
167
|
-
* The dialog is
|
|
168
|
-
*
|
|
169
|
-
* {@link
|
|
170
|
-
*
|
|
171
|
-
*
|
|
172
|
-
*
|
|
173
|
-
*
|
|
41
|
+
* The dialog is {@link AlertingDialogShell} — the chrome: overlay, frame, header row, action bar, the
|
|
42
|
+
* dialog's messages, the stale-filters and delete confirmation steps, the loading skeleton — around the
|
|
43
|
+
* exported region renders ({@link DefaultAlertingDialogFilters}, {@link DefaultAlertingDialogDestination},
|
|
44
|
+
* {@link DefaultAlertingDialogRecipients}, fed by {@link useAlertingDialogFiltersProps} and siblings; the
|
|
45
|
+
* header and action bar are the shell's) and the connected field blocks — {@link AlertingDialogMeasure},
|
|
46
|
+
* {@link AlertingDialogAttribute}, {@link AlertingDialogComparisonOperator}, {@link AlertingDialogThreshold},
|
|
47
|
+
* {@link AlertingDialogComparisonPeriod}, {@link AlertingDialogSensitivity}, {@link AlertingDialogGranularity},
|
|
48
|
+
* {@link AlertingDialogTriggerMode}, {@link AlertingDialogTriggerInterval} — grouped under the "When" and
|
|
49
|
+
* "Do" headings by {@link AlertingDialogFormFieldGroup}; each field is a labelled
|
|
50
|
+
* {@link AutomationDialogFormField} row and the conditional ones gate themselves on the draft. A custom
|
|
51
|
+
* `AlertingDialogComponent` that keeps this chrome but owns the arrangement renders
|
|
52
|
+
* {@link AlertingDialogShell} around the blocks it wants (see its example); one that owns the chrome too
|
|
53
|
+
* places the blocks in its own markup and reads or writes the same draft through {@link useAlertDraft} and
|
|
54
|
+
* {@link useAlertActions}.
|
|
174
55
|
*
|
|
175
56
|
* Slots render only in the fully rendered dialog: not while the dialog context reports loading,
|
|
176
57
|
* and not while the stale-filters confirmation step is shown.
|
|
@@ -184,10 +65,19 @@ export function DefaultAlertingDialog(props) {
|
|
|
184
65
|
if (isLoading) {
|
|
185
66
|
return _jsx(DefaultLoadingAlertingDialog, { onCancel: onCancel, alertToEdit: alertToEdit });
|
|
186
67
|
}
|
|
187
|
-
return (_jsx(IntlWrapper, { locale: locale, children: _jsx(
|
|
68
|
+
return (_jsx(IntlWrapper, { locale: locale, children: _jsx(DefaultAlertingDialogBody, { ...props }) }));
|
|
188
69
|
}
|
|
189
|
-
function
|
|
190
|
-
|
|
191
|
-
|
|
70
|
+
function DefaultAlertingDialogBody({ onCancel, onDeleteSuccess, onDeleteError, onError, onSuccess, onSaveError, onSaveSuccess, slots, topContent, bottomContent, }) {
|
|
71
|
+
const FiltersSlot = slots?.Filters;
|
|
72
|
+
const DestinationSlot = slots?.Destination;
|
|
73
|
+
const RecipientsSlot = slots?.Recipients;
|
|
74
|
+
const { notificationChannels } = useAlertingDialogContext();
|
|
75
|
+
const { isSaving, submit } = useAlertSubmit({ onSuccess, onError, onSaveSuccess, onSaveError });
|
|
76
|
+
const filtersDefaultProps = useAlertingDialogFiltersProps();
|
|
77
|
+
const destinationDefaultProps = useAlertingDialogDestinationProps();
|
|
78
|
+
const recipientsDefaultProps = useAlertingDialogRecipientsProps();
|
|
79
|
+
return (_jsxs(AlertingDialogShell, { onCancel: onCancel, onDeleteSuccess: onDeleteSuccess, onDeleteError: onDeleteError, onSubmit: () => void submit(), isSaving: isSaving, slots: slots, topContent: topContent, bottomContent: bottomContent, children: [FiltersSlot ? (_jsx(FiltersSlot, { Default: DefaultAlertingDialogFilters, defaultProps: filtersDefaultProps })) : (_jsx(DefaultAlertingDialogFilters, { ...filtersDefaultProps })), _jsx(ContentDivider, { className: "gd-divider-with-margin" }), _jsxs(AlertingDialogFormFieldGroup, { label: _jsx(FormattedMessage, { id: "insightAlert.config.when" }), children: [
|
|
80
|
+
_jsx(AlertingDialogMeasure, {}), _jsx(AlertingDialogAttribute, {}), _jsx(AlertingDialogComparisonOperator, {}), _jsx(AlertingDialogThreshold, {}), _jsx(AlertingDialogComparisonPeriod, {}), _jsx(AlertingDialogSensitivity, {}), _jsx(AlertingDialogGranularity, {})
|
|
81
|
+
] }), _jsx(ContentDivider, { className: "gd-divider-with-margin" }), _jsxs(AlertingDialogFormFieldGroup, { label: _jsx(FormattedMessage, { id: "insightAlert.config.do" }), children: [notificationChannels.length > 1 ? (DestinationSlot ? (_jsx(DestinationSlot, { Default: DefaultAlertingDialogDestination, defaultProps: destinationDefaultProps })) : (_jsx(DefaultAlertingDialogDestination, { ...destinationDefaultProps }))) : null, _jsx(AlertingDialogTriggerMode, {}), _jsx(AlertingDialogTriggerInterval, {}), RecipientsSlot ? (_jsx(RecipientsSlot, { Default: DefaultAlertingDialogRecipients, defaultProps: recipientsDefaultProps })) : (_jsx(DefaultAlertingDialogRecipients, { ...recipientsDefaultProps }))] })
|
|
192
82
|
] }));
|
|
193
83
|
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { type ReactElement } from "react";
|
|
2
|
+
import { type IAlertingDialogAttributeProps } from "../types.js";
|
|
3
|
+
/**
|
|
4
|
+
* Default render of the alerting dialog's attribute field: the dropdown slicing the condition by an
|
|
5
|
+
* attribute value; renders nothing when the insight has no non-date attribute. Props-driven — the
|
|
6
|
+
* bare control without its label; reads no dialog context (only `useIntl`). The default dialog and
|
|
7
|
+
* {@link AlertingDialogAttribute} render it with {@link useAlertingDialogAttributeProps} inside
|
|
8
|
+
* {@link AutomationDialogFormField}.
|
|
9
|
+
*
|
|
10
|
+
* @alpha
|
|
11
|
+
*/
|
|
12
|
+
export declare function DefaultAlertingDialogAttribute({ id, disabled, selectedAttribute: selectedAttributeProp, getAttributeValues, isResultLoading, selectedValue, onAttributeChange, attributes, catalogAttributes, catalogDateDatasets, showLabel, closeOnParentScroll }: IAlertingDialogAttributeProps): ReactElement | null;
|
|
13
|
+
//# sourceMappingURL=DefaultAlertingDialogAttribute.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DefaultAlertingDialogAttribute.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/automations/alerting/DefaultAlertingDialog/DefaultAlertingDialogAttribute.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAyB,KAAK,YAAY,EAAkC,MAAM,OAAO,CAAC;AAkBjG,OAAO,EAAuB,KAAK,6BAA6B,EAAE,MAAM,aAAa,CAAC;AA2HtF;;;;;;;;GAQG;AACH,wBAAgB,8BAA8B,CAAC,EAC3C,EAAE,EACF,QAAQ,EACR,iBAAiB,EAAE,qBAAqB,EACxC,kBAAkB,EAClB,eAAe,EACf,aAAa,EACb,iBAAiB,EACjB,UAAU,EACV,iBAAiB,EACjB,mBAAmB,EACnB,SAAgB,EAChB,mBAAmB,EACtB,EAAE,6BAA6B,GAAG,YAAY,GAAG,IAAI,CA8MrD"}
|
|
@@ -3,9 +3,9 @@ import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-run
|
|
|
3
3
|
import { useCallback, useMemo, useState } from "react";
|
|
4
4
|
import cx from "classnames";
|
|
5
5
|
import { FormattedMessage, useIntl } from "react-intl";
|
|
6
|
-
import { areObjRefsEqual
|
|
6
|
+
import { areObjRefsEqual } from "@gooddata/sdk-model";
|
|
7
7
|
import { Dropdown, DropdownButton, InvertableSelectSearchBar, Item, Separator, UiMenu, } from "@gooddata/sdk-ui-kit";
|
|
8
|
-
import { getSelectedCatalogAttribute, getSelectedCatalogAttributeValue } from "
|
|
8
|
+
import { getSelectedCatalogAttribute, getSelectedCatalogAttributeValue } from "../utils/getters.js";
|
|
9
9
|
const createInteractiveItem = (id, title, attribute, value, isSelected, subItems) => ({
|
|
10
10
|
type: "interactive",
|
|
11
11
|
id,
|
|
@@ -50,7 +50,16 @@ function AttributeValuesSearchContent({ attribute, values, isSelected, selectedA
|
|
|
50
50
|
}, children: _jsx("div", { className: "gd-alert-attribute-select__menu-item s-menu-alert-attribute-item-value", children: (value.title ?? value.name) || `(${intl.formatMessage({ id: "empty_value" })})` }) }, index))) })
|
|
51
51
|
] }));
|
|
52
52
|
}
|
|
53
|
-
|
|
53
|
+
/**
|
|
54
|
+
* Default render of the alerting dialog's attribute field: the dropdown slicing the condition by an
|
|
55
|
+
* attribute value; renders nothing when the insight has no non-date attribute. Props-driven — the
|
|
56
|
+
* bare control without its label; reads no dialog context (only `useIntl`). The default dialog and
|
|
57
|
+
* {@link AlertingDialogAttribute} render it with {@link useAlertingDialogAttributeProps} inside
|
|
58
|
+
* {@link AutomationDialogFormField}.
|
|
59
|
+
*
|
|
60
|
+
* @alpha
|
|
61
|
+
*/
|
|
62
|
+
export function DefaultAlertingDialogAttribute({ id, disabled, selectedAttribute: selectedAttributeProp, getAttributeValues, isResultLoading, selectedValue, onAttributeChange, attributes, catalogAttributes, catalogDateDatasets, showLabel = true, closeOnParentScroll, }) {
|
|
54
63
|
const intl = useIntl();
|
|
55
64
|
const availableAttributes = useMemo(() => {
|
|
56
65
|
return attributes.filter((attr) => attr.type === "attribute");
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { type ReactElement } from "react";
|
|
2
|
+
import { type IAlertingDialogComparisonOperatorProps } from "../types.js";
|
|
3
|
+
/**
|
|
4
|
+
* Default render of the alerting dialog's comparison-operator field: the dropdown selecting the
|
|
5
|
+
* condition's operator (fixed threshold, change, difference, anomaly detection); renders nothing
|
|
6
|
+
* without a measure. Props-driven — the bare control without its label; reads no dialog context
|
|
7
|
+
* (only `useIntl`). The default dialog and {@link AlertingDialogComparisonOperator} render it with
|
|
8
|
+
* {@link useAlertingDialogComparisonOperatorProps} inside {@link AutomationDialogFormField}.
|
|
9
|
+
*
|
|
10
|
+
* @alpha
|
|
11
|
+
*/
|
|
12
|
+
export declare function DefaultAlertingDialogComparisonOperator(props: IAlertingDialogComparisonOperatorProps): ReactElement | null;
|
|
13
|
+
//# sourceMappingURL=DefaultAlertingDialogComparisonOperator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DefaultAlertingDialogComparisonOperator.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/automations/alerting/DefaultAlertingDialog/DefaultAlertingDialogComparisonOperator.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAyB,KAAK,YAAY,EAAU,MAAM,OAAO,CAAC;AAazE,OAAO,EAAE,KAAK,sCAAsC,EAAE,MAAM,aAAa,CAAC;AAiB1E;;;;;;;;GAQG;AACH,wBAAgB,uCAAuC,CACnD,KAAK,EAAE,sCAAsC,GAC9C,YAAY,GAAG,IAAI,CA6MrB"}
|