grafana/public/app/features/dimensions/utils.ts
Josh Hunt 3c6e0e8ef8
Chore: ESlint import order (#44959)
* Add and configure eslint-plugin-import

* Fix the lint:ts npm command

* Autofix + prettier all the files

* Manually fix remaining files

* Move jquery code in jest-setup to external file to safely reorder imports

* Resolve issue caused by circular dependencies within Prometheus

* Update .betterer.results

* Fix missing // @ts-ignore

* ignore iconBundle.ts

* Fix missing // @ts-ignore
2022-04-22 14:33:13 +01:00

147 lines
3.5 KiB
TypeScript

import { DataFrame, PanelData, Field, getFieldDisplayName, ReducerID } from '@grafana/data';
import { config } from '@grafana/runtime';
import {
getColorDimension,
getScaledDimension,
getTextDimension,
getResourceDimension,
ColorDimensionConfig,
DimensionSupplier,
ResourceDimensionConfig,
ScaleDimensionConfig,
TextDimensionConfig,
ScalarDimensionConfig,
} from 'app/features/dimensions';
import { getScalarDimension } from './scalar';
export function getColorDimensionFromData(
data: PanelData | undefined,
cfg: ColorDimensionConfig
): DimensionSupplier<string> {
if (data?.series && cfg.field) {
for (const frame of data.series) {
const d = getColorDimension(frame, cfg, config.theme2);
if (!d.isAssumed || data.series.length === 1) {
return d;
}
}
}
return getColorDimension(undefined, cfg, config.theme2);
}
export function getScaleDimensionFromData(
data: PanelData | undefined,
cfg: ScaleDimensionConfig
): DimensionSupplier<number> {
if (data?.series && cfg.field) {
for (const frame of data.series) {
const d = getScaledDimension(frame, cfg);
if (!d.isAssumed || data.series.length === 1) {
return d;
}
}
}
return getScaledDimension(undefined, cfg);
}
export function getScalarDimensionFromData(
data: PanelData | undefined,
cfg: ScalarDimensionConfig
): DimensionSupplier<number> {
if (data?.series && cfg.field) {
for (const frame of data.series) {
const d = getScalarDimension(frame, cfg);
if (!d.isAssumed || data.series.length === 1) {
return d;
}
}
}
return getScalarDimension(undefined, cfg);
}
export function getResourceDimensionFromData(
data: PanelData | undefined,
cfg: ResourceDimensionConfig
): DimensionSupplier<string> {
if (data?.series && cfg.field) {
for (const frame of data.series) {
const d = getResourceDimension(frame, cfg);
if (!d.isAssumed || data.series.length === 1) {
return d;
}
}
}
return getResourceDimension(undefined, cfg);
}
export function getTextDimensionFromData(
data: PanelData | undefined,
cfg: TextDimensionConfig
): DimensionSupplier<string> {
if (data?.series && cfg.field) {
for (const frame of data.series) {
const d = getTextDimension(frame, cfg);
if (!d.isAssumed || data.series.length === 1) {
return d;
}
}
}
return getTextDimension(undefined, cfg);
}
export function findField(frame?: DataFrame, name?: string): Field | undefined {
if (!frame || !name?.length) {
return undefined;
}
for (const field of frame.fields) {
if (name === field.name) {
return field;
}
const disp = getFieldDisplayName(field, frame);
if (name === disp) {
return field;
}
}
return undefined;
}
export function findFieldIndex(frame?: DataFrame, name?: string): number | undefined {
if (!frame || !name?.length) {
return undefined;
}
for (let i = 0; i < frame.fields.length; i++) {
const field = frame.fields[i];
if (name === field.name) {
return i;
}
const disp = getFieldDisplayName(field, frame);
if (name === disp) {
return i;
}
}
return undefined;
}
export function getLastNotNullFieldValue<T>(field: Field): T {
const calcs = field.state?.calcs;
if (calcs) {
const v = calcs[ReducerID.lastNotNull];
if (v != null) {
return v as T;
}
}
const data = field.values;
let idx = data.length - 1;
while (idx >= 0) {
const v = data.get(idx--);
if (v != null) {
return v;
}
}
return undefined as any;
}