mirror of
https://github.com/grafana/grafana.git
synced 2025-02-12 16:45:43 -06:00
56 lines
1.3 KiB
TypeScript
56 lines
1.3 KiB
TypeScript
import {
|
|
getUrlSyncManager,
|
|
SceneGridItem,
|
|
SceneObject,
|
|
SceneObjectBase,
|
|
SceneObjectState,
|
|
SceneObjectStateChangedEvent,
|
|
} from '@grafana/scenes';
|
|
|
|
import { DashboardSceneRenderer } from './DashboardSceneRenderer';
|
|
|
|
export interface DashboardSceneState extends SceneObjectState {
|
|
title: string;
|
|
uid?: string;
|
|
body: SceneObject;
|
|
actions?: SceneObject[];
|
|
controls?: SceneObject[];
|
|
isEditing?: boolean;
|
|
isDirty?: boolean;
|
|
}
|
|
|
|
export class DashboardScene extends SceneObjectBase<DashboardSceneState> {
|
|
static Component = DashboardSceneRenderer;
|
|
|
|
constructor(state: DashboardSceneState) {
|
|
super(state);
|
|
|
|
this.addActivationHandler(() => {
|
|
return () => getUrlSyncManager().cleanUp(this);
|
|
});
|
|
|
|
this.subscribeToEvent(SceneObjectStateChangedEvent, this.onChildStateChanged);
|
|
}
|
|
|
|
onChildStateChanged = (event: SceneObjectStateChangedEvent) => {
|
|
// Temporary hacky way to detect changes
|
|
if (event.payload.changedObject instanceof SceneGridItem) {
|
|
this.setState({ isDirty: true });
|
|
}
|
|
};
|
|
|
|
initUrlSync() {
|
|
getUrlSyncManager().initSync(this);
|
|
}
|
|
|
|
onEnterEditMode = () => {
|
|
this.setState({ isEditing: true });
|
|
};
|
|
|
|
onDiscard = () => {
|
|
// TODO open confirm modal if dirty
|
|
// TODO actually discard changes
|
|
this.setState({ isEditing: false });
|
|
};
|
|
}
|