@grafana/scenes 6.47.1--canary.1303.19499670138.0 → 6.48.0--canary.1236.19576619727.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.
@@ -1,7 +1,7 @@
1
- import { getProcessedDataFrames, getFieldDisplayName, FieldType, isDataFrame } from '@grafana/data';
1
+ import { isDataFrame, getProcessedDataFrames, getFieldDisplayName, FieldType } from '@grafana/data';
2
2
  import { map } from 'rxjs';
3
3
 
4
- function toMetricFindValues() {
4
+ function toMetricFindValues(valueProp, textProp) {
5
5
  return (source) => source.pipe(
6
6
  map((panelData) => {
7
7
  const frames = panelData.series;
@@ -14,58 +14,86 @@ function toMetricFindValues() {
14
14
  if (frames[0].fields.length === 0) {
15
15
  return [];
16
16
  }
17
- const processedDataFrames = getProcessedDataFrames(frames);
17
+ const indices = validateIndices(findFieldsIndices(frames));
18
18
  const metrics = [];
19
- let valueIndex = -1;
20
- let textIndex = -1;
21
- let stringIndex = -1;
22
- let expandableIndex = -1;
23
- for (const frame of processedDataFrames) {
24
- for (let index = 0; index < frame.fields.length; index++) {
25
- const field = frame.fields[index];
26
- const fieldName = getFieldDisplayName(field, frame, frames).toLowerCase();
27
- if (field.type === FieldType.string && stringIndex === -1) {
28
- stringIndex = index;
29
- }
30
- if (fieldName === "text" && field.type === FieldType.string && textIndex === -1) {
31
- textIndex = index;
32
- }
33
- if (fieldName === "value" && field.type === FieldType.string && valueIndex === -1) {
34
- valueIndex = index;
35
- }
36
- if (fieldName === "expandable" && (field.type === FieldType.boolean || field.type === FieldType.number) && expandableIndex === -1) {
37
- expandableIndex = index;
38
- }
39
- }
40
- }
41
- if (stringIndex === -1) {
42
- throw new Error("Couldn't find any field of type string in the results.");
43
- }
44
19
  for (const frame of frames) {
45
20
  for (let index = 0; index < frame.length; index++) {
46
- const expandable = expandableIndex !== -1 ? frame.fields[expandableIndex].values.get(index) : void 0;
47
- const string = frame.fields[stringIndex].values.get(index);
48
- const text = textIndex !== -1 ? frame.fields[textIndex].values.get(index) : "";
49
- const value = valueIndex !== -1 ? frame.fields[valueIndex].values.get(index) : "";
50
- if (valueIndex === -1 && textIndex === -1) {
51
- metrics.push({ text: string, value: string, expandable });
52
- continue;
53
- }
54
- if (valueIndex === -1 && textIndex !== -1) {
55
- metrics.push({ text, value: text, expandable });
21
+ const fieldValue = (fieldIndex) => fieldIndex !== -1 ? frame.fields[fieldIndex].values.get(index) : void 0;
22
+ const value = fieldValue(indices.value);
23
+ const text = fieldValue(indices.text);
24
+ const expandable = fieldValue(indices.expandable);
25
+ if (!indices.properties.length) {
26
+ metrics.push({
27
+ value: value || text,
28
+ text: text || value,
29
+ expandable
30
+ });
56
31
  continue;
57
32
  }
58
- if (valueIndex !== -1 && textIndex === -1) {
59
- metrics.push({ text: value, value, expandable });
60
- continue;
33
+ const properties = {};
34
+ for (const p of indices.properties) {
35
+ properties[p.name] = fieldValue(p.index);
61
36
  }
62
- metrics.push({ text, value, expandable });
37
+ metrics.push({
38
+ value: value || valueProp || text || textProp,
39
+ text: text || textProp || value || valueProp,
40
+ properties,
41
+ expandable
42
+ });
63
43
  }
64
44
  }
65
45
  return metrics;
66
46
  })
67
47
  );
68
48
  }
49
+ function findFieldsIndices(frames) {
50
+ const indices = {
51
+ value: -1,
52
+ text: -1,
53
+ expandable: -1,
54
+ properties: []
55
+ };
56
+ for (const frame of getProcessedDataFrames(frames)) {
57
+ for (let index = 0; index < frame.fields.length; index++) {
58
+ const field = frame.fields[index];
59
+ const fieldName = getFieldDisplayName(field, frame, frames).toLowerCase();
60
+ if (field.type === FieldType.string) {
61
+ if (fieldName === "value") {
62
+ if (indices.value === -1) {
63
+ indices.value = index;
64
+ }
65
+ continue;
66
+ }
67
+ if (fieldName === "text") {
68
+ if (indices.text === -1) {
69
+ indices.text = index;
70
+ }
71
+ continue;
72
+ }
73
+ indices.properties.push({ name: fieldName, index });
74
+ continue;
75
+ }
76
+ if (fieldName === "expandable" && (field.type === FieldType.boolean || field.type === FieldType.number) && indices.expandable === -1) {
77
+ indices.expandable = index;
78
+ }
79
+ }
80
+ }
81
+ return indices;
82
+ }
83
+ function validateIndices(indices, valueProp, textProp) {
84
+ const hasNoValueOrText = indices.value === -1 && indices.text === -1;
85
+ if (hasNoValueOrText && !indices.properties.length) {
86
+ throw new Error("Couldn't find any field of type string in the results");
87
+ }
88
+ if (hasNoValueOrText && indices.properties.length === 1) {
89
+ indices.value = indices.properties[0].index;
90
+ indices.properties = [];
91
+ }
92
+ if (hasNoValueOrText && indices.properties.length && true && true) {
93
+ throw new Error("Properties found in series but missing valueProp and textProp");
94
+ }
95
+ return indices;
96
+ }
69
97
  function areMetricFindValues(data) {
70
98
  if (!data) {
71
99
  return false;
@@ -1 +1 @@
1
- {"version":3,"file":"toMetricFindValues.js","sources":["../../../../../src/variables/variants/query/toMetricFindValues.ts"],"sourcesContent":["import {\n FieldType,\n getFieldDisplayName,\n isDataFrame,\n MetricFindValue,\n PanelData,\n getProcessedDataFrames,\n} from '@grafana/data';\nimport { map, OperatorFunction } from 'rxjs';\n\nexport function toMetricFindValues(): OperatorFunction<PanelData, MetricFindValue[]> {\n return (source) =>\n source.pipe(\n map((panelData) => {\n const frames = panelData.series;\n if (!frames || !frames.length) {\n return [];\n }\n\n if (areMetricFindValues(frames)) {\n return frames;\n }\n\n if (frames[0].fields.length === 0) {\n return [];\n }\n\n const processedDataFrames = getProcessedDataFrames(frames);\n const metrics: MetricFindValue[] = [];\n\n let valueIndex = -1;\n let textIndex = -1;\n let stringIndex = -1;\n let expandableIndex = -1;\n\n for (const frame of processedDataFrames) {\n for (let index = 0; index < frame.fields.length; index++) {\n const field = frame.fields[index];\n const fieldName = getFieldDisplayName(field, frame, frames).toLowerCase();\n\n if (field.type === FieldType.string && stringIndex === -1) {\n stringIndex = index;\n }\n\n if (fieldName === 'text' && field.type === FieldType.string && textIndex === -1) {\n textIndex = index;\n }\n\n if (fieldName === 'value' && field.type === FieldType.string && valueIndex === -1) {\n valueIndex = index;\n }\n\n if (\n fieldName === 'expandable' &&\n (field.type === FieldType.boolean || field.type === FieldType.number) &&\n expandableIndex === -1\n ) {\n expandableIndex = index;\n }\n }\n }\n\n if (stringIndex === -1) {\n throw new Error(\"Couldn't find any field of type string in the results.\");\n }\n\n for (const frame of frames) {\n for (let index = 0; index < frame.length; index++) {\n const expandable = expandableIndex !== -1 ? frame.fields[expandableIndex].values.get(index) : undefined;\n const string = frame.fields[stringIndex].values.get(index);\n const text = textIndex !== -1 ? frame.fields[textIndex].values.get(index) : '';\n const value = valueIndex !== -1 ? frame.fields[valueIndex].values.get(index) : '';\n\n if (valueIndex === -1 && textIndex === -1) {\n metrics.push({ text: string, value: string, expandable });\n continue;\n }\n\n if (valueIndex === -1 && textIndex !== -1) {\n metrics.push({ text, value: text, expandable });\n continue;\n }\n\n if (valueIndex !== -1 && textIndex === -1) {\n metrics.push({ text: value, value, expandable });\n continue;\n }\n\n metrics.push({ text, value, expandable });\n }\n }\n\n return metrics;\n })\n );\n}\n\nfunction areMetricFindValues(data: any[]): data is MetricFindValue[] {\n if (!data) {\n return false;\n }\n\n if (!data.length) {\n return true;\n }\n\n const firstValue: any = data[0];\n\n if (isDataFrame(firstValue)) {\n return false;\n }\n\n for (const firstValueKey in firstValue) {\n if (!firstValue.hasOwnProperty(firstValueKey)) {\n continue;\n }\n\n if (\n firstValue[firstValueKey] !== null &&\n typeof firstValue[firstValueKey] !== 'string' &&\n typeof firstValue[firstValueKey] !== 'number'\n ) {\n continue;\n }\n\n const key = firstValueKey.toLowerCase();\n\n if (key === 'text' || key === 'value') {\n return true;\n }\n }\n\n return false;\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"toMetricFindValues.js","sources":["../../../../../src/variables/variants/query/toMetricFindValues.ts"],"sourcesContent":["import {\n DataFrame,\n FieldType,\n getFieldDisplayName,\n getProcessedDataFrames,\n isDataFrame,\n MetricFindValue,\n PanelData,\n} from '@grafana/data';\nimport { map, OperatorFunction } from 'rxjs';\n\ninterface MetricFindValueWithOptionalProperties extends MetricFindValue {\n properties?: Record<string, any>;\n}\n\nexport function toMetricFindValues(\n valueProp?: string,\n textProp?: string\n): OperatorFunction<PanelData, MetricFindValueWithOptionalProperties[]> {\n return (source) =>\n source.pipe(\n map((panelData) => {\n const frames = panelData.series;\n if (!frames || !frames.length) {\n return [];\n }\n\n if (areMetricFindValues(frames)) {\n return frames;\n }\n\n if (frames[0].fields.length === 0) {\n return [];\n }\n\n const indices = validateIndices(findFieldsIndices(frames), valueProp, textProp);\n\n const metrics: MetricFindValueWithOptionalProperties[] = [];\n\n for (const frame of frames) {\n for (let index = 0; index < frame.length; index++) {\n const fieldValue = (fieldIndex: number) =>\n fieldIndex !== -1 ? frame.fields[fieldIndex].values.get(index) : undefined;\n\n const value = fieldValue(indices.value);\n const text = fieldValue(indices.text);\n const expandable = fieldValue(indices.expandable);\n\n if (!indices.properties.length) {\n metrics.push({\n value: value || text,\n text: text || value,\n expandable,\n });\n continue;\n }\n\n const properties: Record<string, string> = {};\n for (const p of indices.properties) {\n properties[p.name] = fieldValue(p.index);\n }\n\n metrics.push({\n value:\n value ||\n (valueProp && properties[valueProp as string]) ||\n text ||\n (textProp && properties[textProp as string]),\n text:\n text ||\n (textProp && properties[textProp as string]) ||\n value ||\n (valueProp && properties[valueProp as string]),\n properties,\n expandable,\n });\n }\n }\n\n return metrics;\n })\n );\n}\n\ntype Indices = {\n value: number;\n text: number;\n properties: Array<{ name: string; index: number }>;\n expandable: number;\n};\n\nfunction findFieldsIndices(frames: DataFrame[]): Indices {\n const indices: Indices = {\n value: -1,\n text: -1,\n expandable: -1,\n properties: [],\n };\n\n for (const frame of getProcessedDataFrames(frames)) {\n for (let index = 0; index < frame.fields.length; index++) {\n const field = frame.fields[index];\n const fieldName = getFieldDisplayName(field, frame, frames).toLowerCase();\n\n if (field.type === FieldType.string) {\n if (fieldName === 'value') {\n if (indices.value === -1) {\n indices.value = index;\n }\n continue;\n }\n\n if (fieldName === 'text') {\n if (indices.text === -1) {\n indices.text = index;\n }\n continue;\n }\n\n indices.properties.push({ name: fieldName, index });\n continue;\n }\n\n if (\n fieldName === 'expandable' &&\n (field.type === FieldType.boolean || field.type === FieldType.number) &&\n indices.expandable === -1\n ) {\n indices.expandable = index;\n }\n }\n }\n\n return indices;\n}\n\nfunction validateIndices(indices: Indices, valueProp?: string, textProp?: string): Indices {\n const hasNoValueOrText = indices.value === -1 && indices.text === -1;\n\n if (hasNoValueOrText && !indices.properties.length) {\n throw new Error(\"Couldn't find any field of type string in the results\");\n }\n\n // A single field of type string that is neither named \"value\" nor \"text\" is considered as \"value\"\n if (hasNoValueOrText && indices.properties.length === 1) {\n indices.value = indices.properties[0].index;\n indices.properties = [];\n }\n\n if (hasNoValueOrText && indices.properties.length && !valueProp && !textProp) {\n throw new Error('Properties found in series but missing valueProp and textProp');\n }\n\n return indices;\n}\n\nfunction areMetricFindValues(data: any[]): data is MetricFindValue[] {\n if (!data) {\n return false;\n }\n\n if (!data.length) {\n return true;\n }\n\n const firstValue: any = data[0];\n\n if (isDataFrame(firstValue)) {\n return false;\n }\n\n for (const firstValueKey in firstValue) {\n if (!firstValue.hasOwnProperty(firstValueKey)) {\n continue;\n }\n\n if (\n firstValue[firstValueKey] !== null &&\n typeof firstValue[firstValueKey] !== 'string' &&\n typeof firstValue[firstValueKey] !== 'number'\n ) {\n continue;\n }\n\n const key = firstValueKey.toLowerCase();\n\n if (key === 'text' || key === 'value') {\n return true;\n }\n }\n\n return false;\n}\n"],"names":[],"mappings":";;;AAegB,SAAA,kBAAA,CACd,WACA,QACsE,EAAA;AACtE,EAAO,OAAA,CAAC,WACN,MAAO,CAAA,IAAA;AAAA,IACL,GAAA,CAAI,CAAC,SAAc,KAAA;AACjB,MAAA,MAAM,SAAS,SAAU,CAAA,MAAA;AACzB,MAAA,IAAI,CAAC,MAAA,IAAU,CAAC,MAAA,CAAO,MAAQ,EAAA;AAC7B,QAAA,OAAO,EAAC;AAAA;AAGV,MAAI,IAAA,mBAAA,CAAoB,MAAM,CAAG,EAAA;AAC/B,QAAO,OAAA,MAAA;AAAA;AAGT,MAAA,IAAI,MAAO,CAAA,CAAC,CAAE,CAAA,MAAA,CAAO,WAAW,CAAG,EAAA;AACjC,QAAA,OAAO,EAAC;AAAA;AAGV,MAAA,MAAM,UAAU,eAAgB,CAAA,iBAAA,CAAkB,MAAM,CAAsB,CAAA;AAE9E,MAAA,MAAM,UAAmD,EAAC;AAE1D,MAAA,KAAA,MAAW,SAAS,MAAQ,EAAA;AAC1B,QAAA,KAAA,IAAS,KAAQ,GAAA,CAAA,EAAG,KAAQ,GAAA,KAAA,CAAM,QAAQ,KAAS,EAAA,EAAA;AACjD,UAAA,MAAM,UAAa,GAAA,CAAC,UAClB,KAAA,UAAA,KAAe,EAAK,GAAA,KAAA,CAAM,MAAO,CAAA,UAAU,CAAE,CAAA,MAAA,CAAO,GAAI,CAAA,KAAK,CAAI,GAAA,MAAA;AAEnE,UAAM,MAAA,KAAA,GAAQ,UAAW,CAAA,OAAA,CAAQ,KAAK,CAAA;AACtC,UAAM,MAAA,IAAA,GAAO,UAAW,CAAA,OAAA,CAAQ,IAAI,CAAA;AACpC,UAAM,MAAA,UAAA,GAAa,UAAW,CAAA,OAAA,CAAQ,UAAU,CAAA;AAEhD,UAAI,IAAA,CAAC,OAAQ,CAAA,UAAA,CAAW,MAAQ,EAAA;AAC9B,YAAA,OAAA,CAAQ,IAAK,CAAA;AAAA,cACX,OAAO,KAAS,IAAA,IAAA;AAAA,cAChB,MAAM,IAAQ,IAAA,KAAA;AAAA,cACd;AAAA,aACD,CAAA;AACD,YAAA;AAAA;AAGF,UAAA,MAAM,aAAqC,EAAC;AAC5C,UAAW,KAAA,MAAA,CAAA,IAAK,QAAQ,UAAY,EAAA;AAClC,YAAA,UAAA,CAAW,CAAE,CAAA,IAAI,CAAI,GAAA,UAAA,CAAW,EAAE,KAAK,CAAA;AAAA;AAGzC,UAAA,OAAA,CAAQ,IAAK,CAAA;AAAA,YACX,KAAA,EACE,SACC,SACD,IAAA,IAAA,IACC,QAAyC;AAAA,YAC5C,IAAA,EACE,QACC,QACD,IAAA,KAAA,IACC,SAA2C;AAAA,YAC9C,UAAA;AAAA,YACA;AAAA,WACD,CAAA;AAAA;AACH;AAGF,MAAO,OAAA,OAAA;AAAA,KACR;AAAA,GACH;AACJ;AASA,SAAS,kBAAkB,MAA8B,EAAA;AACvD,EAAA,MAAM,OAAmB,GAAA;AAAA,IACvB,KAAO,EAAA,EAAA;AAAA,IACP,IAAM,EAAA,EAAA;AAAA,IACN,UAAY,EAAA,EAAA;AAAA,IACZ,YAAY;AAAC,GACf;AAEA,EAAW,KAAA,MAAA,KAAA,IAAS,sBAAuB,CAAA,MAAM,CAAG,EAAA;AAClD,IAAA,KAAA,IAAS,QAAQ,CAAG,EAAA,KAAA,GAAQ,KAAM,CAAA,MAAA,CAAO,QAAQ,KAAS,EAAA,EAAA;AACxD,MAAM,MAAA,KAAA,GAAQ,KAAM,CAAA,MAAA,CAAO,KAAK,CAAA;AAChC,MAAA,MAAM,YAAY,mBAAoB,CAAA,KAAA,EAAO,KAAO,EAAA,MAAM,EAAE,WAAY,EAAA;AAExE,MAAI,IAAA,KAAA,CAAM,IAAS,KAAA,SAAA,CAAU,MAAQ,EAAA;AACnC,QAAA,IAAI,cAAc,OAAS,EAAA;AACzB,UAAI,IAAA,OAAA,CAAQ,UAAU,EAAI,EAAA;AACxB,YAAA,OAAA,CAAQ,KAAQ,GAAA,KAAA;AAAA;AAElB,UAAA;AAAA;AAGF,QAAA,IAAI,cAAc,MAAQ,EAAA;AACxB,UAAI,IAAA,OAAA,CAAQ,SAAS,EAAI,EAAA;AACvB,YAAA,OAAA,CAAQ,IAAO,GAAA,KAAA;AAAA;AAEjB,UAAA;AAAA;AAGF,QAAA,OAAA,CAAQ,WAAW,IAAK,CAAA,EAAE,IAAM,EAAA,SAAA,EAAW,OAAO,CAAA;AAClD,QAAA;AAAA;AAGF,MAAA,IACE,SAAc,KAAA,YAAA,KACb,KAAM,CAAA,IAAA,KAAS,SAAU,CAAA,OAAA,IAAW,KAAM,CAAA,IAAA,KAAS,SAAU,CAAA,MAAA,CAAA,IAC9D,OAAQ,CAAA,UAAA,KAAe,EACvB,EAAA;AACA,QAAA,OAAA,CAAQ,UAAa,GAAA,KAAA;AAAA;AACvB;AACF;AAGF,EAAO,OAAA,OAAA;AACT;AAEA,SAAS,eAAA,CAAgB,OAAkB,EAAA,SAAA,EAAoB,QAA4B,EAAA;AACzF,EAAA,MAAM,gBAAmB,GAAA,OAAA,CAAQ,KAAU,KAAA,EAAA,IAAM,QAAQ,IAAS,KAAA,EAAA;AAElE,EAAA,IAAI,gBAAoB,IAAA,CAAC,OAAQ,CAAA,UAAA,CAAW,MAAQ,EAAA;AAClD,IAAM,MAAA,IAAI,MAAM,uDAAuD,CAAA;AAAA;AAIzE,EAAA,IAAI,gBAAoB,IAAA,OAAA,CAAQ,UAAW,CAAA,MAAA,KAAW,CAAG,EAAA;AACvD,IAAA,OAAA,CAAQ,KAAQ,GAAA,OAAA,CAAQ,UAAW,CAAA,CAAC,CAAE,CAAA,KAAA;AACtC,IAAA,OAAA,CAAQ,aAAa,EAAC;AAAA;AAGxB,EAAA,IAAI,oBAAoB,OAAQ,CAAA,UAAA,CAAW,UAAU,IAAC,IAAa,IAAW,EAAA;AAC5E,IAAM,MAAA,IAAI,MAAM,+DAA+D,CAAA;AAAA;AAGjF,EAAO,OAAA,OAAA;AACT;AAEA,SAAS,oBAAoB,IAAwC,EAAA;AACnE,EAAA,IAAI,CAAC,IAAM,EAAA;AACT,IAAO,OAAA,KAAA;AAAA;AAGT,EAAI,IAAA,CAAC,KAAK,MAAQ,EAAA;AAChB,IAAO,OAAA,IAAA;AAAA;AAGT,EAAM,MAAA,UAAA,GAAkB,KAAK,CAAC,CAAA;AAE9B,EAAI,IAAA,WAAA,CAAY,UAAU,CAAG,EAAA;AAC3B,IAAO,OAAA,KAAA;AAAA;AAGT,EAAA,KAAA,MAAW,iBAAiB,UAAY,EAAA;AACtC,IAAA,IAAI,CAAC,UAAA,CAAW,cAAe,CAAA,aAAa,CAAG,EAAA;AAC7C,MAAA;AAAA;AAGF,IAAA,IACE,UAAW,CAAA,aAAa,CAAM,KAAA,IAAA,IAC9B,OAAO,UAAA,CAAW,aAAa,CAAA,KAAM,QACrC,IAAA,OAAO,UAAW,CAAA,aAAa,MAAM,QACrC,EAAA;AACA,MAAA;AAAA;AAGF,IAAM,MAAA,GAAA,GAAM,cAAc,WAAY,EAAA;AAEtC,IAAI,IAAA,GAAA,KAAQ,MAAU,IAAA,GAAA,KAAQ,OAAS,EAAA;AACrC,MAAO,OAAA,IAAA;AAAA;AACT;AAGF,EAAO,OAAA,KAAA;AACT;;;;"}
@@ -41,7 +41,7 @@ function metricNamesToVariableValues(variableRegEx, sort, metricNames) {
41
41
  value = firstMatch[1];
42
42
  }
43
43
  }
44
- options.push({ label: text, value });
44
+ options.push({ label: text, value, properties: item.properties });
45
45
  }
46
46
  options = uniqBy(options, "value");
47
47
  return sortVariableValues(options, sort);
@@ -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 { stringToJsRegex, VariableSort } from '@grafana/data';\n\nimport { VariableValueOption } from '../../types';\n\nexport function metricNamesToVariableValues(variableRegEx: string, sort: VariableSort, metricNames: any[]) {\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 matches = getAllMatches(value, 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 });\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 || 7:\n // Sort by natural sort\n options = sortByNaturalSort(options);\n break;\n case VariableSort.naturalDesc || 8:\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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"}
1
+ {"version":3,"file":"utils.js","sources":["../../../../../src/variables/variants/query/utils.ts"],"sourcesContent":["import { isNumber, sortBy, toLower, uniqBy } from 'lodash';\n\nimport { stringToJsRegex, VariableSort } from '@grafana/data';\n\nimport { VariableValueOption } from '../../types';\n\nexport function metricNamesToVariableValues(variableRegEx: string, sort: VariableSort, metricNames: any[]) {\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 matches = getAllMatches(value, 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 || 7:\n // Sort by natural sort\n options = sortByNaturalSort(options);\n break;\n case VariableSort.naturalDesc || 8:\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
@@ -88,10 +88,12 @@ interface CustomVariableValue {
88
88
  }
89
89
  interface ValidateAndUpdateResult {
90
90
  }
91
+ type VariableValueOptionProperties = Record<string, any>;
91
92
  interface VariableValueOption {
92
93
  label: string;
93
94
  value: VariableValueSingle;
94
95
  group?: string;
96
+ properties?: VariableValueOptionProperties;
95
97
  }
96
98
  interface SceneVariableSetState extends SceneObjectState {
97
99
  variables: SceneVariable[];
@@ -1201,6 +1203,7 @@ interface VariableGetOptionsArgs {
1201
1203
  searchFilter?: string;
1202
1204
  }
1203
1205
  declare abstract class MultiValueVariable<TState extends MultiValueVariableState = MultiValueVariableState> extends SceneObjectBase<TState> implements SceneVariable<TState> {
1206
+ private static fieldAccessorCache;
1204
1207
  protected _urlSync: SceneObjectUrlSyncHandler;
1205
1208
  /**
1206
1209
  * Set to true to skip next value validation to maintain the current value even it it's not among the options (ie valid values)
@@ -1226,16 +1229,19 @@ declare abstract class MultiValueVariable<TState extends MultiValueVariableState
1226
1229
  */
1227
1230
  protected interceptStateUpdateAfterValidation(stateUpdate: Partial<MultiValueVariableState>): void;
1228
1231
  getValue(fieldPath?: string): VariableValue;
1232
+ private getFieldAccessor;
1229
1233
  getValueText(): string;
1230
1234
  hasAllValue(): boolean;
1231
1235
  getDefaultMultiState(options: VariableValueOption[]): {
1236
+ value: string[];
1237
+ text: string[];
1238
+ properties?: undefined;
1239
+ } | {
1232
1240
  value: VariableValueSingle[];
1233
1241
  text: string[];
1242
+ properties: (VariableValueOptionProperties | undefined)[];
1234
1243
  };
1235
- protected getDefaultSingleState(options: VariableValueOption[]): {
1236
- value: VariableValueSingle;
1237
- text: string;
1238
- };
1244
+ protected getDefaultSingleState(options: VariableValueOption[]): VariableValueOption;
1239
1245
  /**
1240
1246
  * Change the value and publish SceneVariableValueChangedEvent event.
1241
1247
  */
@@ -1255,11 +1261,13 @@ declare abstract class MultiValueVariable<TState extends MultiValueVariableState
1255
1261
 
1256
1262
  interface CustomVariableState extends MultiValueVariableState {
1257
1263
  query: string;
1264
+ valuesFormat?: 'csv' | 'json';
1258
1265
  }
1259
1266
  declare class CustomVariable extends MultiValueVariable<CustomVariableState> {
1260
1267
  protected _variableDependency: VariableDependencyConfig<CustomVariableState>;
1261
1268
  constructor(initialState: Partial<CustomVariableState>);
1262
1269
  transformCsvStringToOptions(str: string, interpolate?: boolean): VariableValueOption[];
1270
+ transformJsonToOptions(json: string): VariableValueOption[];
1263
1271
  getValueOptions(args: VariableGetOptionsArgs): Observable<VariableValueOption[]>;
1264
1272
  static Component: ({ model }: SceneComponentProps<MultiValueVariable>) => React__default.JSX.Element;
1265
1273
  }
@@ -1420,8 +1428,8 @@ declare class GroupByVariable extends MultiValueVariable<GroupByVariableState> {
1420
1428
  * Allows clearing the value of the variable to an empty value. Overrides default behavior of a MultiValueVariable
1421
1429
  */
1422
1430
  getDefaultMultiState(options: VariableValueOption[]): {
1423
- value: VariableValueSingle[];
1424
- text: string[];
1431
+ value: never[];
1432
+ text: never[];
1425
1433
  };
1426
1434
  }
1427
1435
  declare function GroupByVariableRenderer({ model }: SceneComponentProps<GroupByVariable>): React__default.JSX.Element;
@@ -2444,6 +2452,7 @@ declare function ScopesVariableRenderer({ model }: SceneComponentProps<ScopesVar
2444
2452
  interface LocalValueVariableState extends SceneVariableState {
2445
2453
  value: VariableValue;
2446
2454
  text: VariableValue;
2455
+ properties?: VariableValueOptionProperties;
2447
2456
  isMulti?: boolean;
2448
2457
  includeAll?: boolean;
2449
2458
  }
@@ -2452,8 +2461,10 @@ interface LocalValueVariableState extends SceneVariableState {
2452
2461
  * that exists in a ancestor SceneVariableSet.
2453
2462
  */
2454
2463
  declare class LocalValueVariable extends SceneObjectBase<LocalValueVariableState> implements SceneVariable<LocalValueVariableState> {
2464
+ private static fieldAccessorCache;
2455
2465
  constructor(initialState: Partial<LocalValueVariableState>);
2456
- getValue(): VariableValue;
2466
+ getValue(fieldPath?: string): VariableValue;
2467
+ private getFieldAccessor;
2457
2468
  getValueText(): string;
2458
2469
  /**
2459
2470
  * Checks the ancestor of our parent SceneVariableSet for loading state of a variable with the same name
@@ -3597,4 +3608,4 @@ declare const sceneUtils: {
3597
3608
  };
3598
3609
 
3599
3610
  export { AdHocFiltersComboboxRenderer, AdHocFiltersVariable, AdHocFiltersVariableController, ConstantVariable, ControlsLabel, CustomVariable, DataProviderProxy, DataSourceVariable, EmbeddedScene, FieldConfigBuilder, FieldConfigBuilders, FieldConfigOverridesBuilder, GroupByVariable, IntervalVariable, LazyLoader, LocalValueVariable, MultiOrSingleValueSelect, MultiValueVariable, NestedScene, NewSceneObjectAddedEvent, PATH_ID_SEPARATOR, PanelBuilders, PanelOptionsBuilders, QueryVariable, RuntimeDataSource, SafeSerializableSceneObject, SceneApp, SceneAppPage, SceneByFrameRepeater, SceneByVariableRepeater, SceneCSSGridItem, SceneCSSGridLayout, SceneCanvasText, SceneControlsSpacer, SceneDataLayerBase, SceneDataLayerControls, SceneDataLayerSet, SceneDataLayerSetBase, SceneDataNode, SceneDataTransformer, SceneDebugger, SceneFlexItem, SceneFlexLayout, SceneGridItem, SceneGridLayout, SceneGridLayoutDragStartEvent, SceneGridRow, SceneObjectBase, SceneObjectRef, SceneObjectStateChangedEvent, SceneObjectUrlSyncConfig, SceneQueryRunner, SceneReactObject, SceneRefreshPicker, SceneTimePicker, SceneTimeRange, SceneTimeRangeCompare, SceneTimeRangeTransformerBase, SceneTimeZoneOverride, SceneToolbarButton, SceneToolbarInput, SceneVariableSet, SceneVariableValueChangedEvent, ScopesVariable, SplitLayout, SwitchVariable, TestVariable, TextBoxVariable, UrlSyncContextProvider, UrlSyncManager, UserActionEvent, VariableDependencyConfig, VariableValueControl, VariableValueSelectWrapper, VariableValueSelectors, VizConfigBuilder, VizConfigBuilders, VizPanel, VizPanelBuilder, VizPanelExploreButton, VizPanelMenu, index$2 as behaviors, index as dataLayers, escapeUrlPipeDelimiters, formatRegistry, getExploreURL, isCustomVariableValue, isDataLayer, isDataRequestEnricher, isFiltersRequestEnricher, isSceneObject, loadResources, index$1 as performanceUtils, registerQueryWithController, registerRuntimeDataSource, sceneGraph, sceneUtils, useSceneApp, useSceneObjectState, useUrlSync, writePerformanceLog };
3600
- export type { AdHocFilterWithLabels, AdHocFiltersController, AdHocFiltersControllerState, CancelActivationHandler, ControlsLayout, CustomFormatterVariable, CustomTransformOperator, CustomTransformerDefinition, CustomVariableValue, DataLayerFilter, DataRequestEnricher, DeepPartial, EmbeddedSceneState, ExtraQueryDataProcessor, ExtraQueryDescriptor, ExtraQueryProvider, FiltersRequestEnricher, FormatVariable, InterpolationFormatParameter, MacroVariableConstructor, MultiValueVariableState, QueryRunnerState, SceneActivationHandler, SceneAppDrilldownView, SceneAppPageLike, SceneAppPageState, SceneAppRoute, SceneComponent, SceneComponentProps, SceneDataLayerProvider, SceneDataLayerProviderState, SceneDataProvider, SceneDataProviderResult, SceneDataQuery, SceneDataState, SceneDataTransformerState, SceneDeactivationHandler, SceneFlexItemLike, SceneFlexItemState, SceneGridItemLike, SceneGridItemStateLike, SceneLayout, SceneLayoutChildOptions, SceneLayoutState, SceneObject, SceneObjectState, SceneObjectStateChangedPayload, SceneObjectUrlSyncHandler, SceneObjectUrlValue, SceneObjectUrlValues, SceneObjectWithUrlSync, SceneQueryControllerEntry, SceneQueryControllerEntryType, SceneQueryControllerLike, SceneRefreshPickerState, SceneRouteMatch, SceneStateChangedHandler, SceneStatelessBehavior, SceneTimeRangeLike, SceneTimeRangeState, SceneUrlSyncOptions, SceneVariable, SceneVariableDependencyConfigLike, SceneVariableSetState, SceneVariableState, SceneVariables, UrlSyncManagerLike, UseStateHookOptions, ValidateAndUpdateResult, VariableCustomFormatterFn, VariableGetOptionsArgs, VariableValue, VariableValueOption, VariableValueSingle, VizConfig, VizPanelState };
3611
+ export type { AdHocFilterWithLabels, AdHocFiltersController, AdHocFiltersControllerState, CancelActivationHandler, ControlsLayout, CustomFormatterVariable, CustomTransformOperator, CustomTransformerDefinition, CustomVariableValue, DataLayerFilter, DataRequestEnricher, DeepPartial, EmbeddedSceneState, ExtraQueryDataProcessor, ExtraQueryDescriptor, ExtraQueryProvider, FiltersRequestEnricher, FormatVariable, InterpolationFormatParameter, MacroVariableConstructor, MultiValueVariableState, QueryRunnerState, SceneActivationHandler, SceneAppDrilldownView, SceneAppPageLike, SceneAppPageState, SceneAppRoute, SceneComponent, SceneComponentProps, SceneDataLayerProvider, SceneDataLayerProviderState, SceneDataProvider, SceneDataProviderResult, SceneDataQuery, SceneDataState, SceneDataTransformerState, SceneDeactivationHandler, SceneFlexItemLike, SceneFlexItemState, SceneGridItemLike, SceneGridItemStateLike, SceneLayout, SceneLayoutChildOptions, SceneLayoutState, SceneObject, SceneObjectState, SceneObjectStateChangedPayload, SceneObjectUrlSyncHandler, SceneObjectUrlValue, SceneObjectUrlValues, SceneObjectWithUrlSync, SceneQueryControllerEntry, SceneQueryControllerEntryType, SceneQueryControllerLike, SceneRefreshPickerState, SceneRouteMatch, SceneStateChangedHandler, SceneStatelessBehavior, SceneTimeRangeLike, SceneTimeRangeState, SceneUrlSyncOptions, SceneVariable, SceneVariableDependencyConfigLike, SceneVariableSetState, SceneVariableState, SceneVariables, UrlSyncManagerLike, UseStateHookOptions, ValidateAndUpdateResult, VariableCustomFormatterFn, VariableGetOptionsArgs, VariableValue, VariableValueOption, VariableValueOptionProperties, VariableValueSingle, VizConfig, VizPanelState };