@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.
- package/NOTICE +4 -4
- package/esm/__version.d.ts +1 -1
- package/esm/__version.js +1 -1
- package/esm/index.d.ts +6 -1
- package/esm/index.d.ts.map +1 -1
- package/esm/index.js +6 -1
- package/esm/model/store/meta/index.d.ts +1 -0
- package/esm/model/store/meta/index.d.ts.map +1 -1
- package/esm/model/store/meta/metaReducers.d.ts +5 -1
- package/esm/model/store/meta/metaReducers.d.ts.map +1 -1
- package/esm/model/store/meta/metaReducers.js +9 -0
- package/esm/model/store/meta/metaSelectors.d.ts +23 -1
- package/esm/model/store/meta/metaSelectors.d.ts.map +1 -1
- package/esm/model/store/meta/metaSelectors.js +33 -2
- package/esm/model/store/meta/metaState.d.ts +1 -1
- package/esm/model/store/meta/metaState.d.ts.map +1 -1
- package/esm/presentation/automations/alerting/DefaultAlertingDialog/DefaultAlertingDialog.d.ts +1 -1
- package/esm/presentation/automations/alerting/DefaultAlertingDialog/DefaultAlertingDialog.d.ts.map +1 -1
- package/esm/presentation/automations/alerting/DefaultAlertingDialog/DefaultAlertingDialog.js +9 -9
- package/esm/presentation/automations/alerting/DefaultAlertingDialog/DefaultLoadingAlertingDialog.d.ts +7 -2
- package/esm/presentation/automations/alerting/DefaultAlertingDialog/DefaultLoadingAlertingDialog.d.ts.map +1 -1
- package/esm/presentation/automations/alerting/DefaultAlertingDialog/DefaultLoadingAlertingDialog.js +1 -1
- package/esm/presentation/automations/alerting/DefaultAlertingDialog/hooks/useEditAlert.d.ts +6 -8
- package/esm/presentation/automations/alerting/DefaultAlertingDialog/hooks/useEditAlert.d.ts.map +1 -1
- package/esm/presentation/automations/alerting/DefaultAlertingDialog/hooks/useEditAlert.js +5 -2
- package/esm/presentation/automations/alerting/types.d.ts +30 -5
- package/esm/presentation/automations/alerting/types.d.ts.map +1 -1
- package/esm/presentation/automations/connectors/AlertingConnector.d.ts.map +1 -1
- package/esm/presentation/automations/connectors/AlertingConnector.js +22 -25
- package/esm/presentation/automations/connectors/AlertingConnector.test.js +71 -5
- package/esm/presentation/automations/connectors/hooks/useBuildAlertingDialogContext.d.ts +7 -1
- package/esm/presentation/automations/connectors/hooks/useBuildAlertingDialogContext.d.ts.map +1 -1
- package/esm/presentation/automations/connectors/hooks/useBuildAlertingDialogContext.js +12 -2
- package/esm/presentation/automations/connectors/hooks/useBuildAlertingDialogContext.test.js +28 -2
- package/esm/presentation/automations/contexts/AlertingDialogContext.d.ts +29 -1
- package/esm/presentation/automations/contexts/AlertingDialogContext.d.ts.map +1 -1
- package/esm/presentation/automations/contexts/AlertingDialogContext.js +12 -0
- package/esm/presentation/automations/contexts/AlertingManagementDialogContext.d.ts +14 -0
- package/esm/presentation/automations/contexts/AlertingManagementDialogContext.d.ts.map +1 -1
- package/esm/presentation/automations/contexts/AlertingManagementDialogContext.js +12 -0
- package/esm/presentation/automations/contexts/AutomationsContext.d.ts +13 -0
- package/esm/presentation/automations/contexts/AutomationsContext.d.ts.map +1 -1
- package/esm/presentation/automations/contexts/AutomationsContext.js +9 -0
- package/esm/presentation/automations/contexts/ScheduledEmailDialogContext.d.ts +15 -0
- package/esm/presentation/automations/contexts/ScheduledEmailDialogContext.d.ts.map +1 -1
- package/esm/presentation/automations/contexts/ScheduledEmailDialogContext.js +13 -0
- package/esm/presentation/automations/contexts/ScheduledEmailManagementDialogContext.d.ts +13 -1
- package/esm/presentation/automations/contexts/ScheduledEmailManagementDialogContext.d.ts.map +1 -1
- package/esm/presentation/automations/contexts/ScheduledEmailManagementDialogContext.js +12 -0
- package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/DefaultScheduledEmailDialog.d.ts.map +1 -1
- package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/DefaultScheduledEmailDialog.js +8 -14
- package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/hooks/useElementHeightSnapshot.d.ts +12 -0
- package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/hooks/useElementHeightSnapshot.d.ts.map +1 -0
- package/esm/presentation/automations/scheduledEmail/DefaultScheduledEmailDialog/hooks/useElementHeightSnapshot.js +41 -0
- package/esm/presentation/automations/scheduledEmail/utils/timezone.d.ts +4 -1
- package/esm/presentation/automations/scheduledEmail/utils/timezone.d.ts.map +1 -1
- package/esm/presentation/automations/scheduledEmail/utils/timezone.js +14 -138
- package/esm/presentation/dashboard/DashboardHeader/SettingsDialogProvider.d.ts.map +1 -1
- package/esm/presentation/dashboard/DashboardHeader/SettingsDialogProvider.js +1 -0
- package/esm/presentation/dashboardSettingsDialog/DefaultDashboardSettingsDialog.d.ts.map +1 -1
- package/esm/presentation/dashboardSettingsDialog/DefaultDashboardSettingsDialog.js +52 -14
- package/esm/presentation/dashboardSettingsDialog/TimezoneOption.d.ts +11 -0
- package/esm/presentation/dashboardSettingsDialog/TimezoneOption.d.ts.map +1 -0
- package/esm/presentation/dashboardSettingsDialog/TimezoneOption.js +36 -0
- package/esm/presentation/dashboardSettingsDialog/types.d.ts +2 -1
- package/esm/presentation/dashboardSettingsDialog/types.d.ts.map +1 -1
- package/esm/presentation/dashboardSettingsDialog/useDialogData.d.ts.map +1 -1
- package/esm/presentation/dashboardSettingsDialog/useDialogData.js +4 -1
- package/esm/presentation/filterBar/dateFilter/DefaultDashboardDateFilter.d.ts.map +1 -1
- package/esm/presentation/filterBar/dateFilter/DefaultDashboardDateFilter.js +30 -1
- package/esm/presentation/localization/bundles/en-US.localization-bundle.d.ts +44 -0
- package/esm/presentation/localization/bundles/en-US.localization-bundle.d.ts.map +1 -1
- package/esm/presentation/localization/bundles/en-US.localization-bundle.js +44 -0
- package/esm/presentation/widget/insight/ViewModeDashboardInsight/InsightDrillDialog/InsightDrillDialog.d.ts.map +1 -1
- package/esm/presentation/widget/insight/ViewModeDashboardInsight/InsightDrillDialog/InsightDrillDialog.js +2 -1
- package/esm/sdk-ui-dashboard.d.ts +370 -6
- 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: (
|
|
50
|
+
}), isChecked: !currentData.disableCrossFiltering, onChange: (isChecked) => {
|
|
50
51
|
setCurrentData({
|
|
51
52
|
...currentData,
|
|
52
|
-
disableCrossFiltering:
|
|
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: (
|
|
59
|
+
}), isChecked: !currentData.disableUserFilterReset, onChange: (isChecked) => {
|
|
59
60
|
setCurrentData({
|
|
60
61
|
...currentData,
|
|
61
|
-
disableUserFilterReset:
|
|
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: (
|
|
69
|
+
}), isChecked: !currentData.disableFilterViews, onChange: (isChecked) => {
|
|
69
70
|
setCurrentData({
|
|
70
71
|
...currentData,
|
|
71
|
-
disableFilterViews:
|
|
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: (
|
|
76
|
+
}), isChecked: !currentData.disableUserFilterSave, onChange: (isChecked) => {
|
|
76
77
|
setCurrentData({
|
|
77
78
|
...currentData,
|
|
78
|
-
disableUserFilterSave:
|
|
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: (
|
|
85
|
+
}), isChecked: !currentData.disablePersistentFiltersAcrossTabs, onChange: (isChecked) => {
|
|
85
86
|
setCurrentData({
|
|
86
87
|
...currentData,
|
|
87
|
-
disablePersistentFiltersAcrossTabs:
|
|
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(
|
|
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;
|
|
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":"
|
|
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;
|
|
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:
|
|
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
|
|
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;
|
|
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",
|