FieldConfig: Some name change suggestions and moving defaults to PanelPlugin (#23265)

* FieldConfig: Some name change suggestions and moving defaults to PanelPlugin

* More name changes
This commit is contained in:
Torkel Ödegaard
2020-04-02 13:24:50 +02:00
committed by GitHub
parent ce3a1fc56c
commit 61e6e41ead
11 changed files with 71 additions and 60 deletions

View File

@@ -12,4 +12,4 @@ export * from './datetime';
export * from './text'; export * from './text';
export * from './valueFormats'; export * from './valueFormats';
export * from './field'; export * from './field';
export { PanelPlugin, defaultStandardFieldConfigProperties } from './panel/PanelPlugin'; export { PanelPlugin } from './panel/PanelPlugin';

View File

@@ -1,7 +1,7 @@
import React from 'react'; import React from 'react';
import { identityOverrideProcessor, standardEditorsRegistry } from '../field'; import { identityOverrideProcessor, standardEditorsRegistry } from '../field';
import { PanelPlugin, standardFieldConfigProperties } from './PanelPlugin'; import { PanelPlugin, standardFieldConfigProperties } from './PanelPlugin';
import { StandardFieldConfigProperties } from '../types'; import { FieldConfigProperty } from '../types';
describe('PanelPlugin', () => { describe('PanelPlugin', () => {
describe('declarative options', () => { describe('declarative options', () => {
@@ -193,7 +193,7 @@ describe('PanelPlugin', () => {
return <div>Panel</div>; return <div>Panel</div>;
}); });
panel.useStandardFieldConfig([StandardFieldConfigProperties.Min, StandardFieldConfigProperties.Thresholds]); panel.useStandardFieldConfig([FieldConfigProperty.Min, FieldConfigProperty.Thresholds]);
expect(panel.standardFieldConfigProperties).toEqual(['min', 'thresholds']); expect(panel.standardFieldConfigProperties).toEqual(['min', 'thresholds']);
}); });
@@ -203,9 +203,9 @@ describe('PanelPlugin', () => {
return <div>Panel</div>; return <div>Panel</div>;
}); });
panel.useStandardFieldConfig([StandardFieldConfigProperties.Color, StandardFieldConfigProperties.Min], { panel.useStandardFieldConfig([FieldConfigProperty.Color, FieldConfigProperty.Min], {
[StandardFieldConfigProperties.Color]: '#ff00ff', [FieldConfigProperty.Color]: '#ff00ff',
[StandardFieldConfigProperties.Min]: 10, [FieldConfigProperty.Min]: 10,
}); });
expect(panel.standardFieldConfigProperties).toEqual(['color', 'min']); expect(panel.standardFieldConfigProperties).toEqual(['color', 'min']);
@@ -224,9 +224,9 @@ describe('PanelPlugin', () => {
return <div>Panel</div>; return <div>Panel</div>;
}); });
panel.useStandardFieldConfig([StandardFieldConfigProperties.Color], { panel.useStandardFieldConfig([FieldConfigProperty.Color], {
[StandardFieldConfigProperties.Color]: '#ff00ff', [FieldConfigProperty.Color]: '#ff00ff',
[StandardFieldConfigProperties.Min]: 10, [FieldConfigProperty.Min]: 10,
}); });
expect(panel.standardFieldConfigProperties).toEqual(['color']); expect(panel.standardFieldConfigProperties).toEqual(['color']);

View File

