@gooddata/sdk-ui-dashboard 11.51.0-alpha.1 → 11.51.0-alpha.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (77) hide show
  1. package/NOTICE +4 -4
  2. package/esm/__version.d.ts +1 -1
  3. package/esm/__version.js +1 -1
  4. package/esm/index.d.ts +6 -1
  5. package/esm/index.d.ts.map +1 -1
  6. package/esm/index.js +6 -1
  7. package/esm/model/store/meta/index.d.ts +1 -0
  8. package/esm/model/store/meta/index.d.ts.map +1 -1
  9. package/esm/model/store/meta/metaReducers.d.ts +5 -1
  10. package/esm/model/store/meta/metaReducers.d.ts.map +1 -1
  11. package/esm/model/store/meta/metaReducers.js +9 -0
  12. package/esm/model/store/meta/metaSelectors.d.ts +23 -1
  13. package/esm/model/store/meta/metaSelectors.d.ts.map +1 -1
  14. package/esm/model/store/meta/metaSelectors.js +33 -2
  15. package/esm/model/store/meta/metaState.d.ts +1 -1
  16. package/esm/model/store/meta/metaState.d.ts.map +1 -1
  17. package/esm/presentation/automations/alerting/DefaultAlertingDialog/DefaultAlertingDialog.d.ts +1 -1
  18. package/esm/presentation/automations/alerting/DefaultAlertingDialog/DefaultAlertingDialog.d.ts.map +1 -1
  19. package/esm/presentation/automations/alerting/DefaultAlertingDialog/DefaultAlertingDialog.js +9 -9
  20. package/esm/presentation/automations/alerting/DefaultAlertingDialog/DefaultLoadingAlertingDialog.d.ts +7 -2
  21. package/esm/presentation/automations/alerting/DefaultAlertingDialog/DefaultLoadingAlertingDialog.d.ts.map +1 -1
  22. package/esm/presentation/automations/alerting/DefaultAlertingDialog/DefaultLoadingAlertingDialog.js +1 -1
  23. package/esm/presentation/automations/alerting/DefaultAlertingDialog/hooks/useEditAlert.d.ts +6 -8
  24. package/esm/presentation/automations/alerting/DefaultAlertingDialog/hooks/useEditAlert.d.ts.map +1 -1
  25. package/esm/presentation/automations/alerting/DefaultAlertingDialog/hooks/useEditAlert.js +5 -2
  26. package/esm/presentation/automations/alerting/types.d.ts +30 -5
  27. package/esm/presentation/automations/alerting/types.d.ts.map +1 -1
  28. package/esm/presentation/automations/connectors/AlertingConnector.d.ts.map +1 -1
  29. package/esm/presentation/automations/connectors/AlertingConnector.js +22 -25
  30. package/esm/presentation/automations/connectors/AlertingConnector.test.js +71 -5
  31. package/esm/presentation/automations/connectors/hooks/useBuildAlertingDialogContext.d.ts +7 -1
  32. package/esm/presentation/automations/connectors/hooks/useBuildAlertingDialogContext.d.ts.map +1 -1
  33. package/esm/presentation/automations/connectors/hooks/useBuildAlertingDialogContext.js +12 -2
  34. package/esm/presentation/automations/connectors/hooks/useBuildAlertingDialogContext.test.js +28 -2
  35. package/esm/presentation/automations/contexts/AlertingDialogContext.d.ts +29 -1
  36. package/esm/presentation/automations/contexts/AlertingDialogContext.d.ts.map +1 -1
  37. package/esm/presentation/automations/contexts/AlertingDialogContext.js +12 -0
  38. package/esm/presentation/automations/contexts/AlertingManagementDialogContext.d.ts +14 -0
  39. package/esm/presentation/automations/contexts/AlertingManagementDialogContext.d.ts.map +1 -1
  40. package/esm/presentation/automations/contexts/AlertingManagementDialogContext.js +12 -0
  41. package/esm/presentation/automations/contexts/AutomationsContext.d.ts +13 -0
  42. package/esm/presentation/automations/contexts/AutomationsContext.d.ts.map +1 -1
  43. package/esm/presentation/automations/contexts/AutomationsContext.js +9 -0
  44. package/esm/presentation/automations/contexts/ScheduledEmailDialogContext.d.ts +15 -0
  45. package/esm/presentation/automations/contexts/ScheduledEmailDialogContext.d.ts.map +1 -1
  46. package/esm/presentation/automations/contexts/ScheduledEmailDialogContext.js +13 -0
  47. package/esm/presentation/automations/contexts/ScheduledEmailManagementDialogContext.d.ts +13 -1
  48. package/esm/presentation/automations/contexts/ScheduledEmailManagementDialogContext.d.ts.map +1 -1
  49. package/esm/presentation/automations/contexts/ScheduledEmailManagementDialogContext.js +12 -0
  50. package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/DefaultScheduledEmailDialog.d.ts.map +1 -1
  51. package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/DefaultScheduledEmailDialog.js +8 -14
  52. package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/hooks/useElementHeightSnapshot.d.ts +12 -0
  53. package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/hooks/useElementHeightSnapshot.d.ts.map +1 -0
  54. package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/hooks/useElementHeightSnapshot.js +41 -0
  55. package/esm/presentation/automations/scheduledEmail/utils/timezone.d.ts +4 -1
  56. package/esm/presentation/automations/scheduledEmail/utils/timezone.d.ts.map +1 -1
  57. package/esm/presentation/automations/scheduledEmail/utils/timezone.js +14 -138
  58. package/esm/presentation/dashboard/DashboardHeader/SettingsDialogProvider.d.ts.map +1 -1
  59. package/esm/presentation/dashboard/DashboardHeader/SettingsDialogProvider.js +1 -0
  60. package/esm/presentation/dashboardSettingsDialog/DefaultDashboardSettingsDialog.d.ts.map +1 -1
  61. package/esm/presentation/dashboardSettingsDialog/DefaultDashboardSettingsDialog.js +52 -14
  62. package/esm/presentation/dashboardSettingsDialog/TimezoneOption.d.ts +11 -0
  63. package/esm/presentation/dashboardSettingsDialog/TimezoneOption.d.ts.map +1 -0
  64. package/esm/presentation/dashboardSettingsDialog/TimezoneOption.js +36 -0
  65. package/esm/presentation/dashboardSettingsDialog/types.d.ts +2 -1
  66. package/esm/presentation/dashboardSettingsDialog/types.d.ts.map +1 -1
  67. package/esm/presentation/dashboardSettingsDialog/useDialogData.d.ts.map +1 -1
  68. package/esm/presentation/dashboardSettingsDialog/useDialogData.js +4 -1
  69. package/esm/presentation/filterBar/dateFilter/DefaultDashboardDateFilter.d.ts.map +1 -1
  70. package/esm/presentation/filterBar/dateFilter/DefaultDashboardDateFilter.js +30 -1
  71. package/esm/presentation/localization/bundles/en-US.localization-bundle.d.ts +44 -0
  72. package/esm/presentation/localization/bundles/en-US.localization-bundle.d.ts.map +1 -1
  73. package/esm/presentation/localization/bundles/en-US.localization-bundle.js +44 -0
  74. package/esm/presentation/widget/insight/ViewModeDashboardInsight/InsightDrillDialog/InsightDrillDialog.d.ts.map +1 -1
  75. package/esm/presentation/widget/insight/ViewModeDashboardInsight/InsightDrillDialog/InsightDrillDialog.js +2 -1
  76. package/esm/sdk-ui-dashboard.d.ts +370 -6
  77. package/package.json +21 -21
