@grafana/scenes 6.36.0--canary.1248.17765166749.0 → 6.36.0--canary.1248.17797615374.0
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/dist/esm/components/SceneTimePicker.js +17 -6
- package/dist/esm/components/SceneTimePicker.js.map +1 -1
- package/dist/esm/locales/en-US/grafana-scenes.json.js +4 -0
- package/dist/esm/locales/en-US/grafana-scenes.json.js.map +1 -1
- package/dist/{grafana-scenes-C_CT7peT.js → grafana-scenes-Bnbq8XI2.js} +5 -1
- package/dist/{grafana-scenes-C_CT7peT.js.map → grafana-scenes-Bnbq8XI2.js.map} +1 -1
- package/dist/index.js +17 -7
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
|
@@ -5,6 +5,7 @@ import { intervalToAbbreviatedDurationString, rangeUtil, isDateTime, toUtc } fro
|
|
|
5
5
|
import { TimeRangePicker } from '@grafana/ui';
|
|
6
6
|
import { SceneObjectBase } from '../core/SceneObjectBase.js';
|
|
7
7
|
import { sceneGraph } from '../core/sceneGraph/index.js';
|
|
8
|
+
import { t } from '@grafana/i18n';
|
|
8
9
|
|
|
9
10
|
class SceneTimePicker extends SceneObjectBase {
|
|
10
11
|
constructor() {
|
|
@@ -30,7 +31,7 @@ class SceneTimePicker extends SceneObjectBase {
|
|
|
30
31
|
const {
|
|
31
32
|
state: { value: range }
|
|
32
33
|
} = timeRange;
|
|
33
|
-
timeRange.onTimeRangeChange(getShiftedTimeRange(0 /* Backward */, range
|
|
34
|
+
timeRange.onTimeRangeChange(getShiftedTimeRange(0 /* Backward */, range));
|
|
34
35
|
};
|
|
35
36
|
this.onMoveForward = () => {
|
|
36
37
|
const timeRange = sceneGraph.getTimeRange(this);
|
|
@@ -56,10 +57,13 @@ function SceneTimePickerRenderer({ model }) {
|
|
|
56
57
|
return null;
|
|
57
58
|
}
|
|
58
59
|
const rangesToUse = quickRanges || defaultQuickRanges;
|
|
59
|
-
const
|
|
60
|
-
|
|
61
|
-
|
|
60
|
+
const halfSpanMs = (timeRangeState.value.to.valueOf() - timeRangeState.value.from.valueOf()) / 2;
|
|
61
|
+
const moveBackwardDuration = intervalToAbbreviatedDurationString({
|
|
62
|
+
start: new Date(timeRangeState.value.from.valueOf()),
|
|
63
|
+
end: new Date(timeRangeState.value.from.valueOf() + halfSpanMs)
|
|
62
64
|
});
|
|
65
|
+
const canMoveForward = timeRangeState.value.to.valueOf() + halfSpanMs <= Date.now();
|
|
66
|
+
const moveForwardDuration = canMoveForward ? moveBackwardDuration : void 0;
|
|
63
67
|
return /* @__PURE__ */ React.createElement(
|
|
64
68
|
TimeRangePicker,
|
|
65
69
|
{
|
|
@@ -75,7 +79,14 @@ function SceneTimePickerRenderer({ model }) {
|
|
|
75
79
|
fiscalYearStartMonth: timeRangeState.fiscalYearStartMonth,
|
|
76
80
|
onMoveBackward: model.onMoveBackward,
|
|
77
81
|
onMoveForward: model.onMoveForward,
|
|
78
|
-
|
|
82
|
+
moveForwardTooltip: moveForwardDuration ? t("grafana-scenes.components.time-picker.move-forward-tooltip", "Move {{moveForwardDuration}} forward", {
|
|
83
|
+
moveForwardDuration
|
|
84
|
+
}) : void 0,
|
|
85
|
+
moveBackwardTooltip: t(
|
|
86
|
+
"grafana-scenes.components.time-picker.move-backward-tooltip",
|
|
87
|
+
"Move {{moveBackwardDuration}} backward",
|
|
88
|
+
{ moveBackwardDuration }
|
|
89
|
+
),
|
|
79
90
|
onZoom: model.onZoom,
|
|
80
91
|
onChangeTimeZone: timeRange.onTimeZoneChange,
|
|
81
92
|
onChangeFiscalYearStartMonth: model.onChangeFiscalYearStartMonth,
|
|
@@ -105,7 +116,7 @@ function getShiftedTimeRange(dir, timeRange, upperLimit) {
|
|
|
105
116
|
} else {
|
|
106
117
|
fromRaw = oldFrom + halfSpan;
|
|
107
118
|
toRaw = oldTo + halfSpan;
|
|
108
|
-
if (toRaw > upperLimit && oldTo < upperLimit) {
|
|
119
|
+
if (upperLimit !== void 0 && toRaw > upperLimit && oldTo < upperLimit) {
|
|
109
120
|
toRaw = upperLimit;
|
|
110
121
|
fromRaw = oldFrom;
|
|
111
122
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SceneTimePicker.js","sources":["../../../src/components/SceneTimePicker.tsx"],"sourcesContent":["import React from 'react';\nimport { useLocalStorage } from 'react-use';\nimport { uniqBy } from 'lodash';\n\nimport {\n TimeOption,\n TimeRange,\n intervalToAbbreviatedDurationString,\n isDateTime,\n rangeUtil,\n toUtc,\n} from '@grafana/data';\nimport { TimeRangePicker } from '@grafana/ui';\n\nimport { SceneObjectBase } from '../core/SceneObjectBase';\nimport { sceneGraph } from '../core/sceneGraph';\nimport { SceneComponentProps, SceneObjectState } from '../core/types';\n\nexport interface SceneTimePickerState extends SceneObjectState {\n hidePicker?: boolean;\n isOnCanvas?: boolean;\n quickRanges?: TimeOption[];\n defaultQuickRanges?: TimeOption[]; // Overrides default time ranges from server config, so not serialised back to JSON\n}\n\nexport class SceneTimePicker extends SceneObjectBase<SceneTimePickerState> {\n public static Component = SceneTimePickerRenderer;\n\n public onZoom = () => {\n const timeRange = sceneGraph.getTimeRange(this);\n const zoomedTimeRange = getZoomedTimeRange(timeRange.state.value, 2);\n timeRange.onTimeRangeChange(zoomedTimeRange);\n };\n\n public onChangeFiscalYearStartMonth = (month: number) => {\n const timeRange = sceneGraph.getTimeRange(this);\n timeRange.setState({ fiscalYearStartMonth: month });\n };\n\n public toAbsolute = () => {\n const timeRange = sceneGraph.getTimeRange(this);\n const timeRangeVal = timeRange.state.value;\n const from = toUtc(timeRangeVal.from);\n const to = toUtc(timeRangeVal.to);\n timeRange.onTimeRangeChange({ from, to, raw: { from, to } });\n };\n\n public onMoveBackward = () => {\n const timeRange = sceneGraph.getTimeRange(this);\n const {\n state: { value: range },\n } = timeRange;\n\n timeRange.onTimeRangeChange(getShiftedTimeRange(TimeRangeDirection.Backward, range, Date.now()));\n };\n\n public onMoveForward = () => {\n const timeRange = sceneGraph.getTimeRange(this);\n const {\n state: { value: range },\n } = timeRange;\n\n timeRange.onTimeRangeChange(getShiftedTimeRange(TimeRangeDirection.Forward, range, Date.now()));\n };\n}\n\nfunction SceneTimePickerRenderer({ model }: SceneComponentProps<SceneTimePicker>) {\n const { hidePicker, isOnCanvas, quickRanges, defaultQuickRanges } = model.useState();\n const timeRange = sceneGraph.getTimeRange(model);\n const timeZone = timeRange.getTimeZone();\n const timeRangeState = timeRange.useState();\n const [timeRangeHistory, setTimeRangeHistory] = useLocalStorage<TimeRange[]>(HISTORY_LOCAL_STORAGE_KEY, [], {\n raw: false,\n serializer: serializeHistory,\n deserializer: deserializeHistory,\n });\n\n if (hidePicker) {\n return null;\n }\n\n const rangesToUse = quickRanges || defaultQuickRanges;\n const moveDuration = intervalToAbbreviatedDurationString({\n start: timeRangeState.value.from.toDate(),\n end: timeRangeState.value.to.toDate(),\n });\n\n return (\n <TimeRangePicker\n isOnCanvas={isOnCanvas ?? true}\n value={timeRangeState.value}\n onChange={(range) => {\n if (isAbsolute(range)) {\n setTimeRangeHistory([range, ...(timeRangeHistory ?? [])]);\n }\n\n timeRange.onTimeRangeChange(range);\n }}\n timeZone={timeZone}\n fiscalYearStartMonth={timeRangeState.fiscalYearStartMonth}\n onMoveBackward={model.onMoveBackward}\n onMoveForward={model.onMoveForward}\n // @ts-expect-error (temporary till we update grafana/ui)\n moveDuration={moveDuration}\n onZoom={model.onZoom}\n onChangeTimeZone={timeRange.onTimeZoneChange}\n onChangeFiscalYearStartMonth={model.onChangeFiscalYearStartMonth}\n weekStart={timeRangeState.weekStart}\n history={timeRangeHistory}\n quickRanges={rangesToUse}\n />\n );\n}\n\nexport function getZoomedTimeRange(timeRange: TimeRange, factor: number): TimeRange {\n const timespan = timeRange.to.valueOf() - timeRange.from.valueOf();\n const center = timeRange.to.valueOf() - timespan / 2;\n // If the timepsan is 0, zooming out would do nothing, so we force a zoom out to 30s\n const newTimespan = timespan === 0 ? 30000 : timespan * factor;\n\n const to = center + newTimespan / 2;\n const from = center - newTimespan / 2;\n\n return { from: toUtc(from), to: toUtc(to), raw: { from: toUtc(from), to: toUtc(to) } };\n}\n\nexport enum TimeRangeDirection {\n Backward,\n Forward,\n}\n\nexport function getShiftedTimeRange(dir: TimeRangeDirection, timeRange: TimeRange, upperLimit: number): TimeRange {\n const oldTo = timeRange.to.valueOf();\n const oldFrom = timeRange.from.valueOf();\n const halfSpan = (oldTo - oldFrom) / 2;\n\n let fromRaw: number;\n let toRaw: number;\n if (dir === TimeRangeDirection.Backward) {\n fromRaw = oldFrom - halfSpan;\n toRaw = oldTo - halfSpan;\n } else {\n fromRaw = oldFrom + halfSpan;\n toRaw = oldTo + halfSpan;\n\n if (toRaw > upperLimit && oldTo < upperLimit) {\n toRaw = upperLimit;\n fromRaw = oldFrom;\n }\n }\n\n const from = toUtc(fromRaw);\n const to = toUtc(toRaw);\n return {\n from,\n to,\n raw: { from, to },\n };\n}\n\nconst HISTORY_LOCAL_STORAGE_KEY = 'grafana.dashboard.timepicker.history';\n\n// Simplified object to store in local storage\ninterface TimePickerHistoryItem {\n from: string;\n to: string;\n}\n\nfunction deserializeHistory(value: string): TimeRange[] {\n const values: TimePickerHistoryItem[] = JSON.parse(value);\n // The history is saved in UTC and with the default date format, so we need to pass those values to the convertRawToRange\n return values.map((item) => rangeUtil.convertRawToRange(item, 'utc', undefined, 'YYYY-MM-DD HH:mm:ss'));\n}\n\nfunction serializeHistory(values: TimeRange[]) {\n return JSON.stringify(\n limit(\n values.map((v) => ({\n from: typeof v.raw.from === 'string' ? v.raw.from : v.raw.from.toISOString(),\n to: typeof v.raw.to === 'string' ? v.raw.to : v.raw.to.toISOString(),\n }))\n )\n );\n}\n\nfunction limit(value: TimePickerHistoryItem[]): TimePickerHistoryItem[] {\n return uniqBy(value, (v) => v.from + v.to).slice(0, 4);\n}\n\nfunction isAbsolute(value: TimeRange): boolean {\n return isDateTime(value.raw.from) || isDateTime(value.raw.to);\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"SceneTimePicker.js","sources":["../../../src/components/SceneTimePicker.tsx"],"sourcesContent":["import React from 'react';\nimport { useLocalStorage } from 'react-use';\nimport { uniqBy } from 'lodash';\n\nimport {\n TimeOption,\n TimeRange,\n intervalToAbbreviatedDurationString,\n isDateTime,\n rangeUtil,\n toUtc,\n} from '@grafana/data';\nimport { TimeRangePicker } from '@grafana/ui';\n\nimport { SceneObjectBase } from '../core/SceneObjectBase';\nimport { sceneGraph } from '../core/sceneGraph';\nimport { SceneComponentProps, SceneObjectState } from '../core/types';\nimport { t } from '@grafana/i18n';\n\nexport interface SceneTimePickerState extends SceneObjectState {\n hidePicker?: boolean;\n isOnCanvas?: boolean;\n quickRanges?: TimeOption[];\n defaultQuickRanges?: TimeOption[]; // Overrides default time ranges from server config, so not serialised back to JSON\n}\n\nexport class SceneTimePicker extends SceneObjectBase<SceneTimePickerState> {\n public static Component = SceneTimePickerRenderer;\n\n public onZoom = () => {\n const timeRange = sceneGraph.getTimeRange(this);\n const zoomedTimeRange = getZoomedTimeRange(timeRange.state.value, 2);\n timeRange.onTimeRangeChange(zoomedTimeRange);\n };\n\n public onChangeFiscalYearStartMonth = (month: number) => {\n const timeRange = sceneGraph.getTimeRange(this);\n timeRange.setState({ fiscalYearStartMonth: month });\n };\n\n public toAbsolute = () => {\n const timeRange = sceneGraph.getTimeRange(this);\n const timeRangeVal = timeRange.state.value;\n const from = toUtc(timeRangeVal.from);\n const to = toUtc(timeRangeVal.to);\n timeRange.onTimeRangeChange({ from, to, raw: { from, to } });\n };\n\n public onMoveBackward = () => {\n const timeRange = sceneGraph.getTimeRange(this);\n const {\n state: { value: range },\n } = timeRange;\n\n timeRange.onTimeRangeChange(getShiftedTimeRange(TimeRangeDirection.Backward, range));\n };\n\n public onMoveForward = () => {\n const timeRange = sceneGraph.getTimeRange(this);\n const {\n state: { value: range },\n } = timeRange;\n\n timeRange.onTimeRangeChange(getShiftedTimeRange(TimeRangeDirection.Forward, range, Date.now()));\n };\n}\n\nfunction SceneTimePickerRenderer({ model }: SceneComponentProps<SceneTimePicker>) {\n const { hidePicker, isOnCanvas, quickRanges, defaultQuickRanges } = model.useState();\n const timeRange = sceneGraph.getTimeRange(model);\n const timeZone = timeRange.getTimeZone();\n const timeRangeState = timeRange.useState();\n const [timeRangeHistory, setTimeRangeHistory] = useLocalStorage<TimeRange[]>(HISTORY_LOCAL_STORAGE_KEY, [], {\n raw: false,\n serializer: serializeHistory,\n deserializer: deserializeHistory,\n });\n\n if (hidePicker) {\n return null;\n }\n\n const rangesToUse = quickRanges || defaultQuickRanges;\n\n // Calculate half of the time range duration for forward/backward movement\n const halfSpanMs = (timeRangeState.value.to.valueOf() - timeRangeState.value.from.valueOf()) / 2;\n\n const moveBackwardDuration = intervalToAbbreviatedDurationString({\n start: new Date(timeRangeState.value.from.valueOf()),\n end: new Date(timeRangeState.value.from.valueOf() + halfSpanMs),\n });\n\n // Only show forward duration if moving forward wouldn't exceed current time\n const canMoveForward = timeRangeState.value.to.valueOf() + halfSpanMs <= Date.now();\n const moveForwardDuration = canMoveForward ? moveBackwardDuration : undefined;\n\n return (\n <TimeRangePicker\n isOnCanvas={isOnCanvas ?? true}\n value={timeRangeState.value}\n onChange={(range) => {\n if (isAbsolute(range)) {\n setTimeRangeHistory([range, ...(timeRangeHistory ?? [])]);\n }\n\n timeRange.onTimeRangeChange(range);\n }}\n timeZone={timeZone}\n fiscalYearStartMonth={timeRangeState.fiscalYearStartMonth}\n onMoveBackward={model.onMoveBackward}\n onMoveForward={model.onMoveForward}\n // @ts-expect-error (temporary till we update grafana/ui)\n moveForwardTooltip={\n moveForwardDuration\n ? t('grafana-scenes.components.time-picker.move-forward-tooltip', 'Move {{moveForwardDuration}} forward', {\n moveForwardDuration,\n })\n : undefined\n }\n moveBackwardTooltip={t(\n 'grafana-scenes.components.time-picker.move-backward-tooltip',\n 'Move {{moveBackwardDuration}} backward',\n { moveBackwardDuration }\n )}\n onZoom={model.onZoom}\n onChangeTimeZone={timeRange.onTimeZoneChange}\n onChangeFiscalYearStartMonth={model.onChangeFiscalYearStartMonth}\n weekStart={timeRangeState.weekStart}\n history={timeRangeHistory}\n quickRanges={rangesToUse}\n />\n );\n}\n\nexport function getZoomedTimeRange(timeRange: TimeRange, factor: number): TimeRange {\n const timespan = timeRange.to.valueOf() - timeRange.from.valueOf();\n const center = timeRange.to.valueOf() - timespan / 2;\n // If the timepsan is 0, zooming out would do nothing, so we force a zoom out to 30s\n const newTimespan = timespan === 0 ? 30000 : timespan * factor;\n\n const to = center + newTimespan / 2;\n const from = center - newTimespan / 2;\n\n return { from: toUtc(from), to: toUtc(to), raw: { from: toUtc(from), to: toUtc(to) } };\n}\n\nexport enum TimeRangeDirection {\n Backward,\n Forward,\n}\n\nexport function getShiftedTimeRange(dir: TimeRangeDirection, timeRange: TimeRange, upperLimit?: number): TimeRange {\n const oldTo = timeRange.to.valueOf();\n const oldFrom = timeRange.from.valueOf();\n const halfSpan = (oldTo - oldFrom) / 2;\n\n let fromRaw: number;\n let toRaw: number;\n if (dir === TimeRangeDirection.Backward) {\n fromRaw = oldFrom - halfSpan;\n toRaw = oldTo - halfSpan;\n } else {\n fromRaw = oldFrom + halfSpan;\n toRaw = oldTo + halfSpan;\n\n if (upperLimit !== undefined && toRaw > upperLimit && oldTo < upperLimit) {\n toRaw = upperLimit;\n fromRaw = oldFrom;\n }\n }\n\n const from = toUtc(fromRaw);\n const to = toUtc(toRaw);\n return {\n from,\n to,\n raw: { from, to },\n };\n}\n\nconst HISTORY_LOCAL_STORAGE_KEY = 'grafana.dashboard.timepicker.history';\n\n// Simplified object to store in local storage\ninterface TimePickerHistoryItem {\n from: string;\n to: string;\n}\n\nfunction deserializeHistory(value: string): TimeRange[] {\n const values: TimePickerHistoryItem[] = JSON.parse(value);\n // The history is saved in UTC and with the default date format, so we need to pass those values to the convertRawToRange\n return values.map((item) => rangeUtil.convertRawToRange(item, 'utc', undefined, 'YYYY-MM-DD HH:mm:ss'));\n}\n\nfunction serializeHistory(values: TimeRange[]) {\n return JSON.stringify(\n limit(\n values.map((v) => ({\n from: typeof v.raw.from === 'string' ? v.raw.from : v.raw.from.toISOString(),\n to: typeof v.raw.to === 'string' ? v.raw.to : v.raw.to.toISOString(),\n }))\n )\n );\n}\n\nfunction limit(value: TimePickerHistoryItem[]): TimePickerHistoryItem[] {\n return uniqBy(value, (v) => v.from + v.to).slice(0, 4);\n}\n\nfunction isAbsolute(value: TimeRange): boolean {\n return isDateTime(value.raw.from) || isDateTime(value.raw.to);\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -40,6 +40,10 @@ var grafanaScenes = {
|
|
|
40
40
|
splitter: {
|
|
41
41
|
"aria-label-pane-resize-widget": "Pane resize widget"
|
|
42
42
|
},
|
|
43
|
+
"time-picker": {
|
|
44
|
+
"move-backward-tooltip": "Move {{moveBackwardDuration}} backward",
|
|
45
|
+
"move-forward-tooltip": "Move {{moveForwardDuration}} forward"
|
|
46
|
+
},
|
|
43
47
|
"viz-panel": {
|
|
44
48
|
title: {
|
|
45
49
|
title: "Title"
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"grafana-scenes.json.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"grafana-scenes.json.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -42,6 +42,10 @@ var grafanaScenes = {
|
|
|
42
42
|
splitter: {
|
|
43
43
|
"aria-label-pane-resize-widget": "Pane resize widget"
|
|
44
44
|
},
|
|
45
|
+
"time-picker": {
|
|
46
|
+
"move-backward-tooltip": "Move {{moveBackwardDuration}} backward",
|
|
47
|
+
"move-forward-tooltip": "Move {{moveForwardDuration}} forward"
|
|
48
|
+
},
|
|
45
49
|
"viz-panel": {
|
|
46
50
|
title: {
|
|
47
51
|
title: "Title"
|
|
@@ -154,4 +158,4 @@ var grafanaScenes = {
|
|
|
154
158
|
};
|
|
155
159
|
|
|
156
160
|
exports.default = grafanaScenes;
|
|
157
|
-
//# sourceMappingURL=grafana-scenes-
|
|
161
|
+
//# sourceMappingURL=grafana-scenes-Bnbq8XI2.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"grafana-scenes-
|
|
1
|
+
{"version":3,"file":"grafana-scenes-Bnbq8XI2.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
package/dist/index.js
CHANGED
|
@@ -12557,7 +12557,7 @@ class SceneTimePicker extends SceneObjectBase {
|
|
|
12557
12557
|
const {
|
|
12558
12558
|
state: { value: range }
|
|
12559
12559
|
} = timeRange;
|
|
12560
|
-
timeRange.onTimeRangeChange(getShiftedTimeRange(0 /* Backward */, range
|
|
12560
|
+
timeRange.onTimeRangeChange(getShiftedTimeRange(0 /* Backward */, range));
|
|
12561
12561
|
};
|
|
12562
12562
|
this.onMoveForward = () => {
|
|
12563
12563
|
const timeRange = sceneGraph.getTimeRange(this);
|
|
@@ -12583,10 +12583,13 @@ function SceneTimePickerRenderer({ model }) {
|
|
|
12583
12583
|
return null;
|
|
12584
12584
|
}
|
|
12585
12585
|
const rangesToUse = quickRanges || defaultQuickRanges;
|
|
12586
|
-
const
|
|
12587
|
-
|
|
12588
|
-
|
|
12586
|
+
const halfSpanMs = (timeRangeState.value.to.valueOf() - timeRangeState.value.from.valueOf()) / 2;
|
|
12587
|
+
const moveBackwardDuration = data.intervalToAbbreviatedDurationString({
|
|
12588
|
+
start: new Date(timeRangeState.value.from.valueOf()),
|
|
12589
|
+
end: new Date(timeRangeState.value.from.valueOf() + halfSpanMs)
|
|
12589
12590
|
});
|
|
12591
|
+
const canMoveForward = timeRangeState.value.to.valueOf() + halfSpanMs <= Date.now();
|
|
12592
|
+
const moveForwardDuration = canMoveForward ? moveBackwardDuration : void 0;
|
|
12590
12593
|
return /* @__PURE__ */ React__default.default.createElement(
|
|
12591
12594
|
ui.TimeRangePicker,
|
|
12592
12595
|
{
|
|
@@ -12602,7 +12605,14 @@ function SceneTimePickerRenderer({ model }) {
|
|
|
12602
12605
|
fiscalYearStartMonth: timeRangeState.fiscalYearStartMonth,
|
|
12603
12606
|
onMoveBackward: model.onMoveBackward,
|
|
12604
12607
|
onMoveForward: model.onMoveForward,
|
|
12605
|
-
|
|
12608
|
+
moveForwardTooltip: moveForwardDuration ? i18n.t("grafana-scenes.components.time-picker.move-forward-tooltip", "Move {{moveForwardDuration}} forward", {
|
|
12609
|
+
moveForwardDuration
|
|
12610
|
+
}) : void 0,
|
|
12611
|
+
moveBackwardTooltip: i18n.t(
|
|
12612
|
+
"grafana-scenes.components.time-picker.move-backward-tooltip",
|
|
12613
|
+
"Move {{moveBackwardDuration}} backward",
|
|
12614
|
+
{ moveBackwardDuration }
|
|
12615
|
+
),
|
|
12606
12616
|
onZoom: model.onZoom,
|
|
12607
12617
|
onChangeTimeZone: timeRange.onTimeZoneChange,
|
|
12608
12618
|
onChangeFiscalYearStartMonth: model.onChangeFiscalYearStartMonth,
|
|
@@ -12632,7 +12642,7 @@ function getShiftedTimeRange(dir, timeRange, upperLimit) {
|
|
|
12632
12642
|
} else {
|
|
12633
12643
|
fromRaw = oldFrom + halfSpan;
|
|
12634
12644
|
toRaw = oldTo + halfSpan;
|
|
12635
|
-
if (toRaw > upperLimit && oldTo < upperLimit) {
|
|
12645
|
+
if (upperLimit !== void 0 && toRaw > upperLimit && oldTo < upperLimit) {
|
|
12636
12646
|
toRaw = upperLimit;
|
|
12637
12647
|
fromRaw = oldFrom;
|
|
12638
12648
|
}
|
|
@@ -15114,7 +15124,7 @@ function __variableDynamicImportRuntime0__(path) {
|
|
|
15114
15124
|
switch (path) {
|
|
15115
15125
|
case '../locales/cs-CZ/grafana-scenes.json': return Promise.resolve().then(function () { return require('./grafana-scenes-BcDO8gk4.js'); });
|
|
15116
15126
|
case '../locales/de-DE/grafana-scenes.json': return Promise.resolve().then(function () { return require('./grafana-scenes-CzZTvOrf.js'); });
|
|
15117
|
-
case '../locales/en-US/grafana-scenes.json': return Promise.resolve().then(function () { return require('./grafana-scenes-
|
|
15127
|
+
case '../locales/en-US/grafana-scenes.json': return Promise.resolve().then(function () { return require('./grafana-scenes-Bnbq8XI2.js'); });
|
|
15118
15128
|
case '../locales/es-ES/grafana-scenes.json': return Promise.resolve().then(function () { return require('./grafana-scenes-zGpJY4O3.js'); });
|
|
15119
15129
|
case '../locales/fr-FR/grafana-scenes.json': return Promise.resolve().then(function () { return require('./grafana-scenes-CfoPR_PZ.js'); });
|
|
15120
15130
|
case '../locales/hu-HU/grafana-scenes.json': return Promise.resolve().then(function () { return require('./grafana-scenes-CoXR5Z7T.js'); });
|