import React, { PureComponent } from 'react'; import { BigValue, BigValueGraphMode, DataLinksContextMenu, VizRepeater, VizRepeaterRenderValueProps, BigValueTextMode, } from '@grafana/ui'; import { DisplayValueAlignmentFactors, FieldDisplay, getDisplayValueAlignmentFactors, getFieldDisplayValues, PanelProps, } from '@grafana/data'; import { config } from 'app/core/config'; import { StatPanelOptions } from './types'; import { DataLinksContextMenuApi } from '@grafana/ui/src/components/DataLinks/DataLinksContextMenu'; export class StatPanel extends PureComponent> { renderComponent = ( valueProps: VizRepeaterRenderValueProps, menuProps: DataLinksContextMenuApi ): JSX.Element => { const { timeRange, options } = this.props; const { value, alignmentFactors, width, height, count } = valueProps; const { openMenu, targetClassName } = menuProps; let sparkline = value.sparkline; if (sparkline) { sparkline.timeRange = timeRange; } return ( ); }; getTextMode() { const { options, fieldConfig, title } = this.props; // If we have manually set displayName or panel title switch text mode to value and name if (options.textMode === BigValueTextMode.Auto && (fieldConfig.defaults.displayName || !title)) { return BigValueTextMode.ValueAndName; } return options.textMode; } renderValue = (valueProps: VizRepeaterRenderValueProps): JSX.Element => { const { value } = valueProps; const { getLinks, hasLinks } = value; if (hasLinks && getLinks) { return ( {(api) => { return this.renderComponent(valueProps, api); }} ); } return this.renderComponent(valueProps, {}); }; getValues = (): FieldDisplay[] => { const { data, options, replaceVariables, fieldConfig, timeZone } = this.props; return getFieldDisplayValues({ fieldConfig, reduceOptions: options.reduceOptions, replaceVariables, theme: config.theme2, data: data.series, sparkline: options.graphMode !== BigValueGraphMode.None, timeZone, }); }; render() { const { height, options, width, data, renderCounter } = this.props; return ( ); } }