@gooddata/sdk-ui-dashboard 11.42.0-alpha.1 → 11.42.0-alpha.2
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.js +1 -1
- package/esm/index.d.ts +2 -2
- package/esm/index.d.ts.map +1 -1
- package/esm/index.js +2 -2
- 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/tabs/parameters/parametersHelpers.d.ts +6 -0
- package/esm/model/store/tabs/parameters/parametersHelpers.d.ts.map +1 -1
- package/esm/model/store/tabs/parameters/parametersHelpers.js +11 -0
- package/esm/model/store/tabs/parameters/parametersSelectors.d.ts +7 -0
- package/esm/model/store/tabs/parameters/parametersSelectors.d.ts.map +1 -1
- package/esm/model/store/tabs/parameters/parametersSelectors.js +18 -7
- package/esm/presentation/automations/alerting/DefaultAlertingDialog/DefaultAlertingDialog.d.ts.map +1 -1
- package/esm/presentation/automations/alerting/DefaultAlertingDialog/DefaultAlertingDialog.js +2 -2
- package/esm/presentation/automations/alerting/DefaultAlertingDialog/hooks/useEditAlert.d.ts +5 -0
- package/esm/presentation/automations/alerting/DefaultAlertingDialog/hooks/useEditAlert.d.ts.map +1 -1
- package/esm/presentation/automations/alerting/DefaultAlertingDialog/hooks/useEditAlert.js +20 -3
- package/esm/presentation/automations/shared/automationFilters/automationParameters.d.ts +37 -0
- package/esm/presentation/automations/shared/automationFilters/automationParameters.d.ts.map +1 -0
- package/esm/presentation/automations/shared/automationFilters/automationParameters.js +90 -0
- package/esm/presentation/automations/shared/automationFilters/components/AutomationFiltersSelect.d.ts +23 -2
- package/esm/presentation/automations/shared/automationFilters/components/AutomationFiltersSelect.d.ts.map +1 -1
- package/esm/presentation/automations/shared/automationFilters/components/AutomationFiltersSelect.js +27 -15
- package/esm/presentation/automations/shared/automationFilters/components/AutomationParameter.d.ts +20 -0
- package/esm/presentation/automations/shared/automationFilters/components/AutomationParameter.d.ts.map +1 -0
- package/esm/presentation/automations/shared/automationFilters/components/AutomationParameter.js +32 -0
- package/esm/presentation/automations/shared/automationFilters/useAutomationAlertParameters.d.ts +32 -0
- package/esm/presentation/automations/shared/automationFilters/useAutomationAlertParameters.d.ts.map +1 -0
- package/esm/presentation/automations/shared/automationFilters/useAutomationAlertParameters.js +57 -0
- package/esm/presentation/dashboard/components/DashboardLoading.d.ts.map +1 -1
- package/esm/presentation/dashboard/components/DashboardLoading.js +12 -2
- package/esm/presentation/export/types.d.ts +1 -1
- package/esm/presentation/export/types.d.ts.map +1 -1
- package/esm/presentation/export/useExportData.d.ts +1 -1
- package/esm/presentation/export/useExportData.d.ts.map +1 -1
- package/esm/presentation/filterBar/attributeFilter/addAttributeFilter/AttributesDropdown.d.ts +20 -1
- package/esm/presentation/filterBar/attributeFilter/addAttributeFilter/AttributesDropdown.d.ts.map +1 -1
- package/esm/presentation/filterBar/attributeFilter/addAttributeFilter/AttributesDropdown.js +41 -6
- package/esm/presentation/localization/bundles/de-DE.localization-bundle.d.ts +3 -11
- package/esm/presentation/localization/bundles/de-DE.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/de-DE.localization-bundle.js +3 -11
- package/esm/presentation/localization/bundles/en-AU.localization-bundle.d.ts +3 -11
- package/esm/presentation/localization/bundles/en-AU.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/en-AU.localization-bundle.js +3 -11
- package/esm/presentation/localization/bundles/en-GB.localization-bundle.d.ts +3 -11
- package/esm/presentation/localization/bundles/en-GB.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/en-GB.localization-bundle.js +3 -11
- package/esm/presentation/localization/bundles/en-US.localization-bundle.d.ts +4 -0
- package/esm/presentation/localization/bundles/en-US.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/en-US.localization-bundle.js +4 -0
- package/esm/presentation/localization/bundles/es-419.localization-bundle.d.ts +3 -11
- package/esm/presentation/localization/bundles/es-419.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/es-419.localization-bundle.js +3 -11
- package/esm/presentation/localization/bundles/es-ES.localization-bundle.d.ts +3 -11
- package/esm/presentation/localization/bundles/es-ES.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/es-ES.localization-bundle.js +3 -11
- package/esm/presentation/localization/bundles/fi-FI.localization-bundle.d.ts +3 -11
- package/esm/presentation/localization/bundles/fi-FI.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/fi-FI.localization-bundle.js +3 -11
- package/esm/presentation/localization/bundles/fr-CA.localization-bundle.d.ts +3 -11
- package/esm/presentation/localization/bundles/fr-CA.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/fr-CA.localization-bundle.js +3 -11
- package/esm/presentation/localization/bundles/fr-FR.localization-bundle.d.ts +3 -11
- package/esm/presentation/localization/bundles/fr-FR.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/fr-FR.localization-bundle.js +3 -11
- package/esm/presentation/localization/bundles/id-ID.localization-bundle.d.ts +3 -11
- package/esm/presentation/localization/bundles/id-ID.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/id-ID.localization-bundle.js +3 -11
- package/esm/presentation/localization/bundles/it-IT.localization-bundle.d.ts +3 -11
- package/esm/presentation/localization/bundles/it-IT.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/it-IT.localization-bundle.js +3 -11
- package/esm/presentation/localization/bundles/ja-JP.localization-bundle.d.ts +3 -11
- package/esm/presentation/localization/bundles/ja-JP.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/ja-JP.localization-bundle.js +3 -11
- package/esm/presentation/localization/bundles/ko-KR.localization-bundle.d.ts +3 -11
- package/esm/presentation/localization/bundles/ko-KR.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/ko-KR.localization-bundle.js +3 -11
- package/esm/presentation/localization/bundles/nl-NL.localization-bundle.d.ts +3 -11
- package/esm/presentation/localization/bundles/nl-NL.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/nl-NL.localization-bundle.js +3 -11
- package/esm/presentation/localization/bundles/pl-PL.localization-bundle.d.ts +3 -11
- package/esm/presentation/localization/bundles/pl-PL.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/pl-PL.localization-bundle.js +3 -11
- package/esm/presentation/localization/bundles/pt-BR.localization-bundle.d.ts +3 -11
- package/esm/presentation/localization/bundles/pt-BR.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/pt-BR.localization-bundle.js +3 -11
- package/esm/presentation/localization/bundles/pt-PT.localization-bundle.d.ts +3 -11
- package/esm/presentation/localization/bundles/pt-PT.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/pt-PT.localization-bundle.js +3 -11
- package/esm/presentation/localization/bundles/ru-RU.localization-bundle.d.ts +3 -11
- package/esm/presentation/localization/bundles/ru-RU.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/ru-RU.localization-bundle.js +3 -11
- package/esm/presentation/localization/bundles/sl-SI.localization-bundle.d.ts +3 -11
- package/esm/presentation/localization/bundles/sl-SI.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/sl-SI.localization-bundle.js +3 -11
- package/esm/presentation/localization/bundles/th-TH.localization-bundle.d.ts +3 -11
- package/esm/presentation/localization/bundles/th-TH.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/th-TH.localization-bundle.js +3 -11
- package/esm/presentation/localization/bundles/tr-TR.localization-bundle.d.ts +3 -11
- package/esm/presentation/localization/bundles/tr-TR.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/tr-TR.localization-bundle.js +3 -11
- package/esm/presentation/localization/bundles/uk-UA.localization-bundle.d.ts +3 -11
- package/esm/presentation/localization/bundles/uk-UA.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/uk-UA.localization-bundle.js +3 -11
- package/esm/presentation/localization/bundles/vi-VN.localization-bundle.d.ts +3 -11
- package/esm/presentation/localization/bundles/vi-VN.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/vi-VN.localization-bundle.js +3 -11
- package/esm/presentation/localization/bundles/zh-HK.localization-bundle.d.ts +3 -11
- package/esm/presentation/localization/bundles/zh-HK.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/zh-HK.localization-bundle.js +3 -11
- package/esm/presentation/localization/bundles/zh-Hans.localization-bundle.d.ts +3 -11
- package/esm/presentation/localization/bundles/zh-Hans.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/zh-Hans.localization-bundle.js +3 -11
- package/esm/presentation/localization/bundles/zh-Hant.localization-bundle.d.ts +3 -11
- package/esm/presentation/localization/bundles/zh-Hant.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/zh-Hant.localization-bundle.js +3 -11
- package/esm/sdk-ui-dashboard.d.ts +30 -3
- package/package.json +20 -20
- package/styles/css/dashboard.css +4 -1
- package/styles/css/dashboard.css.map +1 -1
- package/styles/css/main.css +4 -1
- package/styles/css/main.css.map +1 -1
- package/styles/scss/dashboard.scss +9 -1
|
@@ -13,9 +13,12 @@ import { selectExecutionResultByRef } from "../../../../../model/store/execution
|
|
|
13
13
|
import { selectAutomationCommonDateFilterId, selectDashboardHiddenFilters, } from "../../../../../model/store/filtering/dashboardFilterSelectors.js";
|
|
14
14
|
import { selectDashboardDescriptor, selectDashboardId, } from "../../../../../model/store/meta/metaSelectors.js";
|
|
15
15
|
import { selectWidgetLocalIdToTabIdMap } from "../../../../../model/store/tabs/layout/layoutSelectors.js";
|
|
16
|
+
import { selectEffectiveParameterValuesForWidget } from "../../../../../model/store/tabs/parameters/parametersSelectors.js";
|
|
16
17
|
import { selectCurrentUser } from "../../../../../model/store/user/userSelectors.js";
|
|
17
18
|
import { selectUsers } from "../../../../../model/store/users/usersSelectors.js";
|
|
18
19
|
import { isEmail } from "../../../scheduledEmail/utils/validate.js";
|
|
20
|
+
import { setAlertExecutionParameters } from "../../../shared/automationFilters/automationParameters.js";
|
|
21
|
+
import { useAutomationAlertParameters } from "../../../shared/automationFilters/useAutomationAlertParameters.js";
|
|
19
22
|
import { getAppliedWidgetFilters, getVisibleFiltersByFilters, resolveMvfDimensionalityLocalRefs, } from "../../../shared/automationFilters/utils.js";
|
|
20
23
|
import { createDefaultAlert } from "../utils/convertors.js";
|
|
21
24
|
import { getAlertAiOperator, getAlertAttribute, getAlertCompareOperator, getAlertComparison, getAlertGranularity, getAlertMeasure, getAlertRelativeOperator, getAlertSensitivity, getMeasureFormatsFromExecution, } from "../utils/getters.js";
|
|
@@ -47,6 +50,7 @@ export function useEditAlert({ alertToEdit, notificationChannels, insight, widge
|
|
|
47
50
|
const commonDateFilterId = useDashboardSelector(selectAutomationCommonDateFilterId);
|
|
48
51
|
const weekStart = useDashboardSelector(selectWeekStart);
|
|
49
52
|
const timezone = useDashboardSelector(selectTimezone);
|
|
53
|
+
const parameterValues = useDashboardSelector(selectEffectiveParameterValuesForWidget(widget?.ref));
|
|
50
54
|
const isInvalidConnectionToInsight = alertToEdit?.metadata?.widget && !insight;
|
|
51
55
|
const minimumRecurrenceMinutesEntitlement = useDashboardSelector(selectEntitlementMinimumRecurrenceMinutes);
|
|
52
56
|
const allowHourlyRecurrence = parseInt(minimumRecurrenceMinutesEntitlement?.value ?? DEFAULT_MIN_RECURRENCE_MINUTES, 10) === 60;
|
|
@@ -101,14 +105,22 @@ export function useEditAlert({ alertToEdit, notificationChannels, insight, widge
|
|
|
101
105
|
},
|
|
102
106
|
};
|
|
103
107
|
})();
|
|
104
|
-
const [editedAutomation, setEditedAutomation] = useState(
|
|
105
|
-
|
|
108
|
+
const [editedAutomation, setEditedAutomation] = useState(() => {
|
|
109
|
+
if (resolvedAlertToEdit) {
|
|
110
|
+
return resolvedAlertToEdit;
|
|
111
|
+
}
|
|
112
|
+
const defaultNewAlert = createDefaultAlert(getAppliedWidgetFilters(editedAutomationFilters ?? [], dashboardHiddenFilters, widget, insight, commonDateFilterId, true, false), supportedMeasures, defaultMeasure, defaultNotificationChannelId, defaultRecipient, measureFormatMap, undefined, descriptor.evaluationFrequency
|
|
106
113
|
? {
|
|
107
114
|
cron: descriptor.evaluationFrequency,
|
|
108
115
|
timezone: settings.alertDefault?.defaultTimezone,
|
|
109
116
|
}
|
|
110
|
-
: undefined, getVisibleFiltersByFilters(editedAutomationFilters, availableFiltersAsVisibleFilters, true), widget?.localIdentifier, dashboardId, widget?.title, targetTabIdentifier)
|
|
117
|
+
: undefined, getVisibleFiltersByFilters(editedAutomationFilters, availableFiltersAsVisibleFilters, true), widget?.localIdentifier, dashboardId, widget?.title, targetTabIdentifier);
|
|
118
|
+
return defaultNewAlert && parameterValues.length > 0
|
|
119
|
+
? setAlertExecutionParameters(defaultNewAlert, parameterValues)
|
|
120
|
+
: defaultNewAlert;
|
|
121
|
+
});
|
|
111
122
|
const [originalAutomation] = useState(editedAutomation);
|
|
123
|
+
const { automationParameters, availableParameters, onParameterChange, onParameterDelete, onParameterAdd, } = useAutomationAlertParameters({ editedAutomation, setEditedAutomation, widgetRef: widget?.ref });
|
|
112
124
|
//
|
|
113
125
|
// Selected values
|
|
114
126
|
//
|
|
@@ -315,6 +327,11 @@ export function useEditAlert({ alertToEdit, notificationChannels, insight, widge
|
|
|
315
327
|
onRecipientsChange,
|
|
316
328
|
onFiltersChange,
|
|
317
329
|
onApplyCurrentFilters,
|
|
330
|
+
automationParameters,
|
|
331
|
+
availableParameters,
|
|
332
|
+
onParameterChange,
|
|
333
|
+
onParameterDelete,
|
|
334
|
+
onParameterAdd,
|
|
318
335
|
onMeasureChange,
|
|
319
336
|
getAttributeValues,
|
|
320
337
|
onAttributeChange,
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { type DashboardParameterMode, type IAutomationMetadataObjectDefinition, type IDashboardParameter, type IInsightParameterValue, type INumberParameterConstraints, type IParameterMetadataObject, type IdentifierRef } from "@gooddata/sdk-model";
|
|
2
|
+
/**
|
|
3
|
+
* A workspace parameter resolved for display and editing inside an automation (alert/schedule)
|
|
4
|
+
* dialog. The `value` is the current effective value the headless run will capture.
|
|
5
|
+
*
|
|
6
|
+
* @internal
|
|
7
|
+
*/
|
|
8
|
+
export interface IAutomationParameter {
|
|
9
|
+
ref: IdentifierRef;
|
|
10
|
+
title: string;
|
|
11
|
+
value: number;
|
|
12
|
+
mode: DashboardParameterMode;
|
|
13
|
+
constraints?: INumberParameterConstraints;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Stored {@link IInsightParameterValue} overrides carry only {ref, value}; title, mode and
|
|
17
|
+
* constraints are re-derived from the current dashboard and workspace catalog.
|
|
18
|
+
*
|
|
19
|
+
* @internal
|
|
20
|
+
*/
|
|
21
|
+
export declare function reconstructAutomationParametersFromValues(stored: IInsightParameterValue[], dashboardParameters: IDashboardParameter[], catalog: IParameterMetadataObject[]): IAutomationParameter[];
|
|
22
|
+
/**
|
|
23
|
+
* Parameters of unsupported types are dropped (cannot be rendered/clamped). Dashboard-`hidden`
|
|
24
|
+
* and `readonly` ones are dropped too — once added they would derive back to an invisible or
|
|
25
|
+
* locked (undeletable) chip.
|
|
26
|
+
*
|
|
27
|
+
* @internal
|
|
28
|
+
*/
|
|
29
|
+
export declare function availableAutomationParameters(catalog: IParameterMetadataObject[], selected: IAutomationParameter[], dashboardParameters?: IDashboardParameter[], widgetParameterValues?: IInsightParameterValue[]): IAutomationParameter[];
|
|
30
|
+
/**
|
|
31
|
+
* Returns a copy of the automation with `alert.execution.parameters` replaced. No-op when the
|
|
32
|
+
* automation carries no alert.
|
|
33
|
+
*
|
|
34
|
+
* @internal
|
|
35
|
+
*/
|
|
36
|
+
export declare function setAlertExecutionParameters(automation: IAutomationMetadataObjectDefinition, parameters: IInsightParameterValue[]): IAutomationMetadataObjectDefinition;
|
|
37
|
+
//# sourceMappingURL=automationParameters.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"automationParameters.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/automations/shared/automationFilters/automationParameters.ts"],"names":[],"mappings":"AAEA,OAAO,EACH,KAAK,sBAAsB,EAE3B,KAAK,mCAAmC,EACxC,KAAK,mBAAmB,EACxB,KAAK,sBAAsB,EAC3B,KAAK,2BAA2B,EAChC,KAAK,wBAAwB,EAC7B,KAAK,aAAa,EAIrB,MAAM,qBAAqB,CAAC;AAE7B;;;;;GAKG;AACH,MAAM,WAAW,oBAAoB;IACjC,GAAG,EAAE,aAAa,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,sBAAsB,CAAC;IAC7B,WAAW,CAAC,EAAE,2BAA2B,CAAC;CAC7C;AAED;;;;;GAKG;AACH,wBAAgB,yCAAyC,CACrD,MAAM,EAAE,sBAAsB,EAAE,EAChC,mBAAmB,EAAE,mBAAmB,EAAE,EAC1C,OAAO,EAAE,wBAAwB,EAAE,GACpC,oBAAoB,EAAE,CAkBxB;AAED;;;;;;GAMG;AACH,wBAAgB,6BAA6B,CACzC,OAAO,EAAE,wBAAwB,EAAE,EACnC,QAAQ,EAAE,oBAAoB,EAAE,EAChC,mBAAmB,GAAE,mBAAmB,EAAO,EAC/C,qBAAqB,GAAE,sBAAsB,EAAO,GACrD,oBAAoB,EAAE,CAqCxB;AAED;;;;;GAKG;AACH,wBAAgB,2BAA2B,CACvC,UAAU,EAAE,mCAAmC,EAC/C,UAAU,EAAE,sBAAsB,EAAE,GACrC,mCAAmC,CAcrC"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
// (C) 2026 GoodData Corporation
|
|
2
|
+
import { DashboardParameterModeValues, isIdentifierRef, isNumberParameterDefinition, objRefToString, } from "@gooddata/sdk-model";
|
|
3
|
+
/**
|
|
4
|
+
* Stored {@link IInsightParameterValue} overrides carry only {ref, value}; title, mode and
|
|
5
|
+
* constraints are re-derived from the current dashboard and workspace catalog.
|
|
6
|
+
*
|
|
7
|
+
* @internal
|
|
8
|
+
*/
|
|
9
|
+
export function reconstructAutomationParametersFromValues(stored, dashboardParameters, catalog) {
|
|
10
|
+
const dashboardByRef = new Map(dashboardParameters.map((parameter) => [objRefToString(parameter.ref), parameter]));
|
|
11
|
+
const workspaceByRef = new Map(catalog.map((parameter) => [objRefToString(parameter.ref), parameter]));
|
|
12
|
+
return stored.map((row) => {
|
|
13
|
+
const refKey = objRefToString(row.ref);
|
|
14
|
+
const dashboardParameter = dashboardByRef.get(refKey);
|
|
15
|
+
const workspaceParameter = workspaceByRef.get(refKey);
|
|
16
|
+
const constraints = numberConstraints(workspaceParameter);
|
|
17
|
+
return {
|
|
18
|
+
ref: row.ref,
|
|
19
|
+
title: dashboardParameter?.label ?? workspaceParameter?.title ?? row.ref.identifier,
|
|
20
|
+
value: row.value,
|
|
21
|
+
mode: dashboardParameter?.mode ?? DashboardParameterModeValues.ACTIVE,
|
|
22
|
+
...(constraints ? { constraints } : {}),
|
|
23
|
+
};
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Parameters of unsupported types are dropped (cannot be rendered/clamped). Dashboard-`hidden`
|
|
28
|
+
* and `readonly` ones are dropped too — once added they would derive back to an invisible or
|
|
29
|
+
* locked (undeletable) chip.
|
|
30
|
+
*
|
|
31
|
+
* @internal
|
|
32
|
+
*/
|
|
33
|
+
export function availableAutomationParameters(catalog, selected, dashboardParameters = [], widgetParameterValues = []) {
|
|
34
|
+
const selectedRefKeys = new Set(selected.map((parameter) => objRefToString(parameter.ref)));
|
|
35
|
+
const dashboardByRef = new Map(dashboardParameters.map((parameter) => [objRefToString(parameter.ref), parameter]));
|
|
36
|
+
const widgetValueByRef = new Map(widgetParameterValues.map((row) => [objRefToString(row.ref), row.value]));
|
|
37
|
+
const result = [];
|
|
38
|
+
for (const workspaceParameter of catalog) {
|
|
39
|
+
if (!isNumberParameterDefinition(workspaceParameter.definition)) {
|
|
40
|
+
continue;
|
|
41
|
+
}
|
|
42
|
+
const { ref } = workspaceParameter;
|
|
43
|
+
if (!isIdentifierRef(ref)) {
|
|
44
|
+
continue;
|
|
45
|
+
}
|
|
46
|
+
const refKey = objRefToString(ref);
|
|
47
|
+
const dashboardParameter = dashboardByRef.get(refKey);
|
|
48
|
+
if (selectedRefKeys.has(refKey) ||
|
|
49
|
+
dashboardParameter?.mode === DashboardParameterModeValues.HIDDEN ||
|
|
50
|
+
dashboardParameter?.mode === DashboardParameterModeValues.READONLY) {
|
|
51
|
+
continue;
|
|
52
|
+
}
|
|
53
|
+
const { defaultValue, constraints } = workspaceParameter.definition;
|
|
54
|
+
result.push({
|
|
55
|
+
ref,
|
|
56
|
+
title: dashboardParameter?.label ?? workspaceParameter.title,
|
|
57
|
+
// mirror the live-render precedence: runtimeOverride/insight value > dashboard value > default
|
|
58
|
+
value: widgetValueByRef.get(refKey) ?? dashboardParameter?.value ?? defaultValue,
|
|
59
|
+
mode: DashboardParameterModeValues.ACTIVE,
|
|
60
|
+
...(constraints ? { constraints } : {}),
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
return result;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Returns a copy of the automation with `alert.execution.parameters` replaced. No-op when the
|
|
67
|
+
* automation carries no alert.
|
|
68
|
+
*
|
|
69
|
+
* @internal
|
|
70
|
+
*/
|
|
71
|
+
export function setAlertExecutionParameters(automation, parameters) {
|
|
72
|
+
if (!automation.alert) {
|
|
73
|
+
return automation;
|
|
74
|
+
}
|
|
75
|
+
return {
|
|
76
|
+
...automation,
|
|
77
|
+
alert: {
|
|
78
|
+
...automation.alert,
|
|
79
|
+
execution: {
|
|
80
|
+
...automation.alert.execution,
|
|
81
|
+
parameters,
|
|
82
|
+
},
|
|
83
|
+
},
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
function numberConstraints(workspaceParameter) {
|
|
87
|
+
return workspaceParameter && isNumberParameterDefinition(workspaceParameter.definition)
|
|
88
|
+
? workspaceParameter.definition.constraints
|
|
89
|
+
: undefined;
|
|
90
|
+
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import { type FilterContextItem, type ICatalogAttribute, type ICatalogDateDataset, type IDashboardAttributeFilterConfig, type IDashboardDateFilterConfigItem, type ObjRef } from "@gooddata/sdk-model";
|
|
1
|
+
import { type FilterContextItem, type ICatalogAttribute, type ICatalogDateDataset, type IDashboardAttributeFilterConfig, type IDashboardDateFilterConfigItem, type IdentifierRef, type ObjRef } from "@gooddata/sdk-model";
|
|
2
2
|
import { type OverlayPositionType } from "@gooddata/sdk-ui-kit";
|
|
3
3
|
import type { IAutomationFiltersTab } from "../../../../../model/store/filtering/dashboardFilterSelectors.js";
|
|
4
|
+
import { type IAutomationParameter } from "../automationParameters.js";
|
|
4
5
|
export interface IAutomationFiltersProps {
|
|
5
6
|
id?: string;
|
|
6
7
|
filters: FilterContextItem[] | undefined;
|
|
@@ -44,6 +45,26 @@ export interface IAutomationFiltersSelectProps {
|
|
|
44
45
|
* Called when user adds, changes, or removes a filter in a tab section.
|
|
45
46
|
*/
|
|
46
47
|
onFiltersByTabChange?: (filtersByTab: Record<string, FilterContextItem[]>) => void;
|
|
48
|
+
/**
|
|
49
|
+
* Parameter chips to render. Provided only when the `enableParameters` feature is on.
|
|
50
|
+
*/
|
|
51
|
+
parameters?: IAutomationParameter[];
|
|
52
|
+
/**
|
|
53
|
+
* Workspace parameters addable via the "+" menu (catalog minus the selected set).
|
|
54
|
+
*/
|
|
55
|
+
availableParameters?: IAutomationParameter[];
|
|
56
|
+
/**
|
|
57
|
+
* Called when an `active` parameter chip's value is edited.
|
|
58
|
+
*/
|
|
59
|
+
onParameterChange?: (ref: IdentifierRef, value: number) => void;
|
|
60
|
+
/**
|
|
61
|
+
* Called when an `active` parameter chip is removed.
|
|
62
|
+
*/
|
|
63
|
+
onParameterDelete?: (ref: IdentifierRef) => void;
|
|
64
|
+
/**
|
|
65
|
+
* Called when a parameter is added from the "+" menu.
|
|
66
|
+
*/
|
|
67
|
+
onParameterAdd?: (ref: IdentifierRef) => void;
|
|
47
68
|
}
|
|
48
|
-
export declare function AutomationFiltersSelect({ availableFilters, selectedFilters, onFiltersChange, isDashboardAutomation, storeFilters, onStoreFiltersChange, areFiltersMissing, overlayPositionType, hideTitle, showAllFilters, disableDateFilters, filtersByTab, editedFiltersByTab, onFiltersByTabChange }: IAutomationFiltersSelectProps): import("react/jsx-runtime").JSX.Element;
|
|
69
|
+
export declare function AutomationFiltersSelect({ availableFilters, selectedFilters, onFiltersChange, isDashboardAutomation, storeFilters, onStoreFiltersChange, areFiltersMissing, overlayPositionType, hideTitle, showAllFilters, disableDateFilters, filtersByTab, editedFiltersByTab, onFiltersByTabChange, parameters, onParameterChange, onParameterDelete, availableParameters, onParameterAdd }: IAutomationFiltersSelectProps): import("react/jsx-runtime").JSX.Element;
|
|
49
70
|
//# sourceMappingURL=AutomationFiltersSelect.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AutomationFiltersSelect.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/automations/shared/automationFilters/components/AutomationFiltersSelect.tsx"],"names":[],"mappings":"AAMA,OAAO,EACH,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,EACtB,KAAK,mBAAmB,EAGxB,KAAK,+BAA+B,EACpC,KAAK,8BAA8B,EAEnC,KAAK,MAAM,EAYd,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAGH,KAAK,mBAAmB,EAO3B,MAAM,sBAAsB,CAAC;AAE9B,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,kEAAkE,CAAC;
|
|
1
|
+
{"version":3,"file":"AutomationFiltersSelect.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/automations/shared/automationFilters/components/AutomationFiltersSelect.tsx"],"names":[],"mappings":"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"}
|
package/esm/presentation/automations/shared/automationFilters/components/AutomationFiltersSelect.js
CHANGED
|
@@ -5,11 +5,12 @@ import { FormattedMessage, useIntl } from "react-intl";
|
|
|
5
5
|
import { areObjRefsEqual, dashboardFilterLocalIdentifier, dashboardFilterObjRef, isCatalogAttribute, isCatalogDateDataset, isCatalogMeasure, isDashboardAttributeFilter, isDashboardAttributeFilterItem, isDashboardCommonDateFilter, isDashboardDateFilter, isDashboardMeasureValueFilter, } from "@gooddata/sdk-model";
|
|
6
6
|
import { Bubble, BubbleHoverTrigger, Typography, UiButton, UiIconButton, UiTooltip, isActionKey, useIdPrefixed, } from "@gooddata/sdk-ui-kit";
|
|
7
7
|
import { AUTOMATION_FILTERS_DIALOG_ID, AUTOMATION_FILTERS_DIALOG_TITLE_ID, AUTOMATION_FILTERS_GROUP_LABEL_ID, } from "../../../../constants/automations.js";
|
|
8
|
-
import { AttributesDropdown } from "../../../../filterBar/attributeFilter/addAttributeFilter/AttributesDropdown.js";
|
|
8
|
+
import { AttributesDropdown, } from "../../../../filterBar/attributeFilter/addAttributeFilter/AttributesDropdown.js";
|
|
9
9
|
import { useAutomationFilters, useAutomationFiltersByTab } from "../useAutomationFilters.js";
|
|
10
10
|
import { AutomationAttributeFilter } from "./AutomationAttributeFilter.js";
|
|
11
11
|
import { AutomationDateFilter } from "./AutomationDateFilter.js";
|
|
12
12
|
import { AutomationMeasureValueFilter } from "./AutomationMeasureValueFilter.js";
|
|
13
|
+
import { AutomationParameter } from "./AutomationParameter.js";
|
|
13
14
|
const COLLAPSED_FILTERS_COUNT = 2;
|
|
14
15
|
function AutomationCheckboxOrNote({ isDashboardAutomation, storeFilters, handleStoreFiltersChange, handleKeyDown, automationFilterSelectTooltipId, }) {
|
|
15
16
|
const intl = useIntl();
|
|
@@ -29,7 +30,7 @@ function AutomationCheckboxOrNote({ isDashboardAutomation, storeFilters, handleS
|
|
|
29
30
|
function Divider() {
|
|
30
31
|
return _jsx("div", { className: "gd-automation-filters__divider", style: { height: "20px" } });
|
|
31
32
|
}
|
|
32
|
-
export function AutomationFiltersSelect({ availableFilters = [], selectedFilters = [], onFiltersChange, isDashboardAutomation, storeFilters, onStoreFiltersChange, areFiltersMissing, overlayPositionType, hideTitle = false, showAllFilters = false, disableDateFilters = false, filtersByTab, editedFiltersByTab, onFiltersByTabChange, }) {
|
|
33
|
+
export function AutomationFiltersSelect({ availableFilters = [], selectedFilters = [], onFiltersChange, isDashboardAutomation, storeFilters, onStoreFiltersChange, areFiltersMissing, overlayPositionType, hideTitle = false, showAllFilters = false, disableDateFilters = false, filtersByTab, editedFiltersByTab, onFiltersByTabChange, parameters = [], onParameterChange, onParameterDelete, availableParameters = [], onParameterAdd, }) {
|
|
33
34
|
// Determine rendering mode first
|
|
34
35
|
const shouldRenderByTab = !!filtersByTab && filtersByTab.length > 1;
|
|
35
36
|
// Use appropriate hook based on rendering mode
|
|
@@ -50,6 +51,7 @@ export function AutomationFiltersSelect({ availableFilters = [], selectedFilters
|
|
|
50
51
|
// Use data from the appropriate hook based on rendering mode
|
|
51
52
|
const { commonDateFilterId, lockedFilters, attributeConfigs, dateConfigs, filterAnnouncement, filterGroupRef, makeFilterGroupUnfocusable, setAddFilterButtonRefs, } = shouldRenderByTab && tabFiltersData.processedFiltersByTab ? tabFiltersData : flatFiltersData;
|
|
52
53
|
const filters = shouldRenderByTab ? [] : flatFiltersData.visibleFilters;
|
|
54
|
+
const visibleParameters = shouldRenderByTab ? [] : parameters;
|
|
53
55
|
const attributes = shouldRenderByTab ? [] : flatFiltersData.attributes;
|
|
54
56
|
const dateDatasets = shouldRenderByTab ? [] : flatFiltersData.dateDatasets;
|
|
55
57
|
const measures = shouldRenderByTab ? [] : flatFiltersData.measures;
|
|
@@ -67,7 +69,8 @@ export function AutomationFiltersSelect({ availableFilters = [], selectedFilters
|
|
|
67
69
|
: flatFiltersData.handleStoreFiltersChange;
|
|
68
70
|
const intl = useIntl();
|
|
69
71
|
const [isExpanded, setIsExpanded] = useState(showAllFilters);
|
|
70
|
-
const
|
|
72
|
+
const chipCount = filters.length + visibleParameters.length;
|
|
73
|
+
const isExpandable = !showAllFilters && chipCount > COLLAPSED_FILTERS_COUNT;
|
|
71
74
|
const handleKeyDown = (e) => {
|
|
72
75
|
if (isActionKey(e)) {
|
|
73
76
|
e.preventDefault();
|
|
@@ -75,7 +78,12 @@ export function AutomationFiltersSelect({ availableFilters = [], selectedFilters
|
|
|
75
78
|
}
|
|
76
79
|
};
|
|
77
80
|
const automationFilterSelectTooltipId = useIdPrefixed("automation-filter-select-tooltip");
|
|
78
|
-
const
|
|
81
|
+
const parameterDropdownItems = availableParameters.map((parameter) => ({
|
|
82
|
+
type: "parameter",
|
|
83
|
+
ref: parameter.ref,
|
|
84
|
+
title: parameter.title,
|
|
85
|
+
}));
|
|
86
|
+
const isAddButtonDisabled = availableFilters?.length === selectedFilters?.length && availableParameters.length === 0;
|
|
79
87
|
const tooltipTextValues = {
|
|
80
88
|
add: intl.formatMessage({ id: "dialogs.automation.filters.add" }),
|
|
81
89
|
addDisabled: intl.formatMessage({ id: "dialogs.automation.filters.addDisabled" }),
|
|
@@ -83,8 +91,8 @@ export function AutomationFiltersSelect({ availableFilters = [], selectedFilters
|
|
|
83
91
|
const tooltipText = isAddButtonDisabled ? tooltipTextValues.addDisabled : tooltipTextValues.add;
|
|
84
92
|
const searchAriaLabel = intl.formatMessage({ id: "dialogs.automation.filters.searchAriaLabel" });
|
|
85
93
|
const disableFilters = !storeFilters && !!isDashboardAutomation;
|
|
86
|
-
return (_jsxs("div", { className: "gd-input-component gd-notification-channels-automation-filters s-gd-notifications-channels-dialog-automation-filters", children: [hideTitle ? (_jsx("div", { className: "sr-only", id: AUTOMATION_FILTERS_GROUP_LABEL_ID, children: _jsx(FormattedMessage, { id: "dialogs.schedule.email.filters", values: { count:
|
|
87
|
-
_jsx(UiButton, { label: intl.formatMessage({ id: "dialogs.schedule.email.filters" }, { count:
|
|
94
|
+
return (_jsxs("div", { className: "gd-input-component gd-notification-channels-automation-filters s-gd-notifications-channels-dialog-automation-filters", children: [hideTitle ? (_jsx("div", { className: "sr-only", id: AUTOMATION_FILTERS_GROUP_LABEL_ID, children: _jsx(FormattedMessage, { id: "dialogs.schedule.email.filters", values: { count: chipCount } }) })) : (_jsx("div", { className: "gd-label", id: AUTOMATION_FILTERS_GROUP_LABEL_ID, children: isExpandable && !shouldRenderByTab ? (_jsxs(BubbleHoverTrigger, { showDelay: 500, hideDelay: 0, children: [
|
|
95
|
+
_jsx(UiButton, { label: intl.formatMessage({ id: "dialogs.schedule.email.filters" }, { count: chipCount }), variant: "tertiary", onClick: () => setIsExpanded(!isExpanded), iconAfter: isExpanded ? "navigateUp" : "navigateDown", accessibilityConfig: {
|
|
88
96
|
ariaExpanded: isExpanded,
|
|
89
97
|
ariaDescription: isExpanded
|
|
90
98
|
? intl.formatMessage({
|
|
@@ -95,7 +103,7 @@ export function AutomationFiltersSelect({ availableFilters = [], selectedFilters
|
|
|
95
103
|
}),
|
|
96
104
|
iconAriaHidden: true,
|
|
97
105
|
} }), _jsx(Bubble, { className: "bubble-primary", alignPoints: [{ align: "bc tc" }], children: isExpanded ? (_jsx(FormattedMessage, { id: "dialogs.automation.filters.showLess" })) : (_jsx(FormattedMessage, { id: "dialogs.automation.filters.showAll" })) })
|
|
98
|
-
] })) : (_jsx(FormattedMessage, { id: "dialogs.schedule.email.filters", values: { count:
|
|
106
|
+
] })) : (_jsx(FormattedMessage, { id: "dialogs.schedule.email.filters", values: { count: chipCount } })) })), _jsxs("div", { className: "gd-automation-filters", children: [showAllFilters ? (_jsxs(_Fragment, { children: [
|
|
99
107
|
_jsx(AutomationCheckboxOrNote, { isDashboardAutomation: isDashboardAutomation, storeFilters: storeFilters, handleStoreFiltersChange: handleStoreFiltersChange, handleKeyDown: handleKeyDown, automationFilterSelectTooltipId: automationFilterSelectTooltipId }), _jsx(Divider, {})
|
|
100
108
|
] })) : null, _jsxs("div", { className: `gd-automation-filters__wrapper${storeFilters || !isDashboardAutomation ? "" : " gd-automation-filters__wrapper--disabled"}`, children: [disableFilters ? _jsx("div", { className: "gd-automation-filters__overlay" }) : null, shouldRenderByTab && tabFiltersData.processedFiltersByTab ? (
|
|
101
109
|
// Render filters grouped by tab with dividers between sections
|
|
@@ -128,16 +136,20 @@ export function AutomationFiltersSelect({ availableFilters = [], selectedFilters
|
|
|
128
136
|
} }) }) })), DropdownTitleComponent: () => (_jsx("div", { className: "gd-automation-filters__dropdown-header", children: _jsx(Typography, { tagName: "h3", id: AUTOMATION_FILTERS_DIALOG_TITLE_ID, children: _jsx(FormattedMessage, { id: "dialogs.automation.filters.title" }) }) })), renderNoData: () => (_jsx("div", { className: "gd-automation-filters__dropdown-no-filters", children: _jsx(FormattedMessage, { id: "dialogs.automation.filters.noFilters" }) })) }) }, tab.tabId));
|
|
129
137
|
}) })) : (
|
|
130
138
|
// Render flat filter list (original behavior)
|
|
131
|
-
_jsxs("div", { className: "gd-automation-filters__list", role: "group", "aria-labelledby": AUTOMATION_FILTERS_GROUP_LABEL_ID, ref: filterGroupRef, onBlur: makeFilterGroupUnfocusable, children: [
|
|
132
|
-
.
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
+
_jsxs("div", { className: "gd-automation-filters__list", role: "group", "aria-labelledby": AUTOMATION_FILTERS_GROUP_LABEL_ID, ref: filterGroupRef, onBlur: makeFilterGroupUnfocusable, children: [[
|
|
140
|
+
...filters.map((filter) => {
|
|
141
|
+
const isCommonDateFilter = isDashboardCommonDateFilter(filter) ||
|
|
142
|
+
(isDashboardDateFilter(filter) &&
|
|
143
|
+
commonDateFilterId === filter.dateFilter.localIdentifier);
|
|
144
|
+
return (_jsx(AutomationFilter, { filter: filter, attributeConfigs: attributeConfigs, onChange: handleChangeFilter, onDelete: handleDeleteFilter, isCommonDateFilter: isCommonDateFilter, overlayPositionType: overlayPositionType, lockedFilters: lockedFilters, isReadOnly: disableFilters }, dashboardFilterLocalIdentifier(filter)));
|
|
145
|
+
}),
|
|
146
|
+
...visibleParameters.map((parameter) => (_jsx(AutomationParameter, { parameter: parameter, onChange: onParameterChange, onDelete: onParameterDelete, overlayPositionType: overlayPositionType }, `parameter-${parameter.ref.identifier}`))),
|
|
147
|
+
].slice(0, showAllFilters || isExpanded ? undefined : COLLAPSED_FILTERS_COUNT), isExpanded || !isExpandable ? (_jsx(AttributesDropdown, { id: AUTOMATION_FILTERS_DIALOG_ID, onClose: () => { }, onSelect: (value) => {
|
|
139
148
|
handleAddFilter(value, attributes, dateDatasets);
|
|
140
149
|
setIsExpanded(true);
|
|
150
|
+
}, parameters: parameterDropdownItems, onParameterSelect: (ref) => {
|
|
151
|
+
onParameterAdd?.(ref);
|
|
152
|
+
setIsExpanded(true);
|
|
141
153
|
}, attributes: attributes, dateDatasets: dateDatasets, measures: measures, openOnInit: false, overlayPositionType: overlayPositionType, className: "gd-automation-filters__dropdown s-automation-filters-add-filter-dropdown", getCustomItemTitle: (item) => getCatalogItemCustomTitle(item, availableFilters, dateConfigs), accessibilityConfig: {
|
|
142
154
|
ariaLabelledBy: AUTOMATION_FILTERS_DIALOG_TITLE_ID,
|
|
143
155
|
searchAriaLabel: searchAriaLabel,
|
package/esm/presentation/automations/shared/automationFilters/components/AutomationParameter.d.ts
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { type ReactNode } from "react";
|
|
2
|
+
import { type IdentifierRef } from "@gooddata/sdk-model";
|
|
3
|
+
import { type OverlayPositionType } from "@gooddata/sdk-ui-kit";
|
|
4
|
+
import { type IAutomationParameter } from "../automationParameters.js";
|
|
5
|
+
/**
|
|
6
|
+
* @internal
|
|
7
|
+
*/
|
|
8
|
+
export interface IAutomationParameterProps {
|
|
9
|
+
parameter: IAutomationParameter;
|
|
10
|
+
onChange?: (ref: IdentifierRef, value: number) => void;
|
|
11
|
+
onDelete?: (ref: IdentifierRef) => void;
|
|
12
|
+
overlayPositionType?: OverlayPositionType;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Workspace parameter as an editable chip in automation dialogs.
|
|
16
|
+
*
|
|
17
|
+
* @internal
|
|
18
|
+
*/
|
|
19
|
+
export declare function AutomationParameter({ parameter, onChange, onDelete, overlayPositionType }: IAutomationParameterProps): ReactNode;
|
|
20
|
+
//# sourceMappingURL=AutomationParameter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AutomationParameter.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/automations/shared/automationFilters/components/AutomationParameter.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAsB,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAI3D,OAAO,EAAgC,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACvF,OAAO,EAEH,KAAK,mBAAmB,EAM3B,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,KAAK,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAEvE;;GAEG;AACH,MAAM,WAAW,yBAAyB;IACtC,SAAS,EAAE,oBAAoB,CAAC;IAChC,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACvD,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,aAAa,KAAK,IAAI,CAAC;IACxC,mBAAmB,CAAC,EAAE,mBAAmB,CAAC;CAC7C;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,EAChC,SAAS,EACT,QAAQ,EACR,QAAQ,EACR,mBAAmB,EACtB,EAAE,yBAAyB,GAAG,SAAS,CAoEvC"}
|
package/esm/presentation/automations/shared/automationFilters/components/AutomationParameter.js
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useIntl } from "react-intl";
|
|
3
|
+
import { DashboardParameterModeValues } from "@gooddata/sdk-model";
|
|
4
|
+
import { Dropdown, ParameterControlDropdown, UiChip, UiTooltip, isActionKey, useIdPrefixed, } from "@gooddata/sdk-ui-kit";
|
|
5
|
+
/**
|
|
6
|
+
* Workspace parameter as an editable chip in automation dialogs.
|
|
7
|
+
*
|
|
8
|
+
* @internal
|
|
9
|
+
*/
|
|
10
|
+
export function AutomationParameter({ parameter, onChange, onDelete, overlayPositionType, }) {
|
|
11
|
+
const intl = useIntl();
|
|
12
|
+
const { ref, title, value, mode, constraints } = parameter;
|
|
13
|
+
const testId = `automation-parameter-${ref.identifier}`;
|
|
14
|
+
const label = intl.formatMessage({ id: "dialogs.automation.parameters.chip" }, { title, value });
|
|
15
|
+
const lockedTooltip = intl.formatMessage({ id: "dialogs.automation.filters.lockedTooltip" });
|
|
16
|
+
const deleteAriaLabel = intl.formatMessage({ id: "dialogs.automation.filters.deleteAriaLabel" });
|
|
17
|
+
const tooltipId = useIdPrefixed("automation-parameter-tooltip");
|
|
18
|
+
if (mode === DashboardParameterModeValues.READONLY) {
|
|
19
|
+
return (_jsx(UiChip, { label: label, iconBefore: "parameter", isLocked: true, isExpandable: false, dataTestId: testId, renderChipContent: (content) => (_jsx(UiTooltip, { id: tooltipId, arrowPlacement: "top-start", content: lockedTooltip, triggerBy: ["hover", "focus"], anchor: content, anchorWrapperStyles: { display: "flex", width: "100%", height: "100%", minWidth: 0 } })) }));
|
|
20
|
+
}
|
|
21
|
+
return (_jsx(Dropdown, { overlayPositionType: overlayPositionType, renderButton: ({ isOpen, toggleDropdown }) => (_jsx(UiChip, { label: label, iconBefore: "parameter", isActive: isOpen, isDeletable: true, onClick: () => toggleDropdown(), onDelete: () => onDelete?.(ref), dataTestId: testId, accessibilityConfig: {
|
|
22
|
+
isExpanded: isOpen,
|
|
23
|
+
deleteAriaLabel: `${deleteAriaLabel} ${title}`,
|
|
24
|
+
}, onDeleteKeyDown: (event) => {
|
|
25
|
+
if (isActionKey(event)) {
|
|
26
|
+
event.stopPropagation();
|
|
27
|
+
}
|
|
28
|
+
} })), renderBody: ({ closeDropdown }) => (_jsx(ParameterControlDropdown, { name: title, value: value, constraints: constraints, onApply: (next) => {
|
|
29
|
+
onChange?.(ref, next);
|
|
30
|
+
closeDropdown();
|
|
31
|
+
}, onCancel: closeDropdown })) }));
|
|
32
|
+
}
|
package/esm/presentation/automations/shared/automationFilters/useAutomationAlertParameters.d.ts
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { type Dispatch, type SetStateAction } from "react";
|
|
2
|
+
import { type IAutomationMetadataObjectDefinition, type IdentifierRef, type ObjRef } from "@gooddata/sdk-model";
|
|
3
|
+
import { type IAutomationParameter } from "./automationParameters.js";
|
|
4
|
+
/**
|
|
5
|
+
* @internal
|
|
6
|
+
*/
|
|
7
|
+
export interface IUseAutomationAlertParameters {
|
|
8
|
+
/**
|
|
9
|
+
* The parameter chips to render. Empty when the `enableParameters` feature is off.
|
|
10
|
+
*/
|
|
11
|
+
automationParameters: IAutomationParameter[];
|
|
12
|
+
/**
|
|
13
|
+
* Workspace parameters addable via the "+" menu (catalog minus the selected set and minus
|
|
14
|
+
* dashboard-`hidden`/`readonly` parameters). Empty when the feature is off.
|
|
15
|
+
*/
|
|
16
|
+
availableParameters: IAutomationParameter[];
|
|
17
|
+
onParameterAdd: (ref: IdentifierRef) => void;
|
|
18
|
+
onParameterChange: (ref: IdentifierRef, value: number) => void;
|
|
19
|
+
onParameterDelete: (ref: IdentifierRef) => void;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Parameter editing for the alert dialog. The single source of truth is the edited automation's
|
|
23
|
+
* `alert.execution.parameters` ({ref, value} wire shape); the display-ready set is derived per render.
|
|
24
|
+
*
|
|
25
|
+
* @internal
|
|
26
|
+
*/
|
|
27
|
+
export declare function useAutomationAlertParameters({ editedAutomation, setEditedAutomation, widgetRef }: {
|
|
28
|
+
editedAutomation: IAutomationMetadataObjectDefinition | undefined;
|
|
29
|
+
setEditedAutomation: Dispatch<SetStateAction<IAutomationMetadataObjectDefinition | undefined>>;
|
|
30
|
+
widgetRef?: ObjRef;
|
|
31
|
+
}): IUseAutomationAlertParameters;
|
|
32
|
+
//# sourceMappingURL=useAutomationAlertParameters.d.ts.map
|
package/esm/presentation/automations/shared/automationFilters/useAutomationAlertParameters.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useAutomationAlertParameters.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/automations/shared/automationFilters/useAutomationAlertParameters.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,QAAQ,EAAE,KAAK,cAAc,EAAwB,MAAM,OAAO,CAAC;AAEjF,OAAO,EAEH,KAAK,mCAAmC,EAExC,KAAK,aAAa,EAClB,KAAK,MAAM,EAEd,MAAM,qBAAqB,CAAC;AAU7B,OAAO,EACH,KAAK,oBAAoB,EAI5B,MAAM,2BAA2B,CAAC;AAInC;;GAEG;AACH,MAAM,WAAW,6BAA6B;IAC1C;;OAEG;IACH,oBAAoB,EAAE,oBAAoB,EAAE,CAAC;IAC7C;;;OAGG;IACH,mBAAmB,EAAE,oBAAoB,EAAE,CAAC;IAC5C,cAAc,EAAE,CAAC,GAAG,EAAE,aAAa,KAAK,IAAI,CAAC;IAC7C,iBAAiB,EAAE,CAAC,GAAG,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/D,iBAAiB,EAAE,CAAC,GAAG,EAAE,aAAa,KAAK,IAAI,CAAC;CACnD;AAED;;;;;GAKG;AACH,wBAAgB,4BAA4B,CAAC,EACzC,gBAAgB,EAChB,mBAAmB,EACnB,SAAS,EACZ,EAAE;IACC,gBAAgB,EAAE,mCAAmC,GAAG,SAAS,CAAC;IAClE,mBAAmB,EAAE,QAAQ,CAAC,cAAc,CAAC,mCAAmC,GAAG,SAAS,CAAC,CAAC,CAAC;IAC/F,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB,GAAG,6BAA6B,CAkFhC"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
// (C) 2026 GoodData Corporation
|
|
2
|
+
import { useCallback, useMemo } from "react";
|
|
3
|
+
import { DashboardParameterModeValues, areObjRefsEqual, } from "@gooddata/sdk-model";
|
|
4
|
+
import { useDashboardSelector } from "../../../../model/react/DashboardStoreProvider.js";
|
|
5
|
+
import { selectCatalogParameters } from "../../../../model/store/catalog/catalogSelectors.js";
|
|
6
|
+
import { selectEnableParameters } from "../../../../model/store/config/configSelectors.js";
|
|
7
|
+
import { selectEffectiveDashboardParametersForWidget, selectEffectiveParameterValuesForWidget, } from "../../../../model/store/tabs/parameters/parametersSelectors.js";
|
|
8
|
+
import { availableAutomationParameters, reconstructAutomationParametersFromValues, setAlertExecutionParameters, } from "./automationParameters.js";
|
|
9
|
+
const EMPTY_PARAMETERS = [];
|
|
10
|
+
/**
|
|
11
|
+
* Parameter editing for the alert dialog. The single source of truth is the edited automation's
|
|
12
|
+
* `alert.execution.parameters` ({ref, value} wire shape); the display-ready set is derived per render.
|
|
13
|
+
*
|
|
14
|
+
* @internal
|
|
15
|
+
*/
|
|
16
|
+
export function useAutomationAlertParameters({ editedAutomation, setEditedAutomation, widgetRef, }) {
|
|
17
|
+
const parametersEnabled = useDashboardSelector(selectEnableParameters);
|
|
18
|
+
const catalog = useDashboardSelector(selectCatalogParameters);
|
|
19
|
+
const dashboardParameters = useDashboardSelector(selectEffectiveDashboardParametersForWidget(widgetRef));
|
|
20
|
+
const widgetParameterValues = useDashboardSelector(selectEffectiveParameterValuesForWidget(widgetRef));
|
|
21
|
+
const storedParameters = editedAutomation?.alert?.execution?.parameters;
|
|
22
|
+
const automationParameters = useMemo(() => {
|
|
23
|
+
if (!parametersEnabled || !storedParameters?.length) {
|
|
24
|
+
return EMPTY_PARAMETERS;
|
|
25
|
+
}
|
|
26
|
+
return (reconstructAutomationParametersFromValues(storedParameters, dashboardParameters, catalog)
|
|
27
|
+
// `hidden` parameters stay in the stored payload but are never rendered or user-editable
|
|
28
|
+
.filter((parameter) => parameter.mode !== DashboardParameterModeValues.HIDDEN));
|
|
29
|
+
}, [parametersEnabled, storedParameters, dashboardParameters, catalog]);
|
|
30
|
+
const availableParameters = useMemo(() => parametersEnabled
|
|
31
|
+
? availableAutomationParameters(catalog, automationParameters, dashboardParameters, widgetParameterValues)
|
|
32
|
+
: EMPTY_PARAMETERS, [parametersEnabled, catalog, automationParameters, dashboardParameters, widgetParameterValues]);
|
|
33
|
+
const updateAlertParameters = useCallback((update) => {
|
|
34
|
+
setEditedAutomation((definition) => definition?.alert
|
|
35
|
+
? setAlertExecutionParameters(definition, update(definition.alert.execution.parameters ?? []))
|
|
36
|
+
: definition);
|
|
37
|
+
}, [setEditedAutomation]);
|
|
38
|
+
const onParameterChange = useCallback((ref, value) => {
|
|
39
|
+
updateAlertParameters((current) => current.map((parameter) => areObjRefsEqual(parameter.ref, ref) ? { ...parameter, value } : parameter));
|
|
40
|
+
}, [updateAlertParameters]);
|
|
41
|
+
const onParameterDelete = useCallback((ref) => {
|
|
42
|
+
updateAlertParameters((current) => current.filter((parameter) => !areObjRefsEqual(parameter.ref, ref)));
|
|
43
|
+
}, [updateAlertParameters]);
|
|
44
|
+
const onParameterAdd = useCallback((ref) => {
|
|
45
|
+
const parameter = availableParameters.find((candidate) => areObjRefsEqual(candidate.ref, ref));
|
|
46
|
+
if (parameter) {
|
|
47
|
+
updateAlertParameters((current) => [...current, { ref, value: parameter.value }]);
|
|
48
|
+
}
|
|
49
|
+
}, [availableParameters, updateAlertParameters]);
|
|
50
|
+
return {
|
|
51
|
+
automationParameters,
|
|
52
|
+
availableParameters,
|
|
53
|
+
onParameterChange,
|
|
54
|
+
onParameterDelete,
|
|
55
|
+
onParameterAdd,
|
|
56
|
+
};
|
|
57
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DashboardLoading.d.ts","sourceRoot":"","sources":["../../../../src/presentation/dashboard/components/DashboardLoading.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"DashboardLoading.d.ts","sourceRoot":"","sources":["../../../../src/presentation/dashboard/components/DashboardLoading.tsx"],"names":[],"mappings":"AAMA,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,aAAa,CAAC;AAInD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,eAAe,2CA8BtD"}
|
|
@@ -1,17 +1,27 @@
|
|
|
1
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
1
|
+
import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
// (C) 2022-2026 GoodData Corporation
|
|
3
3
|
import { useDashboardSelector } from "../../../model/react/DashboardStoreProvider.js";
|
|
4
4
|
import { selectDashboardLoading } from "../../../model/store/loading/loadingSelectors.js";
|
|
5
5
|
import { useDashboardComponentsContext } from "../../dashboardContexts/DashboardComponentsContext.js";
|
|
6
|
+
import { useDashboardExportData } from "../../export/useExportData.js";
|
|
6
7
|
import { DashboardInner } from "./DashboardInner.js";
|
|
7
8
|
export function DashboardLoading(props) {
|
|
8
9
|
const { loading, error, result } = useDashboardSelector(selectDashboardLoading);
|
|
9
10
|
const { ErrorComponent, LoadingComponent } = useDashboardComponentsContext();
|
|
11
|
+
// The render mode and the settings are set in the store only after the dashboard
|
|
12
|
+
// initialization finishes, so both must be read from the config here.
|
|
13
|
+
const isEarlyExportStatusEnabled = Boolean(props.config?.settings?.enableExportTimeoutFix);
|
|
14
|
+
const exportData = useDashboardExportData(isEarlyExportStatusEnabled ? props.config?.initialRenderMode : undefined, "loading", "root");
|
|
10
15
|
if (error) {
|
|
11
16
|
return _jsx(ErrorComponent, { message: error.message });
|
|
12
17
|
}
|
|
13
18
|
if (loading || !result) {
|
|
14
|
-
|
|
19
|
+
// In export mode, emit the loading export status right away so that the exporter
|
|
20
|
+
// can tell the rendering has started even before any dashboard data is loaded.
|
|
21
|
+
// The element is a hidden sibling (same as the gd-dashboard-meta export data),
|
|
22
|
+
// so it cannot affect the layout of the loading indicator.
|
|
23
|
+
return (_jsxs(_Fragment, { children: [exportData ? _jsx("div", { style: { display: "none" }, ...exportData }) : null, _jsx(LoadingComponent, {})
|
|
24
|
+
] }));
|
|
15
25
|
}
|
|
16
26
|
return _jsx(DashboardInner, { ...props });
|
|
17
27
|
}
|
|
@@ -19,7 +19,7 @@ export type ExportMetaType = "dashboard-id" | "dashboard-title" | "dashboard-des
|
|
|
19
19
|
export type CommonExportDataAttributes = {
|
|
20
20
|
"data-export-type": ExportElementType;
|
|
21
21
|
"data-export-depth"?: string;
|
|
22
|
-
"data-export-status"?: "empty" | "loaded";
|
|
22
|
+
"data-export-status"?: "loading" | "empty" | "loaded";
|
|
23
23
|
};
|
|
24
24
|
/**
|
|
25
25
|
* Data attributes with export specification for meta.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/presentation/export/types.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,sBAAsB,EAAE,MAAM,uCAAuC,CAAC;AAEpF;;;;GAIG;AACH,MAAM,MAAM,iBAAiB,GACvB,MAAM,GACN,WAAW,GACX,SAAS,GACT,cAAc,GACd,eAAe,GACf,qBAAqB,GACrB,QAAQ,GACR,gBAAgB,GAChB,cAAc,GACd,oBAAoB,CAAC;AAE3B;;;;GAIG;AACH,MAAM,MAAM,cAAc,GACpB,cAAc,GACd,iBAAiB,GACjB,uBAAuB,GACvB,gBAAgB,GAChB,eAAe,GACf,mBAAmB,GACnB,kBAAkB,GAClB,uBAAuB,GACvB,wBAAwB,GACxB,iBAAiB,GACjB,gBAAgB,GAChB,MAAM,GACN,aAAa,GACb,eAAe,CAAC;AAEtB;;;;GAIG;AACH,MAAM,MAAM,0BAA0B,GAAG;IACrC,kBAAkB,EAAE,iBAAiB,CAAC;IACtC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,oBAAoB,CAAC,EAAE,OAAO,GAAG,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/presentation/export/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,7 +4,7 @@ import { type CommonExportDataAttributes, type MetaExportData, type MetaExportDa
|
|
|
4
4
|
/**
|
|
5
5
|
* @alpha
|
|
6
6
|
*/
|
|
7
|
-
export declare const useDashboardExportData: (renderMode: RenderMode | undefined, status: "empty" | "loaded", type: "nested" | "root") => CommonExportDataAttributes | undefined;
|
|
7
|
+
export declare const useDashboardExportData: (renderMode: RenderMode | undefined, status: "empty" | "loaded" | "loading", type: "nested" | "root") => CommonExportDataAttributes | undefined;
|
|
8
8
|
/**
|
|
9
9
|
* @alpha
|
|
10
10
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useExportData.d.ts","sourceRoot":"","sources":["../../../src/presentation/export/useExportData.ts"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAC;AAChF,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAEjD,OAAO,EACH,KAAK,0BAA0B,EAC/B,KAAK,cAAc,EACnB,KAAK,wBAAwB,EAC7B,KAAK,kBAAkB,EAEvB,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACrB,KAAK,0BAA0B,EAClC,MAAM,YAAY,CAAC;AAsCpB;;GAEG;AACH,eAAO,MAAM,sBAAsB,
|
|
1
|
+
{"version":3,"file":"useExportData.d.ts","sourceRoot":"","sources":["../../../src/presentation/export/useExportData.ts"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAC;AAChF,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAEjD,OAAO,EACH,KAAK,0BAA0B,EAC/B,KAAK,cAAc,EACnB,KAAK,wBAAwB,EAC7B,KAAK,kBAAkB,EAEvB,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACrB,KAAK,0BAA0B,EAClC,MAAM,YAAY,CAAC;AAsCpB;;GAEG;AACH,eAAO,MAAM,sBAAsB,iJAalC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,oBAAoB,kDA+BhC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,+BAA+B,gHA6B3C,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,mBAAmB,mEAyB/B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,qBAAqB,sCAUjC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,0BAA0B,uIAiBtC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,iBAAiB,kCAmE7B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,sBAAsB,mIAelC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,kBAAkB;;;CAwB9B,CAAC"}
|