@grafana/scenes 6.48.1 → 6.49.0--canary.1306.19936944309.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/esm/variables/variants/query/QueryVariable.js +8 -2
- package/dist/esm/variables/variants/query/QueryVariable.js.map +1 -1
- package/dist/esm/variables/variants/query/utils.js +8 -2
- package/dist/esm/variables/variants/query/utils.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.js +16 -4
- package/dist/index.js.map +1 -1
- package/package.json +3 -2
|
@@ -27,12 +27,13 @@ class QueryVariable extends MultiValueVariable {
|
|
|
27
27
|
datasource: null,
|
|
28
28
|
regex: "",
|
|
29
29
|
query: "",
|
|
30
|
+
regexApplyTo: "value",
|
|
30
31
|
refresh: VariableRefresh.onDashboardLoad,
|
|
31
32
|
sort: VariableSort.disabled,
|
|
32
33
|
...initialState
|
|
33
34
|
});
|
|
34
35
|
this._variableDependency = new VariableDependencyConfig(this, {
|
|
35
|
-
statePaths: ["regex", "query", "datasource"]
|
|
36
|
+
statePaths: ["regex", "regexApplyTo", "query", "datasource"]
|
|
36
37
|
});
|
|
37
38
|
this.onSearchChange = (searchFilter) => {
|
|
38
39
|
if (!containsSearchFilter(this.state.query)) {
|
|
@@ -81,7 +82,12 @@ class QueryVariable extends MultiValueVariable {
|
|
|
81
82
|
if (this.state.regex) {
|
|
82
83
|
regex = sceneGraph.interpolate(this, this.state.regex, void 0, "regex");
|
|
83
84
|
}
|
|
84
|
-
let options = metricNamesToVariableValues(
|
|
85
|
+
let options = metricNamesToVariableValues({
|
|
86
|
+
variableRegEx: regex,
|
|
87
|
+
variableRegexApplyTo: this.state.regexApplyTo,
|
|
88
|
+
sort: this.state.sort,
|
|
89
|
+
metricNames: values
|
|
90
|
+
});
|
|
85
91
|
if (this.state.staticOptions) {
|
|
86
92
|
const customOptions = this.state.staticOptions;
|
|
87
93
|
options = options.filter((option) => !customOptions.find((custom) => custom.value === option.value));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"QueryVariable.js","sources":["../../../../../src/variables/variants/query/QueryVariable.tsx"],"sourcesContent":["import { Observable, of, filter, take, mergeMap, catchError, throwError, from, lastValueFrom } from 'rxjs';\nimport { v4 as uuidv4 } from 'uuid';\n\nimport {\n CoreApp,\n DataQueryRequest,\n LoadingState,\n PanelData,\n ScopedVars,\n VariableRefresh,\n VariableSort,\n} from '@grafana/data';\n\nimport { sceneGraph } from '../../../core/sceneGraph';\nimport { SceneComponentProps, SceneDataQuery } from '../../../core/types';\nimport { VariableDependencyConfig } from '../../VariableDependencyConfig';\nimport { MultiOrSingleValueSelect } from '../../components/VariableValueSelect';\nimport { VariableValueOption } from '../../types';\nimport { MultiValueVariable, MultiValueVariableState, VariableGetOptionsArgs } from '../MultiValueVariable';\n\nimport { createQueryVariableRunner } from './createQueryVariableRunner';\nimport { metricNamesToVariableValues, sortVariableValues } from './utils';\nimport { toMetricFindValues } from './toMetricFindValues';\nimport { getDataSource } from '../../../utils/getDataSource';\nimport { safeStringifyValue } from '../../utils';\nimport { DataQuery, DataSourceRef } from '@grafana/schema';\nimport { SEARCH_FILTER_VARIABLE } from '../../constants';\nimport { debounce } from 'lodash';\nimport { registerQueryWithController } from '../../../querying/registerQueryWithController';\nimport { wrapInSafeSerializableSceneObject } from '../../../utils/wrapInSafeSerializableSceneObject';\nimport React from 'react';\n\nexport interface QueryVariableState extends MultiValueVariableState {\n type: 'query';\n datasource: DataSourceRef | null;\n query: string | SceneDataQuery;\n regex: string;\n refresh: VariableRefresh;\n sort: VariableSort;\n\n // works the same as query for custom variable, adding additional static options to ones returned by data source query\n staticOptions?: VariableValueOption[];\n\n // how to order static options in relation to options returned by query\n staticOptionsOrder?: 'before' | 'after' | 'sorted';\n /** @internal Only for use inside core dashboards */\n definition?: string;\n}\n\nexport class QueryVariable extends MultiValueVariable<QueryVariableState> {\n protected _variableDependency = new VariableDependencyConfig(this, {\n statePaths: ['regex', 'query', 'datasource'],\n });\n\n public constructor(initialState: Partial<QueryVariableState>) {\n super({\n type: 'query',\n name: '',\n value: '',\n text: '',\n options: [],\n datasource: null,\n regex: '',\n query: '',\n refresh: VariableRefresh.onDashboardLoad,\n sort: VariableSort.disabled,\n ...initialState,\n });\n }\n\n public getValueOptions(args: VariableGetOptionsArgs): Observable<VariableValueOption[]> {\n if (!this.state.query) {\n return of([]);\n }\n\n this.setState({ loading: true, error: null });\n\n return from(\n getDataSource(this.state.datasource, {\n __sceneObject: wrapInSafeSerializableSceneObject(this),\n })\n ).pipe(\n mergeMap((ds) => {\n const runner = createQueryVariableRunner(ds);\n const target = runner.getTarget(this);\n const request = this.getRequest(target, args.searchFilter);\n\n return runner.runRequest({ variable: this, searchFilter: args.searchFilter }, request).pipe(\n registerQueryWithController({\n type: 'QueryVariable/getValueOptions',\n request: request,\n origin: this,\n }),\n filter((data) => data.state === LoadingState.Done || data.state === LoadingState.Error), // we only care about done or error for now\n take(1), // take the first result, using first caused a bug where it in some situations throw an uncaught error because of no results had been received yet\n mergeMap((data: PanelData) => {\n if (data.state === LoadingState.Error) {\n return throwError(() => data.error);\n }\n return of(data);\n }),\n toMetricFindValues(),\n mergeMap((values) => {\n let regex = '';\n if (this.state.regex) {\n regex = sceneGraph.interpolate(this, this.state.regex, undefined, 'regex');\n }\n let options = metricNamesToVariableValues(regex, this.state.sort, values);\n if (this.state.staticOptions) {\n const customOptions = this.state.staticOptions;\n options = options.filter((option) => !customOptions.find((custom) => custom.value === option.value));\n if (this.state.staticOptionsOrder === 'after') {\n options.push(...customOptions);\n } else if (this.state.staticOptionsOrder === 'sorted') {\n options = sortVariableValues(options.concat(customOptions), this.state.sort);\n } else {\n options.unshift(...customOptions);\n }\n }\n return of(options);\n }),\n catchError((error) => {\n if (error.cancelled) {\n return of([]);\n }\n return throwError(() => error);\n })\n );\n })\n );\n }\n\n private getRequest(target: DataQuery | string, searchFilter?: string) {\n const scopedVars: ScopedVars = {\n __sceneObject: wrapInSafeSerializableSceneObject(this),\n };\n\n if (searchFilter) {\n scopedVars.__searchFilter = { value: searchFilter, text: searchFilter };\n }\n\n const range = sceneGraph.getTimeRange(this).state.value;\n\n const request: DataQueryRequest = {\n app: CoreApp.Dashboard,\n requestId: uuidv4(),\n timezone: '',\n range,\n interval: '',\n intervalMs: 0,\n // @ts-ignore\n targets: [target],\n scopedVars,\n startTime: Date.now(),\n };\n\n return request;\n }\n\n onSearchChange = (searchFilter: string) => {\n if (!containsSearchFilter(this.state.query)) {\n return;\n }\n\n this._updateOptionsBasedOnSearchFilter(searchFilter);\n };\n\n private _updateOptionsBasedOnSearchFilter = debounce(async (searchFilter: string) => {\n const result = await lastValueFrom(this.getValueOptions({ searchFilter }));\n this.setState({ options: result, loading: false });\n }, 400);\n\n public static Component = ({ model }: SceneComponentProps<MultiValueVariable>) => {\n return <MultiOrSingleValueSelect model={model} />;\n };\n}\n\nfunction containsSearchFilter(query: string | DataQuery) {\n const str = safeStringifyValue(query);\n return str.indexOf(SEARCH_FILTER_VARIABLE) > -1;\n}\n"],"names":["uuidv4"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"QueryVariable.js","sources":["../../../../../src/variables/variants/query/QueryVariable.tsx"],"sourcesContent":["import { Observable, of, filter, take, mergeMap, catchError, throwError, from, lastValueFrom } from 'rxjs';\nimport { v4 as uuidv4 } from 'uuid';\n\nimport {\n CoreApp,\n DataQueryRequest,\n LoadingState,\n PanelData,\n ScopedVars,\n VariableRefresh,\n VariableSort,\n // @ts-expect-error TODO: remove suppression after updating grafana/data\n VariableRegexApplyTo,\n} from '@grafana/data';\n\nimport { sceneGraph } from '../../../core/sceneGraph';\nimport { SceneComponentProps, SceneDataQuery } from '../../../core/types';\nimport { VariableDependencyConfig } from '../../VariableDependencyConfig';\nimport { MultiOrSingleValueSelect } from '../../components/VariableValueSelect';\nimport { VariableValueOption } from '../../types';\nimport { MultiValueVariable, MultiValueVariableState, VariableGetOptionsArgs } from '../MultiValueVariable';\n\nimport { createQueryVariableRunner } from './createQueryVariableRunner';\nimport { metricNamesToVariableValues, sortVariableValues } from './utils';\nimport { toMetricFindValues } from './toMetricFindValues';\nimport { getDataSource } from '../../../utils/getDataSource';\nimport { safeStringifyValue } from '../../utils';\nimport { DataQuery, DataSourceRef } from '@grafana/schema';\nimport { SEARCH_FILTER_VARIABLE } from '../../constants';\nimport { debounce } from 'lodash';\nimport { registerQueryWithController } from '../../../querying/registerQueryWithController';\nimport { wrapInSafeSerializableSceneObject } from '../../../utils/wrapInSafeSerializableSceneObject';\nimport React from 'react';\n\nexport interface QueryVariableState extends MultiValueVariableState {\n type: 'query';\n datasource: DataSourceRef | null;\n query: string | SceneDataQuery;\n regex: string;\n regexApplyTo: VariableRegexApplyTo;\n refresh: VariableRefresh;\n sort: VariableSort;\n\n // works the same as query for custom variable, adding additional static options to ones returned by data source query\n staticOptions?: VariableValueOption[];\n\n // how to order static options in relation to options returned by query\n staticOptionsOrder?: 'before' | 'after' | 'sorted';\n /** @internal Only for use inside core dashboards */\n definition?: string;\n}\n\nexport class QueryVariable extends MultiValueVariable<QueryVariableState> {\n protected _variableDependency = new VariableDependencyConfig(this, {\n statePaths: ['regex', 'regexApplyTo', 'query', 'datasource'],\n });\n\n public constructor(initialState: Partial<QueryVariableState>) {\n super({\n type: 'query',\n name: '',\n value: '',\n text: '',\n options: [],\n datasource: null,\n regex: '',\n query: '',\n regexApplyTo: 'value',\n refresh: VariableRefresh.onDashboardLoad,\n sort: VariableSort.disabled,\n ...initialState,\n });\n }\n\n public getValueOptions(args: VariableGetOptionsArgs): Observable<VariableValueOption[]> {\n if (!this.state.query) {\n return of([]);\n }\n\n this.setState({ loading: true, error: null });\n\n return from(\n getDataSource(this.state.datasource, {\n __sceneObject: wrapInSafeSerializableSceneObject(this),\n })\n ).pipe(\n mergeMap((ds) => {\n const runner = createQueryVariableRunner(ds);\n const target = runner.getTarget(this);\n const request = this.getRequest(target, args.searchFilter);\n\n return runner.runRequest({ variable: this, searchFilter: args.searchFilter }, request).pipe(\n registerQueryWithController({\n type: 'QueryVariable/getValueOptions',\n request: request,\n origin: this,\n }),\n filter((data) => data.state === LoadingState.Done || data.state === LoadingState.Error), // we only care about done or error for now\n take(1), // take the first result, using first caused a bug where it in some situations throw an uncaught error because of no results had been received yet\n mergeMap((data: PanelData) => {\n if (data.state === LoadingState.Error) {\n return throwError(() => data.error);\n }\n return of(data);\n }),\n toMetricFindValues(),\n mergeMap((values) => {\n let regex = '';\n if (this.state.regex) {\n regex = sceneGraph.interpolate(this, this.state.regex, undefined, 'regex');\n }\n let options = metricNamesToVariableValues({\n variableRegEx: regex,\n variableRegexApplyTo: this.state.regexApplyTo,\n sort: this.state.sort,\n metricNames: values,\n });\n if (this.state.staticOptions) {\n const customOptions = this.state.staticOptions;\n options = options.filter((option) => !customOptions.find((custom) => custom.value === option.value));\n if (this.state.staticOptionsOrder === 'after') {\n options.push(...customOptions);\n } else if (this.state.staticOptionsOrder === 'sorted') {\n options = sortVariableValues(options.concat(customOptions), this.state.sort);\n } else {\n options.unshift(...customOptions);\n }\n }\n return of(options);\n }),\n catchError((error) => {\n if (error.cancelled) {\n return of([]);\n }\n return throwError(() => error);\n })\n );\n })\n );\n }\n\n private getRequest(target: DataQuery | string, searchFilter?: string) {\n const scopedVars: ScopedVars = {\n __sceneObject: wrapInSafeSerializableSceneObject(this),\n };\n\n if (searchFilter) {\n scopedVars.__searchFilter = { value: searchFilter, text: searchFilter };\n }\n\n const range = sceneGraph.getTimeRange(this).state.value;\n\n const request: DataQueryRequest = {\n app: CoreApp.Dashboard,\n requestId: uuidv4(),\n timezone: '',\n range,\n interval: '',\n intervalMs: 0,\n // @ts-ignore\n targets: [target],\n scopedVars,\n startTime: Date.now(),\n };\n\n return request;\n }\n\n onSearchChange = (searchFilter: string) => {\n if (!containsSearchFilter(this.state.query)) {\n return;\n }\n\n this._updateOptionsBasedOnSearchFilter(searchFilter);\n };\n\n private _updateOptionsBasedOnSearchFilter = debounce(async (searchFilter: string) => {\n const result = await lastValueFrom(this.getValueOptions({ searchFilter }));\n this.setState({ options: result, loading: false });\n }, 400);\n\n public static Component = ({ model }: SceneComponentProps<MultiValueVariable>) => {\n return <MultiOrSingleValueSelect model={model} />;\n };\n}\n\nfunction containsSearchFilter(query: string | DataQuery) {\n const str = safeStringifyValue(query);\n return str.indexOf(SEARCH_FILTER_VARIABLE) > -1;\n}\n"],"names":["uuidv4"],"mappings":"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"}
|
|
@@ -1,7 +1,12 @@
|
|
|
1
1
|
import { isNumber, uniqBy, sortBy, toLower } from 'lodash';
|
|
2
2
|
import { stringToJsRegex, VariableSort } from '@grafana/data';
|
|
3
3
|
|
|
4
|
-
function metricNamesToVariableValues(
|
|
4
|
+
function metricNamesToVariableValues({
|
|
5
|
+
variableRegEx,
|
|
6
|
+
variableRegexApplyTo,
|
|
7
|
+
sort,
|
|
8
|
+
metricNames
|
|
9
|
+
}) {
|
|
5
10
|
var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j;
|
|
6
11
|
let regex;
|
|
7
12
|
let options = [];
|
|
@@ -19,7 +24,8 @@ function metricNamesToVariableValues(variableRegEx, sort, metricNames) {
|
|
|
19
24
|
text = text.toString();
|
|
20
25
|
}
|
|
21
26
|
if (regex) {
|
|
22
|
-
const
|
|
27
|
+
const applyTo = variableRegexApplyTo === "text" ? text : value;
|
|
28
|
+
const matches = getAllMatches(applyTo, regex);
|
|
23
29
|
if (!matches.length) {
|
|
24
30
|
continue;
|
|
25
31
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sources":["../../../../../src/variables/variants/query/utils.ts"],"sourcesContent":["import { isNumber, sortBy, toLower, uniqBy } from 'lodash';\n\nimport {
|
|
1
|
+
{"version":3,"file":"utils.js","sources":["../../../../../src/variables/variants/query/utils.ts"],"sourcesContent":["import { isNumber, sortBy, toLower, uniqBy } from 'lodash';\n\nimport {\n stringToJsRegex,\n VariableSort,\n // @ts-expect-error TODO: remove suppression after updating grafana/data\n VariableRegexApplyTo,\n} from '@grafana/data';\n\nimport { VariableValueOption } from '../../types';\n\ninterface MetricNamesToVariableValuesArgs {\n variableRegEx: string;\n variableRegexApplyTo: VariableRegexApplyTo;\n sort: VariableSort;\n metricNames: any[];\n}\n\nexport function metricNamesToVariableValues({\n variableRegEx,\n variableRegexApplyTo,\n sort,\n metricNames,\n}: MetricNamesToVariableValuesArgs) {\n let regex;\n let options: VariableValueOption[] = [];\n\n if (variableRegEx) {\n regex = stringToJsRegex(variableRegEx);\n }\n\n for (let i = 0; i < metricNames.length; i++) {\n const item = metricNames[i];\n let text = item.text ?? item.value ?? '';\n let value = item.value ?? item.text ?? '';\n\n if (isNumber(value)) {\n value = value.toString();\n }\n\n if (isNumber(text)) {\n text = text.toString();\n }\n\n if (regex) {\n const applyTo = variableRegexApplyTo === 'text' ? text : value;\n const matches = getAllMatches(applyTo, regex);\n if (!matches.length) {\n continue;\n }\n\n const valueGroup = matches.find((m) => m.groups && m.groups.value);\n const textGroup = matches.find((m) => m.groups && m.groups.text);\n const firstMatch = matches.find((m) => m.length > 1);\n const manyMatches = matches.length > 1 && firstMatch;\n\n if (valueGroup || textGroup) {\n value = valueGroup?.groups?.value ?? textGroup?.groups?.text;\n text = textGroup?.groups?.text ?? valueGroup?.groups?.value;\n } else if (manyMatches) {\n for (let j = 0; j < matches.length; j++) {\n const match = matches[j];\n options.push({ label: match[1], value: match[1] });\n }\n continue;\n } else if (firstMatch) {\n text = firstMatch[1];\n value = firstMatch[1];\n }\n }\n\n options.push({ label: text, value: value, properties: item.properties });\n }\n\n options = uniqBy(options, 'value');\n return sortVariableValues(options, sort);\n}\n\nconst getAllMatches = (str: string, regex: RegExp): RegExpExecArray[] => {\n const results: RegExpExecArray[] = [];\n let matches = null;\n\n regex.lastIndex = 0;\n\n do {\n matches = regex.exec(str);\n if (matches) {\n results.push(matches);\n }\n } while (regex.global && matches && matches[0] !== '' && matches[0] !== undefined);\n\n return results;\n};\n\nexport const sortVariableValues = (options: VariableValueOption[], sortOrder: VariableSort) => {\n if (sortOrder === VariableSort.disabled) {\n return options;\n }\n\n switch (sortOrder) {\n case VariableSort.alphabeticalAsc:\n options = sortBy(options, 'label');\n break;\n case VariableSort.alphabeticalDesc:\n options = sortBy(options, 'label').reverse();\n break;\n case VariableSort.numericalAsc:\n options = sortBy(options, sortByNumeric);\n break;\n case VariableSort.numericalDesc:\n options = sortBy(options, sortByNumeric);\n options = options.reverse();\n break;\n case VariableSort.alphabeticalCaseInsensitiveAsc:\n options = sortBy(options, (opt) => {\n return toLower(opt.label);\n });\n break;\n case VariableSort.alphabeticalCaseInsensitiveDesc:\n options = sortBy(options, (opt) => {\n return toLower(opt.label);\n });\n options = options.reverse();\n break;\n case VariableSort.naturalAsc:\n // Sort by natural sort\n options = sortByNaturalSort(options);\n break;\n case VariableSort.naturalDesc:\n options = sortByNaturalSort(options);\n options = options.reverse();\n break;\n default:\n break;\n }\n return options;\n};\n\nfunction sortByNumeric(opt: VariableValueOption) {\n if (!opt.label) {\n return -1;\n }\n const matches = opt.label.match(/.*?(\\d+).*/);\n if (!matches || matches.length < 2) {\n return -1;\n } else {\n return parseInt(matches[1], 10);\n }\n}\n\nconst collator = new Intl.Collator(undefined, { sensitivity: 'accent', numeric: true });\n\nfunction sortByNaturalSort(options: VariableValueOption[]) {\n return options.slice().sort((a, b) => {\n return collator.compare(a.label, b.label);\n });\n}\n"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as _grafana_data from '@grafana/data';
|
|
2
|
-
import { BusEventWithPayload, EventBus, BusEvent, BusEventType, BusEventHandler, PanelMenuItem, DataQueryRequest, FieldConfigSource, PanelPlugin, AbsoluteTimeRange, PanelData, InterpolateFunction, PanelModel, TimeRange, DataTransformContext, DataFrame, DataSourceGetTagKeysOptions, DataSourceGetTagValuesOptions, IconName, PageLayoutType, UrlQueryMap, DataQuery as DataQuery$1, DataSourceApi, Registry, RegistryItem, ScopedVars, AdHocVariableFilter, SelectableValue, GetTagResponse, MetricFindValue, DrilldownsApplicability, VariableRefresh as VariableRefresh$1, VariableSort, Scope, EventFilterOptions, AnnotationEvent, AnnotationQuery, DataTransformerConfig, TimeOption, FieldConfig, FieldType, FieldValueMatcherConfig, ScopedVar, RawTimeRange } from '@grafana/data';
|
|
2
|
+
import { BusEventWithPayload, EventBus, BusEvent, BusEventType, BusEventHandler, PanelMenuItem, DataQueryRequest, FieldConfigSource, PanelPlugin, AbsoluteTimeRange, PanelData, InterpolateFunction, PanelModel, TimeRange, DataTransformContext, DataFrame, DataSourceGetTagKeysOptions, DataSourceGetTagValuesOptions, IconName, PageLayoutType, UrlQueryMap, DataQuery as DataQuery$1, DataSourceApi, Registry, RegistryItem, ScopedVars, AdHocVariableFilter, SelectableValue, GetTagResponse, MetricFindValue, DrilldownsApplicability, VariableRegexApplyTo, VariableRefresh as VariableRefresh$1, VariableSort, Scope, EventFilterOptions, AnnotationEvent, AnnotationQuery, DataTransformerConfig, TimeOption, FieldConfig, FieldType, FieldValueMatcherConfig, ScopedVar, RawTimeRange } from '@grafana/data';
|
|
3
3
|
import * as _grafana_schema from '@grafana/schema';
|
|
4
4
|
import { VariableType, VariableHide, LoadingState, TimeZone, DataQuery, DataTopic, DataSourceRef, VariableRefresh, DashboardCursorSync, MatcherConfig, TableFieldOptions } from '@grafana/schema';
|
|
5
5
|
import * as React$1 from 'react';
|
|
@@ -1337,6 +1337,7 @@ interface QueryVariableState extends MultiValueVariableState {
|
|
|
1337
1337
|
datasource: DataSourceRef | null;
|
|
1338
1338
|
query: string | SceneDataQuery;
|
|
1339
1339
|
regex: string;
|
|
1340
|
+
regexApplyTo: VariableRegexApplyTo;
|
|
1340
1341
|
refresh: VariableRefresh$1;
|
|
1341
1342
|
sort: VariableSort;
|
|
1342
1343
|
staticOptions?: VariableValueOption[];
|
package/dist/index.js
CHANGED
|
@@ -9420,7 +9420,12 @@ function ensureVariableQueryModelIsADataQuery(variable) {
|
|
|
9420
9420
|
return variable.state.query;
|
|
9421
9421
|
}
|
|
9422
9422
|
|
|
9423
|
-
function metricNamesToVariableValues(
|
|
9423
|
+
function metricNamesToVariableValues({
|
|
9424
|
+
variableRegEx,
|
|
9425
|
+
variableRegexApplyTo,
|
|
9426
|
+
sort,
|
|
9427
|
+
metricNames
|
|
9428
|
+
}) {
|
|
9424
9429
|
var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j;
|
|
9425
9430
|
let regex;
|
|
9426
9431
|
let options = [];
|
|
@@ -9438,7 +9443,8 @@ function metricNamesToVariableValues(variableRegEx, sort, metricNames) {
|
|
|
9438
9443
|
text = text.toString();
|
|
9439
9444
|
}
|
|
9440
9445
|
if (regex) {
|
|
9441
|
-
const
|
|
9446
|
+
const applyTo = variableRegexApplyTo === "text" ? text : value;
|
|
9447
|
+
const matches = getAllMatches(applyTo, regex);
|
|
9442
9448
|
if (!matches.length) {
|
|
9443
9449
|
continue;
|
|
9444
9450
|
}
|
|
@@ -9665,12 +9671,13 @@ class QueryVariable extends MultiValueVariable {
|
|
|
9665
9671
|
datasource: null,
|
|
9666
9672
|
regex: "",
|
|
9667
9673
|
query: "",
|
|
9674
|
+
regexApplyTo: "value",
|
|
9668
9675
|
refresh: data.VariableRefresh.onDashboardLoad,
|
|
9669
9676
|
sort: data.VariableSort.disabled,
|
|
9670
9677
|
...initialState
|
|
9671
9678
|
});
|
|
9672
9679
|
this._variableDependency = new VariableDependencyConfig(this, {
|
|
9673
|
-
statePaths: ["regex", "query", "datasource"]
|
|
9680
|
+
statePaths: ["regex", "regexApplyTo", "query", "datasource"]
|
|
9674
9681
|
});
|
|
9675
9682
|
this.onSearchChange = (searchFilter) => {
|
|
9676
9683
|
if (!containsSearchFilter(this.state.query)) {
|
|
@@ -9719,7 +9726,12 @@ class QueryVariable extends MultiValueVariable {
|
|
|
9719
9726
|
if (this.state.regex) {
|
|
9720
9727
|
regex = sceneGraph.interpolate(this, this.state.regex, void 0, "regex");
|
|
9721
9728
|
}
|
|
9722
|
-
let options = metricNamesToVariableValues(
|
|
9729
|
+
let options = metricNamesToVariableValues({
|
|
9730
|
+
variableRegEx: regex,
|
|
9731
|
+
variableRegexApplyTo: this.state.regexApplyTo,
|
|
9732
|
+
sort: this.state.sort,
|
|
9733
|
+
metricNames: values
|
|
9734
|
+
});
|
|
9723
9735
|
if (this.state.staticOptions) {
|
|
9724
9736
|
const customOptions = this.state.staticOptions;
|
|
9725
9737
|
options = options.filter((option) => !customOptions.find((custom) => custom.value === option.value));
|