@@ -8,33 +8,45 @@ import {
PanelPluginMeta, PanelPluginMeta,
PanelProps, PanelProps,
PanelTypeChangedHandler, PanelTypeChangedHandler,
StandardFieldConfigProperties, FieldConfigProperty,
ThresholdsMode,
} from '../types'; } from '../types';
import { FieldConfigEditorBuilder, PanelOptionsEditorBuilder } from '../utils/OptionsUIBuilders'; import { FieldConfigEditorBuilder, PanelOptionsEditorBuilder } from '../utils/OptionsUIBuilders';
import { ComponentClass, ComponentType } from 'react'; import { ComponentClass, ComponentType } from 'react';
import set from 'lodash/set'; import set from 'lodash/set';
import { deprecationWarning } from '../utils'; import { deprecationWarning } from '../utils';
export const defaultStandardFieldConfigProperties: StandardFieldConfigProperties[] = [ export const allStandardFieldConfigProperties: FieldConfigProperty[] = [
StandardFieldConfigProperties.Min, FieldConfigProperty.Min,
StandardFieldConfigProperties.Max, FieldConfigProperty.Max,
StandardFieldConfigProperties.Title, FieldConfigProperty.Title,
StandardFieldConfigProperties.Unit, FieldConfigProperty.Unit,
StandardFieldConfigProperties.Decimals, FieldConfigProperty.Decimals,
StandardFieldConfigProperties.NoValue, FieldConfigProperty.NoValue,
StandardFieldConfigProperties.Color, FieldConfigProperty.Color,
StandardFieldConfigProperties.Thresholds, FieldConfigProperty.Thresholds,
StandardFieldConfigProperties.Mappings, FieldConfigProperty.Mappings,
StandardFieldConfigProperties.Links, FieldConfigProperty.Links,
]; ];
export const standardFieldConfigProperties = new Map(defaultStandardFieldConfigProperties.map(p => [p, undefined])); export const standardFieldConfigDefaults: Partial<Record<FieldConfigProperty, any>> = {
[FieldConfigProperty.Thresholds]: {
mode: ThresholdsMode.Absolute,
steps: [
{ value: -Infinity, color: 'green' },
{ value: 80, color: 'red' },
],
},
[FieldConfigProperty.Mappings]: [],
};
export const standardFieldConfigProperties = new Map(allStandardFieldConfigProperties.map(p => [p, undefined]));
export class PanelPlugin<TOptions = any, TFieldConfigOptions extends object = any> extends GrafanaPlugin< export class PanelPlugin<TOptions = any, TFieldConfigOptions extends object = any> extends GrafanaPlugin<
PanelPluginMeta PanelPluginMeta
> { > {
private _defaults?: TOptions; private _defaults?: TOptions;
private _standardFieldConfigProperties?: Map<StandardFieldConfigProperties, any>; private _standardFieldConfigProperties?: Map<FieldConfigProperty, any>;
private _fieldConfigDefaults: FieldConfigSource<TFieldConfigOptions> = { private _fieldConfigDefaults: FieldConfigSource<TFieldConfigOptions> = {
defaults: {}, defaults: {},
@@ -270,13 +282,13 @@ export class PanelPlugin<TOptions = any, TFieldConfigOptions extends object = an
* // when plugin should only display specific standard options * // when plugin should only display specific standard options
* // note, that options will be displayed in the order they are provided * // note, that options will be displayed in the order they are provided
* export const plugin = new PanelPlugin<ShapePanelOptions>(ShapePanel) * export const plugin = new PanelPlugin<ShapePanelOptions>(ShapePanel)
* .useStandardFieldConfig([StandardFieldConfigProperties.Min, StandardFieldConfigProperties.Max, StandardFieldConfigProperties.Links]); * .useStandardFieldConfig([FieldConfigProperty.Min, FieldConfigProperty.Max, FieldConfigProperty.Links]);
* *
* // when standard option's default value needs to be provided * // when standard option's default value needs to be provided
* export const plugin = new PanelPlugin<ShapePanelOptions>(ShapePanel) * export const plugin = new PanelPlugin<ShapePanelOptions>(ShapePanel)
* .useStandardFieldConfig([StandardFieldConfigProperties.Min, StandardFieldConfigProperties.Max], { * .useStandardFieldConfig([FieldConfigProperty.Min, FieldConfigProperty.Max], {
* [StandardFieldConfigProperties.Min]: 20, * [FieldConfigProperty.Min]: 20,
* [StandardFieldConfigProperties.Max]: 100 * [FieldConfigProperty.Max]: 100
* }); * });
* *
* ``` * ```
@@ -284,8 +296,8 @@ export class PanelPlugin<TOptions = any, TFieldConfigOptions extends object = an
* @public * @public
*/ */
useStandardFieldConfig( useStandardFieldConfig(
properties?: StandardFieldConfigProperties[], properties?: FieldConfigProperty[] | null,
defauls?: Partial<Record<StandardFieldConfigProperties, any>> customDefaults?: Partial<Record<FieldConfigProperty, any>>
) { ) {
if (!properties) { if (!properties) {
this._standardFieldConfigProperties = standardFieldConfigProperties; this._standardFieldConfigProperties = standardFieldConfigProperties;
@@ -294,13 +306,12 @@ export class PanelPlugin<TOptions = any, TFieldConfigOptions extends object = an
this._standardFieldConfigProperties = new Map(properties.map(p => [p, standardFieldConfigProperties.get(p)])); this._standardFieldConfigProperties = new Map(properties.map(p => [p, standardFieldConfigProperties.get(p)]));
} }
if (defauls) { const defaults = customDefaults ?? standardFieldConfigDefaults;
Object.keys(defauls).map(k => {
if (properties.indexOf(k as StandardFieldConfigProperties) > -1) { if (defaults) {
this._standardFieldConfigProperties!.set( Object.keys(defaults).map(k => {
k as StandardFieldConfigProperties, if (properties.indexOf(k as FieldConfigProperty) > -1) {
defauls[k as StandardFieldConfigProperties] this._standardFieldConfigProperties!.set(k as FieldConfigProperty, defaults[k as FieldConfigProperty]);
);
} }
}); });
} }

View File

@@ -88,7 +88,7 @@ export interface ApplyFieldOverrideOptions {
custom?: FieldConfigEditorRegistry; custom?: FieldConfigEditorRegistry;
} }
export enum StandardFieldConfigProperties { export enum FieldConfigProperty {
Unit = 'unit', Unit = 'unit',
Min = 'min', Min = 'min',
Max = 'max', Max = 'max',

View File

@@ -8,7 +8,7 @@ import {
standardFieldConfigEditorRegistry, standardFieldConfigEditorRegistry,
PanelPlugin, PanelPlugin,
SelectableValue, SelectableValue,
StandardFieldConfigProperties, FieldConfigProperty,
} from '@grafana/data'; } from '@grafana/data';
import { Forms, fieldMatchersUI, ValuePicker, useTheme } from '@grafana/ui'; import { Forms, fieldMatchersUI, ValuePicker, useTheme } from '@grafana/ui';
import { getDataLinksVariableSuggestions } from '../../../panel/panellinks/link_srv'; import { getDataLinksVariableSuggestions } from '../../../panel/panellinks/link_srv';
@@ -18,7 +18,7 @@ import { css } from 'emotion';
interface Props { interface Props {
plugin: PanelPlugin; plugin: PanelPlugin;
config: FieldConfigSource; config: FieldConfigSource;
include?: StandardFieldConfigProperties[]; // Ordered list of which fields should be shown/included include?: FieldConfigProperty[]; // Ordered list of which fields should be shown/included
onChange: (config: FieldConfigSource) => void; onChange: (config: FieldConfigSource) => void;
/* Helpful for IntelliSense */ /* Helpful for IntelliSense */
data: DataFrame[]; data: DataFrame[];

View File

@@ -1,6 +1,6 @@
import { PanelModel } from './PanelModel'; import { PanelModel } from './PanelModel';
import { getPanelPlugin } from '../../plugins/__mocks__/pluginMocks'; import { getPanelPlugin } from '../../plugins/__mocks__/pluginMocks';
import { PanelProps, StandardFieldConfigProperties } from '@grafana/data'; import { PanelProps, FieldConfigProperty } from '@grafana/data';
import { ComponentClass } from 'react'; import { ComponentClass } from 'react';
class TablePanelCtrl {} class TablePanelCtrl {}
@@ -79,9 +79,9 @@ describe('PanelModel', () => {
TablePanelCtrl // angular TablePanelCtrl // angular
); );
panelPlugin.setDefaults(defaultOptionsMock); panelPlugin.setDefaults(defaultOptionsMock);
panelPlugin.useStandardFieldConfig([StandardFieldConfigProperties.Unit, StandardFieldConfigProperties.Decimals], { panelPlugin.useStandardFieldConfig([FieldConfigProperty.Unit, FieldConfigProperty.Decimals], {
[StandardFieldConfigProperties.Unit]: 'flop', [FieldConfigProperty.Unit]: 'flop',
[StandardFieldConfigProperties.Decimals]: 2, [FieldConfigProperty.Decimals]: 2,
}); });
model.pluginLoaded(panelPlugin); model.pluginLoaded(panelPlugin);
}); });

View File

@@ -1,8 +1,8 @@
import { sharedSingleStatPanelChangedHandler } from '@grafana/ui'; import { sharedSingleStatPanelChangedHandler } from '@grafana/ui';
import { defaultStandardFieldConfigProperties, PanelPlugin } from '@grafana/data'; import { PanelPlugin } from '@grafana/data';
import { BarGaugePanel } from './BarGaugePanel'; import { BarGaugePanel } from './BarGaugePanel';
import { BarGaugeOptions, defaults } from './types'; import { BarGaugeOptions, defaults } from './types';
import { standardFieldConfigDefaults, addStandardDataReduceOptions } from '../stat/types'; import { addStandardDataReduceOptions } from '../stat/types';
import { BarGaugePanelEditor } from './BarGaugePanelEditor'; import { BarGaugePanelEditor } from './BarGaugePanelEditor';
import { barGaugePanelMigrationHandler } from './BarGaugeMigrations'; import { barGaugePanelMigrationHandler } from './BarGaugeMigrations';
@@ -33,4 +33,4 @@ export const plugin = new PanelPlugin<BarGaugeOptions>(BarGaugePanel)
}) })
.setPanelChangeHandler(sharedSingleStatPanelChangedHandler) .setPanelChangeHandler(sharedSingleStatPanelChangedHandler)
.setMigrationHandler(barGaugePanelMigrationHandler) .setMigrationHandler(barGaugePanelMigrationHandler)
.useStandardFieldConfig(defaultStandardFieldConfigProperties, standardFieldConfigDefaults); .useStandardFieldConfig();

