diff --git a/packages/grafana-data/src/index.ts b/packages/grafana-data/src/index.ts index 8581614c40e..43a488d7095 100644 --- a/packages/grafana-data/src/index.ts +++ b/packages/grafana-data/src/index.ts @@ -12,4 +12,4 @@ export * from './datetime'; export * from './text'; export * from './valueFormats'; export * from './field'; -export { PanelPlugin, defaultStandardFieldConfigProperties } from './panel/PanelPlugin'; +export { PanelPlugin } from './panel/PanelPlugin'; diff --git a/packages/grafana-data/src/panel/PanelPlugin.test.tsx b/packages/grafana-data/src/panel/PanelPlugin.test.tsx index 1b272d20759..66ea67c2526 100644 --- a/packages/grafana-data/src/panel/PanelPlugin.test.tsx +++ b/packages/grafana-data/src/panel/PanelPlugin.test.tsx @@ -1,7 +1,7 @@ import React from 'react'; import { identityOverrideProcessor, standardEditorsRegistry } from '../field'; import { PanelPlugin, standardFieldConfigProperties } from './PanelPlugin'; -import { StandardFieldConfigProperties } from '../types'; +import { FieldConfigProperty } from '../types'; describe('PanelPlugin', () => { describe('declarative options', () => { @@ -193,7 +193,7 @@ describe('PanelPlugin', () => { return
Panel
; }); - panel.useStandardFieldConfig([StandardFieldConfigProperties.Min, StandardFieldConfigProperties.Thresholds]); + panel.useStandardFieldConfig([FieldConfigProperty.Min, FieldConfigProperty.Thresholds]); expect(panel.standardFieldConfigProperties).toEqual(['min', 'thresholds']); }); @@ -203,9 +203,9 @@ describe('PanelPlugin', () => { return
Panel
; }); - panel.useStandardFieldConfig([StandardFieldConfigProperties.Color, StandardFieldConfigProperties.Min], { - [StandardFieldConfigProperties.Color]: '#ff00ff', - [StandardFieldConfigProperties.Min]: 10, + panel.useStandardFieldConfig([FieldConfigProperty.Color, FieldConfigProperty.Min], { + [FieldConfigProperty.Color]: '#ff00ff', + [FieldConfigProperty.Min]: 10, }); expect(panel.standardFieldConfigProperties).toEqual(['color', 'min']); @@ -224,9 +224,9 @@ describe('PanelPlugin', () => { return
Panel
; }); - panel.useStandardFieldConfig([StandardFieldConfigProperties.Color], { - [StandardFieldConfigProperties.Color]: '#ff00ff', - [StandardFieldConfigProperties.Min]: 10, + panel.useStandardFieldConfig([FieldConfigProperty.Color], { + [FieldConfigProperty.Color]: '#ff00ff', + [FieldConfigProperty.Min]: 10, }); expect(panel.standardFieldConfigProperties).toEqual(['color']); diff --git a/packages/grafana-data/src/panel/PanelPlugin.ts b/packages/grafana-data/src/panel/PanelPlugin.ts index 89c64721da6..c382b932c04 100644 --- a/packages/grafana-data/src/panel/PanelPlugin.ts +++ b/packages/grafana-data/src/panel/PanelPlugin.ts @@ -8,33 +8,45 @@ import { PanelPluginMeta, PanelProps, PanelTypeChangedHandler, - StandardFieldConfigProperties, + FieldConfigProperty, + ThresholdsMode, } from '../types'; import { FieldConfigEditorBuilder, PanelOptionsEditorBuilder } from '../utils/OptionsUIBuilders'; import { ComponentClass, ComponentType } from 'react'; import set from 'lodash/set'; import { deprecationWarning } from '../utils'; -export const defaultStandardFieldConfigProperties: StandardFieldConfigProperties[] = [ - StandardFieldConfigProperties.Min, - StandardFieldConfigProperties.Max, - StandardFieldConfigProperties.Title, - StandardFieldConfigProperties.Unit, - StandardFieldConfigProperties.Decimals, - StandardFieldConfigProperties.NoValue, - StandardFieldConfigProperties.Color, - StandardFieldConfigProperties.Thresholds, - StandardFieldConfigProperties.Mappings, - StandardFieldConfigProperties.Links, +export const allStandardFieldConfigProperties: FieldConfigProperty[] = [ + FieldConfigProperty.Min, + FieldConfigProperty.Max, + FieldConfigProperty.Title, + FieldConfigProperty.Unit, + FieldConfigProperty.Decimals, + FieldConfigProperty.NoValue, + FieldConfigProperty.Color, + FieldConfigProperty.Thresholds, + FieldConfigProperty.Mappings, + FieldConfigProperty.Links, ]; -export const standardFieldConfigProperties = new Map(defaultStandardFieldConfigProperties.map(p => [p, undefined])); +export const standardFieldConfigDefaults: Partial> = { + [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 extends GrafanaPlugin< PanelPluginMeta > { private _defaults?: TOptions; - private _standardFieldConfigProperties?: Map; + private _standardFieldConfigProperties?: Map; private _fieldConfigDefaults: FieldConfigSource = { defaults: {}, @@ -270,13 +282,13 @@ export class PanelPlugin(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 * export const plugin = new PanelPlugin(ShapePanel) - * .useStandardFieldConfig([StandardFieldConfigProperties.Min, StandardFieldConfigProperties.Max], { - * [StandardFieldConfigProperties.Min]: 20, - * [StandardFieldConfigProperties.Max]: 100 + * .useStandardFieldConfig([FieldConfigProperty.Min, FieldConfigProperty.Max], { + * [FieldConfigProperty.Min]: 20, + * [FieldConfigProperty.Max]: 100 * }); * * ``` @@ -284,8 +296,8 @@ export class PanelPlugin> + properties?: FieldConfigProperty[] | null, + customDefaults?: Partial> ) { if (!properties) { this._standardFieldConfigProperties = standardFieldConfigProperties; @@ -294,13 +306,12 @@ export class PanelPlugin [p, standardFieldConfigProperties.get(p)])); } - if (defauls) { - Object.keys(defauls).map(k => { - if (properties.indexOf(k as StandardFieldConfigProperties) > -1) { - this._standardFieldConfigProperties!.set( - k as StandardFieldConfigProperties, - defauls[k as StandardFieldConfigProperties] - ); + const defaults = customDefaults ?? standardFieldConfigDefaults; + + if (defaults) { + Object.keys(defaults).map(k => { + if (properties.indexOf(k as FieldConfigProperty) > -1) { + this._standardFieldConfigProperties!.set(k as FieldConfigProperty, defaults[k as FieldConfigProperty]); } }); } diff --git a/packages/grafana-data/src/types/fieldOverrides.ts b/packages/grafana-data/src/types/fieldOverrides.ts index 7b1816acc49..6015e2b05df 100644 --- a/packages/grafana-data/src/types/fieldOverrides.ts +++ b/packages/grafana-data/src/types/fieldOverrides.ts @@ -88,7 +88,7 @@ export interface ApplyFieldOverrideOptions { custom?: FieldConfigEditorRegistry; } -export enum StandardFieldConfigProperties { +export enum FieldConfigProperty { Unit = 'unit', Min = 'min', Max = 'max', diff --git a/public/app/features/dashboard/components/PanelEditor/FieldConfigEditor.tsx b/public/app/features/dashboard/components/PanelEditor/FieldConfigEditor.tsx index 2421d88c4ad..143a9bde6d0 100644 --- a/public/app/features/dashboard/components/PanelEditor/FieldConfigEditor.tsx +++ b/public/app/features/dashboard/components/PanelEditor/FieldConfigEditor.tsx @@ -8,7 +8,7 @@ import { standardFieldConfigEditorRegistry, PanelPlugin, SelectableValue, - StandardFieldConfigProperties, + FieldConfigProperty, } from '@grafana/data'; import { Forms, fieldMatchersUI, ValuePicker, useTheme } from '@grafana/ui'; import { getDataLinksVariableSuggestions } from '../../../panel/panellinks/link_srv'; @@ -18,7 +18,7 @@ import { css } from 'emotion'; interface Props { plugin: PanelPlugin; 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; /* Helpful for IntelliSense */ data: DataFrame[]; diff --git a/public/app/features/dashboard/state/PanelModel.test.ts b/public/app/features/dashboard/state/PanelModel.test.ts index 4248ad85e94..aac9ae7af06 100644 --- a/public/app/features/dashboard/state/PanelModel.test.ts +++ b/public/app/features/dashboard/state/PanelModel.test.ts @@ -1,6 +1,6 @@ import { PanelModel } from './PanelModel'; import { getPanelPlugin } from '../../plugins/__mocks__/pluginMocks'; -import { PanelProps, StandardFieldConfigProperties } from '@grafana/data'; +import { PanelProps, FieldConfigProperty } from '@grafana/data'; import { ComponentClass } from 'react'; class TablePanelCtrl {} @@ -79,9 +79,9 @@ describe('PanelModel', () => { TablePanelCtrl // angular ); panelPlugin.setDefaults(defaultOptionsMock); - panelPlugin.useStandardFieldConfig([StandardFieldConfigProperties.Unit, StandardFieldConfigProperties.Decimals], { - [StandardFieldConfigProperties.Unit]: 'flop', - [StandardFieldConfigProperties.Decimals]: 2, + panelPlugin.useStandardFieldConfig([FieldConfigProperty.Unit, FieldConfigProperty.Decimals], { + [FieldConfigProperty.Unit]: 'flop', + [FieldConfigProperty.Decimals]: 2, }); model.pluginLoaded(panelPlugin); }); diff --git a/public/app/plugins/panel/bargauge/module.tsx b/public/app/plugins/panel/bargauge/module.tsx index b4f4a99d3f8..6b44bfd0a3a 100644 --- a/public/app/plugins/panel/bargauge/module.tsx +++ b/public/app/plugins/panel/bargauge/module.tsx @@ -1,8 +1,8 @@ import { sharedSingleStatPanelChangedHandler } from '@grafana/ui'; -import { defaultStandardFieldConfigProperties, PanelPlugin } from '@grafana/data'; +import { PanelPlugin } from '@grafana/data'; import { BarGaugePanel } from './BarGaugePanel'; import { BarGaugeOptions, defaults } from './types'; -import { standardFieldConfigDefaults, addStandardDataReduceOptions } from '../stat/types'; +import { addStandardDataReduceOptions } from '../stat/types'; import { BarGaugePanelEditor } from './BarGaugePanelEditor'; import { barGaugePanelMigrationHandler } from './BarGaugeMigrations'; @@ -33,4 +33,4 @@ export const plugin = new PanelPlugin(BarGaugePanel) }) .setPanelChangeHandler(sharedSingleStatPanelChangedHandler) .setMigrationHandler(barGaugePanelMigrationHandler) - .useStandardFieldConfig(defaultStandardFieldConfigProperties, standardFieldConfigDefaults); + .useStandardFieldConfig(); diff --git a/public/app/plugins/panel/gauge/module.tsx b/public/app/plugins/panel/gauge/module.tsx index 9b4159b0058..16ad4b049c9 100644 --- a/public/app/plugins/panel/gauge/module.tsx +++ b/public/app/plugins/panel/gauge/module.tsx @@ -1,8 +1,8 @@ -import { defaultStandardFieldConfigProperties, PanelPlugin } from '@grafana/data'; +import { PanelPlugin } from '@grafana/data'; import { GaugePanelEditor } from './GaugePanelEditor'; import { GaugePanel } from './GaugePanel'; import { GaugeOptions, defaults } from './types'; -import { standardFieldConfigDefaults, addStandardDataReduceOptions } from '../stat/types'; +import { addStandardDataReduceOptions } from '../stat/types'; import { gaugePanelMigrationHandler, gaugePanelChangedHandler } from './GaugeMigrations'; export const plugin = new PanelPlugin(GaugePanel) @@ -25,4 +25,4 @@ export const plugin = new PanelPlugin(GaugePanel) }) .setPanelChangeHandler(gaugePanelChangedHandler) .setMigrationHandler(gaugePanelMigrationHandler) - .useStandardFieldConfig(defaultStandardFieldConfigProperties, standardFieldConfigDefaults); + .useStandardFieldConfig(); diff --git a/public/app/plugins/panel/piechart/module.tsx b/public/app/plugins/panel/piechart/module.tsx index 1ff9e6885d1..d3bca4a506e 100644 --- a/public/app/plugins/panel/piechart/module.tsx +++ b/public/app/plugins/panel/piechart/module.tsx @@ -1,11 +1,11 @@ -import { defaultStandardFieldConfigProperties, PanelPlugin, StandardFieldConfigProperties } from '@grafana/data'; +import { PanelPlugin, FieldConfigProperty } from '@grafana/data'; import { PieChartPanelEditor } from './PieChartPanelEditor'; import { PieChartPanel } from './PieChartPanel'; import { PieChartOptions, defaults } from './types'; export const plugin = new PanelPlugin(PieChartPanel) .setDefaults(defaults) - .useStandardFieldConfig(defaultStandardFieldConfigProperties, { - [StandardFieldConfigProperties.Unit]: 'short', + .useStandardFieldConfig(null, { + [FieldConfigProperty.Unit]: 'short', }) .setEditor(PieChartPanelEditor); diff --git a/public/app/plugins/panel/stat/module.tsx b/public/app/plugins/panel/stat/module.tsx index 799ff473e2d..c872adfa174 100644 --- a/public/app/plugins/panel/stat/module.tsx +++ b/public/app/plugins/panel/stat/module.tsx @@ -1,6 +1,6 @@ import { sharedSingleStatMigrationHandler, sharedSingleStatPanelChangedHandler } from '@grafana/ui'; -import { defaultStandardFieldConfigProperties, PanelPlugin } from '@grafana/data'; -import { StatPanelOptions, defaults, standardFieldConfigDefaults, addStandardDataReduceOptions } from './types'; +import { PanelPlugin } from '@grafana/data'; +import { StatPanelOptions, defaults, addStandardDataReduceOptions } from './types'; import { StatPanel } from './StatPanel'; import { StatPanelEditor } from './StatPanelEditor'; @@ -48,4 +48,4 @@ export const plugin = new PanelPlugin(StatPanel) .setNoPadding() .setPanelChangeHandler(sharedSingleStatPanelChangedHandler) .setMigrationHandler(sharedSingleStatMigrationHandler) - .useStandardFieldConfig(defaultStandardFieldConfigProperties, standardFieldConfigDefaults); + .useStandardFieldConfig(); diff --git a/public/app/plugins/panel/stat/types.ts b/public/app/plugins/panel/stat/types.ts index e2e9ff11c05..8426d9c138c 100644 --- a/public/app/plugins/panel/stat/types.ts +++ b/public/app/plugins/panel/stat/types.ts @@ -6,7 +6,7 @@ import { SelectableValue, ThresholdsMode, standardEditorsRegistry, - StandardFieldConfigProperties, + FieldConfigProperty, } from '@grafana/data'; import { PanelOptionsEditorBuilder } from '@grafana/data/src/utils/OptionsUIBuilders'; @@ -37,15 +37,15 @@ export const commonValueOptionDefaults: ReduceDataOptions = { calcs: [ReducerID.mean], }; -export const standardFieldConfigDefaults: Partial> = { - [StandardFieldConfigProperties.Thresholds]: { +export const standardFieldConfigDefaults: Partial> = { + [FieldConfigProperty.Thresholds]: { mode: ThresholdsMode.Absolute, steps: [ { value: -Infinity, color: 'green' }, - { value: 80, color: 'red' }, // 80% + { value: 80, color: 'red' }, ], }, - [StandardFieldConfigProperties.Mappings]: [], + [FieldConfigProperty.Mappings]: [], }; export function addStandardDataReduceOptions(builder: PanelOptionsEditorBuilder) {