@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.
Files changed (112) hide show
  1. package/NOTICE +22 -22
  2. package/esm/__version.d.ts +1 -1
  3. package/esm/__version.js +1 -1
  4. package/esm/index.d.ts +3 -3
  5. package/esm/index.d.ts.map +1 -1
  6. package/esm/index.js +3 -3
  7. package/esm/model/commandHandlers/index.d.ts.map +1 -1
  8. package/esm/model/commandHandlers/index.js +2 -0
  9. package/esm/model/commandHandlers/widgets/changeVisualizationSwitcherActiveVisualizationHandler.d.ts +6 -0
  10. package/esm/model/commandHandlers/widgets/changeVisualizationSwitcherActiveVisualizationHandler.d.ts.map +1 -0
  11. package/esm/model/commandHandlers/widgets/changeVisualizationSwitcherActiveVisualizationHandler.js +12 -0
  12. package/esm/model/commands/base.d.ts +1 -1
  13. package/esm/model/commands/base.d.ts.map +1 -1
  14. package/esm/model/commands/index.d.ts +2 -2
  15. package/esm/model/commands/index.d.ts.map +1 -1
  16. package/esm/model/commands/visualizationSwitcher.d.ts +33 -0
  17. package/esm/model/commands/visualizationSwitcher.d.ts.map +1 -1
  18. package/esm/model/commands/visualizationSwitcher.js +21 -0
  19. package/esm/model/events/base.d.ts +1 -1
  20. package/esm/model/events/base.d.ts.map +1 -1
  21. package/esm/model/events/index.d.ts +2 -2
  22. package/esm/model/events/index.d.ts.map +1 -1
  23. package/esm/model/events/visualizationSwitcher.d.ts +34 -0
  24. package/esm/model/events/visualizationSwitcher.d.ts.map +1 -1
  25. package/esm/model/events/visualizationSwitcher.js +21 -0
  26. package/esm/model/react/useDashboardCommand.d.ts +1 -0
  27. package/esm/model/react/useDashboardCommand.d.ts.map +1 -1
  28. package/esm/model/react/useDashboardCommandProcessing.d.ts +4 -0
  29. package/esm/model/react/useDashboardCommandProcessing.d.ts.map +1 -1
  30. package/esm/model/store/ui/index.d.ts +4 -0
  31. package/esm/model/store/ui/index.d.ts.map +1 -1
  32. package/esm/model/store/ui/uiReducers.d.ts +7 -0
  33. package/esm/model/store/ui/uiReducers.d.ts.map +1 -1
  34. package/esm/model/store/ui/uiReducers.js +6 -0
  35. package/esm/model/store/ui/uiSelectors.d.ts +8 -0
  36. package/esm/model/store/ui/uiSelectors.d.ts.map +1 -1
  37. package/esm/model/store/ui/uiSelectors.js +10 -0
  38. package/esm/model/store/ui/uiState.d.ts +6 -0
  39. package/esm/model/store/ui/uiState.d.ts.map +1 -1
  40. package/esm/model/store/ui/uiState.js +1 -0
  41. package/esm/presentation/automations/alerting/AlertingDialog.d.ts +3 -0
  42. package/esm/presentation/automations/alerting/AlertingDialog.d.ts.map +1 -1
  43. package/esm/presentation/automations/alerting/AlertingDialog.js +5 -1
  44. package/esm/presentation/automations/alerting/DefaultAlertingDialog/DefaultAlertingDialog.d.ts +9 -6
  45. package/esm/presentation/automations/alerting/DefaultAlertingDialog/DefaultAlertingDialog.d.ts.map +1 -1
  46. package/esm/presentation/automations/alerting/DefaultAlertingDialog/DefaultAlertingDialog.js +33 -12
  47. package/esm/presentation/automations/alerting/DefaultAlertingDialog/hooks/useAlertThreshold.d.ts +9 -0
  48. package/esm/presentation/automations/alerting/DefaultAlertingDialog/hooks/useAlertThreshold.d.ts.map +1 -1
  49. package/esm/presentation/automations/alerting/DefaultAlertingDialog/hooks/useAlertThreshold.js +9 -0
  50. package/esm/presentation/automations/alerting/state/AlertActionsContext.d.ts +23 -0
  51. package/esm/presentation/automations/alerting/state/AlertActionsContext.d.ts.map +1 -0
  52. package/esm/presentation/automations/alerting/state/AlertActionsContext.js +19 -0
  53. package/esm/presentation/automations/alerting/state/AlertDataContext.d.ts +24 -0
  54. package/esm/presentation/automations/alerting/state/AlertDataContext.d.ts.map +1 -0
  55. package/esm/presentation/automations/alerting/state/AlertDataContext.js +19 -0
  56. package/esm/presentation/automations/alerting/state/AlertDraftContext.d.ts +24 -0
  57. package/esm/presentation/automations/alerting/state/AlertDraftContext.d.ts.map +1 -0
  58. package/esm/presentation/automations/alerting/state/AlertDraftContext.js +19 -0
  59. package/esm/presentation/automations/alerting/state/AlertFiltersContext.d.ts +26 -0
  60. package/esm/presentation/automations/alerting/state/AlertFiltersContext.d.ts.map +1 -0
  61. package/esm/presentation/automations/alerting/state/AlertFiltersContext.js +19 -0
  62. package/esm/presentation/automations/alerting/state/AlertingDialogStateProvider.d.ts +21 -0
  63. package/esm/presentation/automations/alerting/state/AlertingDialogStateProvider.d.ts.map +1 -0
  64. package/esm/presentation/automations/alerting/state/AlertingDialogStateProvider.js +168 -0
  65. package/esm/presentation/automations/alerting/state/missingAlertStateProvider.d.ts +7 -0
  66. package/esm/presentation/automations/alerting/state/missingAlertStateProvider.d.ts.map +1 -0
  67. package/esm/presentation/automations/alerting/state/missingAlertStateProvider.js +9 -0
  68. package/esm/presentation/automations/alerting/state/useAlertDialogValidity.d.ts +15 -0
  69. package/esm/presentation/automations/alerting/state/useAlertDialogValidity.d.ts.map +1 -0
  70. package/esm/presentation/automations/alerting/state/useAlertDialogValidity.js +45 -0
  71. package/esm/presentation/automations/alerting/{DefaultAlertingDialog/hooks/useAlertFilters.d.ts → state/useAlertFiltersModel.d.ts} +6 -6
  72. package/esm/presentation/automations/alerting/state/useAlertFiltersModel.d.ts.map +1 -0
  73. package/esm/presentation/automations/alerting/{DefaultAlertingDialog/hooks/useAlertFilters.js → state/useAlertFiltersModel.js} +4 -4
  74. package/esm/presentation/automations/alerting/{DefaultAlertingDialog/hooks → state}/useAlertFormState.d.ts +4 -4
  75. package/esm/presentation/automations/alerting/state/useAlertFormState.d.ts.map +1 -0
  76. package/esm/presentation/automations/alerting/{DefaultAlertingDialog/hooks → state}/useAlertFormState.js +14 -14
  77. package/esm/presentation/automations/alerting/state/useAlertFormValidation.d.ts.map +1 -0
  78. package/esm/presentation/automations/alerting/{DefaultAlertingDialog/hooks → state}/useAlertFormValidation.js +3 -3
  79. package/esm/presentation/automations/alerting/{DefaultAlertingDialog/hooks → state}/useAlertSelectedValues.d.ts +17 -7
  80. package/esm/presentation/automations/alerting/state/useAlertSelectedValues.d.ts.map +1 -0
  81. package/esm/presentation/automations/alerting/{DefaultAlertingDialog/hooks → state}/useAlertSelectedValues.js +27 -4
  82. package/esm/presentation/automations/alerting/{DefaultAlertingDialog/hooks → state}/useAlertSupportedMetrics.d.ts +3 -3
  83. package/esm/presentation/automations/alerting/state/useAlertSupportedMetrics.d.ts.map +1 -0
  84. package/esm/presentation/automations/alerting/{DefaultAlertingDialog/hooks → state}/useAlertSupportedMetrics.js +5 -5
  85. package/esm/presentation/automations/shared/automationFilters/hooks/useDefaultSelectedFiltersForNewAutomation.d.ts.map +1 -1
  86. package/esm/presentation/automations/shared/automationFilters/hooks/useDefaultSelectedFiltersForNewAutomation.js +2 -1
  87. package/esm/presentation/dashboard/components/DashboardLoading.js +1 -1
  88. package/esm/presentation/dashboardSettingsDialog/TimezoneOption.d.ts.map +1 -1
  89. package/esm/presentation/dashboardSettingsDialog/TimezoneOption.js +12 -10
  90. package/esm/presentation/localization/bundles/en-US.localization-bundle.d.ts +8 -0
  91. package/esm/presentation/localization/bundles/en-US.localization-bundle.d.ts.map +1 -1
  92. package/esm/presentation/localization/bundles/en-US.localization-bundle.js +18 -10
  93. package/esm/presentation/timezoneDialog/TimezoneDialog.d.ts.map +1 -1
  94. package/esm/presentation/timezoneDialog/TimezoneDialog.js +2 -4
  95. package/esm/presentation/widget/visualizationSwitcher/ViewModeDashboardVisualizationSwitcher.d.ts.map +1 -1
  96. package/esm/presentation/widget/visualizationSwitcher/ViewModeDashboardVisualizationSwitcher.js +11 -2
  97. package/esm/sdk-ui-dashboard.d.ts +114 -10
  98. package/package.json +21 -21
  99. package/styles/css/dashboardSettingsDialog.css +3 -0
  100. package/styles/css/dashboardSettingsDialog.css.map +1 -1
  101. package/styles/css/main.css +3 -0
  102. package/styles/css/main.css.map +1 -1
  103. package/styles/scss/dashboardSettingsDialog.scss +4 -0
  104. package/esm/presentation/automations/alerting/DefaultAlertingDialog/hooks/useAlertFilters.d.ts.map +0 -1
  105. package/esm/presentation/automations/alerting/DefaultAlertingDialog/hooks/useAlertFormState.d.ts.map +0 -1
  106. package/esm/presentation/automations/alerting/DefaultAlertingDialog/hooks/useAlertFormValidation.d.ts.map +0 -1
  107. package/esm/presentation/automations/alerting/DefaultAlertingDialog/hooks/useAlertSelectedValues.d.ts.map +0 -1
  108. package/esm/presentation/automations/alerting/DefaultAlertingDialog/hooks/useAlertSupportedMetrics.d.ts.map +0 -1
  109. package/esm/presentation/automations/alerting/DefaultAlertingDialog/hooks/useEditAlert.d.ts +0 -69
  110. package/esm/presentation/automations/alerting/DefaultAlertingDialog/hooks/useEditAlert.d.ts.map +0 -1
  111. package/esm/presentation/automations/alerting/DefaultAlertingDialog/hooks/useEditAlert.js +0 -145
  112. /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 AlertAttribute, type AlertMetric } from "../../types.js";
