@grafana/scenes 8.13.2 → 8.13.4
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/CHANGELOG.md +24 -0
- package/dist/esm/components/SceneTimeRangeCompare.js +1 -17
- package/dist/esm/components/SceneTimeRangeCompare.js.map +1 -1
- package/dist/esm/components/VizPanel/VizPanel.js +5 -1
- package/dist/esm/components/VizPanel/VizPanel.js.map +1 -1
- package/dist/esm/index.js +2 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/utils/getCompareSeriesRefId.js +1 -1
- package/dist/esm/utils/getCompareSeriesRefId.js.map +1 -1
- package/dist/esm/utils/timeShiftAlignmentProcessor.js +21 -0
- package/dist/esm/utils/timeShiftAlignmentProcessor.js.map +1 -0
- package/dist/index.d.ts +5 -1
- package/dist/index.js +24 -17
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,27 @@
|
|
|
1
|
+
# v8.13.4 (Thu Jul 23 2026)
|
|
2
|
+
|
|
3
|
+
#### 🐛 Bug Fix
|
|
4
|
+
|
|
5
|
+
- SceneTimeRangeCompare: make timeShiftAlignmentProcessor non-mutating and export it [#1583](https://github.com/grafana/scenes/pull/1583) ([@dprokop](https://github.com/dprokop))
|
|
6
|
+
|
|
7
|
+
#### Authors: 1
|
|
8
|
+
|
|
9
|
+
- Dominik Prokop ([@dprokop](https://github.com/dprokop))
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# v8.13.3 (Mon Jul 20 2026)
|
|
14
|
+
|
|
15
|
+
#### 🐛 Bug Fix
|
|
16
|
+
|
|
17
|
+
- Dashboards: Invalidate fieldConfig cache on variable change when vars are used [#1579](https://github.com/grafana/scenes/pull/1579) ([@mdvictor](https://github.com/mdvictor))
|
|
18
|
+
|
|
19
|
+
#### Authors: 1
|
|
20
|
+
|
|
21
|
+
- Victor Marin ([@mdvictor](https://github.com/mdvictor))
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
1
25
|
# v8.13.2 (Fri Jul 17 2026)
|
|
2
26
|
|
|
3
27
|
#### 🐛 Bug Fix
|
|
@@ -5,10 +5,9 @@ import React from 'react';
|
|
|
5
5
|
import { sceneGraph } from '../core/sceneGraph/index.js';
|
|
6
6
|
import { SceneObjectBase } from '../core/SceneObjectBase.js';
|
|
7
7
|
import { SceneObjectUrlSyncConfig } from '../services/SceneObjectUrlSyncConfig.js';
|
|
8
|
-
import { getCompareSeriesRefId } from '../utils/getCompareSeriesRefId.js';
|
|
9
8
|
import { parseUrlParam } from '../utils/parseUrlParam.js';
|
|
9
|
+
import { timeShiftAlignmentProcessor } from '../utils/timeShiftAlignmentProcessor.js';
|
|
10
10
|
import { css } from '@emotion/css';
|
|
11
|
-
import { of } from 'rxjs';
|
|
12
11
|
|
|
13
12
|
const PREVIOUS_PERIOD_VALUE = "__previousPeriod";
|
|
14
13
|
const NO_PERIOD_VALUE = "__noPeriod";
|
|
@@ -139,21 +138,6 @@ class SceneTimeRangeCompare extends SceneObjectBase {
|
|
|
139
138
|
}
|
|
140
139
|
}
|
|
141
140
|
SceneTimeRangeCompare.Component = SceneTimeRangeCompareRenderer;
|
|
142
|
-
const timeShiftAlignmentProcessor = (primary, secondary) => {
|
|
143
|
-
const diff = secondary.timeRange.from.diff(primary.timeRange.from);
|
|
144
|
-
secondary.series.forEach((series) => {
|
|
145
|
-
series.refId = getCompareSeriesRefId(series.refId || "");
|
|
146
|
-
series.meta = {
|
|
147
|
-
...series.meta,
|
|
148
|
-
// @ts-ignore Remove when https://github.com/grafana/grafana/pull/71129 is released
|
|
149
|
-
timeCompare: {
|
|
150
|
-
diffMs: diff,
|
|
151
|
-
isTimeShiftQuery: true
|
|
152
|
-
}
|
|
153
|
-
};
|
|
154
|
-
});
|
|
155
|
-
return of(secondary);
|
|
156
|
-
};
|
|
157
141
|
function SceneTimeRangeCompareRenderer({ model }) {
|
|
158
142
|
var _a;
|
|
159
143
|
const styles = useStyles2(getStyles$4);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SceneTimeRangeCompare.js","sources":["../../../src/components/SceneTimeRangeCompare.tsx"],"sourcesContent":["import { t, Trans } from '@grafana/i18n';\nimport { DataQueryRequest, DateTime, dateTime, GrafanaTheme2, rangeUtil, TimeRange } from '@grafana/data';\nimport { ButtonGroup, ButtonSelect, Checkbox, ToolbarButton, useStyles2 } from '@grafana/ui';\nimport React from 'react';\nimport { sceneGraph } from '../core/sceneGraph';\nimport { SceneObjectBase } from '../core/SceneObjectBase';\nimport { SceneComponentProps, SceneDataQuery, SceneObjectState, SceneObjectUrlValues } from '../core/types';\nimport { DataQueryExtended } from '../querying/SceneQueryRunner';\nimport { ExtraQueryDescriptor, ExtraQueryDataProcessor, ExtraQueryProvider } from '../querying/ExtraQueryProvider';\nimport { SceneObjectUrlSyncConfig } from '../services/SceneObjectUrlSyncConfig';\nimport { getCompareSeriesRefId } from '../utils/getCompareSeriesRefId';\nimport { parseUrlParam } from '../utils/parseUrlParam';\nimport { css } from '@emotion/css';\nimport { of } from 'rxjs';\n\ninterface SceneTimeRangeCompareState extends SceneObjectState {\n compareWith?: string;\n compareOptions: Array<{ label: string; value: string }>;\n hideCheckbox?: boolean;\n}\n\nconst PREVIOUS_PERIOD_VALUE = '__previousPeriod';\nconst NO_PERIOD_VALUE = '__noPeriod';\n\nexport const PREVIOUS_PERIOD_COMPARE_OPTION = {\n label: 'Previous period',\n value: PREVIOUS_PERIOD_VALUE,\n};\n\nexport const NO_COMPARE_OPTION = {\n label: 'None',\n value: NO_PERIOD_VALUE,\n};\n\nexport const DEFAULT_COMPARE_OPTIONS = [\n { label: 'Day before', value: '24h' },\n { label: 'Week before', value: '1w' },\n { label: 'Month before', value: '1M' },\n];\n\nexport class SceneTimeRangeCompare\n extends SceneObjectBase<SceneTimeRangeCompareState>\n implements ExtraQueryProvider<SceneTimeRangeCompareState>\n{\n static Component = SceneTimeRangeCompareRenderer;\n protected _urlSync = new SceneObjectUrlSyncConfig(this, { keys: ['compareWith'] });\n\n public constructor(state: Partial<SceneTimeRangeCompareState>) {\n super({ compareOptions: DEFAULT_COMPARE_OPTIONS, ...state });\n this.addActivationHandler(this._onActivate);\n }\n\n private _onActivate = () => {\n const sceneTimeRange = sceneGraph.getTimeRange(this);\n this.setState({ compareOptions: this.getCompareOptions(sceneTimeRange.state.value) });\n\n this._subs.add(\n sceneTimeRange.subscribeToState((timeRange) => {\n const compareOptions = this.getCompareOptions(timeRange.value);\n const stateUpdate: Partial<SceneTimeRangeCompareState> = { compareOptions };\n\n // if current compareWith is not applicable to the new time range, set it to previous period comparison\n if (Boolean(this.state.compareWith) && !compareOptions.find(({ value }) => value === this.state.compareWith)) {\n stateUpdate.compareWith = PREVIOUS_PERIOD_VALUE;\n }\n\n this.setState(stateUpdate);\n })\n );\n };\n\n public getCompareOptions = (timeRange: TimeRange) => {\n const diffDays = Math.ceil(timeRange.to.diff(timeRange.from));\n\n const matchIndex = DEFAULT_COMPARE_OPTIONS.findIndex(({ value }) => {\n const intervalInMs = rangeUtil.intervalToMs(value);\n return intervalInMs >= diffDays;\n });\n\n return [\n NO_COMPARE_OPTION,\n PREVIOUS_PERIOD_COMPARE_OPTION,\n ...DEFAULT_COMPARE_OPTIONS.slice(matchIndex).map(({ label, value }) => ({ label, value })),\n ];\n };\n\n public onCompareWithChanged = (compareWith: string) => {\n if (compareWith === NO_PERIOD_VALUE) {\n this.onClearCompare();\n } else {\n this.setState({ compareWith });\n }\n };\n\n public onClearCompare = () => {\n this.setState({ compareWith: undefined });\n };\n\n // Get a time shifted request to compare with the primary request.\n public getExtraQueries(request: DataQueryRequest): ExtraQueryDescriptor[] {\n const extraQueries: ExtraQueryDescriptor[] = [];\n const compareRange = this.getCompareTimeRange(request.range);\n if (!compareRange) {\n return extraQueries;\n }\n\n const targets = request.targets.filter((query: DataQueryExtended) => query.timeRangeCompare !== false);\n if (targets.length) {\n extraQueries.push({\n req: {\n ...request,\n targets,\n range: compareRange,\n },\n processor: timeShiftAlignmentProcessor,\n });\n }\n return extraQueries;\n }\n\n // The query runner should rerun the comparison query if the compareWith value has changed and there are queries that haven't opted out of TWC\n public shouldRerun(\n prev: SceneTimeRangeCompareState,\n next: SceneTimeRangeCompareState,\n queries: SceneDataQuery[]\n ): boolean {\n return (\n prev.compareWith !== next.compareWith && queries.find((query) => query.timeRangeCompare !== false) !== undefined\n );\n }\n\n public getCompareTimeRange(timeRange: TimeRange): TimeRange | undefined {\n let compareFrom: DateTime;\n let compareTo: DateTime;\n\n if (this.state.compareWith) {\n if (this.state.compareWith === PREVIOUS_PERIOD_VALUE) {\n const diffMs = timeRange.to.diff(timeRange.from);\n compareFrom = dateTime(timeRange.from!).subtract(diffMs);\n compareTo = dateTime(timeRange.to!).subtract(diffMs);\n } else {\n compareFrom = dateTime(timeRange.from!).subtract(rangeUtil.intervalToMs(this.state.compareWith));\n compareTo = dateTime(timeRange.to!).subtract(rangeUtil.intervalToMs(this.state.compareWith));\n }\n return {\n from: compareFrom,\n to: compareTo,\n raw: {\n from: compareFrom,\n to: compareTo,\n },\n };\n }\n\n return undefined;\n }\n\n public getUrlState(): SceneObjectUrlValues {\n return {\n compareWith: this.state.compareWith,\n };\n }\n\n public updateFromUrl(values: SceneObjectUrlValues) {\n if (!values.compareWith) {\n return;\n }\n\n const compareWith = parseUrlParam(values.compareWith);\n\n if (compareWith) {\n const compareOptions = this.getCompareOptions(sceneGraph.getTimeRange(this).state.value);\n\n if (compareOptions.find(({ value }) => value === compareWith)) {\n this.setState({\n compareWith,\n });\n } else {\n this.setState({\n compareWith: '__previousPeriod',\n });\n }\n }\n }\n}\n\n// Processor function for use with time shifted comparison series.\n// This aligns the secondary series with the primary and adds custom\n// metadata and config to the secondary series' fields so that it is\n// rendered appropriately.\nconst timeShiftAlignmentProcessor: ExtraQueryDataProcessor = (primary, secondary) => {\n const diff = secondary.timeRange.from.diff(primary.timeRange.from);\n secondary.series.forEach((series) => {\n series.refId = getCompareSeriesRefId(series.refId || '');\n series.meta = {\n ...series.meta,\n // @ts-ignore Remove when https://github.com/grafana/grafana/pull/71129 is released\n timeCompare: {\n diffMs: diff,\n isTimeShiftQuery: true,\n },\n };\n });\n return of(secondary);\n};\n\nfunction SceneTimeRangeCompareRenderer({ model }: SceneComponentProps<SceneTimeRangeCompare>) {\n const styles = useStyles2(getStyles);\n const { compareWith, compareOptions, hideCheckbox } = model.useState();\n\n const [previousCompare, setPreviousCompare] = React.useState(compareWith);\n const previousValue = compareOptions.find(({ value }) => value === previousCompare) ?? PREVIOUS_PERIOD_COMPARE_OPTION;\n\n const value = compareOptions.find(({ value }) => value === compareWith);\n const enabled = Boolean(value);\n\n const onClick = () => {\n if (enabled) {\n setPreviousCompare(compareWith);\n model.onClearCompare();\n } else if (!enabled) {\n model.onCompareWithChanged(previousValue.value);\n }\n };\n\n // When hideCheckbox is true, always show select and use NO_COMPARE_OPTION when no comparison is active\n const selectValue = hideCheckbox && !compareWith ? NO_COMPARE_OPTION : value;\n const showSelect = hideCheckbox || enabled;\n\n // Create display value with \"Comparison\" prefix when hideCheckbox is true\n const displayValue =\n hideCheckbox && selectValue\n ? {\n ...selectValue,\n label: `Comparison: ${selectValue.label}`,\n }\n : selectValue;\n\n return (\n <ButtonGroup>\n {!hideCheckbox && (\n <ToolbarButton\n variant=\"canvas\"\n tooltip={t(\n 'grafana-scenes.components.scene-time-range-compare-renderer.button-tooltip',\n 'Enable time frame comparison'\n )}\n onClick={(e) => {\n e.stopPropagation();\n e.preventDefault();\n onClick();\n }}\n >\n <Checkbox label=\" \" value={enabled} onClick={onClick} />\n <Trans i18nKey=\"grafana-scenes.components.scene-time-range-compare-renderer.button-label\">Comparison</Trans>\n </ToolbarButton>\n )}\n\n {showSelect ? (\n <ButtonSelect\n variant=\"canvas\"\n value={displayValue}\n options={compareOptions}\n onChange={(v) => {\n model.onCompareWithChanged(v.value!);\n }}\n />\n ) : (\n <ToolbarButton className={styles.previewButton} disabled variant=\"canvas\" isOpen={false}>\n {previousValue.label}\n </ToolbarButton>\n )}\n </ButtonGroup>\n );\n}\n\nfunction getStyles(theme: GrafanaTheme2) {\n return {\n previewButton: css({\n '&:disabled': {\n border: `1px solid ${theme.colors.secondary.border}`,\n color: theme.colors.text.disabled,\n opacity: 1,\n },\n }),\n };\n}\n"],"names":["getStyles","value"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"SceneTimeRangeCompare.js","sources":["../../../src/components/SceneTimeRangeCompare.tsx"],"sourcesContent":["import { t, Trans } from '@grafana/i18n';\nimport { DataQueryRequest, DateTime, dateTime, GrafanaTheme2, rangeUtil, TimeRange } from '@grafana/data';\nimport { ButtonGroup, ButtonSelect, Checkbox, ToolbarButton, useStyles2 } from '@grafana/ui';\nimport React from 'react';\nimport { sceneGraph } from '../core/sceneGraph';\nimport { SceneObjectBase } from '../core/SceneObjectBase';\nimport { SceneComponentProps, SceneDataQuery, SceneObjectState, SceneObjectUrlValues } from '../core/types';\nimport { DataQueryExtended } from '../querying/SceneQueryRunner';\nimport { ExtraQueryDescriptor, ExtraQueryProvider } from '../querying/ExtraQueryProvider';\nimport { SceneObjectUrlSyncConfig } from '../services/SceneObjectUrlSyncConfig';\nimport { parseUrlParam } from '../utils/parseUrlParam';\nimport { timeShiftAlignmentProcessor } from '../utils/timeShiftAlignmentProcessor';\nimport { css } from '@emotion/css';\n\ninterface SceneTimeRangeCompareState extends SceneObjectState {\n compareWith?: string;\n compareOptions: Array<{ label: string; value: string }>;\n hideCheckbox?: boolean;\n}\n\nconst PREVIOUS_PERIOD_VALUE = '__previousPeriod';\nconst NO_PERIOD_VALUE = '__noPeriod';\n\nexport const PREVIOUS_PERIOD_COMPARE_OPTION = {\n label: 'Previous period',\n value: PREVIOUS_PERIOD_VALUE,\n};\n\nexport const NO_COMPARE_OPTION = {\n label: 'None',\n value: NO_PERIOD_VALUE,\n};\n\nexport const DEFAULT_COMPARE_OPTIONS = [\n { label: 'Day before', value: '24h' },\n { label: 'Week before', value: '1w' },\n { label: 'Month before', value: '1M' },\n];\n\nexport class SceneTimeRangeCompare\n extends SceneObjectBase<SceneTimeRangeCompareState>\n implements ExtraQueryProvider<SceneTimeRangeCompareState>\n{\n static Component = SceneTimeRangeCompareRenderer;\n protected _urlSync = new SceneObjectUrlSyncConfig(this, { keys: ['compareWith'] });\n\n public constructor(state: Partial<SceneTimeRangeCompareState>) {\n super({ compareOptions: DEFAULT_COMPARE_OPTIONS, ...state });\n this.addActivationHandler(this._onActivate);\n }\n\n private _onActivate = () => {\n const sceneTimeRange = sceneGraph.getTimeRange(this);\n this.setState({ compareOptions: this.getCompareOptions(sceneTimeRange.state.value) });\n\n this._subs.add(\n sceneTimeRange.subscribeToState((timeRange) => {\n const compareOptions = this.getCompareOptions(timeRange.value);\n const stateUpdate: Partial<SceneTimeRangeCompareState> = { compareOptions };\n\n // if current compareWith is not applicable to the new time range, set it to previous period comparison\n if (Boolean(this.state.compareWith) && !compareOptions.find(({ value }) => value === this.state.compareWith)) {\n stateUpdate.compareWith = PREVIOUS_PERIOD_VALUE;\n }\n\n this.setState(stateUpdate);\n })\n );\n };\n\n public getCompareOptions = (timeRange: TimeRange) => {\n const diffDays = Math.ceil(timeRange.to.diff(timeRange.from));\n\n const matchIndex = DEFAULT_COMPARE_OPTIONS.findIndex(({ value }) => {\n const intervalInMs = rangeUtil.intervalToMs(value);\n return intervalInMs >= diffDays;\n });\n\n return [\n NO_COMPARE_OPTION,\n PREVIOUS_PERIOD_COMPARE_OPTION,\n ...DEFAULT_COMPARE_OPTIONS.slice(matchIndex).map(({ label, value }) => ({ label, value })),\n ];\n };\n\n public onCompareWithChanged = (compareWith: string) => {\n if (compareWith === NO_PERIOD_VALUE) {\n this.onClearCompare();\n } else {\n this.setState({ compareWith });\n }\n };\n\n public onClearCompare = () => {\n this.setState({ compareWith: undefined });\n };\n\n // Get a time shifted request to compare with the primary request.\n public getExtraQueries(request: DataQueryRequest): ExtraQueryDescriptor[] {\n const extraQueries: ExtraQueryDescriptor[] = [];\n const compareRange = this.getCompareTimeRange(request.range);\n if (!compareRange) {\n return extraQueries;\n }\n\n const targets = request.targets.filter((query: DataQueryExtended) => query.timeRangeCompare !== false);\n if (targets.length) {\n extraQueries.push({\n req: {\n ...request,\n targets,\n range: compareRange,\n },\n processor: timeShiftAlignmentProcessor,\n });\n }\n return extraQueries;\n }\n\n // The query runner should rerun the comparison query if the compareWith value has changed and there are queries that haven't opted out of TWC\n public shouldRerun(\n prev: SceneTimeRangeCompareState,\n next: SceneTimeRangeCompareState,\n queries: SceneDataQuery[]\n ): boolean {\n return (\n prev.compareWith !== next.compareWith && queries.find((query) => query.timeRangeCompare !== false) !== undefined\n );\n }\n\n public getCompareTimeRange(timeRange: TimeRange): TimeRange | undefined {\n let compareFrom: DateTime;\n let compareTo: DateTime;\n\n if (this.state.compareWith) {\n if (this.state.compareWith === PREVIOUS_PERIOD_VALUE) {\n const diffMs = timeRange.to.diff(timeRange.from);\n compareFrom = dateTime(timeRange.from!).subtract(diffMs);\n compareTo = dateTime(timeRange.to!).subtract(diffMs);\n } else {\n compareFrom = dateTime(timeRange.from!).subtract(rangeUtil.intervalToMs(this.state.compareWith));\n compareTo = dateTime(timeRange.to!).subtract(rangeUtil.intervalToMs(this.state.compareWith));\n }\n return {\n from: compareFrom,\n to: compareTo,\n raw: {\n from: compareFrom,\n to: compareTo,\n },\n };\n }\n\n return undefined;\n }\n\n public getUrlState(): SceneObjectUrlValues {\n return {\n compareWith: this.state.compareWith,\n };\n }\n\n public updateFromUrl(values: SceneObjectUrlValues) {\n if (!values.compareWith) {\n return;\n }\n\n const compareWith = parseUrlParam(values.compareWith);\n\n if (compareWith) {\n const compareOptions = this.getCompareOptions(sceneGraph.getTimeRange(this).state.value);\n\n if (compareOptions.find(({ value }) => value === compareWith)) {\n this.setState({\n compareWith,\n });\n } else {\n this.setState({\n compareWith: '__previousPeriod',\n });\n }\n }\n }\n}\n\nfunction SceneTimeRangeCompareRenderer({ model }: SceneComponentProps<SceneTimeRangeCompare>) {\n const styles = useStyles2(getStyles);\n const { compareWith, compareOptions, hideCheckbox } = model.useState();\n\n const [previousCompare, setPreviousCompare] = React.useState(compareWith);\n const previousValue = compareOptions.find(({ value }) => value === previousCompare) ?? PREVIOUS_PERIOD_COMPARE_OPTION;\n\n const value = compareOptions.find(({ value }) => value === compareWith);\n const enabled = Boolean(value);\n\n const onClick = () => {\n if (enabled) {\n setPreviousCompare(compareWith);\n model.onClearCompare();\n } else if (!enabled) {\n model.onCompareWithChanged(previousValue.value);\n }\n };\n\n // When hideCheckbox is true, always show select and use NO_COMPARE_OPTION when no comparison is active\n const selectValue = hideCheckbox && !compareWith ? NO_COMPARE_OPTION : value;\n const showSelect = hideCheckbox || enabled;\n\n // Create display value with \"Comparison\" prefix when hideCheckbox is true\n const displayValue =\n hideCheckbox && selectValue\n ? {\n ...selectValue,\n label: `Comparison: ${selectValue.label}`,\n }\n : selectValue;\n\n return (\n <ButtonGroup>\n {!hideCheckbox && (\n <ToolbarButton\n variant=\"canvas\"\n tooltip={t(\n 'grafana-scenes.components.scene-time-range-compare-renderer.button-tooltip',\n 'Enable time frame comparison'\n )}\n onClick={(e) => {\n e.stopPropagation();\n e.preventDefault();\n onClick();\n }}\n >\n <Checkbox label=\" \" value={enabled} onClick={onClick} />\n <Trans i18nKey=\"grafana-scenes.components.scene-time-range-compare-renderer.button-label\">Comparison</Trans>\n </ToolbarButton>\n )}\n\n {showSelect ? (\n <ButtonSelect\n variant=\"canvas\"\n value={displayValue}\n options={compareOptions}\n onChange={(v) => {\n model.onCompareWithChanged(v.value!);\n }}\n />\n ) : (\n <ToolbarButton className={styles.previewButton} disabled variant=\"canvas\" isOpen={false}>\n {previousValue.label}\n </ToolbarButton>\n )}\n </ButtonGroup>\n );\n}\n\nfunction getStyles(theme: GrafanaTheme2) {\n return {\n previewButton: css({\n '&:disabled': {\n border: `1px solid ${theme.colors.secondary.border}`,\n color: theme.colors.text.disabled,\n opacity: 1,\n },\n }),\n };\n}\n"],"names":["getStyles","value"],"mappings":"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"}
|
|
@@ -32,7 +32,11 @@ class VizPanel extends SceneObjectBase {
|
|
|
32
32
|
...state
|
|
33
33
|
});
|
|
34
34
|
this._variableDependency = new VariableDependencyConfig(this, {
|
|
35
|
-
statePaths: ["title", "options", "fieldConfig"]
|
|
35
|
+
statePaths: ["title", "options", "fieldConfig"],
|
|
36
|
+
onReferencedVariableValueChanged: () => {
|
|
37
|
+
this.clearFieldConfigCache();
|
|
38
|
+
this.forceRender();
|
|
39
|
+
}
|
|
36
40
|
});
|
|
37
41
|
this._structureRev = 0;
|
|
38
42
|
this.onTimeRangeChange = (timeRange) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VizPanel.js","sources":["../../../../src/components/VizPanel/VizPanel.tsx"],"sourcesContent":["import { t } from '@grafana/i18n';\nimport {\n AbsoluteTimeRange,\n FieldConfigSource,\n PanelModel,\n PanelPlugin,\n toUtc,\n getPanelOptionsWithDefaults,\n ScopedVars,\n InterpolateFunction,\n CoreApp,\n DashboardCursorSync,\n PanelData,\n compareArrayValues,\n compareDataFrameStructures,\n applyFieldOverrides,\n PluginType,\n renderMarkdown,\n PanelPluginDataSupport,\n} from '@grafana/data';\nimport { PanelContext, SeriesVisibilityChangeMode, VizLegendOptions } from '@grafana/ui';\nimport { config, getAppEvents, getPluginImportUtils } from '@grafana/runtime';\nimport { SceneObjectBase } from '../../core/SceneObjectBase';\nimport { sceneGraph } from '../../core/sceneGraph';\nimport { DeepPartial, SceneObject, SceneObjectState } from '../../core/types';\n\nimport { VizPanelRenderer } from './VizPanelRenderer';\nimport { VizPanelMenu } from './VizPanelMenu';\nimport { VariableDependencyConfig } from '../../variables/VariableDependencyConfig';\nimport { VariableCustomFormatterFn } from '../../variables/types';\nimport { seriesVisibilityConfigFactory } from './seriesVisibilityConfigFactory';\nimport { emptyPanelData } from '../../core/SceneDataNode';\nimport { changeSeriesColorConfigFactory } from './colorSeriesConfigFactory';\nimport { loadPanelPluginSync } from './registerRuntimePanelPlugin';\nimport { getCursorSyncScope } from '../../behaviors/CursorSync';\nimport { cloneDeep, isArray, isEmpty, merge, mergeWith } from 'lodash';\nimport { UserActionEvent } from '../../core/events';\nimport { evaluateTimeRange } from '../../utils/evaluateTimeRange';\nimport { LiveNowTimer } from '../../behaviors/LiveNowTimer';\nimport { VizPanelRenderProfiler } from '../../performance/VizPanelRenderProfiler';\nimport { registerQueryWithController, wrapPromiseInStateObservable } from '../../querying/registerQueryWithController';\nimport { SceneDataTransformer } from '../../querying/SceneDataTransformer';\nimport { SceneQueryRunner } from '../../querying/SceneQueryRunner';\nimport { buildPathIdFor } from '../../utils/pathId';\n\nexport interface VizPanelState<TOptions = {}, TFieldConfig = {}> extends SceneObjectState {\n /**\n * This is usually a plugin id that references a core plugin or an external plugin. But this can also reference a\n * runtime registered PanelPlugin registered via function registerScenePanelPlugin.\n */\n pluginId: string;\n title: string;\n /** Shown in info icon tooltip next to the title, supports markdown */\n description?: string;\n /** Shown as text below the title, supports markdown */\n subtitle?: string;\n options: DeepPartial<TOptions>;\n fieldConfig: FieldConfigSource<DeepPartial<TFieldConfig>>;\n pluginVersion?: string;\n displayMode?: 'default' | 'transparent';\n /**\n * Only shows header on hover, absolutly positioned above the panel.\n */\n hoverHeader?: boolean;\n /**\n * Offset hoverHeader position on the y axis\n */\n hoverHeaderOffset?: number;\n /**\n * Allows adding elements to the subheader of the panel.\n */\n subHeader?: React.ReactNode | SceneObject | SceneObject[];\n /**\n * Only shows vizPanelMenu on hover if false, otherwise the menu is always visible in the header\n */\n showMenuAlways?: boolean;\n /**\n * Defines a menu in the top right of the panel. The menu object is only activated when the dropdown menu itself is shown.\n * So the best way to add dynamic menu actions and links is by adding them in a behavior attached to the menu.\n */\n menu?: VizPanelMenu;\n /**\n * Defines a menu that renders panel link.\n **/\n titleItems?: React.ReactNode | SceneObject | SceneObject[];\n seriesLimit?: number;\n seriesLimitShowAll?: boolean;\n /**\n * Add action to the top right panel header\n */\n headerActions?: React.ReactNode | SceneObject | SceneObject[];\n /**\n * Mainly for advanced use cases that need custom handling of PanelContext callbacks.\n */\n extendPanelContext?: (vizPanel: VizPanel, context: PanelContext) => void;\n\n /**\n * @internal\n * experimental / temporary\n *\n * clears field.values arrays of previous/stale/retained series and annotations frames in PanelData\n *\n * see https://github.com/facebook/react/issues/36176\n * see https://github.com/grafana/grafana/pull/121682\n * see https://github.com/grafana/grafana/pull/120190\n **/\n _UNSAFE_clearPreviousFieldValues?: boolean;\n\n /**\n * Sets panel chrome collapsed state\n */\n collapsible?: boolean;\n collapsed?: boolean;\n /** Marks object as a repeated object and a key pointer to source object */\n repeatSourceKey?: string;\n /**\n * @internal\n * Only for use from core to handle migration from old angular panels\n **/\n _UNSAFE_customMigrationHandler?: (panel: PanelModel, plugin: PanelPlugin) => void;\n /** Internal */\n _pluginLoadError?: string;\n /** Internal */\n _pluginInstanceState?: any;\n _renderCounter?: number;\n}\n\nexport class VizPanel<TOptions = {}, TFieldConfig extends {} = {}> extends SceneObjectBase<\n VizPanelState<TOptions, TFieldConfig>\n> {\n public static Component = VizPanelRenderer;\n\n protected _variableDependency = new VariableDependencyConfig(this, {\n statePaths: ['title', 'options', 'fieldConfig'],\n });\n\n // Not part of state as this is not serializable\n protected _panelContext?: PanelContext;\n private _plugin?: PanelPlugin;\n private _prevData?: PanelData;\n private _dataWithFieldConfig?: PanelData;\n private _structureRev = 0;\n\n public constructor(state: Partial<VizPanelState<TOptions, TFieldConfig>>) {\n super({\n options: {} as TOptions,\n fieldConfig: { defaults: {}, overrides: [] },\n title: t('grafana-scenes.components.viz-panel.title.title', 'Title'),\n pluginId: 'timeseries',\n _renderCounter: 0,\n ...state,\n });\n\n this.addActivationHandler(() => {\n this._onActivate();\n });\n\n state.menu?.addActivationHandler(() => {\n this.publishEvent(new UserActionEvent({ origin: this, interaction: 'panel-menu-shown' }), true);\n });\n }\n\n /**\n * Get the VizPanelRenderProfiler behavior if attached\n */\n public getProfiler(): VizPanelRenderProfiler | undefined {\n if (!this.state.$behaviors) {\n return undefined;\n }\n\n for (const behavior of this.state.$behaviors) {\n if (behavior instanceof VizPanelRenderProfiler) {\n return behavior;\n }\n }\n\n return undefined;\n }\n\n private _onActivate() {\n if (!this._plugin) {\n this._loadPlugin(this.state.pluginId);\n }\n }\n\n public forceRender(): void {\n // Incrementing the render counter means VizRepeater and its children will also re-render\n this.setState({ _renderCounter: (this.state._renderCounter ?? 0) + 1 });\n }\n\n private async _loadPlugin(\n pluginId: string,\n overwriteOptions?: DeepPartial<{}>,\n overwriteFieldConfig?: FieldConfigSource,\n isAfterPluginChange?: boolean\n ) {\n const profiler = this.getProfiler();\n const plugin = loadPanelPluginSync(pluginId);\n\n if (plugin) {\n // Plugin was loaded from cache\n const endPluginLoadCallback = profiler?.onPluginLoadStart(pluginId);\n endPluginLoadCallback?.(plugin, true);\n this._pluginLoaded(plugin, overwriteOptions, overwriteFieldConfig, isAfterPluginChange);\n } else {\n const { importPanelPlugin } = getPluginImportUtils();\n\n try {\n // Start profiling plugin load - get end callback\n const endPluginLoadCallback = profiler?.onPluginLoadStart(pluginId);\n\n const panelPromise = importPanelPlugin(pluginId);\n\n const queryControler = sceneGraph.getQueryController(this);\n if (queryControler && queryControler.state.enableProfiling) {\n wrapPromiseInStateObservable(panelPromise)\n .pipe(registerQueryWithController({ type: `VizPanel/loadPlugin/${pluginId}`, origin: this }))\n .subscribe(() => {});\n }\n\n const result = await panelPromise;\n\n // End profiling plugin load (not from cache)\n endPluginLoadCallback?.(result, false);\n\n this._pluginLoaded(result, overwriteOptions, overwriteFieldConfig, isAfterPluginChange);\n } catch (err: unknown) {\n this._pluginLoaded(getPanelPluginNotFound(pluginId));\n\n if (err instanceof Error) {\n this.setState({ _pluginLoadError: err.message });\n }\n }\n }\n }\n\n public getLegacyPanelId() {\n /**\n * The `/` part is here because a panel key can be in a clone chain\n * A clone chain looks like `panel-1-clone-0/grid-item-5/panel-14` where the last part is the panel key\n */\n const parts = this.state.key?.split('/') ?? [];\n\n if (parts.length === 0) {\n return 0;\n }\n\n const part = parts[parts.length - 1];\n const panelId = parseInt(part!.replace('panel-', ''), 10);\n\n if (isNaN(panelId)) {\n return 0;\n }\n\n return panelId;\n }\n\n /**\n * Unique id string that includes local variable values (for repeated panels)\n */\n public getPathId() {\n return buildPathIdFor(this);\n }\n\n private async _pluginLoaded(\n plugin: PanelPlugin,\n overwriteOptions?: DeepPartial<{}>,\n overwriteFieldConfig?: FieldConfigSource,\n isAfterPluginChange?: boolean\n ) {\n const { options, fieldConfig, title, pluginVersion, _UNSAFE_customMigrationHandler } = this.state;\n\n const panel: PanelModel = {\n title,\n options,\n fieldConfig,\n id: this.getLegacyPanelId(),\n type: plugin.meta.id,\n pluginVersion: pluginVersion,\n };\n\n if (overwriteOptions) {\n panel.options = overwriteOptions;\n }\n\n if (overwriteFieldConfig) {\n panel.fieldConfig = overwriteFieldConfig;\n }\n\n const currentVersion = this._getPluginVersion(plugin);\n\n _UNSAFE_customMigrationHandler?.(panel, plugin);\n\n //@ts-expect-error (TODO: remove after upgrading with https://github.com/grafana/grafana/pull/108998)\n const needsMigration = currentVersion !== pluginVersion || plugin.shouldMigrate?.(panel);\n\n if (plugin.onPanelMigration && needsMigration && !isAfterPluginChange) {\n // These migration handlers also mutate panel.fieldConfig to migrate fieldConfig\n panel.options = await plugin.onPanelMigration(panel);\n }\n\n // Some panels mutate the transformations on the panel as part of migrations.\n // Unfortunately, these mutations are not available until the panel plugin is loaded.\n // At this time, the data provider is already set, so this is the easiest way to fix it.\n let $data = this.state.$data;\n if (panel.transformations && $data) {\n if ($data instanceof SceneDataTransformer) {\n $data.setState({ transformations: panel.transformations });\n } else if ($data instanceof SceneQueryRunner) {\n $data.clearParent();\n $data = new SceneDataTransformer({\n transformations: panel.transformations,\n $data,\n });\n }\n }\n\n const withDefaults = getPanelOptionsWithDefaults({\n plugin,\n currentOptions: panel.options,\n currentFieldConfig: panel.fieldConfig,\n isAfterPluginChange: isAfterPluginChange ?? false,\n });\n\n this._plugin = plugin;\n\n this.setState({\n $data,\n options: withDefaults.options as DeepPartial<TOptions>,\n fieldConfig: withDefaults.fieldConfig,\n pluginVersion: currentVersion,\n pluginId: plugin.meta.id,\n });\n\n // Non data panels needs to be re-rendered when time range change\n if (plugin.meta.skipDataQuery) {\n const sceneTimeRange = sceneGraph.getTimeRange(this);\n this._subs.add(sceneTimeRange.subscribeToState(() => this.forceRender()));\n }\n }\n\n private _getPluginVersion(plugin: PanelPlugin): string {\n return plugin && plugin.meta.info.version ? plugin.meta.info.version : config.buildInfo.version;\n }\n\n public getPlugin(): PanelPlugin | undefined {\n return this._plugin;\n }\n\n public getPanelContext(): PanelContext {\n this._panelContext ??= this.buildPanelContext();\n\n return this._panelContext!;\n }\n\n public onTimeRangeChange = (timeRange: AbsoluteTimeRange) => {\n const sceneTimeRange = sceneGraph.getTimeRange(this);\n sceneTimeRange.onTimeRangeChange({\n raw: {\n from: toUtc(timeRange.from),\n to: toUtc(timeRange.to),\n },\n from: toUtc(timeRange.from),\n to: toUtc(timeRange.to),\n });\n };\n\n public getTimeRange = (data?: PanelData) => {\n const liveNowTimer = sceneGraph.findObject(this, (o) => o instanceof LiveNowTimer);\n const sceneTimeRange = sceneGraph.getTimeRange(this);\n\n if (liveNowTimer instanceof LiveNowTimer && liveNowTimer.isEnabled) {\n return evaluateTimeRange(\n sceneTimeRange.state.from,\n sceneTimeRange.state.to,\n sceneTimeRange.getTimeZone(),\n sceneTimeRange.state.fiscalYearStartMonth,\n sceneTimeRange.state.UNSAFE_nowDelay,\n sceneTimeRange.state.weekStart\n );\n }\n\n const plugin = this.getPlugin();\n if (plugin && !plugin.meta.skipDataQuery && data && data.timeRange) {\n return data.timeRange;\n }\n\n return sceneTimeRange.state.value;\n };\n\n public async changePluginType(pluginId: string, newOptions?: DeepPartial<{}>, newFieldConfig?: FieldConfigSource) {\n const { options: prevOptions, fieldConfig: prevFieldConfig, pluginId: prevPluginId } = this.state;\n\n //clear field config cache to update it later\n this._dataWithFieldConfig = undefined;\n\n // If state.pluginId is already the correct plugin we don't treat this as plain user panel type change\n const isAfterPluginChange = this.state.pluginId !== pluginId;\n await this._loadPlugin(pluginId, newOptions ?? {}, newFieldConfig, isAfterPluginChange);\n\n const panel: PanelModel = {\n title: this.state.title,\n options: this.state.options,\n fieldConfig: this.state.fieldConfig,\n id: 1,\n type: pluginId,\n };\n\n // onPanelTypeChanged is mainly used by plugins to migrate from Angular to React.\n // For example, this will migrate options from 'graph' to 'timeseries' if the previous and new plugin ID matches.\n const updatedOptions = this._plugin?.onPanelTypeChanged?.(panel, prevPluginId, prevOptions, prevFieldConfig);\n\n if (updatedOptions && !isEmpty(updatedOptions)) {\n this.onOptionsChange(updatedOptions, true, true);\n }\n }\n\n public onTitleChange = (title: string) => {\n this.setState({ title });\n };\n\n public onDescriptionChange = (description: string) => {\n this.setState({ description });\n };\n\n public onDisplayModeChange = (displayMode: 'default' | 'transparent') => {\n this.setState({ displayMode });\n };\n\n public onToggleCollapse = (collapsed: boolean) => {\n this.setState({\n collapsed,\n });\n };\n\n public onOptionsChange = (optionsUpdate: DeepPartial<TOptions>, replace = false, isAfterPluginChange = false) => {\n const { fieldConfig, options } = this.state;\n\n // When replace is true, we want to replace the entire options object. Default will be applied.\n const nextOptions = replace\n ? optionsUpdate\n : mergeWith(cloneDeep(options), optionsUpdate, (objValue, srcValue, key, obj) => {\n if (isArray(srcValue)) {\n return srcValue;\n }\n // If customizer returns undefined, merging is handled by the method instead\n // so we need to override the value in the object instead\n if (objValue !== srcValue && typeof srcValue === 'undefined') {\n obj[key] = srcValue;\n return;\n }\n return;\n });\n\n const withDefaults = getPanelOptionsWithDefaults({\n plugin: this._plugin!,\n currentOptions: nextOptions,\n currentFieldConfig: fieldConfig,\n isAfterPluginChange: isAfterPluginChange,\n });\n\n this.setState({\n options: withDefaults.options as DeepPartial<TOptions>,\n _renderCounter: (this.state._renderCounter ?? 0) + 1,\n });\n };\n\n public onFieldConfigChange = (fieldConfigUpdate: FieldConfigSource<DeepPartial<TFieldConfig>>, replace?: boolean) => {\n const { fieldConfig, options } = this.state;\n\n // When replace is true, we want to replace the entire field config. Default will be applied.\n const nextFieldConfig = replace ? fieldConfigUpdate : merge(cloneDeep(fieldConfig), fieldConfigUpdate);\n\n const withDefaults = getPanelOptionsWithDefaults({\n plugin: this._plugin!,\n currentOptions: options,\n currentFieldConfig: nextFieldConfig,\n isAfterPluginChange: false,\n });\n\n this._dataWithFieldConfig = undefined;\n this.setState({ fieldConfig: withDefaults.fieldConfig });\n };\n\n public interpolate = ((value: string, scoped?: ScopedVars, format?: string | VariableCustomFormatterFn) => {\n return sceneGraph.interpolate(this, value, scoped, format);\n }) as InterpolateFunction;\n\n public getDescription = () => {\n this.publishEvent(new UserActionEvent({ origin: this, interaction: 'panel-description-shown' }), true);\n\n const { description } = this.state;\n if (description) {\n const markdown = this.interpolate(description);\n return renderMarkdown(markdown);\n }\n return '';\n };\n\n public clearFieldConfigCache() {\n this._dataWithFieldConfig = undefined;\n }\n\n /**\n * Called from the react render path to apply the field config to the data provided by the data provider\n */\n public applyFieldConfig(rawData?: PanelData): PanelData {\n const timestamp = performance.now();\n const plugin = this._plugin;\n\n const profiler = this.getProfiler();\n\n if (!plugin || plugin.meta.skipDataQuery || !rawData) {\n // TODO setup time range subscription instead\n return emptyPanelData;\n }\n\n // SceneQueryRunner preserves series array identity when frames haven't changed, but\n // still emits new PanelData on state transitions (onDataReceived). Detect this and skip\n // the expensive applyFieldOverrides step.\n if (this._prevData && this._dataWithFieldConfig) {\n if (this._prevData === rawData) {\n return this._dataWithFieldConfig;\n }\n if (this._prevData.series === rawData.series) {\n this._prevData = rawData;\n this._dataWithFieldConfig = {\n ...rawData,\n structureRev: this._dataWithFieldConfig.structureRev,\n series: this._dataWithFieldConfig.series,\n };\n return this._dataWithFieldConfig;\n }\n }\n\n // Start profiling data processing - get end callback\n const endFieldConfigCallback = profiler?.onFieldConfigStart(timestamp);\n\n const pluginDataSupport: PanelPluginDataSupport = plugin.dataSupport || { alertStates: false, annotations: false };\n\n const fieldConfigRegistry = plugin.fieldConfigRegistry;\n const prevFrames = this._dataWithFieldConfig?.series ?? [];\n const newFrames = applyFieldOverrides({\n data: rawData.series,\n fieldConfig: this.state.fieldConfig,\n fieldConfigRegistry,\n replaceVariables: this.interpolate,\n theme: config.theme2,\n timeZone: rawData.request?.timezone,\n // @ts-ignore - @grafana/data is getting this type in Grafana 13.\n featureToggles: config.featureToggles,\n });\n\n if (!compareArrayValues(newFrames, prevFrames, compareDataFrameStructures)) {\n this._structureRev++;\n }\n\n this._dataWithFieldConfig = {\n ...rawData,\n structureRev: this._structureRev,\n series: newFrames,\n };\n\n if (this._dataWithFieldConfig.annotations) {\n this._dataWithFieldConfig.annotations = applyFieldOverrides({\n data: this._dataWithFieldConfig.annotations,\n fieldConfig: {\n defaults: {},\n overrides: [],\n },\n fieldConfigRegistry,\n replaceVariables: this.interpolate,\n theme: config.theme2,\n timeZone: rawData.request?.timezone,\n // @ts-ignore - @grafana/data is getting this type in Grafana 13.\n featureToggles: config.featureToggles,\n });\n }\n\n if (!pluginDataSupport.alertStates) {\n this._dataWithFieldConfig.alertState = undefined;\n }\n\n if (!pluginDataSupport.annotations) {\n this._dataWithFieldConfig.annotations = undefined;\n }\n\n this._prevData = rawData;\n\n // End profiling data processing\n if (profiler) {\n endFieldConfigCallback?.(performance.now());\n }\n\n return this._dataWithFieldConfig;\n }\n\n public onCancelQuery = () => {\n this.publishEvent(new UserActionEvent({ origin: this, interaction: 'panel-cancel-query-clicked' }), true);\n const data = sceneGraph.getData(this);\n data.cancelQuery?.();\n };\n\n public onStatusMessageClick = () => {\n this.publishEvent(new UserActionEvent({ origin: this, interaction: 'panel-status-message-clicked' }), true);\n };\n\n /**\n * Panel context functions\n */\n private _onSeriesColorChange = (label: string, color: string) => {\n this.onFieldConfigChange(changeSeriesColorConfigFactory(label, color, this.state.fieldConfig));\n };\n\n private _onSeriesVisibilityChange = (label: string, mode: SeriesVisibilityChangeMode) => {\n if (!this._dataWithFieldConfig) {\n return;\n }\n\n this.onFieldConfigChange(\n seriesVisibilityConfigFactory(label, mode, this.state.fieldConfig, this._dataWithFieldConfig.series),\n true\n );\n };\n\n private _onInstanceStateChange = (state: any) => {\n if (this._panelContext) {\n this._panelContext = {\n ...this._panelContext,\n instanceState: state,\n };\n }\n\n this.setState({ _pluginInstanceState: state });\n };\n\n private _onToggleLegendSort = (sortKey: string) => {\n const legendOptions: VizLegendOptions = (this.state.options as any).legend;\n\n // We don't want to do anything when legend options are not available\n if (!legendOptions) {\n return;\n }\n\n let sortDesc = legendOptions.sortDesc;\n let sortBy = legendOptions.sortBy;\n if (sortKey !== sortBy) {\n sortDesc = undefined;\n }\n\n // if already sort ascending, disable sorting\n if (sortDesc === false) {\n sortBy = undefined;\n sortDesc = undefined;\n } else {\n sortDesc = !sortDesc;\n sortBy = sortKey;\n }\n\n this.onOptionsChange(\n {\n ...this.state.options,\n legend: { ...legendOptions, sortBy, sortDesc },\n } as TOptions,\n true\n );\n };\n\n public clone(withState?: Partial<VizPanelState>) {\n // Clear _pluginInstanceState and _pluginLoadError as it's not safe to clone\n return super.clone({ _pluginInstanceState: undefined, _pluginLoadError: undefined, ...withState });\n }\n\n private buildPanelContext(): PanelContext {\n const sync = getCursorSyncScope(this);\n\n const context = {\n eventsScope: sync ? sync.getEventsScope() : '__global_',\n eventBus: sync ? sync.getEventsBus(this) : getAppEvents(),\n app: CoreApp.Unknown,\n sync: () => {\n if (sync) {\n return sync.state.sync;\n }\n return DashboardCursorSync.Off;\n },\n onSeriesColorChange: this._onSeriesColorChange,\n onToggleSeriesVisibility: this._onSeriesVisibilityChange,\n onToggleLegendSort: this._onToggleLegendSort,\n onInstanceStateChange: this._onInstanceStateChange,\n };\n\n if (this.state.extendPanelContext) {\n this.state.extendPanelContext(this, context);\n }\n\n return context;\n }\n}\n\nfunction getPanelPluginNotFound(id: string): PanelPlugin {\n const plugin = new PanelPlugin(() => null);\n\n plugin.meta = {\n id: id,\n name: id,\n sort: 100,\n type: PluginType.panel,\n module: '',\n baseUrl: '',\n info: {\n author: {\n name: '',\n },\n description: '',\n links: [],\n logos: {\n large: '',\n small: 'public/img/grafana_icon.svg',\n },\n screenshots: [],\n updated: '',\n version: '',\n },\n };\n\n return plugin;\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"VizPanel.js","sources":["../../../../src/components/VizPanel/VizPanel.tsx"],"sourcesContent":["import { t } from '@grafana/i18n';\nimport {\n AbsoluteTimeRange,\n FieldConfigSource,\n PanelModel,\n PanelPlugin,\n toUtc,\n getPanelOptionsWithDefaults,\n ScopedVars,\n InterpolateFunction,\n CoreApp,\n DashboardCursorSync,\n PanelData,\n compareArrayValues,\n compareDataFrameStructures,\n applyFieldOverrides,\n PluginType,\n renderMarkdown,\n PanelPluginDataSupport,\n} from '@grafana/data';\nimport { PanelContext, SeriesVisibilityChangeMode, VizLegendOptions } from '@grafana/ui';\nimport { config, getAppEvents, getPluginImportUtils } from '@grafana/runtime';\nimport { SceneObjectBase } from '../../core/SceneObjectBase';\nimport { sceneGraph } from '../../core/sceneGraph';\nimport { DeepPartial, SceneObject, SceneObjectState } from '../../core/types';\n\nimport { VizPanelRenderer } from './VizPanelRenderer';\nimport { VizPanelMenu } from './VizPanelMenu';\nimport { VariableDependencyConfig } from '../../variables/VariableDependencyConfig';\nimport { VariableCustomFormatterFn } from '../../variables/types';\nimport { seriesVisibilityConfigFactory } from './seriesVisibilityConfigFactory';\nimport { emptyPanelData } from '../../core/SceneDataNode';\nimport { changeSeriesColorConfigFactory } from './colorSeriesConfigFactory';\nimport { loadPanelPluginSync } from './registerRuntimePanelPlugin';\nimport { getCursorSyncScope } from '../../behaviors/CursorSync';\nimport { cloneDeep, isArray, isEmpty, merge, mergeWith } from 'lodash';\nimport { UserActionEvent } from '../../core/events';\nimport { evaluateTimeRange } from '../../utils/evaluateTimeRange';\nimport { LiveNowTimer } from '../../behaviors/LiveNowTimer';\nimport { VizPanelRenderProfiler } from '../../performance/VizPanelRenderProfiler';\nimport { registerQueryWithController, wrapPromiseInStateObservable } from '../../querying/registerQueryWithController';\nimport { SceneDataTransformer } from '../../querying/SceneDataTransformer';\nimport { SceneQueryRunner } from '../../querying/SceneQueryRunner';\nimport { buildPathIdFor } from '../../utils/pathId';\n\nexport interface VizPanelState<TOptions = {}, TFieldConfig = {}> extends SceneObjectState {\n /**\n * This is usually a plugin id that references a core plugin or an external plugin. But this can also reference a\n * runtime registered PanelPlugin registered via function registerScenePanelPlugin.\n */\n pluginId: string;\n title: string;\n /** Shown in info icon tooltip next to the title, supports markdown */\n description?: string;\n /** Shown as text below the title, supports markdown */\n subtitle?: string;\n options: DeepPartial<TOptions>;\n fieldConfig: FieldConfigSource<DeepPartial<TFieldConfig>>;\n pluginVersion?: string;\n displayMode?: 'default' | 'transparent';\n /**\n * Only shows header on hover, absolutly positioned above the panel.\n */\n hoverHeader?: boolean;\n /**\n * Offset hoverHeader position on the y axis\n */\n hoverHeaderOffset?: number;\n /**\n * Allows adding elements to the subheader of the panel.\n */\n subHeader?: React.ReactNode | SceneObject | SceneObject[];\n /**\n * Only shows vizPanelMenu on hover if false, otherwise the menu is always visible in the header\n */\n showMenuAlways?: boolean;\n /**\n * Defines a menu in the top right of the panel. The menu object is only activated when the dropdown menu itself is shown.\n * So the best way to add dynamic menu actions and links is by adding them in a behavior attached to the menu.\n */\n menu?: VizPanelMenu;\n /**\n * Defines a menu that renders panel link.\n **/\n titleItems?: React.ReactNode | SceneObject | SceneObject[];\n seriesLimit?: number;\n seriesLimitShowAll?: boolean;\n /**\n * Add action to the top right panel header\n */\n headerActions?: React.ReactNode | SceneObject | SceneObject[];\n /**\n * Mainly for advanced use cases that need custom handling of PanelContext callbacks.\n */\n extendPanelContext?: (vizPanel: VizPanel, context: PanelContext) => void;\n\n /**\n * @internal\n * experimental / temporary\n *\n * clears field.values arrays of previous/stale/retained series and annotations frames in PanelData\n *\n * see https://github.com/facebook/react/issues/36176\n * see https://github.com/grafana/grafana/pull/121682\n * see https://github.com/grafana/grafana/pull/120190\n **/\n _UNSAFE_clearPreviousFieldValues?: boolean;\n\n /**\n * Sets panel chrome collapsed state\n */\n collapsible?: boolean;\n collapsed?: boolean;\n /** Marks object as a repeated object and a key pointer to source object */\n repeatSourceKey?: string;\n /**\n * @internal\n * Only for use from core to handle migration from old angular panels\n **/\n _UNSAFE_customMigrationHandler?: (panel: PanelModel, plugin: PanelPlugin) => void;\n /** Internal */\n _pluginLoadError?: string;\n /** Internal */\n _pluginInstanceState?: any;\n _renderCounter?: number;\n}\n\nexport class VizPanel<TOptions = {}, TFieldConfig extends {} = {}> extends SceneObjectBase<\n VizPanelState<TOptions, TFieldConfig>\n> {\n public static Component = VizPanelRenderer;\n\n protected _variableDependency = new VariableDependencyConfig(this, {\n statePaths: ['title', 'options', 'fieldConfig'],\n onReferencedVariableValueChanged: () => {\n this.clearFieldConfigCache();\n this.forceRender();\n },\n });\n\n // Not part of state as this is not serializable\n protected _panelContext?: PanelContext;\n private _plugin?: PanelPlugin;\n private _prevData?: PanelData;\n private _dataWithFieldConfig?: PanelData;\n private _structureRev = 0;\n\n public constructor(state: Partial<VizPanelState<TOptions, TFieldConfig>>) {\n super({\n options: {} as TOptions,\n fieldConfig: { defaults: {}, overrides: [] },\n title: t('grafana-scenes.components.viz-panel.title.title', 'Title'),\n pluginId: 'timeseries',\n _renderCounter: 0,\n ...state,\n });\n\n this.addActivationHandler(() => {\n this._onActivate();\n });\n\n state.menu?.addActivationHandler(() => {\n this.publishEvent(new UserActionEvent({ origin: this, interaction: 'panel-menu-shown' }), true);\n });\n }\n\n /**\n * Get the VizPanelRenderProfiler behavior if attached\n */\n public getProfiler(): VizPanelRenderProfiler | undefined {\n if (!this.state.$behaviors) {\n return undefined;\n }\n\n for (const behavior of this.state.$behaviors) {\n if (behavior instanceof VizPanelRenderProfiler) {\n return behavior;\n }\n }\n\n return undefined;\n }\n\n private _onActivate() {\n if (!this._plugin) {\n this._loadPlugin(this.state.pluginId);\n }\n }\n\n public forceRender(): void {\n // Incrementing the render counter means VizRepeater and its children will also re-render\n this.setState({ _renderCounter: (this.state._renderCounter ?? 0) + 1 });\n }\n\n private async _loadPlugin(\n pluginId: string,\n overwriteOptions?: DeepPartial<{}>,\n overwriteFieldConfig?: FieldConfigSource,\n isAfterPluginChange?: boolean\n ) {\n const profiler = this.getProfiler();\n const plugin = loadPanelPluginSync(pluginId);\n\n if (plugin) {\n // Plugin was loaded from cache\n const endPluginLoadCallback = profiler?.onPluginLoadStart(pluginId);\n endPluginLoadCallback?.(plugin, true);\n this._pluginLoaded(plugin, overwriteOptions, overwriteFieldConfig, isAfterPluginChange);\n } else {\n const { importPanelPlugin } = getPluginImportUtils();\n\n try {\n // Start profiling plugin load - get end callback\n const endPluginLoadCallback = profiler?.onPluginLoadStart(pluginId);\n\n const panelPromise = importPanelPlugin(pluginId);\n\n const queryControler = sceneGraph.getQueryController(this);\n if (queryControler && queryControler.state.enableProfiling) {\n wrapPromiseInStateObservable(panelPromise)\n .pipe(registerQueryWithController({ type: `VizPanel/loadPlugin/${pluginId}`, origin: this }))\n .subscribe(() => {});\n }\n\n const result = await panelPromise;\n\n // End profiling plugin load (not from cache)\n endPluginLoadCallback?.(result, false);\n\n this._pluginLoaded(result, overwriteOptions, overwriteFieldConfig, isAfterPluginChange);\n } catch (err: unknown) {\n this._pluginLoaded(getPanelPluginNotFound(pluginId));\n\n if (err instanceof Error) {\n this.setState({ _pluginLoadError: err.message });\n }\n }\n }\n }\n\n public getLegacyPanelId() {\n /**\n * The `/` part is here because a panel key can be in a clone chain\n * A clone chain looks like `panel-1-clone-0/grid-item-5/panel-14` where the last part is the panel key\n */\n const parts = this.state.key?.split('/') ?? [];\n\n if (parts.length === 0) {\n return 0;\n }\n\n const part = parts[parts.length - 1];\n const panelId = parseInt(part!.replace('panel-', ''), 10);\n\n if (isNaN(panelId)) {\n return 0;\n }\n\n return panelId;\n }\n\n /**\n * Unique id string that includes local variable values (for repeated panels)\n */\n public getPathId() {\n return buildPathIdFor(this);\n }\n\n private async _pluginLoaded(\n plugin: PanelPlugin,\n overwriteOptions?: DeepPartial<{}>,\n overwriteFieldConfig?: FieldConfigSource,\n isAfterPluginChange?: boolean\n ) {\n const { options, fieldConfig, title, pluginVersion, _UNSAFE_customMigrationHandler } = this.state;\n\n const panel: PanelModel = {\n title,\n options,\n fieldConfig,\n id: this.getLegacyPanelId(),\n type: plugin.meta.id,\n pluginVersion: pluginVersion,\n };\n\n if (overwriteOptions) {\n panel.options = overwriteOptions;\n }\n\n if (overwriteFieldConfig) {\n panel.fieldConfig = overwriteFieldConfig;\n }\n\n const currentVersion = this._getPluginVersion(plugin);\n\n _UNSAFE_customMigrationHandler?.(panel, plugin);\n\n //@ts-expect-error (TODO: remove after upgrading with https://github.com/grafana/grafana/pull/108998)\n const needsMigration = currentVersion !== pluginVersion || plugin.shouldMigrate?.(panel);\n\n if (plugin.onPanelMigration && needsMigration && !isAfterPluginChange) {\n // These migration handlers also mutate panel.fieldConfig to migrate fieldConfig\n panel.options = await plugin.onPanelMigration(panel);\n }\n\n // Some panels mutate the transformations on the panel as part of migrations.\n // Unfortunately, these mutations are not available until the panel plugin is loaded.\n // At this time, the data provider is already set, so this is the easiest way to fix it.\n let $data = this.state.$data;\n if (panel.transformations && $data) {\n if ($data instanceof SceneDataTransformer) {\n $data.setState({ transformations: panel.transformations });\n } else if ($data instanceof SceneQueryRunner) {\n $data.clearParent();\n $data = new SceneDataTransformer({\n transformations: panel.transformations,\n $data,\n });\n }\n }\n\n const withDefaults = getPanelOptionsWithDefaults({\n plugin,\n currentOptions: panel.options,\n currentFieldConfig: panel.fieldConfig,\n isAfterPluginChange: isAfterPluginChange ?? false,\n });\n\n this._plugin = plugin;\n\n this.setState({\n $data,\n options: withDefaults.options as DeepPartial<TOptions>,\n fieldConfig: withDefaults.fieldConfig,\n pluginVersion: currentVersion,\n pluginId: plugin.meta.id,\n });\n\n // Non data panels needs to be re-rendered when time range change\n if (plugin.meta.skipDataQuery) {\n const sceneTimeRange = sceneGraph.getTimeRange(this);\n this._subs.add(sceneTimeRange.subscribeToState(() => this.forceRender()));\n }\n }\n\n private _getPluginVersion(plugin: PanelPlugin): string {\n return plugin && plugin.meta.info.version ? plugin.meta.info.version : config.buildInfo.version;\n }\n\n public getPlugin(): PanelPlugin | undefined {\n return this._plugin;\n }\n\n public getPanelContext(): PanelContext {\n this._panelContext ??= this.buildPanelContext();\n\n return this._panelContext!;\n }\n\n public onTimeRangeChange = (timeRange: AbsoluteTimeRange) => {\n const sceneTimeRange = sceneGraph.getTimeRange(this);\n sceneTimeRange.onTimeRangeChange({\n raw: {\n from: toUtc(timeRange.from),\n to: toUtc(timeRange.to),\n },\n from: toUtc(timeRange.from),\n to: toUtc(timeRange.to),\n });\n };\n\n public getTimeRange = (data?: PanelData) => {\n const liveNowTimer = sceneGraph.findObject(this, (o) => o instanceof LiveNowTimer);\n const sceneTimeRange = sceneGraph.getTimeRange(this);\n\n if (liveNowTimer instanceof LiveNowTimer && liveNowTimer.isEnabled) {\n return evaluateTimeRange(\n sceneTimeRange.state.from,\n sceneTimeRange.state.to,\n sceneTimeRange.getTimeZone(),\n sceneTimeRange.state.fiscalYearStartMonth,\n sceneTimeRange.state.UNSAFE_nowDelay,\n sceneTimeRange.state.weekStart\n );\n }\n\n const plugin = this.getPlugin();\n if (plugin && !plugin.meta.skipDataQuery && data && data.timeRange) {\n return data.timeRange;\n }\n\n return sceneTimeRange.state.value;\n };\n\n public async changePluginType(pluginId: string, newOptions?: DeepPartial<{}>, newFieldConfig?: FieldConfigSource) {\n const { options: prevOptions, fieldConfig: prevFieldConfig, pluginId: prevPluginId } = this.state;\n\n //clear field config cache to update it later\n this._dataWithFieldConfig = undefined;\n\n // If state.pluginId is already the correct plugin we don't treat this as plain user panel type change\n const isAfterPluginChange = this.state.pluginId !== pluginId;\n await this._loadPlugin(pluginId, newOptions ?? {}, newFieldConfig, isAfterPluginChange);\n\n const panel: PanelModel = {\n title: this.state.title,\n options: this.state.options,\n fieldConfig: this.state.fieldConfig,\n id: 1,\n type: pluginId,\n };\n\n // onPanelTypeChanged is mainly used by plugins to migrate from Angular to React.\n // For example, this will migrate options from 'graph' to 'timeseries' if the previous and new plugin ID matches.\n const updatedOptions = this._plugin?.onPanelTypeChanged?.(panel, prevPluginId, prevOptions, prevFieldConfig);\n\n if (updatedOptions && !isEmpty(updatedOptions)) {\n this.onOptionsChange(updatedOptions, true, true);\n }\n }\n\n public onTitleChange = (title: string) => {\n this.setState({ title });\n };\n\n public onDescriptionChange = (description: string) => {\n this.setState({ description });\n };\n\n public onDisplayModeChange = (displayMode: 'default' | 'transparent') => {\n this.setState({ displayMode });\n };\n\n public onToggleCollapse = (collapsed: boolean) => {\n this.setState({\n collapsed,\n });\n };\n\n public onOptionsChange = (optionsUpdate: DeepPartial<TOptions>, replace = false, isAfterPluginChange = false) => {\n const { fieldConfig, options } = this.state;\n\n // When replace is true, we want to replace the entire options object. Default will be applied.\n const nextOptions = replace\n ? optionsUpdate\n : mergeWith(cloneDeep(options), optionsUpdate, (objValue, srcValue, key, obj) => {\n if (isArray(srcValue)) {\n return srcValue;\n }\n // If customizer returns undefined, merging is handled by the method instead\n // so we need to override the value in the object instead\n if (objValue !== srcValue && typeof srcValue === 'undefined') {\n obj[key] = srcValue;\n return;\n }\n return;\n });\n\n const withDefaults = getPanelOptionsWithDefaults({\n plugin: this._plugin!,\n currentOptions: nextOptions,\n currentFieldConfig: fieldConfig,\n isAfterPluginChange: isAfterPluginChange,\n });\n\n this.setState({\n options: withDefaults.options as DeepPartial<TOptions>,\n _renderCounter: (this.state._renderCounter ?? 0) + 1,\n });\n };\n\n public onFieldConfigChange = (fieldConfigUpdate: FieldConfigSource<DeepPartial<TFieldConfig>>, replace?: boolean) => {\n const { fieldConfig, options } = this.state;\n\n // When replace is true, we want to replace the entire field config. Default will be applied.\n const nextFieldConfig = replace ? fieldConfigUpdate : merge(cloneDeep(fieldConfig), fieldConfigUpdate);\n\n const withDefaults = getPanelOptionsWithDefaults({\n plugin: this._plugin!,\n currentOptions: options,\n currentFieldConfig: nextFieldConfig,\n isAfterPluginChange: false,\n });\n\n this._dataWithFieldConfig = undefined;\n this.setState({ fieldConfig: withDefaults.fieldConfig });\n };\n\n public interpolate = ((value: string, scoped?: ScopedVars, format?: string | VariableCustomFormatterFn) => {\n return sceneGraph.interpolate(this, value, scoped, format);\n }) as InterpolateFunction;\n\n public getDescription = () => {\n this.publishEvent(new UserActionEvent({ origin: this, interaction: 'panel-description-shown' }), true);\n\n const { description } = this.state;\n if (description) {\n const markdown = this.interpolate(description);\n return renderMarkdown(markdown);\n }\n return '';\n };\n\n public clearFieldConfigCache() {\n this._dataWithFieldConfig = undefined;\n }\n\n /**\n * Called from the react render path to apply the field config to the data provided by the data provider\n */\n public applyFieldConfig(rawData?: PanelData): PanelData {\n const timestamp = performance.now();\n const plugin = this._plugin;\n\n const profiler = this.getProfiler();\n\n if (!plugin || plugin.meta.skipDataQuery || !rawData) {\n // TODO setup time range subscription instead\n return emptyPanelData;\n }\n\n // SceneQueryRunner preserves series array identity when frames haven't changed, but\n // still emits new PanelData on state transitions (onDataReceived). Detect this and skip\n // the expensive applyFieldOverrides step.\n if (this._prevData && this._dataWithFieldConfig) {\n if (this._prevData === rawData) {\n return this._dataWithFieldConfig;\n }\n if (this._prevData.series === rawData.series) {\n this._prevData = rawData;\n this._dataWithFieldConfig = {\n ...rawData,\n structureRev: this._dataWithFieldConfig.structureRev,\n series: this._dataWithFieldConfig.series,\n };\n return this._dataWithFieldConfig;\n }\n }\n\n // Start profiling data processing - get end callback\n const endFieldConfigCallback = profiler?.onFieldConfigStart(timestamp);\n\n const pluginDataSupport: PanelPluginDataSupport = plugin.dataSupport || { alertStates: false, annotations: false };\n\n const fieldConfigRegistry = plugin.fieldConfigRegistry;\n const prevFrames = this._dataWithFieldConfig?.series ?? [];\n const newFrames = applyFieldOverrides({\n data: rawData.series,\n fieldConfig: this.state.fieldConfig,\n fieldConfigRegistry,\n replaceVariables: this.interpolate,\n theme: config.theme2,\n timeZone: rawData.request?.timezone,\n // @ts-ignore - @grafana/data is getting this type in Grafana 13.\n featureToggles: config.featureToggles,\n });\n\n if (!compareArrayValues(newFrames, prevFrames, compareDataFrameStructures)) {\n this._structureRev++;\n }\n\n this._dataWithFieldConfig = {\n ...rawData,\n structureRev: this._structureRev,\n series: newFrames,\n };\n\n if (this._dataWithFieldConfig.annotations) {\n this._dataWithFieldConfig.annotations = applyFieldOverrides({\n data: this._dataWithFieldConfig.annotations,\n fieldConfig: {\n defaults: {},\n overrides: [],\n },\n fieldConfigRegistry,\n replaceVariables: this.interpolate,\n theme: config.theme2,\n timeZone: rawData.request?.timezone,\n // @ts-ignore - @grafana/data is getting this type in Grafana 13.\n featureToggles: config.featureToggles,\n });\n }\n\n if (!pluginDataSupport.alertStates) {\n this._dataWithFieldConfig.alertState = undefined;\n }\n\n if (!pluginDataSupport.annotations) {\n this._dataWithFieldConfig.annotations = undefined;\n }\n\n this._prevData = rawData;\n\n // End profiling data processing\n if (profiler) {\n endFieldConfigCallback?.(performance.now());\n }\n\n return this._dataWithFieldConfig;\n }\n\n public onCancelQuery = () => {\n this.publishEvent(new UserActionEvent({ origin: this, interaction: 'panel-cancel-query-clicked' }), true);\n const data = sceneGraph.getData(this);\n data.cancelQuery?.();\n };\n\n public onStatusMessageClick = () => {\n this.publishEvent(new UserActionEvent({ origin: this, interaction: 'panel-status-message-clicked' }), true);\n };\n\n /**\n * Panel context functions\n */\n private _onSeriesColorChange = (label: string, color: string) => {\n this.onFieldConfigChange(changeSeriesColorConfigFactory(label, color, this.state.fieldConfig));\n };\n\n private _onSeriesVisibilityChange = (label: string, mode: SeriesVisibilityChangeMode) => {\n if (!this._dataWithFieldConfig) {\n return;\n }\n\n this.onFieldConfigChange(\n seriesVisibilityConfigFactory(label, mode, this.state.fieldConfig, this._dataWithFieldConfig.series),\n true\n );\n };\n\n private _onInstanceStateChange = (state: any) => {\n if (this._panelContext) {\n this._panelContext = {\n ...this._panelContext,\n instanceState: state,\n };\n }\n\n this.setState({ _pluginInstanceState: state });\n };\n\n private _onToggleLegendSort = (sortKey: string) => {\n const legendOptions: VizLegendOptions = (this.state.options as any).legend;\n\n // We don't want to do anything when legend options are not available\n if (!legendOptions) {\n return;\n }\n\n let sortDesc = legendOptions.sortDesc;\n let sortBy = legendOptions.sortBy;\n if (sortKey !== sortBy) {\n sortDesc = undefined;\n }\n\n // if already sort ascending, disable sorting\n if (sortDesc === false) {\n sortBy = undefined;\n sortDesc = undefined;\n } else {\n sortDesc = !sortDesc;\n sortBy = sortKey;\n }\n\n this.onOptionsChange(\n {\n ...this.state.options,\n legend: { ...legendOptions, sortBy, sortDesc },\n } as TOptions,\n true\n );\n };\n\n public clone(withState?: Partial<VizPanelState>) {\n // Clear _pluginInstanceState and _pluginLoadError as it's not safe to clone\n return super.clone({ _pluginInstanceState: undefined, _pluginLoadError: undefined, ...withState });\n }\n\n private buildPanelContext(): PanelContext {\n const sync = getCursorSyncScope(this);\n\n const context = {\n eventsScope: sync ? sync.getEventsScope() : '__global_',\n eventBus: sync ? sync.getEventsBus(this) : getAppEvents(),\n app: CoreApp.Unknown,\n sync: () => {\n if (sync) {\n return sync.state.sync;\n }\n return DashboardCursorSync.Off;\n },\n onSeriesColorChange: this._onSeriesColorChange,\n onToggleSeriesVisibility: this._onSeriesVisibilityChange,\n onToggleLegendSort: this._onToggleLegendSort,\n onInstanceStateChange: this._onInstanceStateChange,\n };\n\n if (this.state.extendPanelContext) {\n this.state.extendPanelContext(this, context);\n }\n\n return context;\n }\n}\n\nfunction getPanelPluginNotFound(id: string): PanelPlugin {\n const plugin = new PanelPlugin(() => null);\n\n plugin.meta = {\n id: id,\n name: id,\n sort: 100,\n type: PluginType.panel,\n module: '',\n baseUrl: '',\n info: {\n author: {\n name: '',\n },\n description: '',\n links: [],\n logos: {\n large: '',\n small: 'public/img/grafana_icon.svg',\n },\n screenshots: [],\n updated: '',\n version: '',\n },\n };\n\n return plugin;\n}\n"],"names":[],"mappings":"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"}
|
package/dist/esm/index.js
CHANGED
|
@@ -95,6 +95,8 @@ export { VizConfigBuilder } from './core/PanelBuilders/VizConfigBuilder.js';
|
|
|
95
95
|
export { VizConfigBuilders } from './core/PanelBuilders/VizConfigBuilders.js';
|
|
96
96
|
export { SafeSerializableSceneObject } from './utils/SafeSerializableSceneObject.js';
|
|
97
97
|
export { getExploreURL } from './utils/explore.js';
|
|
98
|
+
export { getCompareSeriesRefId } from './utils/getCompareSeriesRefId.js';
|
|
99
|
+
export { timeShiftAlignmentProcessor } from './utils/timeShiftAlignmentProcessor.js';
|
|
98
100
|
export { loadResources } from './utils/loadResources.js';
|
|
99
101
|
export { FieldConfigBuilders } from './core/PanelBuilders/FieldConfigBuilders.js';
|
|
100
102
|
export { FieldConfigOverridesBuilder } from './core/PanelBuilders/FieldConfigOverridesBuilder.js';
|
package/dist/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../src/index.ts"],"sourcesContent":["import { getUrlWithAppState } from './components/SceneApp/utils';\nimport { registerRuntimePanelPlugin } from './components/VizPanel/registerRuntimePanelPlugin';\nimport { cloneSceneObjectState } from './core/sceneGraph/cloneSceneObject';\nimport { registerRuntimeDataSource } from './querying/RuntimeDataSource';\nimport { getUrlState, syncStateFromSearchParams } from './services/utils';\nimport { buildPathIdFor } from './utils/pathId';\nimport { isRepeatCloneOrChildOf } from './utils/utils';\n\nimport { registerVariableMacro } from './variables/macros';\nimport {\n escapeLabelValueInExactSelector,\n escapeLabelValueInRegexSelector,\n escapeURLDelimiters,\n renderPrometheusLabelFilters,\n getVariableControlId,\n} from './variables/utils';\nimport {\n isAdHocVariable,\n isQueryVariable,\n isTextBoxVariable,\n isCustomVariable,\n isDataSourceVariable,\n isConstantVariable,\n isIntervalVariable,\n isGroupByVariable,\n isSwitchVariable,\n} from './variables/variants/guards';\n\nexport * from './core/types';\nexport * from './core/events';\nexport { sceneGraph } from './core/sceneGraph';\nexport { getClosest } from './core/sceneGraph/utils';\nexport * as behaviors from './behaviors';\nexport * as performanceUtils from './performance';\nexport { writePerformanceLog } from './utils/writePerformanceLog';\nexport * as dataLayers from './querying/layers';\n\nexport { SceneObjectBase, useSceneObjectState } from './core/SceneObjectBase';\nexport { SceneDataNode } from './core/SceneDataNode';\nexport { SceneTimeRange } from './core/SceneTimeRange';\nexport { SceneTimeZoneOverride } from './core/SceneTimeZoneOverride';\n\nexport { SceneQueryRunner, type QueryRunnerState } from './querying/SceneQueryRunner';\nexport { DataProviderProxy } from './querying/DataProviderProxy';\nexport {\n type ExtraQueryDescriptor,\n type ExtraQueryProvider,\n type ExtraQueryDataProcessor,\n} from './querying/ExtraQueryProvider';\nexport { SceneDataLayerSet, SceneDataLayerSetBase } from './querying/SceneDataLayerSet';\nexport { SceneDataLayerBase } from './querying/layers/SceneDataLayerBase';\nexport { SceneDataLayerControls } from './querying/layers/SceneDataLayerControls';\nexport { SceneDataTransformer, type SceneDataTransformerState } from './querying/SceneDataTransformer';\nexport { registerQueryWithController } from './querying/registerQueryWithController';\nexport { registerRuntimeDataSource, RuntimeDataSource } from './querying/RuntimeDataSource';\nexport type {\n SceneQueryControllerLike,\n SceneQueryControllerEntryType,\n SceneQueryControllerEntry,\n} from './behaviors/types';\n\nexport type { AdHocFilterInteractionHandler } from './core/sceneGraph/getReportInteractionHandler';\n\nexport * from './variables/types';\nexport { VariableDependencyConfig } from './variables/VariableDependencyConfig';\nexport { formatRegistry, type FormatVariable } from './variables/interpolation/formatRegistry';\nexport { VariableValueSelectors } from './variables/components/VariableValueSelectors';\nexport { VariableValueControl } from './variables/components/VariableValueControl';\nexport { SceneVariableSet } from './variables/sets/SceneVariableSet';\nexport { ConstantVariable } from './variables/variants/ConstantVariable';\nexport { CustomVariable } from './variables/variants/CustomVariable';\nexport { SwitchVariable } from './variables/variants/SwitchVariable';\nexport { DataSourceVariable } from './variables/variants/DataSourceVariable';\nexport { QueryVariable } from './variables/variants/query/QueryVariable';\nexport { TestVariable } from './variables/variants/TestVariable';\nexport { TextBoxVariable } from './variables/variants/TextBoxVariable';\nexport { ScopesVariable } from './variables/variants/ScopesVariable';\nexport {\n MultiValueVariable,\n type MultiValueVariableState,\n type VariableGetOptionsArgs,\n} from './variables/variants/MultiValueVariable';\nexport { LocalValueVariable } from './variables/variants/LocalValueVariable';\nexport { IntervalVariable } from './variables/variants/IntervalVariable';\nexport {\n AdHocFiltersVariable,\n OPERATORS,\n GROUP_BY_OPERATOR,\n isGroupByFilter,\n type OperatorDefinition,\n} from './variables/adhoc/AdHocFiltersVariable';\nexport type { AdHocFilterWithLabels } from './variables/adhoc/AdHocFiltersVariable';\nexport type {\n AdHocFiltersController,\n AdHocFiltersControllerState,\n} from './variables/adhoc/controller/AdHocFiltersController';\nexport { AdHocFiltersVariableController } from './variables/adhoc/controller/AdHocFiltersVariableController';\nexport { AdHocFiltersComboboxRenderer } from './variables/adhoc/AdHocFiltersCombobox/AdHocFiltersComboboxRenderer';\nexport { GroupByVariable } from './variables/groupby/GroupByVariable';\nexport { type MacroVariableConstructor } from './variables/macros/types';\nexport { escapeUrlPipeDelimiters, getQueriesForVariables } from './variables/utils';\n\nexport {\n type UrlSyncManagerLike,\n UrlSyncManager,\n NewSceneObjectAddedEvent,\n SceneObjectRemovedEvent,\n} from './services/UrlSyncManager';\nexport { useUrlSync } from './services/useUrlSync';\nexport { UrlSyncContextProvider } from './services/UrlSyncContextProvider';\nexport { SceneObjectUrlSyncConfig } from './services/SceneObjectUrlSyncConfig';\n\nexport { EmbeddedScene, type EmbeddedSceneState } from './components/EmbeddedScene';\nexport { VizPanel, type VizPanelState } from './components/VizPanel/VizPanel';\nexport { VizPanelMenu } from './components/VizPanel/VizPanelMenu';\nexport { VizPanelExploreButton } from './components/VizPanel/VizPanelExploreButton';\nexport { NestedScene } from './components/NestedScene';\nexport { SceneCanvasText } from './components/SceneCanvasText';\nexport { SceneToolbarButton, SceneToolbarInput } from './components/SceneToolbarButton';\nexport { SceneTimePicker } from './components/SceneTimePicker';\nexport { SceneRefreshPicker, type SceneRefreshPickerState } from './components/SceneRefreshPicker';\nexport { SceneTimeRangeTransformerBase } from './core/SceneTimeRangeTransformerBase';\nexport { SceneTimeRangeCompare } from './components/SceneTimeRangeCompare';\nexport { SceneByFrameRepeater } from './components/SceneByFrameRepeater';\nexport { SceneByVariableRepeater } from './components/SceneByVariableRepeater';\nexport { SceneControlsSpacer } from './components/SceneControlsSpacer';\nexport {\n SceneFlexLayout,\n SceneFlexItem,\n type SceneFlexItemPlacement,\n type SceneFlexItemState,\n type SceneFlexItemLike,\n} from './components/layout/SceneFlexLayout';\nexport { SceneCSSGridLayout, SceneCSSGridItem } from './components/layout/CSSGrid/SceneCSSGridLayout';\nexport { SceneGridLayout } from './components/layout/grid/SceneGridLayout';\nexport { SceneGridLayoutDragStartEvent } from './components/layout/grid/types';\nexport { GRID_CELL_HEIGHT, GRID_COLUMN_COUNT } from './components/layout/grid/constants';\nexport { SceneGridItem } from './components/layout/grid/SceneGridItem';\nexport { SceneGridRow } from './components/layout/grid/SceneGridRow';\nexport { type SceneGridItemStateLike, type SceneGridItemLike } from './components/layout/grid/types';\nexport { SplitLayout } from './components/layout/split/SplitLayout';\nexport { LazyLoader, type LazyLoaderMode } from './components/layout/LazyLoader';\nexport {\n type SceneAppPageLike,\n type SceneRouteMatch,\n type SceneAppPageState,\n type SceneAppDrilldownView,\n type SceneAppRoute,\n} from './components/SceneApp/types';\nexport { SceneApp, useSceneApp } from './components/SceneApp/SceneApp';\nexport { SceneAppPage } from './components/SceneApp/SceneAppPage';\nexport { SceneReactObject } from './components/SceneReactObject';\nexport { SceneObjectRef } from './core/SceneObjectRef';\nexport {\n PanelBuilders,\n PanelOptionsBuilders,\n FieldConfigBuilders,\n FieldConfigOverridesBuilder,\n} from './core/PanelBuilders';\nexport { FieldConfigBuilder } from './core/PanelBuilders/FieldConfigBuilder';\nexport { VizPanelBuilder } from './core/PanelBuilders/VizPanelBuilder';\nexport { SceneDebugger } from './components/SceneDebugger/SceneDebugger';\nexport { VariableValueSelectWrapper } from './variables/components/VariableValueSelectors';\nexport { ControlsLabel } from './utils/ControlsLabel';\nexport { MultiOrSingleValueSelect } from './variables/components/VariableValueSelect';\nexport { VizConfigBuilder } from './core/PanelBuilders/VizConfigBuilder';\nexport { VizConfigBuilders } from './core/PanelBuilders/VizConfigBuilders';\nexport { type VizConfig } from './core/PanelBuilders/types';\n\nexport const sceneUtils = {\n getUrlWithAppState,\n registerRuntimePanelPlugin,\n registerRuntimeDataSource,\n registerVariableMacro,\n cloneSceneObjectState,\n syncStateFromSearchParams,\n getUrlState,\n renderPrometheusLabelFilters,\n escapeLabelValueInRegexSelector,\n escapeLabelValueInExactSelector,\n escapeURLDelimiters,\n getVariableControlId,\n\n // Variable guards\n isAdHocVariable,\n isConstantVariable,\n isCustomVariable,\n isDataSourceVariable,\n isIntervalVariable,\n isQueryVariable,\n isTextBoxVariable,\n isGroupByVariable,\n isSwitchVariable,\n isRepeatCloneOrChildOf,\n buildPathIdFor,\n};\n\nexport { SafeSerializableSceneObject } from './utils/SafeSerializableSceneObject';\nexport { getExploreURL } from './utils/explore';\nexport { loadResources } from './utils/loadResources';\nexport { PATH_ID_SEPARATOR } from './utils/pathId';\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyKO,MAAM,UAAA,GAAa;AAAA,EACxB,kBAAA;AAAA,EACA,0BAAA;AAAA,EACA,yBAAA;AAAA,EACA,qBAAA;AAAA,EACA,qBAAA;AAAA,EACA,yBAAA;AAAA,EACA,WAAA;AAAA,EACA,4BAAA;AAAA,EACA,+BAAA;AAAA,EACA,+BAAA;AAAA,EACA,mBAAA;AAAA,EACA,oBAAA;AAAA;AAAA,EAGA,eAAA;AAAA,EACA,kBAAA;AAAA,EACA,gBAAA;AAAA,EACA,oBAAA;AAAA,EACA,kBAAA;AAAA,EACA,eAAA;AAAA,EACA,iBAAA;AAAA,EACA,iBAAA;AAAA,EACA,gBAAA;AAAA,EACA,sBAAA;AAAA,EACA;AACF;;;;"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../src/index.ts"],"sourcesContent":["import { getUrlWithAppState } from './components/SceneApp/utils';\nimport { registerRuntimePanelPlugin } from './components/VizPanel/registerRuntimePanelPlugin';\nimport { cloneSceneObjectState } from './core/sceneGraph/cloneSceneObject';\nimport { registerRuntimeDataSource } from './querying/RuntimeDataSource';\nimport { getUrlState, syncStateFromSearchParams } from './services/utils';\nimport { buildPathIdFor } from './utils/pathId';\nimport { isRepeatCloneOrChildOf } from './utils/utils';\n\nimport { registerVariableMacro } from './variables/macros';\nimport {\n escapeLabelValueInExactSelector,\n escapeLabelValueInRegexSelector,\n escapeURLDelimiters,\n renderPrometheusLabelFilters,\n getVariableControlId,\n} from './variables/utils';\nimport {\n isAdHocVariable,\n isQueryVariable,\n isTextBoxVariable,\n isCustomVariable,\n isDataSourceVariable,\n isConstantVariable,\n isIntervalVariable,\n isGroupByVariable,\n isSwitchVariable,\n} from './variables/variants/guards';\n\nexport * from './core/types';\nexport * from './core/events';\nexport { sceneGraph } from './core/sceneGraph';\nexport { getClosest } from './core/sceneGraph/utils';\nexport * as behaviors from './behaviors';\nexport * as performanceUtils from './performance';\nexport { writePerformanceLog } from './utils/writePerformanceLog';\nexport * as dataLayers from './querying/layers';\n\nexport { SceneObjectBase, useSceneObjectState } from './core/SceneObjectBase';\nexport { SceneDataNode } from './core/SceneDataNode';\nexport { SceneTimeRange } from './core/SceneTimeRange';\nexport { SceneTimeZoneOverride } from './core/SceneTimeZoneOverride';\n\nexport { SceneQueryRunner, type QueryRunnerState } from './querying/SceneQueryRunner';\nexport { DataProviderProxy } from './querying/DataProviderProxy';\nexport {\n type ExtraQueryDescriptor,\n type ExtraQueryProvider,\n type ExtraQueryDataProcessor,\n} from './querying/ExtraQueryProvider';\nexport { SceneDataLayerSet, SceneDataLayerSetBase } from './querying/SceneDataLayerSet';\nexport { SceneDataLayerBase } from './querying/layers/SceneDataLayerBase';\nexport { SceneDataLayerControls } from './querying/layers/SceneDataLayerControls';\nexport { SceneDataTransformer, type SceneDataTransformerState } from './querying/SceneDataTransformer';\nexport { registerQueryWithController } from './querying/registerQueryWithController';\nexport { registerRuntimeDataSource, RuntimeDataSource } from './querying/RuntimeDataSource';\nexport type {\n SceneQueryControllerLike,\n SceneQueryControllerEntryType,\n SceneQueryControllerEntry,\n} from './behaviors/types';\n\nexport type { AdHocFilterInteractionHandler } from './core/sceneGraph/getReportInteractionHandler';\n\nexport * from './variables/types';\nexport { VariableDependencyConfig } from './variables/VariableDependencyConfig';\nexport { formatRegistry, type FormatVariable } from './variables/interpolation/formatRegistry';\nexport { VariableValueSelectors } from './variables/components/VariableValueSelectors';\nexport { VariableValueControl } from './variables/components/VariableValueControl';\nexport { SceneVariableSet } from './variables/sets/SceneVariableSet';\nexport { ConstantVariable } from './variables/variants/ConstantVariable';\nexport { CustomVariable } from './variables/variants/CustomVariable';\nexport { SwitchVariable } from './variables/variants/SwitchVariable';\nexport { DataSourceVariable } from './variables/variants/DataSourceVariable';\nexport { QueryVariable } from './variables/variants/query/QueryVariable';\nexport { TestVariable } from './variables/variants/TestVariable';\nexport { TextBoxVariable } from './variables/variants/TextBoxVariable';\nexport { ScopesVariable } from './variables/variants/ScopesVariable';\nexport {\n MultiValueVariable,\n type MultiValueVariableState,\n type VariableGetOptionsArgs,\n} from './variables/variants/MultiValueVariable';\nexport { LocalValueVariable } from './variables/variants/LocalValueVariable';\nexport { IntervalVariable } from './variables/variants/IntervalVariable';\nexport {\n AdHocFiltersVariable,\n OPERATORS,\n GROUP_BY_OPERATOR,\n isGroupByFilter,\n type OperatorDefinition,\n} from './variables/adhoc/AdHocFiltersVariable';\nexport type { AdHocFilterWithLabels } from './variables/adhoc/AdHocFiltersVariable';\nexport type {\n AdHocFiltersController,\n AdHocFiltersControllerState,\n} from './variables/adhoc/controller/AdHocFiltersController';\nexport { AdHocFiltersVariableController } from './variables/adhoc/controller/AdHocFiltersVariableController';\nexport { AdHocFiltersComboboxRenderer } from './variables/adhoc/AdHocFiltersCombobox/AdHocFiltersComboboxRenderer';\nexport { GroupByVariable } from './variables/groupby/GroupByVariable';\nexport { type MacroVariableConstructor } from './variables/macros/types';\nexport { escapeUrlPipeDelimiters, getQueriesForVariables } from './variables/utils';\n\nexport {\n type UrlSyncManagerLike,\n UrlSyncManager,\n NewSceneObjectAddedEvent,\n SceneObjectRemovedEvent,\n} from './services/UrlSyncManager';\nexport { useUrlSync } from './services/useUrlSync';\nexport { UrlSyncContextProvider } from './services/UrlSyncContextProvider';\nexport { SceneObjectUrlSyncConfig } from './services/SceneObjectUrlSyncConfig';\n\nexport { EmbeddedScene, type EmbeddedSceneState } from './components/EmbeddedScene';\nexport { VizPanel, type VizPanelState } from './components/VizPanel/VizPanel';\nexport { VizPanelMenu } from './components/VizPanel/VizPanelMenu';\nexport { VizPanelExploreButton } from './components/VizPanel/VizPanelExploreButton';\nexport { NestedScene } from './components/NestedScene';\nexport { SceneCanvasText } from './components/SceneCanvasText';\nexport { SceneToolbarButton, SceneToolbarInput } from './components/SceneToolbarButton';\nexport { SceneTimePicker } from './components/SceneTimePicker';\nexport { SceneRefreshPicker, type SceneRefreshPickerState } from './components/SceneRefreshPicker';\nexport { SceneTimeRangeTransformerBase } from './core/SceneTimeRangeTransformerBase';\nexport { SceneTimeRangeCompare } from './components/SceneTimeRangeCompare';\nexport { SceneByFrameRepeater } from './components/SceneByFrameRepeater';\nexport { SceneByVariableRepeater } from './components/SceneByVariableRepeater';\nexport { SceneControlsSpacer } from './components/SceneControlsSpacer';\nexport {\n SceneFlexLayout,\n SceneFlexItem,\n type SceneFlexItemPlacement,\n type SceneFlexItemState,\n type SceneFlexItemLike,\n} from './components/layout/SceneFlexLayout';\nexport { SceneCSSGridLayout, SceneCSSGridItem } from './components/layout/CSSGrid/SceneCSSGridLayout';\nexport { SceneGridLayout } from './components/layout/grid/SceneGridLayout';\nexport { SceneGridLayoutDragStartEvent } from './components/layout/grid/types';\nexport { GRID_CELL_HEIGHT, GRID_COLUMN_COUNT } from './components/layout/grid/constants';\nexport { SceneGridItem } from './components/layout/grid/SceneGridItem';\nexport { SceneGridRow } from './components/layout/grid/SceneGridRow';\nexport { type SceneGridItemStateLike, type SceneGridItemLike } from './components/layout/grid/types';\nexport { SplitLayout } from './components/layout/split/SplitLayout';\nexport { LazyLoader, type LazyLoaderMode } from './components/layout/LazyLoader';\nexport {\n type SceneAppPageLike,\n type SceneRouteMatch,\n type SceneAppPageState,\n type SceneAppDrilldownView,\n type SceneAppRoute,\n} from './components/SceneApp/types';\nexport { SceneApp, useSceneApp } from './components/SceneApp/SceneApp';\nexport { SceneAppPage } from './components/SceneApp/SceneAppPage';\nexport { SceneReactObject } from './components/SceneReactObject';\nexport { SceneObjectRef } from './core/SceneObjectRef';\nexport {\n PanelBuilders,\n PanelOptionsBuilders,\n FieldConfigBuilders,\n FieldConfigOverridesBuilder,\n} from './core/PanelBuilders';\nexport { FieldConfigBuilder } from './core/PanelBuilders/FieldConfigBuilder';\nexport { VizPanelBuilder } from './core/PanelBuilders/VizPanelBuilder';\nexport { SceneDebugger } from './components/SceneDebugger/SceneDebugger';\nexport { VariableValueSelectWrapper } from './variables/components/VariableValueSelectors';\nexport { ControlsLabel } from './utils/ControlsLabel';\nexport { MultiOrSingleValueSelect } from './variables/components/VariableValueSelect';\nexport { VizConfigBuilder } from './core/PanelBuilders/VizConfigBuilder';\nexport { VizConfigBuilders } from './core/PanelBuilders/VizConfigBuilders';\nexport { type VizConfig } from './core/PanelBuilders/types';\n\nexport const sceneUtils = {\n getUrlWithAppState,\n registerRuntimePanelPlugin,\n registerRuntimeDataSource,\n registerVariableMacro,\n cloneSceneObjectState,\n syncStateFromSearchParams,\n getUrlState,\n renderPrometheusLabelFilters,\n escapeLabelValueInRegexSelector,\n escapeLabelValueInExactSelector,\n escapeURLDelimiters,\n getVariableControlId,\n\n // Variable guards\n isAdHocVariable,\n isConstantVariable,\n isCustomVariable,\n isDataSourceVariable,\n isIntervalVariable,\n isQueryVariable,\n isTextBoxVariable,\n isGroupByVariable,\n isSwitchVariable,\n isRepeatCloneOrChildOf,\n buildPathIdFor,\n};\n\nexport { SafeSerializableSceneObject } from './utils/SafeSerializableSceneObject';\nexport { getExploreURL } from './utils/explore';\nexport { getCompareSeriesRefId } from './utils/getCompareSeriesRefId';\nexport { timeShiftAlignmentProcessor } from './utils/timeShiftAlignmentProcessor';\nexport { loadResources } from './utils/loadResources';\nexport { PATH_ID_SEPARATOR } from './utils/pathId';\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyKO,MAAM,UAAA,GAAa;AAAA,EACxB,kBAAA;AAAA,EACA,0BAAA;AAAA,EACA,yBAAA;AAAA,EACA,qBAAA;AAAA,EACA,qBAAA;AAAA,EACA,yBAAA;AAAA,EACA,WAAA;AAAA,EACA,4BAAA;AAAA,EACA,+BAAA;AAAA,EACA,+BAAA;AAAA,EACA,mBAAA;AAAA,EACA,oBAAA;AAAA;AAAA,EAGA,eAAA;AAAA,EACA,kBAAA;AAAA,EACA,gBAAA;AAAA,EACA,oBAAA;AAAA,EACA,kBAAA;AAAA,EACA,eAAA;AAAA,EACA,iBAAA;AAAA,EACA,iBAAA;AAAA,EACA,gBAAA;AAAA,EACA,sBAAA;AAAA,EACA;AACF;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getCompareSeriesRefId.js","sources":["../../../src/utils/getCompareSeriesRefId.ts"],"sourcesContent":["
|
|
1
|
+
{"version":3,"file":"getCompareSeriesRefId.js","sources":["../../../src/utils/getCompareSeriesRefId.ts"],"sourcesContent":["// Idempotent: compare queries may already carry the -compare suffix on their refId\n// (set at request time for cache identity), so re-applying must not double-suffix.\nexport const getCompareSeriesRefId = (refId: string) => (refId.endsWith('-compare') ? refId : `${refId}-compare`);\n"],"names":[],"mappings":"AAEO,MAAM,qBAAA,GAAwB,CAAC,KAAA,KAAmB,KAAA,CAAM,SAAS,UAAU,CAAA,GAAI,KAAA,GAAQ,CAAA,EAAG,KAAK,CAAA,QAAA;;;;"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { of } from 'rxjs';
|
|
2
|
+
import { getCompareSeriesRefId } from './getCompareSeriesRefId.js';
|
|
3
|
+
|
|
4
|
+
const timeShiftAlignmentProcessor = (primary, secondary) => {
|
|
5
|
+
const diff = secondary.timeRange.from.diff(primary.timeRange.from);
|
|
6
|
+
const series = secondary.series.map((frame) => ({
|
|
7
|
+
...frame,
|
|
8
|
+
refId: getCompareSeriesRefId(frame.refId || ""),
|
|
9
|
+
meta: {
|
|
10
|
+
...frame.meta,
|
|
11
|
+
timeCompare: {
|
|
12
|
+
diffMs: diff,
|
|
13
|
+
isTimeShiftQuery: true
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
}));
|
|
17
|
+
return of({ ...secondary, series });
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
export { timeShiftAlignmentProcessor };
|
|
21
|
+
//# sourceMappingURL=timeShiftAlignmentProcessor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timeShiftAlignmentProcessor.js","sources":["../../../src/utils/timeShiftAlignmentProcessor.ts"],"sourcesContent":["import { of } from 'rxjs';\n\nimport { ExtraQueryDataProcessor } from '../querying/ExtraQueryProvider';\nimport { getCompareSeriesRefId } from './getCompareSeriesRefId';\n\n// Processor function for use with time shifted comparison series.\n// This aligns the secondary series with the primary and adds custom\n// metadata and config to the secondary series' fields so that it is\n// rendered appropriately.\nexport const timeShiftAlignmentProcessor: ExtraQueryDataProcessor = (primary, secondary) => {\n const diff = secondary.timeRange.from.diff(primary.timeRange.from);\n // Build new frame objects rather than mutating secondary.series in place. With streaming/split-chunk\n // queries (e.g. Loki), the frame objects here are owned by the datasource's response accumulator and\n // get re-processed on every chunk - mutating refId in place made each re-processed chunk look like a\n // brand new series to the merge layer, appending duplicate compare series instead of replacing one.\n const series = secondary.series.map((frame) => ({\n ...frame,\n refId: getCompareSeriesRefId(frame.refId || ''),\n meta: {\n ...frame.meta,\n timeCompare: {\n diffMs: diff,\n isTimeShiftQuery: true,\n },\n },\n }));\n return of({ ...secondary, series });\n};\n"],"names":[],"mappings":";;;AASO,MAAM,2BAAA,GAAuD,CAAC,OAAA,EAAS,SAAA,KAAc;AAC1F,EAAA,MAAM,OAAO,SAAA,CAAU,SAAA,CAAU,KAAK,IAAA,CAAK,OAAA,CAAQ,UAAU,IAAI,CAAA;AAKjE,EAAA,MAAM,MAAA,GAAS,SAAA,CAAU,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,MAAW;AAAA,IAC9C,GAAG,KAAA;AAAA,IACH,KAAA,EAAO,qBAAA,CAAsB,KAAA,CAAM,KAAA,IAAS,EAAE,CAAA;AAAA,IAC9C,IAAA,EAAM;AAAA,MACJ,GAAG,KAAA,CAAM,IAAA;AAAA,MACT,WAAA,EAAa;AAAA,QACX,MAAA,EAAQ,IAAA;AAAA,QACR,gBAAA,EAAkB;AAAA;AACpB;AACF,GACF,CAAE,CAAA;AACF,EAAA,OAAO,EAAA,CAAG,EAAE,GAAG,SAAA,EAAW,QAAQ,CAAA;AACpC;;;;"}
|
package/dist/index.d.ts
CHANGED
|
@@ -3891,6 +3891,10 @@ declare class SafeSerializableSceneObject implements ScopedVar {
|
|
|
3891
3891
|
*/
|
|
3892
3892
|
declare function getExploreURL(data: PanelData, model: SceneObject, timeRange: RawTimeRange, transform?: (query: DataQuery) => DataQuery): Promise<string>;
|
|
3893
3893
|
|
|
3894
|
+
declare const getCompareSeriesRefId: (refId: string) => string;
|
|
3895
|
+
|
|
3896
|
+
declare const timeShiftAlignmentProcessor: ExtraQueryDataProcessor;
|
|
3897
|
+
|
|
3894
3898
|
/**
|
|
3895
3899
|
* Loads the translation resources for the given language and returns them.
|
|
3896
3900
|
*/
|
|
@@ -3956,5 +3960,5 @@ declare const sceneUtils: {
|
|
|
3956
3960
|
buildPathIdFor: typeof buildPathIdFor;
|
|
3957
3961
|
};
|
|
3958
3962
|
|
|
3959
|
-
export { AdHocFiltersComboboxRenderer, AdHocFiltersVariable, AdHocFiltersVariableController, ConstantVariable, ControlsLabel, CustomVariable, DataProviderProxy, DataSourceVariable, EmbeddedScene, FieldConfigBuilder, FieldConfigBuilders, FieldConfigOverridesBuilder, GRID_CELL_HEIGHT, GRID_COLUMN_COUNT, GROUP_BY_OPERATOR, GroupByVariable, IntervalVariable, LazyLoader, LocalValueVariable, MultiOrSingleValueSelect, MultiValueVariable, NestedScene, NewSceneObjectAddedEvent, OPERATORS, PATH_ID_SEPARATOR, PanelBuilders, PanelOptionsBuilders, QueryVariable, RuntimeDataSource, SafeSerializableSceneObject, SceneApp, SceneAppPage, SceneByFrameRepeater, SceneByVariableRepeater, SceneCSSGridItem, SceneCSSGridLayout, SceneCanvasText, SceneControlsSpacer, SceneDataLayerBase, SceneDataLayerControls, SceneDataLayerSet, SceneDataLayerSetBase, SceneDataNode, SceneDataTransformer, SceneDebugger, SceneFlexItem, SceneFlexLayout, SceneGridItem, SceneGridLayout, SceneGridLayoutDragStartEvent, SceneGridRow, SceneObjectBase, SceneObjectRef, SceneObjectRemovedEvent, SceneObjectStateChangedEvent, SceneObjectUrlSyncConfig, SceneQueryRunner, SceneReactObject, SceneRefreshPicker, SceneTimePicker, SceneTimeRange, SceneTimeRangeCompare, SceneTimeRangeTransformerBase, SceneTimeZoneOverride, SceneToolbarButton, SceneToolbarInput, SceneVariableSet, SceneVariableValueChangedEvent, ScopesVariable, SplitLayout, SwitchVariable, TestVariable, TextBoxVariable, UrlSyncContextProvider, UrlSyncManager, UserActionEvent, VariableDependencyConfig, VariableValueControl, VariableValueSelectWrapper, VariableValueSelectors, VizConfigBuilder, VizConfigBuilders, VizPanel, VizPanelBuilder, VizPanelExploreButton, VizPanelMenu, index$2 as behaviors, index as dataLayers, escapeUrlPipeDelimiters, formatRegistry, getClosest, getExploreURL, getQueriesForVariables, isCustomVariableValue, isDataLayer, isDataRequestEnricher, isFiltersRequestEnricher, isGroupByFilter, isSceneObject, loadResources, index$1 as performanceUtils, registerQueryWithController, registerRuntimeDataSource, sceneGraph, sceneUtils, useSceneApp, useSceneObjectState, useUrlSync, writePerformanceLog };
|
|
3963
|
+
export { AdHocFiltersComboboxRenderer, AdHocFiltersVariable, AdHocFiltersVariableController, ConstantVariable, ControlsLabel, CustomVariable, DataProviderProxy, DataSourceVariable, EmbeddedScene, FieldConfigBuilder, FieldConfigBuilders, FieldConfigOverridesBuilder, GRID_CELL_HEIGHT, GRID_COLUMN_COUNT, GROUP_BY_OPERATOR, GroupByVariable, IntervalVariable, LazyLoader, LocalValueVariable, MultiOrSingleValueSelect, MultiValueVariable, NestedScene, NewSceneObjectAddedEvent, OPERATORS, PATH_ID_SEPARATOR, PanelBuilders, PanelOptionsBuilders, QueryVariable, RuntimeDataSource, SafeSerializableSceneObject, SceneApp, SceneAppPage, SceneByFrameRepeater, SceneByVariableRepeater, SceneCSSGridItem, SceneCSSGridLayout, SceneCanvasText, SceneControlsSpacer, SceneDataLayerBase, SceneDataLayerControls, SceneDataLayerSet, SceneDataLayerSetBase, SceneDataNode, SceneDataTransformer, SceneDebugger, SceneFlexItem, SceneFlexLayout, SceneGridItem, SceneGridLayout, SceneGridLayoutDragStartEvent, SceneGridRow, SceneObjectBase, SceneObjectRef, SceneObjectRemovedEvent, SceneObjectStateChangedEvent, SceneObjectUrlSyncConfig, SceneQueryRunner, SceneReactObject, SceneRefreshPicker, SceneTimePicker, SceneTimeRange, SceneTimeRangeCompare, SceneTimeRangeTransformerBase, SceneTimeZoneOverride, SceneToolbarButton, SceneToolbarInput, SceneVariableSet, SceneVariableValueChangedEvent, ScopesVariable, SplitLayout, SwitchVariable, TestVariable, TextBoxVariable, UrlSyncContextProvider, UrlSyncManager, UserActionEvent, VariableDependencyConfig, VariableValueControl, VariableValueSelectWrapper, VariableValueSelectors, VizConfigBuilder, VizConfigBuilders, VizPanel, VizPanelBuilder, VizPanelExploreButton, VizPanelMenu, index$2 as behaviors, index as dataLayers, escapeUrlPipeDelimiters, formatRegistry, getClosest, getCompareSeriesRefId, getExploreURL, getQueriesForVariables, isCustomVariableValue, isDataLayer, isDataRequestEnricher, isFiltersRequestEnricher, isGroupByFilter, isSceneObject, loadResources, index$1 as performanceUtils, registerQueryWithController, registerRuntimeDataSource, sceneGraph, sceneUtils, timeShiftAlignmentProcessor, useSceneApp, useSceneObjectState, useUrlSync, writePerformanceLog };
|
|
3960
3964
|
export type { AdHocFilterInteractionHandler, AdHocFilterWithLabels, AdHocFiltersController, AdHocFiltersControllerState, CancelActivationHandler, ControlSourceRef, ControlsLayout, CustomFormatterVariable, CustomTransformOperator, CustomTransformerDefinition, CustomVariableValue, DataLayerFilter, DataRequestEnricher, DataSourceControlRef, DeepPartial, EmbeddedSceneState, ExtraQueryDataProcessor, ExtraQueryDescriptor, ExtraQueryProvider, FiltersRequestEnricher, FormatVariable, InterpolationFormatParameter, LazyLoaderMode, MacroVariableConstructor, MultiValueVariableState, OperatorDefinition, QueryRunnerState, SceneActivationHandler, SceneAppDrilldownView, SceneAppPageLike, SceneAppPageState, SceneAppRoute, SceneComponent, SceneComponentProps, SceneDataLayerProvider, SceneDataLayerProviderState, SceneDataProvider, SceneDataProviderResult, SceneDataQuery, SceneDataState, SceneDataTransformerState, SceneDeactivationHandler, SceneFlexItemLike, SceneFlexItemPlacement, SceneFlexItemState, SceneGridItemLike, SceneGridItemStateLike, SceneLayout, SceneLayoutChildOptions, SceneLayoutState, SceneObject, SceneObjectState, SceneObjectStateChangedPayload, SceneObjectUrlSyncHandler, SceneObjectUrlValue, SceneObjectUrlValues, SceneObjectWithUrlSync, SceneQueryControllerEntry, SceneQueryControllerEntryType, SceneQueryControllerLike, SceneRefreshPickerState, SceneRouteMatch, SceneStateChangedHandler, SceneStatelessBehavior, SceneTimeRangeLike, SceneTimeRangeState, SceneUrlSyncOptions, SceneVariable, SceneVariableDependencyConfigLike, SceneVariableSetState, SceneVariableState, SceneVariables, UrlSyncManagerLike, UseStateHookOptions, ValidateAndUpdateResult, VariableCustomFormatterFn, VariableGetOptionsArgs, VariableValue, VariableValueOption, VariableValueOptionProperties, VariableValueSingle, VizConfig, VizPanelState };
|
package/dist/index.js
CHANGED
|
@@ -5022,7 +5022,11 @@ class VizPanel extends SceneObjectBase {
|
|
|
5022
5022
|
...state
|
|
5023
5023
|
});
|
|
5024
5024
|
this._variableDependency = new VariableDependencyConfig(this, {
|
|
5025
|
-
statePaths: ["title", "options", "fieldConfig"]
|
|
5025
|
+
statePaths: ["title", "options", "fieldConfig"],
|
|
5026
|
+
onReferencedVariableValueChanged: () => {
|
|
5027
|
+
this.clearFieldConfigCache();
|
|
5028
|
+
this.forceRender();
|
|
5029
|
+
}
|
|
5026
5030
|
});
|
|
5027
5031
|
this._structureRev = 0;
|
|
5028
5032
|
this.onTimeRangeChange = (timeRange) => {
|
|
@@ -16526,7 +16530,23 @@ function isImageRenderer() {
|
|
|
16526
16530
|
return typeof window !== "undefined" && typeof window.__grafanaImageRendererMessageChannel === "function";
|
|
16527
16531
|
}
|
|
16528
16532
|
|
|
16529
|
-
const getCompareSeriesRefId = (refId) => `${refId}-compare`;
|
|
16533
|
+
const getCompareSeriesRefId = (refId) => refId.endsWith("-compare") ? refId : `${refId}-compare`;
|
|
16534
|
+
|
|
16535
|
+
const timeShiftAlignmentProcessor = (primary, secondary) => {
|
|
16536
|
+
const diff = secondary.timeRange.from.diff(primary.timeRange.from);
|
|
16537
|
+
const series = secondary.series.map((frame) => ({
|
|
16538
|
+
...frame,
|
|
16539
|
+
refId: getCompareSeriesRefId(frame.refId || ""),
|
|
16540
|
+
meta: {
|
|
16541
|
+
...frame.meta,
|
|
16542
|
+
timeCompare: {
|
|
16543
|
+
diffMs: diff,
|
|
16544
|
+
isTimeShiftQuery: true
|
|
16545
|
+
}
|
|
16546
|
+
}
|
|
16547
|
+
}));
|
|
16548
|
+
return rxjs.of({ ...secondary, series });
|
|
16549
|
+
};
|
|
16530
16550
|
|
|
16531
16551
|
const PREVIOUS_PERIOD_VALUE = "__previousPeriod";
|
|
16532
16552
|
const NO_PERIOD_VALUE = "__noPeriod";
|
|
@@ -16657,21 +16677,6 @@ class SceneTimeRangeCompare extends SceneObjectBase {
|
|
|
16657
16677
|
}
|
|
16658
16678
|
}
|
|
16659
16679
|
SceneTimeRangeCompare.Component = SceneTimeRangeCompareRenderer;
|
|
16660
|
-
const timeShiftAlignmentProcessor = (primary, secondary) => {
|
|
16661
|
-
const diff = secondary.timeRange.from.diff(primary.timeRange.from);
|
|
16662
|
-
secondary.series.forEach((series) => {
|
|
16663
|
-
series.refId = getCompareSeriesRefId(series.refId || "");
|
|
16664
|
-
series.meta = {
|
|
16665
|
-
...series.meta,
|
|
16666
|
-
// @ts-ignore Remove when https://github.com/grafana/grafana/pull/71129 is released
|
|
16667
|
-
timeCompare: {
|
|
16668
|
-
diffMs: diff,
|
|
16669
|
-
isTimeShiftQuery: true
|
|
16670
|
-
}
|
|
16671
|
-
};
|
|
16672
|
-
});
|
|
16673
|
-
return rxjs.of(secondary);
|
|
16674
|
-
};
|
|
16675
16680
|
function SceneTimeRangeCompareRenderer({ model }) {
|
|
16676
16681
|
var _a;
|
|
16677
16682
|
const styles = ui.useStyles2(getStyles$4);
|
|
@@ -18923,6 +18928,7 @@ exports.dataLayers = index;
|
|
|
18923
18928
|
exports.escapeUrlPipeDelimiters = escapeUrlPipeDelimiters;
|
|
18924
18929
|
exports.formatRegistry = formatRegistry;
|
|
18925
18930
|
exports.getClosest = getClosest;
|
|
18931
|
+
exports.getCompareSeriesRefId = getCompareSeriesRefId;
|
|
18926
18932
|
exports.getExploreURL = getExploreURL;
|
|
18927
18933
|
exports.getQueriesForVariables = getQueriesForVariables;
|
|
18928
18934
|
exports.isCustomVariableValue = isCustomVariableValue;
|
|
@@ -18937,6 +18943,7 @@ exports.registerQueryWithController = registerQueryWithController;
|
|
|
18937
18943
|
exports.registerRuntimeDataSource = registerRuntimeDataSource;
|
|
18938
18944
|
exports.sceneGraph = sceneGraph;
|
|
18939
18945
|
exports.sceneUtils = sceneUtils;
|
|
18946
|
+
exports.timeShiftAlignmentProcessor = timeShiftAlignmentProcessor;
|
|
18940
18947
|
exports.useSceneApp = useSceneApp;
|
|
18941
18948
|
exports.useSceneObjectState = useSceneObjectState;
|
|
18942
18949
|
exports.useUrlSync = useUrlSync;
|