@gooddata/sdk-ui-dashboard 11.52.0-alpha.4 → 11.52.0-alpha.6
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 +22 -22
- package/esm/__version.d.ts +1 -1
- package/esm/__version.js +1 -1
- package/esm/index.d.ts +3 -3
- package/esm/index.d.ts.map +1 -1
- package/esm/index.js +3 -3
- package/esm/model/commandHandlers/index.d.ts.map +1 -1
- package/esm/model/commandHandlers/index.js +2 -0
- package/esm/model/commandHandlers/widgets/changeVisualizationSwitcherActiveVisualizationHandler.d.ts +6 -0
- package/esm/model/commandHandlers/widgets/changeVisualizationSwitcherActiveVisualizationHandler.d.ts.map +1 -0
- package/esm/model/commandHandlers/widgets/changeVisualizationSwitcherActiveVisualizationHandler.js +12 -0
- package/esm/model/commands/base.d.ts +1 -1
- package/esm/model/commands/base.d.ts.map +1 -1
- package/esm/model/commands/index.d.ts +2 -2
- package/esm/model/commands/index.d.ts.map +1 -1
- package/esm/model/commands/visualizationSwitcher.d.ts +33 -0
- package/esm/model/commands/visualizationSwitcher.d.ts.map +1 -1
- package/esm/model/commands/visualizationSwitcher.js +21 -0
- package/esm/model/events/base.d.ts +1 -1
- package/esm/model/events/base.d.ts.map +1 -1
- package/esm/model/events/index.d.ts +2 -2
- package/esm/model/events/index.d.ts.map +1 -1
- package/esm/model/events/visualizationSwitcher.d.ts +34 -0
- package/esm/model/events/visualizationSwitcher.d.ts.map +1 -1
- package/esm/model/events/visualizationSwitcher.js +21 -0
- package/esm/model/react/useDashboardCommand.d.ts +1 -0
- package/esm/model/react/useDashboardCommand.d.ts.map +1 -1
- package/esm/model/react/useDashboardCommandProcessing.d.ts +4 -0
- package/esm/model/react/useDashboardCommandProcessing.d.ts.map +1 -1
- package/esm/model/store/ui/index.d.ts +4 -0
- package/esm/model/store/ui/index.d.ts.map +1 -1
- package/esm/model/store/ui/uiReducers.d.ts +7 -0
- package/esm/model/store/ui/uiReducers.d.ts.map +1 -1
- package/esm/model/store/ui/uiReducers.js +6 -0
- package/esm/model/store/ui/uiSelectors.d.ts +8 -0
- package/esm/model/store/ui/uiSelectors.d.ts.map +1 -1
- package/esm/model/store/ui/uiSelectors.js +10 -0
- package/esm/model/store/ui/uiState.d.ts +6 -0
- package/esm/model/store/ui/uiState.d.ts.map +1 -1
- package/esm/model/store/ui/uiState.js +1 -0
- package/esm/presentation/automations/alerting/AlertingDialog.d.ts +3 -0
- package/esm/presentation/automations/alerting/AlertingDialog.d.ts.map +1 -1
- package/esm/presentation/automations/alerting/AlertingDialog.js +5 -1
- package/esm/presentation/automations/alerting/DefaultAlertingDialog/DefaultAlertingDialog.d.ts +9 -6
- package/esm/presentation/automations/alerting/DefaultAlertingDialog/DefaultAlertingDialog.d.ts.map +1 -1
- package/esm/presentation/automations/alerting/DefaultAlertingDialog/DefaultAlertingDialog.js +33 -12
- package/esm/presentation/automations/alerting/DefaultAlertingDialog/hooks/useAlertThreshold.d.ts +9 -0
- package/esm/presentation/automations/alerting/DefaultAlertingDialog/hooks/useAlertThreshold.d.ts.map +1 -1
- package/esm/presentation/automations/alerting/DefaultAlertingDialog/hooks/useAlertThreshold.js +9 -0
- package/esm/presentation/automations/alerting/state/AlertActionsContext.d.ts +23 -0
- package/esm/presentation/automations/alerting/state/AlertActionsContext.d.ts.map +1 -0
- package/esm/presentation/automations/alerting/state/AlertActionsContext.js +19 -0
- package/esm/presentation/automations/alerting/state/AlertDataContext.d.ts +24 -0
- package/esm/presentation/automations/alerting/state/AlertDataContext.d.ts.map +1 -0
- package/esm/presentation/automations/alerting/state/AlertDataContext.js +19 -0
- package/esm/presentation/automations/alerting/state/AlertDraftContext.d.ts +24 -0
- package/esm/presentation/automations/alerting/state/AlertDraftContext.d.ts.map +1 -0
- package/esm/presentation/automations/alerting/state/AlertDraftContext.js +19 -0
- package/esm/presentation/automations/alerting/state/AlertFiltersContext.d.ts +26 -0
- package/esm/presentation/automations/alerting/state/AlertFiltersContext.d.ts.map +1 -0
- package/esm/presentation/automations/alerting/state/AlertFiltersContext.js +19 -0
- package/esm/presentation/automations/alerting/state/AlertingDialogStateProvider.d.ts +21 -0
- package/esm/presentation/automations/alerting/state/AlertingDialogStateProvider.d.ts.map +1 -0
- package/esm/presentation/automations/alerting/state/AlertingDialogStateProvider.js +168 -0
- package/esm/presentation/automations/alerting/state/missingAlertStateProvider.d.ts +7 -0
- package/esm/presentation/automations/alerting/state/missingAlertStateProvider.d.ts.map +1 -0
- package/esm/presentation/automations/alerting/state/missingAlertStateProvider.js +9 -0
- package/esm/presentation/automations/alerting/state/useAlertDialogValidity.d.ts +15 -0
- package/esm/presentation/automations/alerting/state/useAlertDialogValidity.d.ts.map +1 -0
- package/esm/presentation/automations/alerting/state/useAlertDialogValidity.js +45 -0
- package/esm/presentation/automations/alerting/{DefaultAlertingDialog/hooks/useAlertFilters.d.ts → state/useAlertFiltersModel.d.ts} +6 -6
- package/esm/presentation/automations/alerting/state/useAlertFiltersModel.d.ts.map +1 -0
- package/esm/presentation/automations/alerting/{DefaultAlertingDialog/hooks/useAlertFilters.js → state/useAlertFiltersModel.js} +4 -4
- package/esm/presentation/automations/alerting/{DefaultAlertingDialog/hooks → state}/useAlertFormState.d.ts +4 -4
- package/esm/presentation/automations/alerting/state/useAlertFormState.d.ts.map +1 -0
- package/esm/presentation/automations/alerting/{DefaultAlertingDialog/hooks → state}/useAlertFormState.js +14 -14
- package/esm/presentation/automations/alerting/state/useAlertFormValidation.d.ts.map +1 -0
- package/esm/presentation/automations/alerting/{DefaultAlertingDialog/hooks → state}/useAlertFormValidation.js +3 -3
- package/esm/presentation/automations/alerting/{DefaultAlertingDialog/hooks → state}/useAlertSelectedValues.d.ts +17 -7
- package/esm/presentation/automations/alerting/state/useAlertSelectedValues.d.ts.map +1 -0
- package/esm/presentation/automations/alerting/{DefaultAlertingDialog/hooks → state}/useAlertSelectedValues.js +27 -4
- package/esm/presentation/automations/alerting/{DefaultAlertingDialog/hooks → state}/useAlertSupportedMetrics.d.ts +3 -3
- package/esm/presentation/automations/alerting/state/useAlertSupportedMetrics.d.ts.map +1 -0
- package/esm/presentation/automations/alerting/{DefaultAlertingDialog/hooks → state}/useAlertSupportedMetrics.js +5 -5
- package/esm/presentation/automations/shared/automationFilters/hooks/useDefaultSelectedFiltersForNewAutomation.d.ts.map +1 -1
- package/esm/presentation/automations/shared/automationFilters/hooks/useDefaultSelectedFiltersForNewAutomation.js +2 -1
- package/esm/presentation/dashboard/components/DashboardLoading.js +1 -1
- package/esm/presentation/dashboardSettingsDialog/TimezoneOption.d.ts.map +1 -1
- package/esm/presentation/dashboardSettingsDialog/TimezoneOption.js +12 -10
- package/esm/presentation/localization/bundles/en-US.localization-bundle.d.ts +8 -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 +18 -10
- package/esm/presentation/timezoneDialog/TimezoneDialog.d.ts.map +1 -1
- package/esm/presentation/timezoneDialog/TimezoneDialog.js +2 -4
- package/esm/presentation/widget/visualizationSwitcher/ViewModeDashboardVisualizationSwitcher.d.ts.map +1 -1
- package/esm/presentation/widget/visualizationSwitcher/ViewModeDashboardVisualizationSwitcher.js +11 -2
- package/esm/sdk-ui-dashboard.d.ts +114 -10
- package/package.json +21 -21
- package/styles/css/dashboardSettingsDialog.css +3 -0
- package/styles/css/dashboardSettingsDialog.css.map +1 -1
- package/styles/css/main.css +3 -0
- package/styles/css/main.css.map +1 -1
- package/styles/scss/dashboardSettingsDialog.scss +4 -0
- package/esm/presentation/automations/alerting/DefaultAlertingDialog/hooks/useAlertFilters.d.ts.map +0 -1
- package/esm/presentation/automations/alerting/DefaultAlertingDialog/hooks/useAlertFormState.d.ts.map +0 -1
- package/esm/presentation/automations/alerting/DefaultAlertingDialog/hooks/useAlertFormValidation.d.ts.map +0 -1
- package/esm/presentation/automations/alerting/DefaultAlertingDialog/hooks/useAlertSelectedValues.d.ts.map +0 -1
- package/esm/presentation/automations/alerting/DefaultAlertingDialog/hooks/useAlertSupportedMetrics.d.ts.map +0 -1
- package/esm/presentation/automations/alerting/DefaultAlertingDialog/hooks/useEditAlert.d.ts +0 -69
- package/esm/presentation/automations/alerting/DefaultAlertingDialog/hooks/useEditAlert.d.ts.map +0 -1
- package/esm/presentation/automations/alerting/DefaultAlertingDialog/hooks/useEditAlert.js +0 -145
- /package/esm/presentation/automations/alerting/{DefaultAlertingDialog/hooks → state}/useAlertFormValidation.d.ts +0 -0
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { type Dispatch, type SetStateAction } from "react";
|
|
2
2
|
import { type FilterContextItem, type IAutomationMetadataObject, type IAutomationMetadataObjectDefinition, type IAutomationVisibleFilter, type IInsight, type IWidget, type WeekStart } from "@gooddata/sdk-model";
|
|
3
|
-
import { type
|
|
4
|
-
import { type
|
|
3
|
+
import { type IMeasureFormatMap } from "../DefaultAlertingDialog/utils/getters.js";
|
|
4
|
+
import { type AlertAttribute, type AlertMetric } from "../types.js";
|
|
5
5
|
/**
|
|
6
|
-
* Props for {@link
|
|
6
|
+
* Props for {@link useAlertFiltersModel}.
|
|
7
7
|
* @internal
|
|
8
8
|
*/
|
|
9
|
-
export interface
|
|
9
|
+
export interface IUseAlertFiltersModelProps {
|
|
10
10
|
setEditedAutomation: Dispatch<SetStateAction<IAutomationMetadataObjectDefinition | undefined>>;
|
|
11
11
|
alertToEdit?: IAutomationMetadataObject;
|
|
12
12
|
editedAutomationFilters: FilterContextItem[];
|
|
@@ -40,7 +40,7 @@ export interface IUseAlertFiltersProps {
|
|
|
40
40
|
*
|
|
41
41
|
* @internal
|
|
42
42
|
*/
|
|
43
|
-
export declare function
|
|
43
|
+
export declare function useAlertFiltersModel({ setEditedAutomation, alertToEdit, editedAutomationFilters, setEditedAutomationFilters, availableFilters, filtersForNewAutomation, availableFiltersAsVisibleFilters, dashboardHiddenFilters, commonDateFilterId, widget, insight, supportedMeasures, supportedAttributes, measureFormatMap, selectedMeasure, selectedAttribute, selectedValue, weekStart, timezone }: IUseAlertFiltersModelProps): {
|
|
44
44
|
selectedFilters: FilterContextItem[];
|
|
45
45
|
availableFilters: FilterContextItem[] | undefined;
|
|
46
46
|
onFiltersChange: (filters: FilterContextItem[]) => void;
|
|
@@ -48,4 +48,4 @@ export declare function useAlertFilters({ setEditedAutomation, alertToEdit, edit
|
|
|
48
48
|
automationIsValid: boolean;
|
|
49
49
|
filtersAreStale: boolean;
|
|
50
50
|
};
|
|
51
|
-
//# sourceMappingURL=
|
|
51
|
+
//# sourceMappingURL=useAlertFiltersModel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useAlertFiltersModel.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/automations/alerting/state/useAlertFiltersModel.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,QAAQ,EAAE,KAAK,cAAc,EAAe,MAAM,OAAO,CAAC;AAExE,OAAO,EACH,KAAK,iBAAiB,EACtB,KAAK,yBAAyB,EAC9B,KAAK,mCAAmC,EACxC,KAAK,wBAAwB,EAC7B,KAAK,QAAQ,EACb,KAAK,OAAO,EACZ,KAAK,SAAS,EACjB,MAAM,qBAAqB,CAAC;AAI7B,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,2CAA2C,CAAC;AAKnF,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,WAAW,EAAE,MAAM,aAAa,CAAC;AAEpE;;;GAGG;AACH,MAAM,WAAW,0BAA0B;IACvC,mBAAmB,EAAE,QAAQ,CAAC,cAAc,CAAC,mCAAmC,GAAG,SAAS,CAAC,CAAC,CAAC;IAC/F,WAAW,CAAC,EAAE,yBAAyB,CAAC;IACxC,uBAAuB,EAAE,iBAAiB,EAAE,CAAC;IAC7C,0BAA0B,EAAE,CAAC,OAAO,EAAE,iBAAiB,EAAE,KAAK,IAAI,CAAC;IACnE,gBAAgB,CAAC,EAAE,iBAAiB,EAAE,CAAC;IACvC,uBAAuB,EAAE,iBAAiB,EAAE,CAAC;IAC7C,gCAAgC,CAAC,EAAE,wBAAwB,EAAE,GAAG,SAAS,CAAC;IAC1E,sBAAsB,EAAE,iBAAiB,EAAE,CAAC;IAC5C,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,QAAQ,CAAC;IACnB,iBAAiB,EAAE,WAAW,EAAE,CAAC;IACjC,mBAAmB,EAAE,cAAc,EAAE,CAAC;IACtC,gBAAgB,EAAE,iBAAiB,CAAC;IACpC,eAAe,EAAE,WAAW,GAAG,SAAS,CAAC;IACzC,iBAAiB,EAAE,cAAc,GAAG,SAAS,CAAC;IAC9C,aAAa,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACzC,SAAS,EAAE,SAAS,CAAC;IACrB,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;CAChC;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,oBAAoB,CAAC,EACjC,mBAAmB,EACnB,WAAW,EACX,uBAAuB,EACvB,0BAA0B,EAC1B,gBAAgB,EAChB,uBAAuB,EACvB,gCAAgC,EAChC,sBAAsB,EACtB,kBAAkB,EAClB,MAAM,EACN,OAAO,EACP,iBAAiB,EACjB,mBAAmB,EACnB,gBAAgB,EAChB,eAAe,EACf,iBAAiB,EACjB,aAAa,EACb,SAAS,EACT,QAAQ,EACX,EAAE,0BAA0B,GAAG;IAC5B,eAAe,EAAE,iBAAiB,EAAE,CAAC;IACrC,gBAAgB,EAAE,iBAAiB,EAAE,GAAG,SAAS,CAAC;IAClD,eAAe,EAAE,CAAC,OAAO,EAAE,iBAAiB,EAAE,KAAK,IAAI,CAAC;IACxD,qBAAqB,EAAE,MAAM,IAAI,CAAC;IAClC,iBAAiB,EAAE,OAAO,CAAC;IAC3B,eAAe,EAAE,OAAO,CAAC;CAC5B,CAsGA"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
// (C) 2026 GoodData Corporation
|
|
2
2
|
import { useCallback } from "react";
|
|
3
|
-
import { useValidateExistingAutomationFilters } from "
|
|
4
|
-
import { getAppliedWidgetFilters, getVisibleFiltersByFilters } from "
|
|
5
|
-
import { transformAlertByAttribute, transformAlertByMetric } from "../utils/transformation.js";
|
|
3
|
+
import { useValidateExistingAutomationFilters } from "../../shared/automationFilters/hooks/useValidateExistingAutomationFilters.js";
|
|
4
|
+
import { getAppliedWidgetFilters, getVisibleFiltersByFilters } from "../../shared/filters/index.js";
|
|
5
|
+
import { transformAlertByAttribute, transformAlertByMetric, } from "../DefaultAlertingDialog/utils/transformation.js";
|
|
6
6
|
/**
|
|
7
7
|
* Owns the alerting dialog's single filter model: the current selection and available filters,
|
|
8
8
|
* `onFiltersChange`/`onApplyCurrentFilters` to mutate the edited filters and mirror the result into
|
|
@@ -16,7 +16,7 @@ import { transformAlertByAttribute, transformAlertByMetric } from "../utils/tran
|
|
|
16
16
|
*
|
|
17
17
|
* @internal
|
|
18
18
|
*/
|
|
19
|
-
export function
|
|
19
|
+
export function useAlertFiltersModel({ setEditedAutomation, alertToEdit, editedAutomationFilters, setEditedAutomationFilters, availableFilters, filtersForNewAutomation, availableFiltersAsVisibleFilters, dashboardHiddenFilters, commonDateFilterId, widget, insight, supportedMeasures, supportedAttributes, measureFormatMap, selectedMeasure, selectedAttribute, selectedValue, weekStart, timezone, }) {
|
|
20
20
|
const onFiltersChange = useCallback((filters) => {
|
|
21
21
|
setEditedAutomationFilters(filters);
|
|
22
22
|
setEditedAutomation((s) => {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { type DateAttributeGranularity, type FilterContextItem, type IAlertAnomalyDetectionGranularity, type IAlertAnomalyDetectionSensitivity, type IAlertComparisonOperator, type IAlertRelativeArithmeticOperator, type IAlertRelativeOperator, type IAlertTriggerInterval, type IAlertTriggerMode, type IAutomationMetadataObject, type IAutomationMetadataObjectDefinition, type IAutomationRecipient, type IAutomationVisibleFilter, type IInsight, type INotificationChannelIdentifier, type INotificationChannelMetadataObject, type IWidget } from "@gooddata/sdk-model";
|
|
2
|
-
import { type
|
|
3
|
-
import { type
|
|
2
|
+
import { type IMeasureFormatMap } from "../DefaultAlertingDialog/utils/getters.js";
|
|
3
|
+
import { type AlertAttribute, type AlertMetric, type AlertMetricComparatorType } from "../types.js";
|
|
4
4
|
/**
|
|
5
5
|
* Props for {@link useAlertFormState}.
|
|
6
6
|
* @internal
|
|
@@ -34,8 +34,8 @@ export declare function useAlertFormState({ alertToEdit, insight, widget, notifi
|
|
|
34
34
|
originalAutomation: IAutomationMetadataObjectDefinition | undefined;
|
|
35
35
|
defaultUser: IAutomationRecipient;
|
|
36
36
|
defaultRecipient: IAutomationRecipient;
|
|
37
|
-
automationParameters: import("
|
|
38
|
-
availableParameters: import("
|
|
37
|
+
automationParameters: import("../../shared/automationFilters/automationParameters.js").IAutomationParameter[];
|
|
38
|
+
availableParameters: import("../../shared/automationFilters/automationParameters.js").IAutomationParameter[];
|
|
39
39
|
onParameterChange: (ref: import("@gooddata/sdk-model").IdentifierRef, value: string | number) => void;
|
|
40
40
|
onParameterDelete: (ref: import("@gooddata/sdk-model").IdentifierRef) => void;
|
|
41
41
|
onParameterAdd: (ref: import("@gooddata/sdk-model").IdentifierRef) => void;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useAlertFormState.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/automations/alerting/state/useAlertFormState.ts"],"names":[],"mappings":"AAMA,OAAO,EACH,KAAK,wBAAwB,EAC7B,KAAK,iBAAiB,EACtB,KAAK,iCAAiC,EACtC,KAAK,iCAAiC,EACtC,KAAK,wBAAwB,EAC7B,KAAK,gCAAgC,EACrC,KAAK,sBAAsB,EAC3B,KAAK,qBAAqB,EAC1B,KAAK,iBAAiB,EACtB,KAAK,yBAAyB,EAC9B,KAAK,mCAAmC,EACxC,KAAK,oBAAoB,EACzB,KAAK,wBAAwB,EAC7B,KAAK,QAAQ,EAEb,KAAK,8BAA8B,EACnC,KAAK,kCAAkC,EACvC,KAAK,OAAO,EACf,MAAM,qBAAqB,CAAC;AAgB7B,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,2CAA2C,CAAC;AAWnF,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,WAAW,EAAE,KAAK,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAEpG;;;GAGG;AACH,MAAM,WAAW,uBAAuB;IACpC,WAAW,CAAC,EAAE,yBAAyB,CAAC;IACxC,OAAO,CAAC,EAAE,QAAQ,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,oBAAoB,EAAE,8BAA8B,EAAE,GAAG,kCAAkC,EAAE,CAAC;IAC9F,uBAAuB,CAAC,EAAE,iBAAiB,EAAE,CAAC;IAC9C,gCAAgC,CAAC,EAAE,wBAAwB,EAAE,GAAG,SAAS,CAAC;IAC1E,yBAAyB,CAAC,EAAE,MAAM,CAAC;IACnC,iBAAiB,EAAE,WAAW,EAAE,CAAC;IACjC,mBAAmB,EAAE,cAAc,EAAE,CAAC;IACtC,gBAAgB,EAAE,iBAAiB,CAAC;CACvC;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,CAAC,EAC9B,WAAW,EACX,OAAO,EACP,MAAM,EACN,oBAAoB,EACpB,uBAAuB,EACvB,gCAAgC,EAChC,yBAAyB,EACzB,iBAAiB,EACjB,mBAAmB,EACnB,gBAAgB,EACnB,EAAE,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAwZzB"}
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
// (C) 2026 GoodData Corporation
|
|
2
|
-
import { useCallback, useState } from "react";
|
|
2
|
+
import { useCallback, useMemo, useState } from "react";
|
|
3
3
|
import { useIntl } from "react-intl";
|
|
4
|
-
import { useAlertingDialogContext } from "
|
|
5
|
-
import { useAutomationsContext } from "
|
|
6
|
-
import { setAlertExecutionParameters } from "
|
|
7
|
-
import { useAutomationAlertParameters } from "
|
|
8
|
-
import { getAppliedWidgetFilters, getVisibleFiltersByFilters, resolveMvfDimensionalityLocalRefs, } from "
|
|
9
|
-
import { convertExternalRecipientToAutomationRecipient, convertUserToAutomationRecipient, } from "
|
|
10
|
-
import { createDefaultAlert } from "../utils/convertors.js";
|
|
11
|
-
import { transformAlertByAnomalyDetection, transformAlertByAttribute, transformAlertByComparisonOperator, transformAlertByDestination, transformAlertByGranularity, transformAlertByMetric, transformAlertByRelativeOperator, transformAlertBySensitivity, } from "../utils/transformation.js";
|
|
4
|
+
import { useAlertingDialogContext } from "../../contexts/AlertingDialogContext.js";
|
|
5
|
+
import { useAutomationsContext } from "../../contexts/AutomationsContext.js";
|
|
6
|
+
import { setAlertExecutionParameters } from "../../shared/automationFilters/automationParameters.js";
|
|
7
|
+
import { useAutomationAlertParameters } from "../../shared/automationFilters/useAutomationAlertParameters.js";
|
|
8
|
+
import { getAppliedWidgetFilters, getVisibleFiltersByFilters, resolveMvfDimensionalityLocalRefs, } from "../../shared/filters/index.js";
|
|
9
|
+
import { convertExternalRecipientToAutomationRecipient, convertUserToAutomationRecipient, } from "../../shared/utils/automationUtils.js";
|
|
10
|
+
import { createDefaultAlert } from "../DefaultAlertingDialog/utils/convertors.js";
|
|
11
|
+
import { transformAlertByAnomalyDetection, transformAlertByAttribute, transformAlertByComparisonOperator, transformAlertByDestination, transformAlertByGranularity, transformAlertByMetric, transformAlertByRelativeOperator, transformAlertBySensitivity, } from "../DefaultAlertingDialog/utils/transformation.js";
|
|
12
12
|
/**
|
|
13
13
|
* Owns the alerting dialog's editable state: the `editedAutomation` draft (initialized either
|
|
14
14
|
* from `alertToEdit` or via `createDefaultAlert`), its `originalAutomation` baseline, the
|
|
@@ -28,10 +28,10 @@ export function useAlertFormState({ alertToEdit, insight, widget, notificationCh
|
|
|
28
28
|
const targetTabIdentifier = widget?.localIdentifier ? widgetTabMap[widget.localIdentifier] : undefined;
|
|
29
29
|
// Default values
|
|
30
30
|
const defaultMeasure = supportedMeasures[0];
|
|
31
|
-
const defaultUser = convertUserToAutomationRecipient(currentUser);
|
|
32
|
-
const defaultRecipient = externalRecipientOverride
|
|
31
|
+
const defaultUser = useMemo(() => convertUserToAutomationRecipient(currentUser), [currentUser]);
|
|
32
|
+
const defaultRecipient = useMemo(() => externalRecipientOverride
|
|
33
33
|
? convertExternalRecipientToAutomationRecipient(externalRecipientOverride)
|
|
34
|
-
: convertUserToAutomationRecipient(currentUser);
|
|
34
|
+
: convertUserToAutomationRecipient(currentUser), [externalRecipientOverride, currentUser]);
|
|
35
35
|
const defaultNotificationChannelId = notificationChannels[0]?.id;
|
|
36
36
|
const resolvedAlertToEdit = (() => {
|
|
37
37
|
if (!alertToEdit) {
|
|
@@ -84,10 +84,10 @@ export function useAlertFormState({ alertToEdit, insight, widget, notificationCh
|
|
|
84
84
|
//
|
|
85
85
|
// Handlers
|
|
86
86
|
//
|
|
87
|
-
const onTitleChange = (value, isValid) => {
|
|
87
|
+
const onTitleChange = useCallback((value, isValid) => {
|
|
88
88
|
setIsTitleValid(isValid);
|
|
89
89
|
setEditedAutomation((s) => (s ? { ...s, title: value } : undefined));
|
|
90
|
-
};
|
|
90
|
+
}, [setEditedAutomation]);
|
|
91
91
|
const onMeasureChange = useCallback((measure) => {
|
|
92
92
|
setEditedAutomation((alert) => alert
|
|
93
93
|
? transformAlertByMetric(supportedMeasures, alert, measure, measureFormatMap, weekStart, timezone)
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useAlertFormValidation.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/automations/alerting/state/useAlertFormValidation.ts"],"names":[],"mappings":"AAKA,OAAO,EACH,KAAK,yBAAyB,EAC9B,KAAK,mCAAmC,EACxC,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EACxB,KAAK,QAAQ,EACb,KAAK,8BAA8B,EACnC,KAAK,kCAAkC,EACvC,KAAK,OAAO,EAIf,MAAM,qBAAqB,CAAC;AAM7B,MAAM,WAAW,4BAA4B;IACzC,gBAAgB,EAAE,mCAAmC,GAAG,SAAS,CAAC;IAClE,kBAAkB,EAAE,mCAAmC,GAAG,SAAS,CAAC;IACpE,WAAW,CAAC,EAAE,yBAAyB,CAAC;IACxC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,QAAQ,CAAC;IACnB,mBAAmB,EAAE,mBAAmB,EAAE,CAAC;IAC3C,4BAA4B,EAAE,OAAO,CAAC;IACtC,2BAA2B,EACrB,8BAA8B,GAC9B,kCAAkC,GAClC,SAAS,CAAC;IAChB,uBAAuB,EAAE,OAAO,CAAC;IACjC,6BAA6B,EAAE,OAAO,CAAC;IACvC,wBAAwB,EAAE,MAAM,CAAC;IACjC,gBAAgB,EAAE,oBAAoB,CAAC;IACvC,YAAY,EAAE,OAAO,CAAC;CACzB;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,4BAA4B,GAAG;IACzE,gBAAgB,EAAE,OAAO,CAAC;IAC1B,sBAAsB,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3C,aAAa,EAAE,OAAO,CAAC;CAC1B,CA4EA"}
|
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
import { isEqual } from "lodash-es";
|
|
3
3
|
import { useIntl } from "react-intl";
|
|
4
4
|
import { isAutomationExternalUserRecipient, isAutomationUnknownUserRecipient, isAutomationUserRecipient, } from "@gooddata/sdk-model";
|
|
5
|
-
import { isEmail } from "
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
5
|
+
import { isEmail } from "../../scheduledEmail/utils/validate.js";
|
|
6
|
+
import { useAlertValidation } from "../DefaultAlertingDialog/hooks/useAlertValidation.js";
|
|
7
|
+
import { isAlertValueDefined } from "../DefaultAlertingDialog/utils/guards.js";
|
|
8
8
|
export function useAlertFormValidation(props) {
|
|
9
9
|
const { editedAutomation, originalAutomation, alertToEdit, widget, insight, catalogDateDatasets, isInvalidConnectionToInsight, selectedNotificationChannel, allowExternalRecipients, allowOnlyLoggedUserRecipients, maxAutomationsRecipients, defaultRecipient, isTitleValid, } = props;
|
|
10
10
|
const intl = useIntl();
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { type IAutomationMetadataObjectDefinition, type INotificationChannelIdentifier, type INotificationChannelMetadataObject } from "@gooddata/sdk-model";
|
|
2
|
-
import { type AlertAttribute, type AlertMetric } from "
|
|
2
|
+
import { type AlertAttribute, type AlertMetric } from "../types.js";
|
|
3
3
|
/**
|
|
4
|
-
* Props for {@link
|
|
4
|
+
* Props for {@link getAlertSelectedValues}.
|
|
5
5
|
* @internal
|
|
6
6
|
*/
|
|
7
|
-
export interface
|
|
7
|
+
export interface IGetAlertSelectedValuesProps {
|
|
8
8
|
editedAutomation: IAutomationMetadataObjectDefinition | undefined;
|
|
9
9
|
supportedMeasures: AlertMetric[];
|
|
10
10
|
supportedAttributes: AlertAttribute[];
|
|
@@ -15,17 +15,17 @@ export interface IUseAlertSelectedValuesProps {
|
|
|
15
15
|
*
|
|
16
16
|
* Deliberately unmemoized. The returned objects flow into `useCallback` dependency arrays and
|
|
17
17
|
* `useThresholdValue` arguments, so recomputing them every render is what keeps those consumers
|
|
18
|
-
* behaving correctly — memoizing here would be a behaviour change, not an optimisation. The
|
|
19
|
-
* therefore calls no React hooks of its own.
|
|
18
|
+
* behaving correctly — memoizing here would be a behaviour change, not an optimisation. The
|
|
19
|
+
* function therefore calls no React hooks of its own.
|
|
20
20
|
*
|
|
21
21
|
* @internal
|
|
22
22
|
*/
|
|
23
|
-
export declare function
|
|
23
|
+
export declare function getAlertSelectedValues({ editedAutomation, supportedMeasures, supportedAttributes, notificationChannels }: IGetAlertSelectedValuesProps): {
|
|
24
24
|
selectedMeasure: AlertMetric | undefined;
|
|
25
25
|
selectedComparisonOperator: import("@gooddata/sdk-model").IAlertComparisonOperator | undefined;
|
|
26
26
|
selectedRelativeOperator: [import("@gooddata/sdk-model").IAlertRelativeOperator, import("@gooddata/sdk-model").IAlertRelativeArithmeticOperator] | undefined;
|
|
27
27
|
selectedAiOperator: "AI.ANOMALY_DETECTION" | undefined;
|
|
28
|
-
selectedComparator: import("
|
|
28
|
+
selectedComparator: import("../types.js").AlertMetricComparator | undefined;
|
|
29
29
|
selectedSensitivity: import("@gooddata/sdk-model").IAlertAnomalyDetectionSensitivity | undefined;
|
|
30
30
|
selectedGranularity: import("@gooddata/sdk-model").IAlertAnomalyDetectionGranularity | undefined;
|
|
31
31
|
selectedAttribute: AlertAttribute | undefined;
|
|
@@ -34,4 +34,14 @@ export declare function useAlertSelectedValues({ editedAutomation, supportedMeas
|
|
|
34
34
|
allowExternalRecipients: boolean;
|
|
35
35
|
allowOnlyLoggedUserRecipients: boolean;
|
|
36
36
|
};
|
|
37
|
+
/**
|
|
38
|
+
* Reads the currently-selected form values for the alerting dialog.
|
|
39
|
+
*
|
|
40
|
+
* Derived per consumer rather than published on a context: the returned objects flow into
|
|
41
|
+
* `useCallback` dependency arrays and `useAlertThreshold` arguments, so recomputing them every
|
|
42
|
+
* render is what keeps those consumers behaving correctly.
|
|
43
|
+
*
|
|
44
|
+
* @internal
|
|
45
|
+
*/
|
|
46
|
+
export declare function useAlertSelectedValues(): ReturnType<typeof getAlertSelectedValues>;
|
|
37
47
|
//# sourceMappingURL=useAlertSelectedValues.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useAlertSelectedValues.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/automations/alerting/state/useAlertSelectedValues.ts"],"names":[],"mappings":"AAEA,OAAO,EACH,KAAK,mCAAmC,EACxC,KAAK,8BAA8B,EACnC,KAAK,kCAAkC,EAC1C,MAAM,qBAAqB,CAAC;AAa7B,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,WAAW,EAAE,MAAM,aAAa,CAAC;AAKpE;;;GAGG;AACH,MAAM,WAAW,4BAA4B;IACzC,gBAAgB,EAAE,mCAAmC,GAAG,SAAS,CAAC;IAClE,iBAAiB,EAAE,WAAW,EAAE,CAAC;IACjC,mBAAmB,EAAE,cAAc,EAAE,CAAC;IACtC,oBAAoB,EAAE,8BAA8B,EAAE,GAAG,kCAAkC,EAAE,CAAC;CACjG;AAED;;;;;;;;;GASG;AACH,wBAAgB,sBAAsB,CAAC,EACnC,gBAAgB,EAChB,iBAAiB,EACjB,mBAAmB,EACnB,oBAAoB,EACvB,EAAE,4BAA4B;;;;;;;;;;;;;EA+B9B;AAED;;;;;;;;GAQG;AACH,wBAAgB,sBAAsB,IAAI,UAAU,CAAC,OAAO,sBAAsB,CAAC,CAWlF"}
|
|
@@ -1,16 +1,19 @@
|
|
|
1
1
|
// (C) 2026 GoodData Corporation
|
|
2
|
-
import {
|
|
2
|
+
import { useAlertingDialogContext } from "../../contexts/AlertingDialogContext.js";
|
|
3
|
+
import { getAlertAiOperator, getAlertAttribute, getAlertCompareOperator, getAlertComparison, getAlertGranularity, getAlertMeasure, getAlertRelativeOperator, getAlertSensitivity, } from "../DefaultAlertingDialog/utils/getters.js";
|
|
4
|
+
import { useAlertData } from "./AlertDataContext.js";
|
|
5
|
+
import { useAlertDraft } from "./AlertDraftContext.js";
|
|
3
6
|
/**
|
|
4
7
|
* Derives the currently-selected form values from the edited alert draft.
|
|
5
8
|
*
|
|
6
9
|
* Deliberately unmemoized. The returned objects flow into `useCallback` dependency arrays and
|
|
7
10
|
* `useThresholdValue` arguments, so recomputing them every render is what keeps those consumers
|
|
8
|
-
* behaving correctly — memoizing here would be a behaviour change, not an optimisation. The
|
|
9
|
-
* therefore calls no React hooks of its own.
|
|
11
|
+
* behaving correctly — memoizing here would be a behaviour change, not an optimisation. The
|
|
12
|
+
* function therefore calls no React hooks of its own.
|
|
10
13
|
*
|
|
11
14
|
* @internal
|
|
12
15
|
*/
|
|
13
|
-
export function
|
|
16
|
+
export function getAlertSelectedValues({ editedAutomation, supportedMeasures, supportedAttributes, notificationChannels, }) {
|
|
14
17
|
const selectedMeasure = getAlertMeasure(supportedMeasures, editedAutomation?.alert);
|
|
15
18
|
const selectedComparisonOperator = getAlertCompareOperator(editedAutomation?.alert);
|
|
16
19
|
const selectedRelativeOperator = getAlertRelativeOperator(editedAutomation?.alert);
|
|
@@ -37,3 +40,23 @@ export function useAlertSelectedValues({ editedAutomation, supportedMeasures, su
|
|
|
37
40
|
allowOnlyLoggedUserRecipients,
|
|
38
41
|
};
|
|
39
42
|
}
|
|
43
|
+
/**
|
|
44
|
+
* Reads the currently-selected form values for the alerting dialog.
|
|
45
|
+
*
|
|
46
|
+
* Derived per consumer rather than published on a context: the returned objects flow into
|
|
47
|
+
* `useCallback` dependency arrays and `useAlertThreshold` arguments, so recomputing them every
|
|
48
|
+
* render is what keeps those consumers behaving correctly.
|
|
49
|
+
*
|
|
50
|
+
* @internal
|
|
51
|
+
*/
|
|
52
|
+
export function useAlertSelectedValues() {
|
|
53
|
+
const { editedAutomation } = useAlertDraft();
|
|
54
|
+
const { supportedMeasures, supportedAttributes } = useAlertData();
|
|
55
|
+
const { notificationChannels } = useAlertingDialogContext();
|
|
56
|
+
return getAlertSelectedValues({
|
|
57
|
+
editedAutomation,
|
|
58
|
+
supportedMeasures,
|
|
59
|
+
supportedAttributes,
|
|
60
|
+
notificationChannels,
|
|
61
|
+
});
|
|
62
|
+
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { type IAutomationMetadataObject, type IInsight, type IWidget } from "@gooddata/sdk-model";
|
|
2
|
-
import {
|
|
3
|
-
import { type IMeasureFormatMap } from "../utils/getters.js";
|
|
4
|
-
import {
|
|
2
|
+
import { useAttributeValuesFromExecResults } from "../DefaultAlertingDialog/hooks/useAttributeValuesFromExecResults.js";
|
|
3
|
+
import { type IMeasureFormatMap } from "../DefaultAlertingDialog/utils/getters.js";
|
|
4
|
+
import { type AlertAttribute, type AlertMetric } from "../types.js";
|
|
5
5
|
export interface IUseAlertSupportedMetricsProps {
|
|
6
6
|
insight?: IInsight;
|
|
7
7
|
widget?: IWidget;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useAlertSupportedMetrics.d.ts","sourceRoot":"","sources":["../../../../../src/presentation/automations/alerting/state/useAlertSupportedMetrics.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,yBAAyB,EAAE,KAAK,QAAQ,EAAE,KAAK,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAKlG,OAAO,EAAE,iCAAiC,EAAE,MAAM,qEAAqE,CAAC;AACxH,OAAO,EACH,KAAK,iBAAiB,EAEzB,MAAM,2CAA2C,CAAC;AAKnD,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,WAAW,EAAE,MAAM,aAAa,CAAC;AAEpE,MAAM,WAAW,8BAA8B;IAC3C,OAAO,CAAC,EAAE,QAAQ,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,WAAW,CAAC,EAAE,yBAAyB,CAAC;CAC3C;AAED;;;;;;;;;GASG;AACH,wBAAgB,wBAAwB,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,EAAE,8BAA8B,GAAG;IACxG,gBAAgB,EAAE,iBAAiB,CAAC;IACpC,iBAAiB,EAAE,WAAW,EAAE,CAAC;IACjC,mBAAmB,EAAE,cAAc,EAAE,CAAC;IACtC,eAAe,EAAE,OAAO,CAAC;IACzB,kBAAkB,EAAE,UAAU,CAAC,OAAO,iCAAiC,CAAC,CAAC,oBAAoB,CAAC,CAAC;IAC/F,cAAc,EAAE,UAAU,CAAC,OAAO,iCAAiC,CAAC,CAAC,gBAAgB,CAAC,CAAC;CAC1F,CA8CA"}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
// (C) 2026 GoodData Corporation
|
|
2
2
|
import { useEffect, useMemo, useState } from "react";
|
|
3
3
|
import { fillMissingTitles } from "@gooddata/sdk-ui";
|
|
4
|
-
import { useAlertingDialogContext } from "
|
|
5
|
-
import { useAutomationsContext } from "
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
4
|
+
import { useAlertingDialogContext } from "../../contexts/AlertingDialogContext.js";
|
|
5
|
+
import { useAutomationsContext } from "../../contexts/AutomationsContext.js";
|
|
6
|
+
import { useAttributeValuesFromExecResults } from "../DefaultAlertingDialog/hooks/useAttributeValuesFromExecResults.js";
|
|
7
|
+
import { getMeasureFormatsFromExecution, } from "../DefaultAlertingDialog/utils/getters.js";
|
|
8
|
+
import { getSupportedInsightAttributesByInsight, getSupportedInsightMeasuresByInsight, } from "../DefaultAlertingDialog/utils/items.js";
|
|
9
9
|
/**
|
|
10
10
|
* Derives which measures and attributes the alerting dialog may offer for the current widget: it
|
|
11
11
|
* resolves the effective insight and its execution result, then narrows the catalog down to the
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useDefaultSelectedFiltersForNewAutomation.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/automations/shared/automationFilters/hooks/useDefaultSelectedFiltersForNewAutomation.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"useDefaultSelectedFiltersForNewAutomation.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/automations/shared/automationFilters/hooks/useDefaultSelectedFiltersForNewAutomation.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,uBAAuB,EAAE,MAAM,2CAA2C,CAAC;AAIzF,wBAAgB,yCAAyC,CAAC,MAAM,CAAC,EAAE,uBAAuB,qDAOzF"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
// (C) 2025-2026 GoodData Corporation
|
|
2
|
+
import { useMemo } from "react";
|
|
2
3
|
import { removeIgnoredWidgetFilters } from "../../../../../model/utils/widgetFilters.js";
|
|
3
4
|
import { useAutomationsContext } from "../../../contexts/AutomationsContext.js";
|
|
4
5
|
export function useDefaultSelectedFiltersForNewAutomation(widget) {
|
|
5
6
|
const { defaultSelectedFilters } = useAutomationsContext();
|
|
6
|
-
return removeIgnoredWidgetFilters(defaultSelectedFilters, widget);
|
|
7
|
+
return useMemo(() => removeIgnoredWidgetFilters(defaultSelectedFilters, widget), [defaultSelectedFilters, widget]);
|
|
7
8
|
}
|
|
@@ -20,7 +20,7 @@ export function DashboardLoading(props) {
|
|
|
20
20
|
// can tell the rendering has started even before any dashboard data is loaded.
|
|
21
21
|
// The element is a hidden sibling (same as the gd-dashboard-meta export data),
|
|
22
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, {})
|
|
23
|
+
return (_jsxs(_Fragment, { children: [exportData ? _jsx("div", { style: { display: "none" }, ...exportData }) : null, _jsx(LoadingComponent, { className: "sdk-dashboard-loading s-loading" })
|
|
24
24
|
] }));
|
|
25
25
|
}
|
|
26
26
|
return _jsx(DashboardInner, { ...props });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TimezoneOption.d.ts","sourceRoot":"","sources":["../../../src/presentation/dashboardSettingsDialog/TimezoneOption.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,SAAS,EAAW,MAAM,OAAO,CAAC;AAIhD,OAAO,EAAoB,KAAK,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"TimezoneOption.d.ts","sourceRoot":"","sources":["../../../src/presentation/dashboardSettingsDialog/TimezoneOption.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,SAAS,EAAW,MAAM,OAAO,CAAC;AAIhD,OAAO,EAAoB,KAAK,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAWtF,UAAU,oBAAoB;IAC1B,KAAK,EAAE,SAAS,CAAC;IACjB,OAAO,EAAE,SAAS,CAAC;IACnB,cAAc,EAAE,wBAAwB,GAAG,SAAS,CAAC;IACrD,QAAQ,EAAE,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,KAAK,IAAI,CAAC;CACtD;AAED,wBAAgB,cAAc,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,EAAE,oBAAoB,2CA2DhG"}
|
|
@@ -3,31 +3,33 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
3
3
|
import { useMemo } from "react";
|
|
4
4
|
import { useIntl } from "react-intl";
|
|
5
5
|
import { BROWSER_DETECTED } from "@gooddata/sdk-model";
|
|
6
|
-
import { Bubble, BubbleHoverTrigger, TimezoneSelect,
|
|
7
|
-
import { useDashboardSelector } from "../../model/react/DashboardStoreProvider.js";
|
|
8
|
-
import { selectTimezone } from "../../model/store/config/configSelectors.js";
|
|
6
|
+
import { Bubble, BubbleHoverTrigger, TimezoneSelect, } from "@gooddata/sdk-ui-kit";
|
|
9
7
|
const BUBBLE_ALIGN_POINTS = [{ align: "bc tl" }];
|
|
10
8
|
export function TimezoneOption({ label, tooltip, timezoneConfig, onChange }) {
|
|
11
9
|
const intl = useIntl();
|
|
12
|
-
const workspaceTimezone = useDashboardSelector(selectTimezone);
|
|
13
|
-
const workspaceTimezoneName = getTimezoneDisplayLabel(workspaceTimezone);
|
|
14
10
|
const specialItems = useMemo(() => {
|
|
15
11
|
const workspaceItemLabel = intl.formatMessage({
|
|
16
12
|
id: "settingsDashboardDialog.section.timezone.defaultTimezone.workspace",
|
|
17
|
-
}
|
|
13
|
+
});
|
|
14
|
+
const workspaceItemTooltip = intl.formatMessage({
|
|
15
|
+
id: "settingsDashboardDialog.section.timezone.defaultTimezone.workspace.tooltip",
|
|
16
|
+
});
|
|
18
17
|
const browserItemLabel = intl.formatMessage({
|
|
19
18
|
id: "settingsDashboardDialog.section.timezone.defaultTimezone.fromBrowser",
|
|
20
19
|
});
|
|
20
|
+
const browserItemTooltip = intl.formatMessage({
|
|
21
|
+
id: "settingsDashboardDialog.section.timezone.defaultTimezone.fromBrowser.tooltip",
|
|
22
|
+
});
|
|
21
23
|
return [
|
|
22
|
-
{ id: undefined, label: workspaceItemLabel },
|
|
23
|
-
{ id: BROWSER_DETECTED, label: browserItemLabel },
|
|
24
|
+
{ id: undefined, label: workspaceItemLabel, tooltip: workspaceItemTooltip },
|
|
25
|
+
{ id: BROWSER_DETECTED, label: browserItemLabel, tooltip: browserItemTooltip },
|
|
24
26
|
];
|
|
25
|
-
}, [intl
|
|
27
|
+
}, [intl]);
|
|
26
28
|
return (_jsxs("div", { className: "configuration-category-item", children: [
|
|
27
29
|
_jsxs("span", { className: "input-label-text", children: [label, _jsxs(BubbleHoverTrigger, { showDelay: 0, hideDelay: 0, eventsOnBubble: true, className: "configuration-category-item-tooltip-icon", children: [
|
|
28
30
|
_jsx("span", { className: "gd-icon-circle-question gd-filter-configuration__help-icon" }), _jsx(Bubble, { alignPoints: BUBBLE_ALIGN_POINTS, children: _jsx("div", { className: "gd-filter-configuration__help-tooltip", children: tooltip }) })
|
|
29
31
|
] })
|
|
30
|
-
] }), _jsx(TimezoneSelect, { value: timezoneConfig?.timezoneId, onChange: onChange, specialItems: specialItems, searchPlaceholder: intl.formatMessage({
|
|
32
|
+
] }), _jsx(TimezoneSelect, { value: timezoneConfig?.timezoneId, showTooltip: true, onChange: onChange, specialItems: specialItems, searchPlaceholder: intl.formatMessage({
|
|
31
33
|
id: "settingsDashboardDialog.section.timezone.select.searchPlaceholder",
|
|
32
34
|
}), ariaLabel: intl.formatMessage({
|
|
33
35
|
id: "settingsDashboardDialog.section.timezone.defaultTimezone",
|
|
@@ -447,10 +447,18 @@ export declare const en_US: {
|
|
|
447
447
|
text: string;
|
|
448
448
|
crowdinContext: string;
|
|
449
449
|
};
|
|
450
|
+
"settingsDashboardDialog.section.timezone.defaultTimezone.workspace.tooltip": {
|
|
451
|
+
text: string;
|
|
452
|
+
crowdinContext: string;
|
|
453
|
+
};
|
|
450
454
|
"settingsDashboardDialog.section.timezone.defaultTimezone.fromBrowser": {
|
|
451
455
|
text: string;
|
|
452
456
|
crowdinContext: string;
|
|
453
457
|
};
|
|
458
|
+
"settingsDashboardDialog.section.timezone.defaultTimezone.fromBrowser.tooltip": {
|
|
459
|
+
text: string;
|
|
460
|
+
crowdinContext: string;
|
|
461
|
+
};
|
|
454
462
|
"settingsDashboardDialog.section.timezone.allowUserOverride.toggle": {
|
|
455
463
|
text: string;
|
|
456
464
|
crowdinContext: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"en-US.localization-bundle.d.ts","sourceRoot":"","sources":["../../../../src/presentation/localization/bundles/en-US.localization-bundle.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,KAAK
|
|
1
|
+
{"version":3,"file":"en-US.localization-bundle.d.ts","sourceRoot":"","sources":["../../../../src/presentation/localization/bundles/en-US.localization-bundle.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6/GjB,CAAC"}
|
|
@@ -438,21 +438,29 @@ export const en_US = {
|
|
|
438
438
|
"crowdinContext": "Section title for time zone settings in the dashboard settings dialog"
|
|
439
439
|
},
|
|
440
440
|
"settingsDashboardDialog.section.timezone.defaultTimezone": {
|
|
441
|
-
"text": "
|
|
441
|
+
"text": "Dashboard time zone",
|
|
442
442
|
"crowdinContext": "Label of the default time zone picker in the dashboard settings dialog"
|
|
443
443
|
},
|
|
444
444
|
"settingsDashboardDialog.section.timezone.defaultTimezone.tooltip": {
|
|
445
|
-
"text": "Time zone used
|
|
445
|
+
"text": "Time zone used for date filters and date values on this dashboard.",
|
|
446
446
|
"crowdinContext": "Tooltip of the default time zone picker in the dashboard settings dialog"
|
|
447
447
|
},
|
|
448
448
|
"settingsDashboardDialog.section.timezone.defaultTimezone.workspace": {
|
|
449
|
-
"text": "
|
|
450
|
-
"crowdinContext": "Time zone picker item meaning the workspace default time zone is used.
|
|
449
|
+
"text": "Default",
|
|
450
|
+
"crowdinContext": "Time zone picker item meaning the workspace default time zone is used."
|
|
451
|
+
},
|
|
452
|
+
"settingsDashboardDialog.section.timezone.defaultTimezone.workspace.tooltip": {
|
|
453
|
+
"text": "Follows the time zone set for your organization, workspace, or user account. It updates automatically if that setting changes.",
|
|
454
|
+
"crowdinContext": "Tooltip of the default time zone picker item in the dashboard settings dialog"
|
|
451
455
|
},
|
|
452
456
|
"settingsDashboardDialog.section.timezone.defaultTimezone.fromBrowser": {
|
|
453
|
-
"text": "
|
|
457
|
+
"text": "Device time zone",
|
|
454
458
|
"crowdinContext": "Time zone picker item meaning the time zone is detected from the viewer's browser."
|
|
455
459
|
},
|
|
460
|
+
"settingsDashboardDialog.section.timezone.defaultTimezone.fromBrowser.tooltip": {
|
|
461
|
+
"text": "Uses the time zone reported by the viewer's browser. Can differ for each viewer.",
|
|
462
|
+
"crowdinContext": "Tooltip of the device time zone picker item in the dashboard settings dialog"
|
|
463
|
+
},
|
|
456
464
|
"settingsDashboardDialog.section.timezone.allowUserOverride.toggle": {
|
|
457
465
|
"text": "Allow users to change the dashboard time zone",
|
|
458
466
|
"crowdinContext": "Toggle allowing dashboard consumers to change the time zone in view mode"
|
|
@@ -482,19 +490,19 @@ export const en_US = {
|
|
|
482
490
|
"crowdinContext": "Title of the dialog for temporarily changing the dashboard time zone in view mode"
|
|
483
491
|
},
|
|
484
492
|
"timezoneDialog.description": {
|
|
485
|
-
"text": "<b>Note:</b> Time zone resets to the default
|
|
486
|
-
"crowdinContext": "Note in the dialog for temporarily changing the dashboard time zone in view mode. The
|
|
493
|
+
"text": "<b>Note:</b> Time zone resets to the default when you reload the page.",
|
|
494
|
+
"crowdinContext": "Note in the dialog for temporarily changing the dashboard time zone in view mode. The <b> tags wrap the 'Note:' label."
|
|
487
495
|
},
|
|
488
496
|
"timezoneDialog.description.ariaLabel": {
|
|
489
497
|
"text": "Change timezone dialog information message",
|
|
490
498
|
"crowdinContext": "Aria label for the change timezone dialog information message"
|
|
491
499
|
},
|
|
492
500
|
"timezoneDialog.default": {
|
|
493
|
-
"text": "Default
|
|
494
|
-
"crowdinContext": "Time zone picker item meaning the dashboard's configured time zone is used.
|
|
501
|
+
"text": "Default",
|
|
502
|
+
"crowdinContext": "Time zone picker item meaning the dashboard's configured time zone is used."
|
|
495
503
|
},
|
|
496
504
|
"timezoneDialog.fromBrowser": {
|
|
497
|
-
"text": "
|
|
505
|
+
"text": "Device time zone ({timezone})",
|
|
498
506
|
"crowdinContext": "Time zone picker item meaning the time zone is detected from the viewer's browser. The {timezone} placeholder shows the detected time zone."
|
|
499
507
|
},
|
|
500
508
|
"timezoneDialog.select.searchPlaceholder": {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TimezoneDialog.d.ts","sourceRoot":"","sources":["../../../src/presentation/timezoneDialog/TimezoneDialog.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,YAAY,EAAgD,MAAM,OAAO,CAAC;AAsBxF;;;;;;;;;;;GAWG;AACH,wBAAgB,cAAc,IAAI,YAAY,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"TimezoneDialog.d.ts","sourceRoot":"","sources":["../../../src/presentation/timezoneDialog/TimezoneDialog.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,YAAY,EAAgD,MAAM,OAAO,CAAC;AAsBxF;;;;;;;;;;;GAWG;AACH,wBAAgB,cAAc,IAAI,YAAY,GAAG,IAAI,CAiGpD"}
|
|
@@ -36,9 +36,8 @@ export function TimezoneDialog() {
|
|
|
36
36
|
// timezone so the Default item, description note, and current-time preview share the same
|
|
37
37
|
// concrete ID.
|
|
38
38
|
const defaultTimezoneId = resolveTimezoneId(timezoneConfig?.timezoneId) ?? workspaceTimezone;
|
|
39
|
-
const defaultTimezoneName = defaultTimezoneId ? getTimezoneDisplayLabel(defaultTimezoneId) : undefined;
|
|
40
39
|
const specialItems = useMemo(() => {
|
|
41
|
-
const defaultItemLabel = intl.formatMessage({ id: "timezoneDialog.default" }
|
|
40
|
+
const defaultItemLabel = intl.formatMessage({ id: "timezoneDialog.default" });
|
|
42
41
|
// plain ID here — the label template already brackets the value, so the "id (offset)"
|
|
43
42
|
// display label would produce nested brackets
|
|
44
43
|
const browserTimezoneId = Intl.DateTimeFormat().resolvedOptions().timeZone;
|
|
@@ -48,7 +47,7 @@ export function TimezoneDialog() {
|
|
|
48
47
|
{ id: undefined, label: defaultItemLabel },
|
|
49
48
|
{ id: BROWSER_DETECTED, label: browserItemLabel },
|
|
50
49
|
];
|
|
51
|
-
}, [intl
|
|
50
|
+
}, [intl]);
|
|
52
51
|
useEffect(() => {
|
|
53
52
|
const timezoneId = resolveTimezoneId(selected) ?? defaultTimezoneId;
|
|
54
53
|
if (timezoneId) {
|
|
@@ -74,7 +73,6 @@ export function TimezoneDialog() {
|
|
|
74
73
|
id: "timezoneDialog.select.searchPlaceholder",
|
|
75
74
|
}), ariaLabel: intl.formatMessage({ id: "timezoneDialog.title" }), noMatchLabel: intl.formatMessage({ id: "timezoneDialog.select.noMatch" }) }), currentTimeOfTimezone ? (_jsx("span", { className: "gd-timezone-dialog-current-time", children: intl.formatMessage({ id: "timezoneDialog.currentTime" }, { time: currentTimeOfTimezone }) })) : null] }), _jsx(Message, { type: "progress", className: "gd-timezone-dialog-description s-timezone-dialog-description", children: _jsx("span", { "aria-label": intl.formatMessage({ id: "timezoneDialog.description.ariaLabel" }), children: _jsx(FormattedMessage, { id: "timezoneDialog.description", values: {
|
|
76
75
|
b: (chunks) => _jsx("strong", { children: chunks }),
|
|
77
|
-
timezone: defaultTimezoneName,
|
|
78
76
|
} }) }) })
|
|
79
77
|
] }));
|
|
80
78
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ViewModeDashboardVisualizationSwitcher.d.ts","sourceRoot":"","sources":["../../../../src/presentation/widget/visualizationSwitcher/ViewModeDashboardVisualizationSwitcher.tsx"],"names":[],"mappings":"AAOA,OAAO,EACH,KAAK,QAAQ,EACb,KAAK,cAAc,EAGtB,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"ViewModeDashboardVisualizationSwitcher.d.ts","sourceRoot":"","sources":["../../../../src/presentation/widget/visualizationSwitcher/ViewModeDashboardVisualizationSwitcher.tsx"],"names":[],"mappings":"AAOA,OAAO,EACH,KAAK,QAAQ,EACb,KAAK,cAAc,EAGtB,MAAM,qBAAqB,CAAC;AAyB7B,OAAO,EAAE,KAAK,oCAAoC,EAAE,MAAM,YAAY,CAAC;AAGvE;;GAEG;AACH,wBAAgB,sCAAsC,CAAC,EACnD,MAAM,EACN,qBAAqB,EAAE,4BAA4B,EACnD,OAAO,EACP,aAAa,EACb,gBAAgB,EAChB,MAAM,EACN,UAAU,EACb,EAAE,oCAAoC,2CAyCtC;AAED,wBAAgB,2CAA2C,4CAE1D;AAED,MAAM,WAAW,mDAAoD,SAAQ,oCAAoC;IAC7G,OAAO,EAAE,QAAQ,CAAC;IAClB,mBAAmB,EAAE,cAAc,CAAC;IACpC,2BAA2B,EAAE,CAAC,qBAAqB,EAAE,MAAM,KAAK,IAAI,CAAC;CACxE;AAED,wBAAgB,6CAA6C,CAAC,EAC1D,MAAM,EACN,OAAO,EACP,mBAAmB,EACnB,2BAA2B,EAC3B,MAAM,EACN,OAAO,EACP,aAAa,EACb,gBAAgB,EAChB,UAAU,EACb,EAAE,mDAAmD,2CAmOrD"}
|
package/esm/presentation/widget/visualizationSwitcher/ViewModeDashboardVisualizationSwitcher.js
CHANGED
|
@@ -1,14 +1,17 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
// (C) 2024-2026 GoodData Corporation
|
|
3
|
-
import { useCallback, useMemo, useRef
|
|
3
|
+
import { useCallback, useMemo, useRef } from "react";
|
|
4
4
|
import cx from "classnames";
|
|
5
5
|
import { useIntl } from "react-intl";
|
|
6
6
|
import { insightVisualizationType, widgetTitle, } from "@gooddata/sdk-model";
|
|
7
7
|
import { useId } from "@gooddata/sdk-ui-kit";
|
|
8
|
+
import { changeVisualizationSwitcherActiveVisualization } from "../../../model/commands/visualizationSwitcher.js";
|
|
8
9
|
import { useDashboardSelector } from "../../../model/react/DashboardStoreProvider.js";
|
|
9
10
|
import { useDashboardScheduledEmails } from "../../../model/react/useDasboardScheduledEmails/useDashboardScheduledEmails.js";
|
|
10
11
|
import { useDashboardAlerts } from "../../../model/react/useDashboardAlerting/useDashboardAlerts.js";
|
|
12
|
+
import { useDashboardCommand } from "../../../model/react/useDashboardCommand.js";
|
|
11
13
|
import { selectInsightsMap } from "../../../model/store/insights/insightsSelectors.js";
|
|
14
|
+
import { selectVisualizationSwitcherActiveVisualizationByWidgetRef } from "../../../model/store/ui/uiSelectors.js";
|
|
12
15
|
import { useDashboardComponentsContext } from "../../dashboardContexts/DashboardComponentsContext.js";
|
|
13
16
|
import { DashboardItem } from "../../presentationComponents/DashboardItems/DashboardItem.js";
|
|
14
17
|
import { DashboardItemVisualization } from "../../presentationComponents/DashboardItems/DashboardItemVisualization.js";
|
|
@@ -27,7 +30,13 @@ import { useExecutionProgress } from "./useExecutionProgress.js";
|
|
|
27
30
|
* @internal
|
|
28
31
|
*/
|
|
29
32
|
export function ViewModeDashboardVisualizationSwitcher({ widget, activeVisualizationId: initialActiveVisualizationId, onError, onExportReady, onLoadingChanged, screen, exportData, }) {
|
|
30
|
-
const
|
|
33
|
+
const activeVisualizationSelector = useMemo(() => selectVisualizationSwitcherActiveVisualizationByWidgetRef(widget.ref), [widget.ref]);
|
|
34
|
+
const activeVisualizationIdFromStore = useDashboardSelector(activeVisualizationSelector);
|
|
35
|
+
const runCommand = useDashboardCommand(changeVisualizationSwitcherActiveVisualization);
|
|
36
|
+
const activeVisualizationId = activeVisualizationIdFromStore ?? initialActiveVisualizationId;
|
|
37
|
+
const setActiveVisualizationId = useCallback((activeVisualizationId) => {
|
|
38
|
+
runCommand(widget.ref, activeVisualizationId);
|
|
39
|
+
}, [runCommand, widget.ref]);
|
|
31
40
|
const activeVisualization = widget.visualizations.find((visualization) => visualization.identifier === activeVisualizationId) ??
|
|
32
41
|
widget.visualizations[0];
|
|
33
42
|
const insights = useDashboardSelector(selectInsightsMap);
|