View File

@@ -1,8 +1,8 @@
import { defaultStandardFieldConfigProperties, PanelPlugin } from '@grafana/data'; import { PanelPlugin } from '@grafana/data';
import { GaugePanelEditor } from './GaugePanelEditor'; import { GaugePanelEditor } from './GaugePanelEditor';
import { GaugePanel } from './GaugePanel'; import { GaugePanel } from './GaugePanel';
import { GaugeOptions, defaults } from './types'; import { GaugeOptions, defaults } from './types';
import { standardFieldConfigDefaults, addStandardDataReduceOptions } from '../stat/types'; import { addStandardDataReduceOptions } from '../stat/types';
import { gaugePanelMigrationHandler, gaugePanelChangedHandler } from './GaugeMigrations'; import { gaugePanelMigrationHandler, gaugePanelChangedHandler } from './GaugeMigrations';
export const plugin = new PanelPlugin<GaugeOptions>(GaugePanel) export const plugin = new PanelPlugin<GaugeOptions>(GaugePanel)
@@ -25,4 +25,4 @@ export const plugin = new PanelPlugin<GaugeOptions>(GaugePanel)
}) })
.setPanelChangeHandler(gaugePanelChangedHandler) .setPanelChangeHandler(gaugePanelChangedHandler)
.setMigrationHandler(gaugePanelMigrationHandler) .setMigrationHandler(gaugePanelMigrationHandler)
.useStandardFieldConfig(defaultStandardFieldConfigProperties, standardFieldConfigDefaults); .useStandardFieldConfig();

