grafana/data: Move useFieldOverrides from core (#60817)

* grafana/data: Move useFieldOverrides from core

* Update packages/grafana-data/src/field/fieldOverrides.ts

Co-authored-by: Torkel Ödegaard <torkel@grafana.com>

* Review

Co-authored-by: Torkel Ödegaard <torkel@grafana.com>
This commit is contained in:
Dominik Prokop
2023-01-02 02:27:48 -08:00
committed by GitHub
co-authored by Torkel Ödegaard
parent 6e89421544
commit 831e7697ae
6 changed files with 68 additions and 59 deletions
+1
View File
@@ -49,6 +49,7 @@
"moment-timezone": "0.5.38",
"ol": "7.1.0",
"papaparse": "5.3.2",
"react-use": "17.4.0",
"regenerator-runtime": "0.13.10",
"rxjs": "7.5.7",
"tinycolor2": "1.4.2",
@@ -1,7 +1,11 @@
import { isNumber, set, unset, get, cloneDeep } from 'lodash';
import { useMemo, useRef } from 'react';
import usePrevious from 'react-use/lib/usePrevious';
import { guessFieldTypeForField } from '../dataframe';
import { compareArrayValues, compareDataFrameStructures, guessFieldTypeForField } from '../dataframe';
import { getTimeField } from '../dataframe/processDataFrame';
import { PanelPlugin } from '../panel/PanelPlugin';
import { GrafanaTheme2 } from '../themes';
import { asHexString } from '../themes/colorManipulator';
import { fieldMatchers, reduceField, ReducerID } from '../transformations';
import {
@@ -16,11 +20,13 @@ import {
FieldColorModeId,
FieldConfig,
FieldConfigPropertyItem,
FieldConfigSource,
FieldOverrideContext,
FieldType,
InterpolateFunction,
LinkModel,
NumericRange,
PanelData,
ScopedVars,
TimeZone,
ValueLinkConfig,
@@ -503,3 +509,49 @@ export function applyRawFieldOverrides(data: DataFrame[]): DataFrame[] {
return newData;
}
/**
* @internal
*/
export function useFieldOverrides(
plugin: PanelPlugin | undefined,
fieldConfig: FieldConfigSource | undefined,
data: PanelData | undefined,
timeZone: string,
theme: GrafanaTheme2,
replace: InterpolateFunction
): PanelData | undefined {
const fieldConfigRegistry = plugin?.fieldConfigRegistry;
const structureRev = useRef(0);
const prevSeries = usePrevious(data?.series);
return useMemo(() => {
if (!fieldConfigRegistry || !fieldConfig || !data) {
return;
}
const series = data?.series;
if (
data.structureRev == null &&
series &&
prevSeries &&
!compareArrayValues(series, prevSeries, compareDataFrameStructures)
) {
structureRev.current++;
}
return {
structureRev: structureRev.current,
...data,
series: applyFieldOverrides({
data: series,
fieldConfig,
fieldConfigRegistry,
replaceVariables: replace,
theme,
timeZone,
}),
};
}, [fieldConfigRegistry, fieldConfig, data, prevSeries, timeZone, theme, replace]);
}
+1 -1
View File
@@ -12,7 +12,7 @@ export {
} from './fieldColor';
export { FieldConfigOptionsRegistry } from './FieldConfigOptionsRegistry';
export { sortThresholds, getActiveThreshold } from './thresholds';
export { applyFieldOverrides, validateFieldConfig, applyRawFieldOverrides } from './fieldOverrides';
export { applyFieldOverrides, validateFieldConfig, applyRawFieldOverrides, useFieldOverrides } from './fieldOverrides';
export { getFieldDisplayValuesProxy } from './getFieldDisplayValuesProxy';
export { getFieldDisplayName, getFrameDisplayName } from './fieldState';
export { getScaleCalculator, getFieldConfigWithMinMax } from './scale';