import { FieldColorModeId, FieldConfigSource, PanelModel } from '@grafana/data'; import { sharedSingleStatPanelChangedHandler, BigValueGraphMode, BigValueColorMode } from '@grafana/ui'; import { BigValueTextMode } from '@grafana/ui/src/components/BigValue/BigValue'; import { StatPanelOptions } from './types'; // This is called when the panel changes from another panel export const statPanelChangedHandler = ( panel: PanelModel> | any, prevPluginId: string, prevOptions: any ) => { // This handles most config changes const options = sharedSingleStatPanelChangedHandler(panel, prevPluginId, prevOptions) as StatPanelOptions; // Changing from angular singlestat if (prevOptions.angular && (prevPluginId === 'singlestat' || prevPluginId === 'grafana-singlestat-panel')) { const oldOptions = prevOptions.angular; options.graphMode = BigValueGraphMode.None; if (oldOptions.sparkline && oldOptions.sparkline.show) { options.graphMode = BigValueGraphMode.Area; } if (oldOptions.colorBackground) { options.colorMode = BigValueColorMode.Background; } else if (oldOptions.colorValue) { options.colorMode = BigValueColorMode.Value; } else { options.colorMode = BigValueColorMode.None; if (oldOptions.sparkline?.lineColor && options.graphMode === BigValueGraphMode.Area) { const cfg: FieldConfigSource = panel.fieldConfig ?? {}; cfg.defaults.color = { mode: FieldColorModeId.Fixed, fixedColor: oldOptions.sparkline.lineColor, }; panel.fieldConfig = cfg; } } if (oldOptions.valueName === 'name') { options.textMode = BigValueTextMode.Name; } } return options; };