4
- import { type IMeasureFormatMap } from "../utils/getters.js";
3
+ import { type IMeasureFormatMap } from "../DefaultAlertingDialog/utils/getters.js";
4
+ import { type AlertAttribute, type AlertMetric } from "../types.js";
5
5
  /**
6
- * Props for {@link useAlertFilters}.
6
+ * Props for {@link useAlertFiltersModel}.
7
7
  * @internal
8
8
  */
9
- export interface IUseAlertFiltersProps {
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 useAlertFilters({ setEditedAutomation, alertToEdit, editedAutomationFilters, setEditedAutomationFilters, availableFilters, filtersForNewAutomation, availableFiltersAsVisibleFilters, dashboardHiddenFilters, commonDateFilterId, widget, insight, supportedMeasures, supportedAttributes, measureFormatMap, selectedMeasure, selectedAttribute, selectedValue, weekStart, timezone }: IUseAlertFiltersProps): {
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=useAlertFilters.d.ts.map
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 "../../../shared/automationFilters/hooks/useValidateExistingAutomationFilters.js";
4
- import { getAppliedWidgetFilters, getVisibleFiltersByFilters } from "../../../shared/filters/index.js";
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 useAlertFilters({ setEditedAutomation, alertToEdit, editedAutomationFilters, setEditedAutomationFilters, availableFilters, filtersForNewAutomation, availableFiltersAsVisibleFilters, dashboardHiddenFilters, commonDateFilterId, widget, insight, supportedMeasures, supportedAttributes, measureFormatMap, selectedMeasure, selectedAttribute, selectedValue, weekStart, timezone, }) {
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 AlertAttribute, type AlertMetric, type AlertMetricComparatorType } from "../../types.js";
3
- import { type IMeasureFormatMap } from "../utils/getters.js";
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("../../../shared/automationFilters/automationParameters.js").IAutomationParameter[];
38
- availableParameters: import("../../../shared/automationFilters/automationParameters.js").IAutomationParameter[];
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 "../../../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 "../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 "../../../scheduledEmail/utils/validate.js";
6
- import { isAlertValueDefined } from "../utils/guards.js";
7
- import { useAlertValidation } from "./useAlertValidation.js";
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 "../../types.js";
2
+ import { type AlertAttribute, type AlertMetric } from "../types.js";
3
3
  /**
4
- * Props for {@link useAlertSelectedValues}.
4
+ * Props for {@link getAlertSelectedValues}.
5
5
  * @internal
6
6
  */
7
- export interface IUseAlertSelectedValuesProps {
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 hook
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 useAlertSelectedValues({ editedAutomation, supportedMeasures, supportedAttributes, notificationChannels }: IUseAlertSelectedValuesProps): {
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("../../types.js").AlertMetricComparator | undefined;
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 { getAlertAiOperator, getAlertAttribute, getAlertCompareOperator, getAlertComparison, getAlertGranularity, getAlertMeasure, getAlertRelativeOperator, getAlertSensitivity, } from "../utils/getters.js";
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 hook
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 useAlertSelectedValues({ editedAutomation, supportedMeasures, supportedAttributes, notificationChannels, }) {
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 { type AlertAttribute, type AlertMetric } from "../../types.js";
3
- import { type IMeasureFormatMap } from "../utils/getters.js";
4
- import { useAttributeValuesFromExecResults } from "./useAttributeValuesFromExecResults.js";
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 "../../../contexts/AlertingDialogContext.js";
5
- import { useAutomationsContext } from "../../../contexts/AutomationsContext.js";
6
- import { getMeasureFormatsFromExecution } from "../utils/getters.js";
7
- import { getSupportedInsightAttributesByInsight, getSupportedInsightMeasuresByInsight, } from "../utils/items.js";
8
- import { useAttributeValuesFromExecResults } from "./useAttributeValuesFromExecResults.js";
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":"AAEA,OAAO,EAAE,KAAK,uBAAuB,EAAE,MAAM,2CAA2C,CAAC;AAIzF,wBAAgB,yCAAyC,CAAC,MAAM,CAAC,EAAE,uBAAuB,qDAGzF"}
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;AAetF,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,2CAsDhG"}
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, getTimezoneDisplayLabel, } from "@gooddata/sdk-ui-kit";
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
- }, { timezone: workspaceTimezoneName });
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, workspaceTimezoneName]);
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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAq/GjB,CAAC"}
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": "Default time zone",
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 to evaluate date filters and display dates on this dashboard.",
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": "Workspace default ({timezone})",
450
- "crowdinContext": "Time zone picker item meaning the workspace default time zone is used. The {timezone} placeholder shows the effective workspace or organization time zone."
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": "User local time (Browser-detected)",
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 ({timezone}) when you reload the page.",
486
- "crowdinContext": "Note in the dialog for temporarily changing the dashboard time zone in view mode. The {timezone} placeholder is the dashboard's default time zone (friendly name, e.g. 'Prague'). The <b> tags wrap the 'Note:' label."
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 ({timezone})",
494
- "crowdinContext": "Time zone picker item meaning the dashboard's configured time zone is used. The {timezone} placeholder shows the configured time zone."
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": "My local time ({timezone})",
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,CAsGpD"}
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" }, { timezone: defaultTimezoneName });
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, defaultTimezoneName]);
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;AAsB7B,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,2CA2BtC;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"}
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"}
@@ -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, useState } from "react";
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 [activeVisualizationId, setActiveVisualizationId] = useState(initialActiveVisualizationId);
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);