1234567891011121314151617181920212223242526272829303132333435363738394041 |
- import {
- DataFrame,
- Field,
- FieldType,
- formattedValueToString,
- getDisplayProcessor,
- reduceField,
- fieldReducers,
- } from '@grafana/data';
- import { FooterItem } from '@grafana/ui/src/components/Table/types';
- import { config } from 'app/core/config';
- import { TableFooterCalc } from './models.gen';
- export function getFooterCells(frame: DataFrame, options?: TableFooterCalc): FooterItem[] {
- return frame.fields.map((field, i) => {
- if (field.type !== FieldType.number) {
- // show the reducer in the first column
- if (i === 0 && options && options.reducer.length > 0) {
- const reducer = fieldReducers.get(options.reducer[0]);
- return reducer.name;
- }
- return undefined;
- }
- if (options?.fields && options.fields.length > 0) {
- const f = options.fields.find((f) => f === field.name);
- if (f) {
- return getFormattedValue(field, options.reducer);
- }
- return undefined;
- }
- return getFormattedValue(field, options?.reducer || []);
- });
- }
- function getFormattedValue(field: Field, reducer: string[]) {
- const fmt = field.display ?? getDisplayProcessor({ field, theme: config.theme2 });
- const calc = reducer[0];
- const v = reduceField({ field, reducers: reducer })[calc];
- return formattedValueToString(fmt(v));
- }
|