fix: datatrails verify different time range before creating new history node (#81839)

fix: datatrails verify different time range
This commit is contained in:
Darren Janeczek 2024-02-03 10:20:04 -05:00 committed by GitHub
parent ba3ee60711
commit bd0fd21852
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 26 additions and 2 deletions

View File

@ -15,7 +15,7 @@ import { useStyles2, Tooltip, Stack } from '@grafana/ui';
import { DataTrail, DataTrailState } from './DataTrail';
import { VAR_FILTERS } from './shared';
import { getTrailFor } from './utils';
import { getTrailFor, isSceneTimeRangeState } from './utils';
export interface DataTrailsHistoryState extends SceneObjectState {
currentStep: number;
@ -68,6 +68,14 @@ export class DataTrailHistory extends SceneObjectBase<DataTrailsHistoryState> {
trail.subscribeToEvent(SceneObjectStateChangedEvent, (evt) => {
if (evt.payload.changedObject instanceof SceneTimeRange) {
const { prevState, newState } = evt.payload;
if (isSceneTimeRangeState(prevState) && isSceneTimeRangeState(newState)) {
if (prevState.from === newState.from && prevState.to === newState.to) {
return;
}
}
this.addTrailStep(trail, 'time');
}
});

View File

@ -1,6 +1,13 @@
import { urlUtil } from '@grafana/data';
import { config, getDataSourceSrv } from '@grafana/runtime';
import { getUrlSyncManager, sceneGraph, SceneObject, SceneObjectUrlValues, SceneTimeRange } from '@grafana/scenes';
import {
getUrlSyncManager,
sceneGraph,
SceneObject,
SceneObjectState,
SceneObjectUrlValues,
SceneTimeRange,
} from '@grafana/scenes';
import { getDatasourceSrv } from '../plugins/datasource_srv';
@ -89,3 +96,12 @@ export function getColorByIndex(index: number) {
const visTheme = config.theme2.visualization;
return visTheme.getColorByName(visTheme.palette[index % 8]);
}
export type SceneTimeRangeState = SceneObjectState & {
from: string;
to: string;
};
export function isSceneTimeRangeState(state: SceneObjectState): state is SceneTimeRangeState {
const keys = Object.keys(state);
return keys.includes('from') && keys.includes('to');
}