View File

@@ -1,11 +1,11 @@
import { defaultStandardFieldConfigProperties, PanelPlugin, StandardFieldConfigProperties } from '@grafana/data'; import { PanelPlugin, FieldConfigProperty } from '@grafana/data';
import { PieChartPanelEditor } from './PieChartPanelEditor'; import { PieChartPanelEditor } from './PieChartPanelEditor';
import { PieChartPanel } from './PieChartPanel'; import { PieChartPanel } from './PieChartPanel';
import { PieChartOptions, defaults } from './types'; import { PieChartOptions, defaults } from './types';
export const plugin = new PanelPlugin<PieChartOptions>(PieChartPanel) export const plugin = new PanelPlugin<PieChartOptions>(PieChartPanel)
.setDefaults(defaults) .setDefaults(defaults)
.useStandardFieldConfig(defaultStandardFieldConfigProperties, { .useStandardFieldConfig(null, {
[StandardFieldConfigProperties.Unit]: 'short', [FieldConfigProperty.Unit]: 'short',
}) })
.setEditor(PieChartPanelEditor); .setEditor(PieChartPanelEditor);

View File

@@ -1,6 +1,6 @@
import { sharedSingleStatMigrationHandler, sharedSingleStatPanelChangedHandler } from '@grafana/ui'; import { sharedSingleStatMigrationHandler, sharedSingleStatPanelChangedHandler } from '@grafana/ui';
import { defaultStandardFieldConfigProperties, PanelPlugin } from '@grafana/data'; import { PanelPlugin } from '@grafana/data';
import { StatPanelOptions, defaults, standardFieldConfigDefaults, addStandardDataReduceOptions } from './types'; import { StatPanelOptions, defaults, addStandardDataReduceOptions } from './types';
import { StatPanel } from './StatPanel'; import { StatPanel } from './StatPanel';
import { StatPanelEditor } from './StatPanelEditor'; import { StatPanelEditor } from './StatPanelEditor';
@@ -48,4 +48,4 @@ export const plugin = new PanelPlugin<StatPanelOptions>(StatPanel)
.setNoPadding() .setNoPadding()
.setPanelChangeHandler(sharedSingleStatPanelChangedHandler) .setPanelChangeHandler(sharedSingleStatPanelChangedHandler)
.setMigrationHandler(sharedSingleStatMigrationHandler) .setMigrationHandler(sharedSingleStatMigrationHandler)
.useStandardFieldConfig(defaultStandardFieldConfigProperties, standardFieldConfigDefaults); .useStandardFieldConfig();

