/* eslint-disable */ import { css } from '@emotion/css'; import { GrafanaTheme2 } from '@grafana/data'; import { SceneComponentProps, SceneObjectBase, SceneObjectState, SceneObjectRef } from '@grafana/scenes'; import { Box, Button, CodeEditor, Drawer, useStyles2 } from '@grafana/ui'; import { DashboardScene } from '../scene/DashboardScene'; import { transformSceneToSaveModelSchemaV2 } from '../serialization/transformSceneToSaveModelSchemaV2'; interface SchemaV2EditorDrawerState extends SceneObjectState { dashboardRef: SceneObjectRef; jsonText: string; } export class SchemaV2EditorDrawer extends SceneObjectBase { constructor(state: Omit) { super({ ...state, jsonText: '', }); this.addActivationHandler(() => this.setState({ jsonText: this.getJsonText() })); } private getJsonText(): string { const dashboard = this.state.dashboardRef.resolve(); return JSON.stringify(transformSceneToSaveModelSchemaV2(dashboard), null, 2); } public onClose = () => { this.state.dashboardRef.resolve().setState({ overlay: undefined }); }; private onSave = () => { // TODO: uncomment when transformation is available // const manager = getDashboardScenePageStateManager(); // const dashboard = transformSceneToSaveModelSchemaV2({ // dashboard: JSON.parse(this.state.jsonText), // meta: this.state.dashboardRef.resolve().state.meta, // }); // manager.setState({ // dashboard, // }); }; static Component = ({ model }: SceneComponentProps) => { const { jsonText } = model.useState(); const styles = useStyles2(getStyles); const renderBody = () => { return (
model.setState({ jsonText: value })} /> { }
); }; return ( {renderBody()} ); }; } const getStyles = (theme: GrafanaTheme2) => ({ wrapper: css({ display: 'flex', height: '100%', flexDirection: 'column', gap: theme.spacing(2), }), codeEditor: css({ flexGrow: 1, }), }); /* eslint-enable */