mirror of
https://github.com/grafana/grafana.git
synced 2025-09-20 19:52:52 +08:00
47 lines
1.3 KiB
TypeScript
47 lines
1.3 KiB
TypeScript
import { DataFrame, Labels, roundDecimals } from '@grafana/data';
|
|
|
|
/**
|
|
* ⚠️ `frame.fields` could be an empty array ⚠️
|
|
*
|
|
* TypeScript will NOT complain about it when accessing items via index signatures.
|
|
* Make sure to check for empty array or use optional chaining!
|
|
*
|
|
* see https://github.com/Microsoft/TypeScript/issues/13778
|
|
*/
|
|
|
|
const getSeriesName = (frame: DataFrame): string | undefined => {
|
|
const firstField = frame.fields[0];
|
|
|
|
const displayNameFromDS = firstField?.config?.displayNameFromDS;
|
|
return displayNameFromDS ?? frame.name ?? firstField?.labels?.__name__;
|
|
};
|
|
|
|
const getSeriesValue = (frame: DataFrame) => {
|
|
const value = frame.fields[0]?.values[0];
|
|
|
|
if (Number.isFinite(value)) {
|
|
return roundDecimals(value, 5);
|
|
}
|
|
|
|
return value;
|
|
};
|
|
|
|
const getSeriesLabels = (frame: DataFrame): Record<string, string> => {
|
|
const firstField = frame.fields[0];
|
|
return firstField?.labels ?? {};
|
|
};
|
|
|
|
const formatLabels = (labels: Labels): string => {
|
|
return Object.entries(labels)
|
|
.map(([key, value]) => key + '=' + value)
|
|
.join(', ');
|
|
};
|
|
|
|
const isEmptySeries = (series: DataFrame[]): boolean => {
|
|
const isEmpty = series.every((serie) => serie.fields.every((field) => field.values.every((value) => value == null)));
|
|
|
|
return isEmpty;
|
|
};
|
|
|
|
export { getSeriesName, getSeriesValue, getSeriesLabels, formatLabels, isEmptySeries };
|