@@ -2,13 +2,14 @@ import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-run
2
2
  // (C) 2020-2026 GoodData Corporation
3
3
  import { useCallback, useEffect, useState } from "react";
4
4
  import { FormattedMessage, useIntl } from "react-intl";
5
- import { objRefToString } from "@gooddata/sdk-model";
5
+ import { normalizeDashboardTimezoneConfig, objRefToString, } from "@gooddata/sdk-model";
6
6
  import { Bubble, BubbleHoverTrigger, ConfirmDialog, DialogListHeader, Dropdown, RecurrenceForm, SingleSelectListItem, UiButton, UiListbox, simpleRecurrenceTypeMappingFn, } from "@gooddata/sdk-ui-kit";
7
7
  import { queryDateDatasetsForInsight, } from "../../model/queries/insights.js";
8
8
  import { useDashboardSelector } from "../../model/react/DashboardStoreProvider.js";
9
9
  import { useDashboardQueryProcessing } from "../../model/react/useDashboardQueryProcessing.js";
10
10
  import { selectDateFormat, selectEnableDashboardPersistentFiltersAcrossTabs, selectEnableDashboardSectionHeadersDateDataSet, selectIsWhiteLabeled, selectLocale, selectSettings, selectWeekStart, } from "../../model/store/config/configSelectors.js";
11
11
  import { selectCrossFilteringEnabledAndSupported } from "../../model/store/topBar/topBarSelectors.js";
12
+ import { TimezoneOption } from "./TimezoneOption.js";
12
13
  import { useDialogData } from "./useDialogData.js";