View File

@@ -6,7 +6,7 @@ import {
SelectableValue, SelectableValue,
ThresholdsMode, ThresholdsMode,
standardEditorsRegistry, standardEditorsRegistry,
StandardFieldConfigProperties, FieldConfigProperty,
} from '@grafana/data'; } from '@grafana/data';
import { PanelOptionsEditorBuilder } from '@grafana/data/src/utils/OptionsUIBuilders'; import { PanelOptionsEditorBuilder } from '@grafana/data/src/utils/OptionsUIBuilders';
@@ -37,15 +37,15 @@ export const commonValueOptionDefaults: ReduceDataOptions = {
calcs: [ReducerID.mean], calcs: [ReducerID.mean],
}; };
export const standardFieldConfigDefaults: Partial<Record<StandardFieldConfigProperties, any>> = { export const standardFieldConfigDefaults: Partial<Record<FieldConfigProperty, any>> = {
[StandardFieldConfigProperties.Thresholds]: { [FieldConfigProperty.Thresholds]: {
mode: ThresholdsMode.Absolute, mode: ThresholdsMode.Absolute,
steps: [ steps: [
{ value: -Infinity, color: 'green' }, { value: -Infinity, color: 'green' },
{ value: 80, color: 'red' }, // 80% { value: 80, color: 'red' },
], ],
}, },
[StandardFieldConfigProperties.Mappings]: [], [FieldConfigProperty.Mappings]: [],
}; };
export function addStandardDataReduceOptions(builder: PanelOptionsEditorBuilder<StatPanelOptions>) { export function addStandardDataReduceOptions(builder: PanelOptionsEditorBuilder<StatPanelOptions>) {