mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
DashboardScene: Use TimeRangeTransformerBase in PanelTimeRange (#74647)
This commit is contained in:
parent
8ee43f3705
commit
7718a67b77
@ -5,9 +5,9 @@ import { dateMath, getDefaultTimeRange, GrafanaTheme2, rangeUtil, TimeRange } fr
|
|||||||
import {
|
import {
|
||||||
SceneComponentProps,
|
SceneComponentProps,
|
||||||
sceneGraph,
|
sceneGraph,
|
||||||
SceneObjectBase,
|
|
||||||
SceneTimeRangeLike,
|
SceneTimeRangeLike,
|
||||||
SceneTimeRangeState,
|
SceneTimeRangeState,
|
||||||
|
SceneTimeRangeTransformerBase,
|
||||||
} from '@grafana/scenes';
|
} from '@grafana/scenes';
|
||||||
import { Icon, PanelChrome, TimePickerTooltip, Tooltip, useStyles2 } from '@grafana/ui';
|
import { Icon, PanelChrome, TimePickerTooltip, Tooltip, useStyles2 } from '@grafana/ui';
|
||||||
import { TimeOverrideResult } from 'app/features/dashboard/utils/panel';
|
import { TimeOverrideResult } from 'app/features/dashboard/utils/panel';
|
||||||
@ -19,7 +19,7 @@ interface PanelTimeRangeState extends SceneTimeRangeState {
|
|||||||
timeInfo?: string;
|
timeInfo?: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
export class PanelTimeRange extends SceneObjectBase<PanelTimeRangeState> implements SceneTimeRangeLike {
|
export class PanelTimeRange extends SceneTimeRangeTransformerBase<PanelTimeRangeState> implements SceneTimeRangeLike {
|
||||||
public static Component = PanelTimeRangeRenderer;
|
public static Component = PanelTimeRangeRenderer;
|
||||||
|
|
||||||
public constructor(state: Partial<PanelTimeRangeState> = {}) {
|
public constructor(state: Partial<PanelTimeRangeState> = {}) {
|
||||||
@ -30,8 +30,11 @@ export class PanelTimeRange extends SceneObjectBase<PanelTimeRangeState> impleme
|
|||||||
to: 'now',
|
to: 'now',
|
||||||
value: getDefaultTimeRange(),
|
value: getDefaultTimeRange(),
|
||||||
});
|
});
|
||||||
|
}
|
||||||
|
|
||||||
this.addActivationHandler(() => this._activationHandler());
|
protected ancestorTimeRangeChanged(timeRange: SceneTimeRangeState): void {
|
||||||
|
const overrideResult = this.getTimeOverride(timeRange.value);
|
||||||
|
this.setState({ value: overrideResult.timeRange, timeInfo: overrideResult.timeInfo });
|
||||||
}
|
}
|
||||||
|
|
||||||
private getTimeOverride(parentTimeRange: TimeRange): TimeOverrideResult {
|
private getTimeOverride(parentTimeRange: TimeRange): TimeOverrideResult {
|
||||||
@ -77,45 +80,6 @@ export class PanelTimeRange extends SceneObjectBase<PanelTimeRangeState> impleme
|
|||||||
|
|
||||||
return newTimeData;
|
return newTimeData;
|
||||||
}
|
}
|
||||||
|
|
||||||
private _activationHandler(): void {
|
|
||||||
const parentTimeRange = this.getParentTimeRange();
|
|
||||||
|
|
||||||
this._subs.add(parentTimeRange.subscribeToState((state) => this.handleParentTimeRangeChanged(state.value)));
|
|
||||||
|
|
||||||
this.handleParentTimeRangeChanged(parentTimeRange.state.value);
|
|
||||||
}
|
|
||||||
|
|
||||||
private handleParentTimeRangeChanged(parentTimeRange: TimeRange) {
|
|
||||||
const overrideResult = this.getTimeOverride(parentTimeRange);
|
|
||||||
this.setState({ value: overrideResult.timeRange, timeInfo: overrideResult.timeInfo });
|
|
||||||
}
|
|
||||||
|
|
||||||
private getParentTimeRange(): SceneTimeRangeLike {
|
|
||||||
if (!this.parent || !this.parent.parent) {
|
|
||||||
throw new Error('Missing parent');
|
|
||||||
}
|
|
||||||
|
|
||||||
// Need to go up two levels otherwise we will get ourselves
|
|
||||||
return sceneGraph.getTimeRange(this.parent.parent);
|
|
||||||
}
|
|
||||||
|
|
||||||
public onTimeRangeChange = (timeRange: TimeRange) => {
|
|
||||||
const parentTimeRange = this.getParentTimeRange();
|
|
||||||
parentTimeRange.onTimeRangeChange(timeRange);
|
|
||||||
};
|
|
||||||
|
|
||||||
public onRefresh(): void {
|
|
||||||
this.getParentTimeRange().onRefresh();
|
|
||||||
}
|
|
||||||
|
|
||||||
public onTimeZoneChange(timeZone: string): void {
|
|
||||||
this.getParentTimeRange().onTimeZoneChange(timeZone);
|
|
||||||
}
|
|
||||||
|
|
||||||
public getTimeZone(): string {
|
|
||||||
return this.getParentTimeRange().getTimeZone();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function PanelTimeRangeRenderer({ model }: SceneComponentProps<PanelTimeRange>) {
|
function PanelTimeRangeRenderer({ model }: SceneComponentProps<PanelTimeRange>) {
|
||||||
|
Loading…
Reference in New Issue
Block a user