13
14
  /**
14
15
  * @alpha
@@ -46,45 +47,45 @@ export function DefaultDashboardSettingsDialog({ isVisible, onApply, onCancel /*
46
47
  id: "filters.configurationPanel.crossFiltering.toggle",
47
48
  }), tooltip: intl.formatMessage({
48
49
  id: "filters.configurationPanel.crossFiltering.toggle.tooltip",
49
- }), isChecked: !currentData.disableCrossFiltering, onChange: (newValue) => {
50
+ }), isChecked: !currentData.disableCrossFiltering, onChange: (isChecked) => {
50
51
  setCurrentData({
51
52
  ...currentData,
52
- disableCrossFiltering: newValue,
53
+ disableCrossFiltering: !isChecked,
53
54
  });
54
55
  } }), _jsx(ConfigurationOption, { label: intl.formatMessage({
55
56
  id: "filters.configurationPanel.userFilterReset.toggle",
56
57
  }), tooltip: intl.formatMessage({
57
58
  id: "filters.configurationPanel.userFilterReset.toggle.tooltip",
58
- }), isChecked: !currentData.disableUserFilterReset, onChange: (newValue) => {
59
+ }), isChecked: !currentData.disableUserFilterReset, onChange: (isChecked) => {
59
60
  setCurrentData({
60
61
  ...currentData,
61
- disableUserFilterReset: newValue,
62
+ disableUserFilterReset: !isChecked,
62
63
  });
63
64
  } })
64
65
  ] })) : null, _jsx(ConfigurationOption, { label: intl.formatMessage({
65
66
  id: "filters.configurationPanel.filterViews.toggle",
66
67
  }), tooltip: intl.formatMessage({ id: "filters.configurationPanel.filterViews.toggle.tooltip" }, {
67
68
  p: (chunks) => _jsx("p", { children: chunks }),
68
- }), isChecked: !currentData.disableFilterViews, onChange: (newValue) => {
69
+ }), isChecked: !currentData.disableFilterViews, onChange: (isChecked) => {
69
70
  setCurrentData({
70
71
  ...currentData,
71
- disableFilterViews: newValue,
72
+ disableFilterViews: !isChecked,
72
73
  });
73
74
  } }), _jsx(ConfigurationOption, { label: intl.formatMessage({ id: "filters.configurationPanel.userFilterSave.toggle" }), tooltip: intl.formatMessage({
74
75
  id: "filters.configurationPanel.userFilterSave.toggle.tooltip",
75
- }), isChecked: !currentData.disableUserFilterSave, onChange: (newValue) => {
76
+ }), isChecked: !currentData.disableUserFilterSave, onChange: (isChecked) => {
76
77
  setCurrentData({
77
78
  ...currentData,
78
- disableUserFilterSave: newValue,
79
+ disableUserFilterSave: !isChecked,
79
80
  });
80
81
  } }), enableDashboardPersistentFiltersAcrossTabs ? (_jsx(ConfigurationOption, { label: intl.formatMessage({
81
82
  id: "filters.configurationPanel.persistentFiltersAcrossTabs.toggle",
82
83
  }), tooltip: intl.formatMessage({
83
84
  id: "filters.configurationPanel.persistentFiltersAcrossTabs.toggle.tooltip",
84
- }), isChecked: !currentData.disablePersistentFiltersAcrossTabs, onChange: (newValue) => {
85
+ }), isChecked: !currentData.disablePersistentFiltersAcrossTabs, onChange: (isChecked) => {
85
86
  setCurrentData({
86
87
  ...currentData,
87
- disablePersistentFiltersAcrossTabs: newValue,
88
+ disablePersistentFiltersAcrossTabs: !isChecked,
88
89
  });
89
90
  } })) : null, enableDashboardSectionHeadersDateDataSet ? (_jsx(DateDatasetDropdown, { label: intl.formatMessage({
90
91
  id: "settingsDashboardDialog.sectionHeaders.dateDataset",
@@ -107,14 +108,51 @@ export function DefaultDashboardSettingsDialog({ isVisible, onApply, onCancel /*
107
108
  }), showRepeatTypeDescription: true, showTimezoneInOccurrence: true, dateFormat: dateFormat, weekStart: weekStart, locale: locale, showInheritValue: true, isWhiteLabeled: isWhiteLabeled, customRecurrenceTypeMappingFn: simpleRecurrenceTypeMappingFn }), _jsx("div", { className: "gd-dashboard-settings-evaluation-note", children: currentData.evaluationFrequency === undefined ? (_jsx(FormattedMessage, { id: "settingsDashboardDialog.section.alert.inherit" })) : (_jsx(FormattedMessage, { id: "settingsDashboardDialog.section.alert.note", values: {
108
109
  strong: (chunks) => _jsx("strong", { children: chunks }),
109
110
  } })) })
110
- ] })
111
- ] }) }));
111
+ ] }), settings.enableDashboardTimezone ? (_jsxs("div", { className: "gd-dashboard-settings-dialog-section s-dashboard-settings-timezone", children: [
112
+ _jsx(DialogListHeader, { title: intl.formatMessage({ id: "settingsDashboardDialog.section.timezone" }), className: "gd-dashboard-settings-filters" }), _jsx(TimezoneOption, { label: intl.formatMessage({
113
+ id: "settingsDashboardDialog.section.timezone.defaultTimezone",
114
+ }), tooltip: intl.formatMessage({
115
+ id: "settingsDashboardDialog.section.timezone.defaultTimezone.tooltip",
116
+ }), timezoneConfig: currentData.timezoneConfig, onChange: (timezoneId) => {
117
+ setCurrentData({
118
+ ...currentData,
119
+ timezoneConfig: normalizeDashboardTimezoneConfig({
120
+ ...currentData.timezoneConfig,
121
+ timezoneId,
122
+ }),
123
+ });
124
+ } }), _jsx(ConfigurationOption, { label: intl.formatMessage({
125
+ id: "settingsDashboardDialog.section.timezone.allowUserOverride.toggle",
126
+ }), tooltip: intl.formatMessage({
127
+ id: "settingsDashboardDialog.section.timezone.allowUserOverride.toggle.tooltip",
128
+ }), isChecked: currentData.timezoneConfig?.allowUserOverrideInViewMode ?? false, onChange: (isChecked) => {
129
+ setCurrentData({
130
+ ...currentData,
131
+ timezoneConfig: normalizeDashboardTimezoneConfig({
132
+ ...currentData.timezoneConfig,
133
+ allowUserOverrideInViewMode: isChecked,
134
+ }),
135
+ });
136
+ } }), _jsx(ConfigurationOption, { label: intl.formatMessage({
137
+ id: "settingsDashboardDialog.section.timezone.showTimezoneInfo.toggle",
138
+ }), tooltip: intl.formatMessage({
139
+ id: "settingsDashboardDialog.section.timezone.showTimezoneInfo.toggle.tooltip",
140
+ }), isChecked: currentData.timezoneConfig?.showTimezoneInfo ?? false, onChange: (isChecked) => {
141
+ setCurrentData({
142
+ ...currentData,
143
+ timezoneConfig: normalizeDashboardTimezoneConfig({
144
+ ...currentData.timezoneConfig,
145
+ showTimezoneInfo: isChecked,
146
+ }),
147
+ });
148
+ } })
149
+ ] })) : null] }) }));
112
150
  }
113
151
  const BUBBLE_ALIGN_POINTS = [{ align: "bc tl" }];
114
152
  function ConfigurationOption({ label, tooltip, isChecked, onChange }) {
115
153
  return (_jsx("div", { className: "configuration-category-item", children: _jsxs("label", { className: "input-checkbox-toggle", children: [
116
154
  _jsx("input", { type: "checkbox", checked: isChecked, onChange: (e) => {
117
- onChange(!e.currentTarget.checked);
155
+ onChange(e.currentTarget.checked);
118
156
  } }), _jsxs("span", { className: "input-label-text", children: [label, _jsxs(BubbleHoverTrigger, { showDelay: 0, hideDelay: 0, eventsOnBubble: true, className: "configuration-category-item-tooltip-icon", children: [
119
157
  _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 }) })
120
158
  ] })
@@ -0,0 +1,11 @@
1
+ import { type ReactNode } from "react";
2
+ import { type IDashboardTimezoneConfig } from "@gooddata/sdk-model";
3
+ interface ITimezoneOptionProps {
4
+ label: ReactNode;
5
+ tooltip: ReactNode;
6
+ timezoneConfig: IDashboardTimezoneConfig | undefined;
7
+ onChange: (timezoneId: string | undefined) => void;
8
+ }
9
+ export declare function TimezoneOption({ label, tooltip, timezoneConfig, onChange }: ITimezoneOptionProps): import("react/jsx-runtime").JSX.Element;
10
+ export {};
11
+ //# sourceMappingURL=TimezoneOption.d.ts.map
@@ -0,0 +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;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,2CAsDhG"}
@@ -0,0 +1,36 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ // (C) 2026 GoodData Corporation
3
+ import { useMemo } from "react";
4
+ import { useIntl } from "react-intl";
5
+ import { BROWSER_DETECTED } from "@gooddata/sdk-model";
6
+ import { Bubble, BubbleHoverTrigger, TimezoneSelect, } from "@gooddata/sdk-ui-kit";
7
+ const BUBBLE_ALIGN_POINTS = [{ align: "bc tl" }];
8
+ export function TimezoneOption({ label, tooltip, timezoneConfig, onChange }) {
9
+ const intl = useIntl();
10
+ const specialItems = useMemo(() => {
11
+ // TODO INE (CQ-2726): resolve the effective workspace timezone and include it in the item label
12
+ const workspaceItemLabel = intl.formatMessage({
13
+ id: "settingsDashboardDialog.section.timezone.defaultTimezone.workspace",
14
+ });
15
+ // plain ID here — the label template already brackets the value, so the "id (offset)"
16
+ // display label would produce nested brackets
17
+ const browserTimezoneId = Intl.DateTimeFormat().resolvedOptions().timeZone;
18
+ const browserItemLabel = intl.formatMessage({ id: "settingsDashboardDialog.section.timezone.defaultTimezone.fromBrowser" }, { timezone: browserTimezoneId });
19
+ return [
20
+ { id: undefined, label: workspaceItemLabel },
21
+ { id: BROWSER_DETECTED, label: browserItemLabel },
22
+ ];
23
+ }, [intl]);
24
+ return (_jsxs("div", { className: "configuration-category-item", children: [
25
+ _jsxs("span", { className: "input-label-text", children: [label, _jsxs(BubbleHoverTrigger, { showDelay: 0, hideDelay: 0, eventsOnBubble: true, className: "configuration-category-item-tooltip-icon", children: [
26
+ _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 }) })
27
+ ] })
28
+ ] }), _jsx(TimezoneSelect, { value: timezoneConfig?.timezoneId, onChange: onChange, specialItems: specialItems, searchPlaceholder: intl.formatMessage({
29
+ id: "settingsDashboardDialog.section.timezone.select.searchPlaceholder",
30
+ }), ariaLabel: intl.formatMessage({
31
+ id: "settingsDashboardDialog.section.timezone.defaultTimezone",
32
+ }), noMatchLabel: intl.formatMessage({
33
+ id: "settingsDashboardDialog.section.timezone.select.noMatch",
34
+ }) })
35
+ ] }));
36
+ }
@@ -1,6 +1,6 @@
1
1
  import { type ComponentType } from "react";
2
2
  import { type IAnalyticalBackend } from "@gooddata/sdk-backend-spi";
3
- import { type ObjRef } from "@gooddata/sdk-model";
3
+ import { type IDashboardTimezoneConfig, type ObjRef } from "@gooddata/sdk-model";
4
4
  import { type GoodDataSdkError } from "@gooddata/sdk-ui";
5
5
  /**
6
6
  * @alpha
@@ -13,6 +13,7 @@ export interface IDashboardSettingsApplyPayload {
13
13
  evaluationFrequency: string | undefined;
14
14
  sectionHeadersDateDataSet: ObjRef | undefined;
15
15
  disablePersistentFiltersAcrossTabs: boolean;
16
+ timezoneConfig?: IDashboardTimezoneConfig;
16
17
  }
17
18
  /**
18
19
  * @alpha
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/presentation/dashboardSettingsDialog/types.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,OAAO,CAAC;AAE3C,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEzD;;GAEG;AACH,MAAM,WAAW,8BAA8B;IAC3C,qBAAqB,EAAE,OAAO,CAAC;IAC/B,qBAAqB,EAAE,OAAO,CAAC;IAC/B,sBAAsB,EAAE,OAAO,CAAC;IAChC,kBAAkB,EAAE,OAAO,CAAC;IAC5B,mBAAmB,EAAE,MAAM,GAAG,SAAS,CAAC;IACxC,yBAAyB,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9C,kCAAkC,EAAE,OAAO,CAAC;CAC/C;AAED;;GAEG;AACH,MAAM,WAAW,6BAA6B;IAC1C;;OAEG;IACH,OAAO,EAAE,kBAAkB,CAAC;IAE5B;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB;;OAEG;IACH,OAAO,EAAE,CAAC,OAAO,EAAE,8BAA8B,KAAK,IAAI,CAAC;IAE3D;;OAEG;IACH,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,gBAAgB,KAAK,IAAI,CAAC;IAE5C;;OAEG;IACH,QAAQ,EAAE,MAAM,IAAI,CAAC;CACxB;AAMD;;GAEG;AACH,MAAM,MAAM,sCAAsC,GAAG,aAAa,CAAC,6BAA6B,CAAC,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/presentation/dashboardSettingsDialog/types.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,OAAO,CAAC;AAE3C,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAAE,KAAK,wBAAwB,EAAE,KAAK,MAAM,EAAE,MAAM,qBAAqB,CAAC;AACjF,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEzD;;GAEG;AACH,MAAM,WAAW,8BAA8B;IAC3C,qBAAqB,EAAE,OAAO,CAAC;IAC/B,qBAAqB,EAAE,OAAO,CAAC;IAC/B,sBAAsB,EAAE,OAAO,CAAC;IAChC,kBAAkB,EAAE,OAAO,CAAC;IAC5B,mBAAmB,EAAE,MAAM,GAAG,SAAS,CAAC;IACxC,yBAAyB,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9C,kCAAkC,EAAE,OAAO,CAAC;IAC5C,cAAc,CAAC,EAAE,wBAAwB,CAAC;CAC7C;AAED;;GAEG;AACH,MAAM,WAAW,6BAA6B;IAC1C;;OAEG;IACH,OAAO,EAAE,kBAAkB,CAAC;IAE5B;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB;;OAEG;IACH,OAAO,EAAE,CAAC,OAAO,EAAE,8BAA8B,KAAK,IAAI,CAAC;IAE3D;;OAEG;IACH,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,gBAAgB,KAAK,IAAI,CAAC;IAE5C;;OAEG;IACH,QAAQ,EAAE,MAAM,IAAI,CAAC;CACxB;AAMD;;GAEG;AACH,MAAM,MAAM,sCAAsC,GAAG,aAAa,CAAC,6BAA6B,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"useDialogData.d.ts","sourceRoot":"","sources":["../../../src/presentation/dashboardSettingsDialog/useDialogData.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,KAAK,8BAA8B,EAAE,MAAM,YAAY,CAAC;AAEjE,wBAAgB,aAAa;;;;;EA4B5B"}
1
+ {"version":3,"file":"useDialogData.d.ts","sourceRoot":"","sources":["../../../src/presentation/dashboardSettingsDialog/useDialogData.ts"],"names":[],"mappings":"AAoBA,OAAO,EAAE,KAAK,8BAA8B,EAAE,MAAM,YAAY,CAAC;AAEjE,wBAAgB,aAAa;;;;;EAgC5B"}
@@ -1,8 +1,9 @@
1
1
  // (C) 2025-2026 GoodData Corporation
2
2
  import { useState } from "react";
3
3
  import { isEqual } from "lodash-es";
4
+ import { normalizeDashboardTimezoneConfig } from "@gooddata/sdk-model";
4
5
  import { useDashboardSelector } from "../../model/react/DashboardStoreProvider.js";
5
- import { selectDisableDashboardCrossFiltering, selectDisableDashboardPersistentFiltersAcrossTabs, selectDisableDashboardUserFilterReset, selectDisableDashboardUserFilterSave, selectDisableFilterViews, selectEvaluationFrequency, selectSectionHeadersDateDataSet, } from "../../model/store/meta/metaSelectors.js";
6
+ import { selectDashboardTimezoneConfig, selectDisableDashboardCrossFiltering, selectDisableDashboardPersistentFiltersAcrossTabs, selectDisableDashboardUserFilterReset, selectDisableDashboardUserFilterSave, selectDisableFilterViews, selectEvaluationFrequency, selectSectionHeadersDateDataSet, } from "../../model/store/meta/metaSelectors.js";
6
7
  export function useDialogData() {
7
8
  const disableCrossFiltering = useDashboardSelector(selectDisableDashboardCrossFiltering) ?? false;
8
9
  const disableUserFilterReset = useDashboardSelector(selectDisableDashboardUserFilterReset) ?? false;
@@ -11,6 +12,7 @@ export function useDialogData() {
11
12
  const disablePersistentFiltersAcrossTabs = useDashboardSelector(selectDisableDashboardPersistentFiltersAcrossTabs) ?? false;
12
13
  const evaluationFrequency = useDashboardSelector(selectEvaluationFrequency) ?? undefined;
13
14
  const sectionHeadersDateDataSet = useDashboardSelector(selectSectionHeadersDateDataSet) ?? undefined;
15
+ const timezoneConfig = normalizeDashboardTimezoneConfig(useDashboardSelector(selectDashboardTimezoneConfig));
14
16
  const [currentData, setCurrentData] = useState({
15
17
  disableCrossFiltering,
16
18
  disableUserFilterSave,
@@ -19,6 +21,7 @@ export function useDialogData() {
19
21
  disablePersistentFiltersAcrossTabs,
20
22
  evaluationFrequency,
21
23
  sectionHeadersDateDataSet,
24
+ timezoneConfig,
22
25
  });
23
26
  const [originalData] = useState(currentData);
24
27
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"DefaultDashboardDateFilter.d.ts","sourceRoot":"","sources":["../../../../src/presentation/filterBar/dateFilter/DefaultDashboardDateFilter.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,YAAY,EAAkC,MAAM,OAAO,CAAC;AAiC1E,OAAO,EAAE,KAAK,yBAAyB,EAAE,MAAM,YAAY,CAAC;AAE5D;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CAAC,EACvC,MAAM,EACN,aAAa,EACb,eAAe,EACf,MAAM,EACN,QAAQ,EACR,QAAQ,EACR,eAAe,EACf,mBAAmB,EACnB,KAAK,EACR,EAAE,yBAAyB,GAAG,YAAY,CAgK1C"}
1
+ {"version":3,"file":"DefaultDashboardDateFilter.d.ts","sourceRoot":"","sources":["../../../../src/presentation/filterBar/dateFilter/DefaultDashboardDateFilter.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,YAAY,EAAkC,MAAM,OAAO,CAAC;AAmC1E,OAAO,EAAE,KAAK,yBAAyB,EAAE,MAAM,YAAY,CAAC;AAmB5D;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CAAC,EACvC,MAAM,EACN,aAAa,EACb,eAAe,EACf,MAAM,EACN,QAAQ,EACR,QAAQ,EACR,eAAe,EACf,mBAAmB,EACnB,KAAK,EACR,EAAE,yBAAyB,GAAG,YAAY,CA0L1C"}
@@ -14,6 +14,17 @@ import { selectIsInEditMode } from "../../../model/store/renderMode/renderModeSe
14
14
  import { useCurrentDateFilterConfig } from "../../dragAndDrop/useCurrentDateFilterConfig.js";
15
15
  import { getVisibilityIcon } from "../utils.js";
16
16
  import { DateFilterConfigurationBody } from "./configuration/DateFilterConfigurationBody.js";
17
+ /**
18
+ * Whether the date dimension relevant to the filter exposes the second-level attribute (`GDC.time.second`):
19
+ * a dimension-scoped filter checks its own dataset, a common (dataset-less) filter checks whether any date
20
+ * dimension has seconds enabled.
21
+ */
22
+ function relevantDateDimensionHasSeconds(dateDatasets, dataSetRef) {
23
+ const datasetHasSeconds = (dateDataset) => dateDataset.dateAttributes.some((attribute) => attribute.granularity === "GDC.time.second");
24
+ return dataSetRef
25
+ ? dateDatasets.some((ds) => areObjRefsEqual(ds.dataSet.ref, dataSetRef) && datasetHasSeconds(ds))
26
+ : dateDatasets.some(datasetHasSeconds);
27
+ }
17
28
  /**
18
29
  * Default implementation of the date filter to use on the dashboard's filter bar.
19
30
  *
@@ -70,6 +81,24 @@ export function DefaultDashboardDateFilter({ filter, workingFilter, onFilterChan
70
81
  const hoursMinutesGranularities = ["GDC.time.minute", "GDC.time.hour"];
71
82
  const hasHoursMinutesGranularities = hoursMinutesGranularities.every((granularity) => config.availableGranularities.includes(granularity));
72
83
  const isTimeForAbsoluteRangeEnabled = !!capabilities.supportsTimeGranularities && hasHoursMinutesGranularities;
84
+ // Second-level relative granularities ship in the default config but are surfaced only when the
85
+ // enableSecondGranularities feature flag is on AND the backend supports time granularities; otherwise
86
+ // strip them from the tabs the relative form shows.
87
+ const availableGranularities = useMemo(() => settings.enableSecondGranularities && capabilities.supportsTimeGranularities
88
+ ? config.availableGranularities
89
+ : config.availableGranularities.filter((granularity) => granularity !== "GDC.time.second"), [
90
+ config.availableGranularities,
91
+ settings.enableSecondGranularities,
92
+ capabilities.supportsTimeGranularities,
93
+ ]);
94
+ // Seconds precision in the absolute date filter time field is offered only when the backend supports time
95
+ // granularities, the enableSecondGranularities feature flag is on, and the relevant date dimension exposes
96
+ // the GDC.time.second attribute. This is a stricter, dimension-aware gate than the relative form's seconds
97
+ // tab (which follows availableGranularities); the absolute time field must not appear for a dimension that
98
+ // has no second attribute.
99
+ const isSecondsForAbsoluteRangeEnabled = isTimeForAbsoluteRangeEnabled &&
100
+ !!settings.enableSecondGranularities &&
101
+ relevantDateDimensionHasSeconds(allDateDatasets, filter?.dateFilter.dataSet);
73
102
  const isConfigurationEnabled = isInEditMode &&
74
103
  (!!capabilities.supportsHiddenAndLockedFiltersOnUI || !!capabilities.supportsMultipleDateFilters);
75
104
  const FilterConfigurationComponent = useMemo(() => {
@@ -80,5 +109,5 @@ export function DefaultDashboardDateFilter({ filter, workingFilter, onFilterChan
80
109
  }, [intl, filter?.dateFilter.dataSet, defaultDateFilterName]);
81
110
  return (_jsx(DateFilter, { excludeCurrentPeriod: excludeCurrentPeriod, selectedFilterOption: dateFilterOption, workingExcludeCurrentPeriod: isApplyAllAtOnceEnabledAndSet ? workingExcludeCurrentPeriod : undefined, workingSelectedFilterOption: isApplyAllAtOnceEnabledAndSet ? workingFilterOption : undefined, dateFilterMode: readonly
82
111
  ? DashboardDateFilterConfigModeValues.READONLY
83
- : DashboardDateFilterConfigModeValues.ACTIVE, filterOptions: dateFilterOptions, availableGranularities: config.availableGranularities, customFilterName: title, onApply: onApply, onSelect: isApplyAllAtOnceEnabledAndSet ? onSelect : undefined, dateFormat: dateFormat, locale: locale, isTimeForAbsoluteRangeEnabled: isTimeForAbsoluteRangeEnabled, isEditMode: isInEditMode, openOnInit: autoOpen, weekStart: weekStart, customIcon: visibilityIcon, showDropDownHeaderMessage: !filter?.dateFilter.dataSet, FilterConfigurationComponent: isConfigurationEnabled ? FilterConfigurationComponent : undefined, withoutApply: isApplyAllAtOnceEnabledAndSet, ButtonComponent: ButtonComponent, overlayPositionType: overlayPositionType, activeCalendars: activeCalendars, enableEmptyDateValues: enableEmptyDateValues, hideDisabledExclude: true }));
112
+ : DashboardDateFilterConfigModeValues.ACTIVE, filterOptions: dateFilterOptions, availableGranularities: availableGranularities, customFilterName: title, onApply: onApply, onSelect: isApplyAllAtOnceEnabledAndSet ? onSelect : undefined, dateFormat: dateFormat, locale: locale, isTimeForAbsoluteRangeEnabled: isTimeForAbsoluteRangeEnabled, isSecondsForAbsoluteRangeEnabled: isSecondsForAbsoluteRangeEnabled, isEditMode: isInEditMode, openOnInit: autoOpen, weekStart: weekStart, customIcon: visibilityIcon, showDropDownHeaderMessage: !filter?.dateFilter.dataSet, FilterConfigurationComponent: isConfigurationEnabled ? FilterConfigurationComponent : undefined, withoutApply: isApplyAllAtOnceEnabledAndSet, ButtonComponent: ButtonComponent, overlayPositionType: overlayPositionType, activeCalendars: activeCalendars, enableEmptyDateValues: enableEmptyDateValues, hideDisabledExclude: true }));
84
113
  }
@@ -427,6 +427,50 @@ export declare const en_US: {
427
427
  text: string;
428
428
  crowdinContext: string;
429
429
  };
430
+ "settingsDashboardDialog.section.timezone": {
431
+ text: string;
432
+ crowdinContext: string;
433
+ };
434
+ "settingsDashboardDialog.section.timezone.defaultTimezone": {
435
+ text: string;
436
+ crowdinContext: string;
437
+ };
438
+ "settingsDashboardDialog.section.timezone.defaultTimezone.tooltip": {
439
+ text: string;
440
+ crowdinContext: string;
441
+ };
442
+ "settingsDashboardDialog.section.timezone.defaultTimezone.workspace": {
443
+ text: string;
444
+ crowdinContext: string;
445
+ };
446
+ "settingsDashboardDialog.section.timezone.defaultTimezone.fromBrowser": {
447
+ text: string;
448
+ crowdinContext: string;
449
+ };
450
+ "settingsDashboardDialog.section.timezone.allowUserOverride.toggle": {
451
+ text: string;
452
+ crowdinContext: string;
453
+ };
454
+ "settingsDashboardDialog.section.timezone.allowUserOverride.toggle.tooltip": {
455
+ text: string;
456
+ crowdinContext: string;
457
+ };
458
+ "settingsDashboardDialog.section.timezone.showTimezoneInfo.toggle": {
459
+ text: string;
460
+ crowdinContext: string;
461
+ };
462
+ "settingsDashboardDialog.section.timezone.showTimezoneInfo.toggle.tooltip": {
463
+ text: string;
464
+ crowdinContext: string;
465
+ };
466
+ "settingsDashboardDialog.section.timezone.select.searchPlaceholder": {
467
+ text: string;
468
+ crowdinContext: string;
469
+ };
470
+ "settingsDashboardDialog.section.timezone.select.noMatch": {
471
+ text: string;
472
+ crowdinContext: string;
473
+ };
430
474
  "deleteDashboardDialog.headline": {
431
475
  text: string;
432
476
  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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA65GjB,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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAy8GjB,CAAC"}
@@ -429,6 +429,50 @@ export const en_US = {
429
429
  "text": "Evaluation Frequency",
430
430
  "crowdinContext": "Label for alert evaluation frequency setting"
431
431
  },
432
+ "settingsDashboardDialog.section.timezone": {
433
+ "text": "Time zone",
434
+ "crowdinContext": "Section title for time zone settings in the dashboard settings dialog"
435
+ },
436
+ "settingsDashboardDialog.section.timezone.defaultTimezone": {
437
+ "text": "Default time zone",
438
+ "crowdinContext": "Label of the default time zone picker in the dashboard settings dialog"
439
+ },
440
+ "settingsDashboardDialog.section.timezone.defaultTimezone.tooltip": {
441
+ "text": "Time zone used to evaluate date filters and display dates on this dashboard.",
442
+ "crowdinContext": "Tooltip of the default time zone picker in the dashboard settings dialog"
443
+ },
444
+ "settingsDashboardDialog.section.timezone.defaultTimezone.workspace": {
445
+ "text": "Workspace time zone",
446
+ "crowdinContext": "Time zone picker item meaning the workspace default time zone is used"
447
+ },
448
+ "settingsDashboardDialog.section.timezone.defaultTimezone.fromBrowser": {
449
+ "text": "From browser ({timezone})",
450
+ "crowdinContext": "Time zone picker item meaning the time zone is detected from the viewer's browser. The {timezone} placeholder shows the detected time zone."
451
+ },
452
+ "settingsDashboardDialog.section.timezone.allowUserOverride.toggle": {
453
+ "text": "Allow users to change the dashboard time zone",
454
+ "crowdinContext": "Toggle allowing dashboard consumers to change the time zone in view mode"
455
+ },
456
+ "settingsDashboardDialog.section.timezone.allowUserOverride.toggle.tooltip": {
457
+ "text": "When enabled, viewers can temporarily change the dashboard time zone. The change is not saved.",
458
+ "crowdinContext": "Tooltip of the toggle allowing dashboard consumers to change the time zone in view mode"
459
+ },
460
+ "settingsDashboardDialog.section.timezone.showTimezoneInfo.toggle": {
461
+ "text": "Show time zone",
462
+ "crowdinContext": "Toggle controlling whether the used time zone is shown on the dashboard"
463
+ },
464
+ "settingsDashboardDialog.section.timezone.showTimezoneInfo.toggle.tooltip": {
465
+ "text": "When enabled, the dashboard displays which time zone is used.",
466
+ "crowdinContext": "Tooltip of the toggle controlling whether the used time zone is shown on the dashboard"
467
+ },
468
+ "settingsDashboardDialog.section.timezone.select.searchPlaceholder": {
469
+ "text": "Search ...",
470
+ "crowdinContext": "Placeholder of the search input in the time zone picker"
471
+ },
472
+ "settingsDashboardDialog.section.timezone.select.noMatch": {
473
+ "text": "No matching time zone.",
474
+ "crowdinContext": "Message shown when the time zone search yields no results"
475
+ },
432
476
  "deleteDashboardDialog.headline": {
433
477
  "text": "Delete dashboard?",
434
478
  "crowdinContext": "Confirmation dialog for deleting a dashboard"
@@ -1 +1 @@
1
- {"version":3,"file":"InsightDrillDialog.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/widget/insight/ViewModeDashboardInsight/InsightDrillDialog/InsightDrillDialog.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAsB,KAAK,YAAY,EAAyB,MAAM,OAAO,CAAC;AAKrF,OAAO,EAEH,KAAK,QAAQ,EACb,KAAK,cAAc,EAKtB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,KAAK,OAAO,EAAyB,MAAM,kBAAkB,CAAC;AAwBvE,OAAO,EAAE,KAAK,UAAU,EAAE,KAAK,gBAAgB,EAAE,KAAK,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAgB7G;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACrC,sBAAsB,EAAE,OAAO,CAAC;IAChC,MAAM,EAAE,OAAO,CAAC;IAChB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,MAAM,EAAE,cAAc,CAAC;IACvB,OAAO,EAAE,QAAQ,CAAC;IAClB,SAAS,EAAE,UAAU,CAAC;IACtB,WAAW,CAAC,EAAE,kBAAkB,CAAC;IACjC,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,iBAAiB,EAAE,MAAM,IAAI,CAAC;IAC9B,oBAAoB,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IACjD,YAAY,CAAC,EAAE,gBAAgB,CAAC;CACnC;AAkCD,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,wBAAwB,GAAG,YAAY,CA2MhF"}
1
+ {"version":3,"file":"InsightDrillDialog.d.ts","sourceRoot":"","sources":["../../../../../../src/presentation/widget/insight/ViewModeDashboardInsight/InsightDrillDialog/InsightDrillDialog.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAsB,KAAK,YAAY,EAAyB,MAAM,OAAO,CAAC;AAKrF,OAAO,EAEH,KAAK,QAAQ,EACb,KAAK,cAAc,EAKtB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,KAAK,OAAO,EAAyB,MAAM,kBAAkB,CAAC;AAyBvE,OAAO,EAAE,KAAK,UAAU,EAAE,KAAK,gBAAgB,EAAE,KAAK,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAgB7G;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACrC,sBAAsB,EAAE,OAAO,CAAC;IAChC,MAAM,EAAE,OAAO,CAAC;IAChB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,MAAM,EAAE,cAAc,CAAC;IACvB,OAAO,EAAE,QAAQ,CAAC;IAClB,SAAS,EAAE,UAAU,CAAC;IACtB,WAAW,CAAC,EAAE,kBAAkB,CAAC;IACjC,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,iBAAiB,EAAE,MAAM,IAAI,CAAC;IAC9B,oBAAoB,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IACjD,YAAY,CAAC,EAAE,gBAAgB,CAAC;CACnC;AAmCD,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,wBAAwB,GAAG,YAAY,CA2MhF"}
@@ -4,7 +4,7 @@ import { useCallback, useState } from "react";
4
4
  import cx from "classnames";
5
5
  import { useIntl } from "react-intl";
6
6
  import { insightTitle, insightVisualizationType, isInsight, } from "@gooddata/sdk-model";
7
- import { Button, FullScreenOverlay, Overlay, OverlayController, OverlayControllerProvider, RichText, UiIcon, UiTooltip, isNotDocumentFocused, useIdPrefixed, useMediaQuery, } from "@gooddata/sdk-ui-kit";
7
+ import { Button, FLOATING_ELEMENT_DATA_ATTR, FullScreenOverlay, Overlay, OverlayController, OverlayControllerProvider, RichText, UiIcon, UiTooltip, isNotDocumentFocused, useIdPrefixed, useMediaQuery, } from "@gooddata/sdk-ui-kit";
8
8
  import { DOWNLOADER_ID } from "../../../../../_staging/fileUtils/downloadFile.js";
9
9
  import { useDashboardSelector } from "../../../../../model/react/DashboardStoreProvider.js";
10
10
  import { useWidgetExecutionsHandler } from "../../../../../model/react/useWidgetExecutionsHandler.js";
@@ -32,6 +32,7 @@ const overlayIgnoredClasses = [
32
32
  ".options-menu-export-xlsx",
33
33
  ".options-menu-export-csv",
34
34
  `#${DOWNLOADER_ID}`,
35
+ `[${FLOATING_ELEMENT_DATA_ATTR}]`,
35
36
  ];
36
37
  const defaultDescriptionConfig = {
37
38
  source: "insight",