grafana/public/app/features/dashboard/components/PanelEditor/state/getOptionOverrides.ts
Torkel Ödegaard 3dee34c009
PanelEdit: Show when field options have override rules or data config that overrides the default (#40250)
* First pass at showing data override dots

* Added test

* Adding override rule dots

* Added unit test

* Minor changes

* Update public/app/features/dashboard/components/PanelEditor/OptionsPaneItemDescriptor.tsx

Co-authored-by: Hugo Häggmark <hugo.haggmark@grafana.com>

* Fixed ts issues

* review feedback changes

* skipp broken e2e test

Co-authored-by: Hugo Häggmark <hugo.haggmark@grafana.com>
2021-11-08 13:18:14 +01:00

50 lines
1.4 KiB
TypeScript

import { DataFrame, FieldConfigPropertyItem, FieldConfigSource } from '@grafana/data';
import { get as lodashGet } from 'lodash';
import { OptionPaneItemOverrideInfo } from '../types';
export const dataOverrideTooltipDescription =
'Some data fields have this option pre-configured. Add a field override rule to override the pre-configured value.';
export const overrideRuleTooltipDescription = 'An override rule exists for this property';
export function getOptionOverrides(
fieldOption: FieldConfigPropertyItem,
fieldConfig: FieldConfigSource,
frames: DataFrame[] | undefined
): OptionPaneItemOverrideInfo[] {
const infoDots: OptionPaneItemOverrideInfo[] = [];
// Look for options overriden in data field config
if (frames) {
for (const frame of frames) {
for (const field of frame.fields) {
const value = lodashGet(field.config, fieldOption.path);
if (value == null) {
continue;
}
infoDots.push({
type: 'data',
description: dataOverrideTooltipDescription,
tooltip: dataOverrideTooltipDescription,
});
break;
}
}
}
const overrideRuleFound = fieldConfig.overrides.some((rule) =>
rule.properties.some((prop) => prop.id === fieldOption.id)
);
if (overrideRuleFound) {
infoDots.push({
type: 'rule',
description: overrideRuleTooltipDescription,
tooltip: overrideRuleTooltipDescription,
});
}
return infoDots;
}