1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- import React, { PureComponent } from 'react';
- import { FieldDisplay, getFieldDisplayValues, PanelProps } from '@grafana/data';
- import { DataLinksContextMenu, Gauge, VizRepeater, VizRepeaterRenderValueProps } from '@grafana/ui';
- import { DataLinksContextMenuApi } from '@grafana/ui/src/components/DataLinks/DataLinksContextMenu';
- import { config } from 'app/core/config';
- import { clearNameForSingleSeries } from '../bargauge/BarGaugePanel';
- import { GaugeOptions } from './types';
- export class GaugePanel extends PureComponent<PanelProps<GaugeOptions>> {
- renderComponent = (
- valueProps: VizRepeaterRenderValueProps<FieldDisplay>,
- menuProps: DataLinksContextMenuApi
- ): JSX.Element => {
- const { options, fieldConfig } = this.props;
- const { width, height, count, value } = valueProps;
- const { field, display } = value;
- const { openMenu, targetClassName } = menuProps;
- return (
- <Gauge
- value={clearNameForSingleSeries(count, fieldConfig.defaults, display)}
- width={width}
- height={height}
- field={field}
- text={options.text}
- showThresholdLabels={options.showThresholdLabels}
- showThresholdMarkers={options.showThresholdMarkers}
- theme={config.theme}
- onClick={openMenu}
- className={targetClassName}
- />
- );
- };
- renderValue = (valueProps: VizRepeaterRenderValueProps<FieldDisplay>): JSX.Element => {
- const { value } = valueProps;
- const { getLinks, hasLinks } = value;
- if (hasLinks && getLinks) {
- return (
- <DataLinksContextMenu links={getLinks} config={value.field}>
- {(api) => {
- return this.renderComponent(valueProps, api);
- }}
- </DataLinksContextMenu>
- );
- }
- 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,
- timeZone,
- });
- };
- render() {
- const { height, width, data, renderCounter, options } = this.props;
- return (
- <VizRepeater
- getValues={this.getValues}
- renderValue={this.renderValue}
- width={width}
- height={height}
- source={data}
- autoGrid={true}
- renderCounter={renderCounter}
- orientation={options.orientation}
- />
- );
- }
- }
|