import { css } from '@emotion/css'; import { saveAs } from 'file-saver'; import React, { useCallback, useMemo } from 'react'; import AutoSizer from 'react-virtualized-auto-sizer'; import { Button, ClipboardButton, Stack, CodeEditor, Box } from '@grafana/ui'; import { DashboardScene } from '../scene/DashboardScene'; import { SaveDashboardDrawer } from './SaveDashboardDrawer'; import { SaveDashboardFormCommonOptions } from './SaveDashboardForm'; import { DashboardChangeInfo } from './shared'; export interface Props { dashboard: DashboardScene; drawer: SaveDashboardDrawer; changeInfo: DashboardChangeInfo; } export function SaveProvisionedDashboardForm({ dashboard, drawer, changeInfo }: Props) { const dashboardJSON = useMemo(() => JSON.stringify(changeInfo.changedSaveModel, null, 2), [changeInfo]); const saveToFile = useCallback(() => { const blob = new Blob([dashboardJSON], { type: 'application/json;charset=utf-8', }); saveAs(blob, changeInfo.changedSaveModel.title + '-' + new Date().getTime() + '.json'); }, [changeInfo.changedSaveModel, dashboardJSON]); return (
This dashboard cannot be saved from the Grafana UI because it has been provisioned from another source. Copy the JSON or save it to a file below, then you can update your dashboard in the provisioning source.
See{' '} documentation {' '} for more information about provisioning.

File path: {dashboard.state.meta.provisionedExternalId}
{({ height }) => ( 100} value={dashboardJSON} readOnly={true} /> )}
dashboardJSON}> Copy JSON to clipboard
); } const styles = { container: css({ height: '100%', display: 'flex', }), json: css({ flexGrow: 1, maxHeight: '800px', }), };