grafana/public/app/features/templating/formatVariableValue.ts
Torkel Ödegaard b7b608418d
Templating: Introduce macros to simplify and optimize some scopedVars (#65317)
* Templating: Introduce macros to simplify and optimize some scopedVars

* Fixing tests

* fix test

* minor fix

* refactoring so macros work with formatting

* remove breaking change and keep current inconsistency

* Rename valueIndex to rowIndex

* Minor fixes

* Added test dashboard

* Added tags to dashboard

* Update

* Added test to check it returns match

* Update

* Fixed dashboard

* fix
2023-03-28 19:22:34 +02:00

51 lines
1.3 KiB
TypeScript

import { formatRegistry, FormatRegistryID } from '@grafana/scenes';
import { isAdHoc } from '../variables/guard';
import { getVariableWrapper } from './LegacyVariableWrapper';
export function formatVariableValue(value: any, format?: any, variable?: any, text?: string): string {
// for some scopedVars there is no variable
variable = variable || {};
if (value === null || value === undefined) {
return '';
}
if (isAdHoc(variable) && format !== FormatRegistryID.queryParam) {
return '';
}
// if it's an object transform value to string
if (!Array.isArray(value) && typeof value === 'object') {
value = `${value}`;
}
if (typeof format === 'function') {
return format(value, variable, formatVariableValue);
}
if (!format) {
format = FormatRegistryID.glob;
}
// some formats have arguments that come after ':' character
let args = format.split(':');
if (args.length > 1) {
format = args[0];
args = args.slice(1);
} else {
args = [];
}
let formatItem = formatRegistry.getIfExists(format);
if (!formatItem) {
console.error(`Variable format ${format} not found. Using glob format as fallback.`);
formatItem = formatRegistry.get(FormatRegistryID.glob);
}
const formatVariable = getVariableWrapper(variable, value, text ?? value);
return formatItem.formatter(value, args, formatVariable);
}