Files
grafana/public/app/features/dashboard/components/DashboardSettings/JsonEditorSettings.tsx
Ashley Harrison 28b336ac80 DockedMegaMenu: Clean up toggle and old code (#81878)
* remove toggle

* remove code not behind toggle

* remove old MegaMenu

* rename DockedMegaMenu -> MegaMenu and clean up go code

* fix backend test

* run yarn i18n:extract

* fix some unit tests

* fix remaining unit tests

* fix remaining e2e/unit tests
2024-02-06 13:43:11 +00:00

63 lines
1.9 KiB
TypeScript

import { css } from '@emotion/css';
import React, { useState } from 'react';
import { GrafanaTheme2 } from '@grafana/data';
import { Button, CodeEditor, useStyles2 } from '@grafana/ui';
import { Page } from 'app/core/components/Page/Page';
import { Trans } from 'app/core/internationalization';
import { dashboardWatcher } from 'app/features/live/dashboard/dashboardWatcher';
import { getDashboardSrv } from '../../services/DashboardSrv';
import { SettingsPageProps } from './types';
export function JsonEditorSettings({ dashboard, sectionNav }: SettingsPageProps) {
const [dashboardJson, setDashboardJson] = useState<string>(JSON.stringify(dashboard.getSaveModelClone(), null, 2));
const pageNav = sectionNav.node.parentItem;
const onClick = async () => {
await getDashboardSrv().saveJSONDashboard(dashboardJson);
dashboardWatcher.reloadPage();
};
const styles = useStyles2(getStyles);
return (
<Page navModel={sectionNav} pageNav={pageNav}>
<div className={styles.wrapper}>
<Trans i18nKey="dashboard-settings.json-editor.subtitle">
The JSON model below is the data structure that defines the dashboard. This includes dashboard settings, panel
settings, layout, queries, and so on.
</Trans>
<CodeEditor
value={dashboardJson}
language="json"
showMiniMap={true}
showLineNumbers={true}
onBlur={setDashboardJson}
containerStyles={styles.codeEditor}
/>
{dashboard.meta.canSave && (
<div>
<Button type="submit" onClick={onClick}>
<Trans i18nKey="dashboard-settings.json-editor.save-button">Save changes</Trans>
</Button>
</div>
)}
</div>
</Page>
);
}
const getStyles = (theme: GrafanaTheme2) => ({
wrapper: css({
display: 'flex',
height: '100%',
flexDirection: 'column',
gap: theme.spacing(2),
}),
codeEditor: css({
flexGrow: 1,
}),
});