mirror of
https://github.com/grafana/grafana.git
synced 2025-02-13 00:55:47 -06:00
* POC: trying to see if there is a way to support objects in template interpolations * Added support for nested objects, and arrays * Added accessor cache * fixed unit tests * First take * Use links supplier in graph * Add field's index to cache items * Get field index from field cache * CHange FiledCacheItem to FieldWithIndex * Add refId to TimeSeries class * Make field link supplier work with _series, _field and _value vars * use field link supplier in graph * Fix yaxis settings * Update dashboard schema version and add migration for data links variables * Update snapshots * Update build in data link variables * FieldCache - idx -> index * Add current query results to panel editor * WIP Updated data links dropdown to display new variables * Fix build * Update variables syntac in field display, update migration * Field links supplier: review updates * Add data frame view and field name to TimeSeries for later inspection * Retrieve data frame from TimeSeries when clicking on plot graph * Use data frame's index instead of view * Retrieve data frame by index instead of view on TimeSeries * Update data links prism regex * Fix typecheck * Add value variables to suggestions list * UI update * Rename field to config in DisplayProcessorOptions * Proces single value of a field instead of entire data frame * Updated font size from 10px to 12px for auto complete * Replace fieldName with fieldIndex in TimeSeries * Don't use .entries() for iterating in field cache * Don't use FieldCache when retrieving field for datalinks in graph * Add value calculation variable to data links (#19031) * Add support for labels with dots in the name (#19033) * Docs update * Use field name instead of removed series.fieldName * Add test dashboard * Typos fix * Make visualization tab subscribe to query results * Added tags to dashboard so it shows up in lists * minor docs fix * Update singlestat-ish variables suggestions to contain series variables * Decrease suggestions update debounce * Enable whitespace characters(new line, space) in links and strip them when processing the data link * minor data links UI update * DataLinks: Add __from and __to variables suggestions to data links (#19093) * Add from and to variables suggestions to data links * Update docs * UI update and added info text * Change ESC global bind to bind (doesn't capture ESC on input) * Close datalinks suggestions on ESC * Remove unnecessary fragment
56 lines
1.7 KiB
TypeScript
56 lines
1.7 KiB
TypeScript
import _ from 'lodash';
|
|
import { assignModelProperties } from 'app/core/utils/model_utils';
|
|
|
|
/*
|
|
* This regex matches 3 types of variable reference with an optional format specifier
|
|
* \$(\w+) $var1
|
|
* \[\[([\s\S]+?)(?::(\w+))?\]\] [[var2]] or [[var2:fmt2]]
|
|
* \${(\w+)(?::(\w+))?} ${var3} or ${var3:fmt3}
|
|
*/
|
|
export const variableRegex = /\$(\w+)|\[\[([\s\S]+?)(?::(\w+))?\]\]|\${(\w+)(?:\.([^:^\}]+))?(?::(\w+))?}/g;
|
|
|
|
// Helper function since lastIndex is not reset
|
|
export const variableRegexExec = (variableString: string) => {
|
|
variableRegex.lastIndex = 0;
|
|
return variableRegex.exec(variableString);
|
|
};
|
|
|
|
export interface Variable {
|
|
setValue(option: any): any;
|
|
updateOptions(): any;
|
|
dependsOn(variable: any): any;
|
|
setValueFromUrl(urlValue: any): any;
|
|
getValueForUrl(): any;
|
|
getSaveModel(): any;
|
|
}
|
|
|
|
export type CtorType = new (...args: any[]) => {};
|
|
|
|
export interface VariableTypes {
|
|
[key: string]: {
|
|
name: string;
|
|
ctor: CtorType;
|
|
description: string;
|
|
supportsMulti?: boolean;
|
|
};
|
|
}
|
|
|
|
export let variableTypes: VariableTypes = {};
|
|
export { assignModelProperties };
|
|
|
|
export function containsVariable(...args: any[]) {
|
|
const variableName = args[args.length - 1];
|
|
args[0] = _.isString(args[0]) ? args[0] : Object['values'](args[0]).join(' ');
|
|
const variableString = args.slice(0, -1).join(' ');
|
|
const matches = variableString.match(variableRegex);
|
|
const isMatchingVariable =
|
|
matches !== null
|
|
? matches.find(match => {
|
|
const varMatch = variableRegexExec(match);
|
|
return varMatch !== null && varMatch.indexOf(variableName) > -1;
|
|
})
|
|
: false;
|
|
|
|
return !!isMatchingVariable;
|
|
}
|