@grafana/scenes 4.13.0--canary.705.8847545922.0 → 4.13.1--canary.711.8884688944.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/CHANGELOG.md +12 -0
- package/dist/esm/core/sceneGraph/sceneGraph.js +2 -2
- package/dist/esm/core/sceneGraph/sceneGraph.js.map +1 -1
- package/dist/esm/variables/adhoc/AdHocFiltersVariableUrlSyncHandler.js +30 -6
- package/dist/esm/variables/adhoc/AdHocFiltersVariableUrlSyncHandler.js.map +1 -1
- package/dist/esm/variables/components/VariableValueSelect.js +13 -3
- package/dist/esm/variables/components/VariableValueSelect.js.map +1 -1
- package/dist/esm/variables/components/VariableValueSelectors.js +7 -20
- package/dist/esm/variables/components/VariableValueSelectors.js.map +1 -1
- package/dist/esm/variables/groupby/GroupByVariable.js +10 -24
- package/dist/esm/variables/groupby/GroupByVariable.js.map +1 -1
- package/dist/esm/variables/interpolation/sceneInterpolator.js +9 -2
- package/dist/esm/variables/interpolation/sceneInterpolator.js.map +1 -1
- package/dist/esm/variables/utils.js +1 -27
- package/dist/esm/variables/utils.js.map +1 -1
- package/dist/index.d.ts +8 -4
- package/dist/index.js +75 -138
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
- package/dist/esm/variables/groupby/GroupByVariableUrlSyncHandler.js +0 -58
- package/dist/esm/variables/groupby/GroupByVariableUrlSyncHandler.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sources":["../../../src/variables/utils.ts"],"sourcesContent":["import { isEqual } from 'lodash';\nimport { VariableValue } from './types';\nimport { AdHocVariableFilter } from '@grafana/data';\nimport { sceneGraph } from '../core/sceneGraph';\nimport { SceneObject, SceneObjectState } from '../core/types';\nimport { DataQueryExtended, SceneQueryRunner } from '../querying/SceneQueryRunner';\nimport { DataSourceRef } from '@grafana/schema';\n\nexport function isVariableValueEqual(a: VariableValue | null | undefined, b: VariableValue | null | undefined) {\n if (a === b) {\n return true;\n }\n\n return isEqual(a, b);\n}\n\nexport function safeStringifyValue(value: unknown) {\n // Avoid circular references ignoring those references\n const getCircularReplacer = () => {\n const seen = new WeakSet();\n return (_: string, value: object | null) => {\n if (typeof value === 'object' && value !== null) {\n if (seen.has(value)) {\n return;\n }\n seen.add(value);\n }\n return value;\n };\n };\n\n try {\n return JSON.stringify(value, getCircularReplacer());\n } catch (error) {\n console.error(error);\n }\n\n return '';\n}\n\nexport function renderPrometheusLabelFilters(filters: AdHocVariableFilter[]) {\n return filters.map((filter) => renderFilter(filter)).join(',');\n}\n\nfunction renderFilter(filter: AdHocVariableFilter) {\n let value = '';\n\n if (filter.operator === '=~' || filter.operator === '!~¨') {\n value = escapeLabelValueInRegexSelector(filter.value);\n } else {\n value = escapeLabelValueInExactSelector(filter.value);\n }\n\n return `${filter.key}${filter.operator}\"${value}\"`;\n}\n\n// based on the openmetrics-documentation, the 3 symbols we have to handle are:\n// - \\n ... the newline character\n// - \\ ... the backslash character\n// - \" ... the double-quote character\nexport function escapeLabelValueInExactSelector(labelValue: string): string {\n return labelValue.replace(/\\\\/g, '\\\\\\\\').replace(/\\n/g, '\\\\n').replace(/\"/g, '\\\\\"');\n}\n\nexport function escapeLabelValueInRegexSelector(labelValue: string): string {\n return escapeLabelValueInExactSelector(escapeLokiRegexp(labelValue));\n}\n\nexport function isRegexSelector(selector?: string) {\n if (selector && (selector.includes('=~') || selector.includes('!~'))) {\n return true;\n }\n return false;\n}\n\n// Loki regular-expressions use the RE2 syntax (https://github.com/google/re2/wiki/Syntax),\n// so every character that matches something in that list has to be escaped.\n// the list of meta characters is: *+?()|\\.[]{}^$\n// we make a javascript regular expression that matches those characters:\nconst RE2_METACHARACTERS = /[*+?()|\\\\.\\[\\]{}^$]/g;\nfunction escapeLokiRegexp(value: string): string {\n return value.replace(RE2_METACHARACTERS, '\\\\$&');\n}\n\n/**\n * Get all queries in the scene that have the same datasource as provided source object\n */\nexport function getQueriesForVariables(\n sourceObject: SceneObject<SceneObjectState & { datasource: DataSourceRef | null }>\n) {\n const runners = sceneGraph.findAllObjects(\n sourceObject.getRoot(),\n (o) => o instanceof SceneQueryRunner\n ) as SceneQueryRunner[];\n\n const applicableRunners = filterOutInactiveRunnerDuplicates(runners).filter((r) => {\n return r.state.datasource?.uid === sourceObject.state.datasource?.uid;\n });\n\n if (applicableRunners.length === 0) {\n return [];\n }\n\n const result: DataQueryExtended[] = [];\n applicableRunners.forEach((r) => {\n result.push(...r.state.queries);\n });\n\n return result;\n}\n\n// Filters out inactive runner duplicates, keeping only the ones that are currently active.\n// This is needed for scnearios whan a query runner is cloned and the original is not removed but de-activated.\n// Can happen i.e. when editing a panel in Grafana Core dashboards.\nfunction filterOutInactiveRunnerDuplicates(runners: SceneQueryRunner[]) {\n // Group items by key\n const groupedItems: { [key: string]: SceneQueryRunner[] } = {};\n\n for (const item of runners) {\n if (item.state.key) {\n if (!(item.state.key in groupedItems)) {\n groupedItems[item.state.key] = [];\n }\n groupedItems[item.state.key].push(item);\n }\n }\n\n // Filter out inactive items and concatenate active items\n return Object.values(groupedItems).flatMap((group) => {\n const activeItems = group.filter((item) => item.isActive);\n // Keep inactive items if there's only one item with the key\n if (activeItems.length === 0 && group.length === 1) {\n return group;\n }\n return activeItems;\n });\n}\n
|
|
1
|
+
{"version":3,"file":"utils.js","sources":["../../../src/variables/utils.ts"],"sourcesContent":["import { isEqual } from 'lodash';\nimport { VariableValue } from './types';\nimport { AdHocVariableFilter } from '@grafana/data';\nimport { sceneGraph } from '../core/sceneGraph';\nimport { SceneObject, SceneObjectState } from '../core/types';\nimport { DataQueryExtended, SceneQueryRunner } from '../querying/SceneQueryRunner';\nimport { DataSourceRef } from '@grafana/schema';\n\nexport function isVariableValueEqual(a: VariableValue | null | undefined, b: VariableValue | null | undefined) {\n if (a === b) {\n return true;\n }\n\n return isEqual(a, b);\n}\n\nexport function safeStringifyValue(value: unknown) {\n // Avoid circular references ignoring those references\n const getCircularReplacer = () => {\n const seen = new WeakSet();\n return (_: string, value: object | null) => {\n if (typeof value === 'object' && value !== null) {\n if (seen.has(value)) {\n return;\n }\n seen.add(value);\n }\n return value;\n };\n };\n\n try {\n return JSON.stringify(value, getCircularReplacer());\n } catch (error) {\n console.error(error);\n }\n\n return '';\n}\n\nexport function renderPrometheusLabelFilters(filters: AdHocVariableFilter[]) {\n return filters.map((filter) => renderFilter(filter)).join(',');\n}\n\nfunction renderFilter(filter: AdHocVariableFilter) {\n let value = '';\n\n if (filter.operator === '=~' || filter.operator === '!~¨') {\n value = escapeLabelValueInRegexSelector(filter.value);\n } else {\n value = escapeLabelValueInExactSelector(filter.value);\n }\n\n return `${filter.key}${filter.operator}\"${value}\"`;\n}\n\n// based on the openmetrics-documentation, the 3 symbols we have to handle are:\n// - \\n ... the newline character\n// - \\ ... the backslash character\n// - \" ... the double-quote character\nexport function escapeLabelValueInExactSelector(labelValue: string): string {\n return labelValue.replace(/\\\\/g, '\\\\\\\\').replace(/\\n/g, '\\\\n').replace(/\"/g, '\\\\\"');\n}\n\nexport function escapeLabelValueInRegexSelector(labelValue: string): string {\n return escapeLabelValueInExactSelector(escapeLokiRegexp(labelValue));\n}\n\nexport function isRegexSelector(selector?: string) {\n if (selector && (selector.includes('=~') || selector.includes('!~'))) {\n return true;\n }\n return false;\n}\n\n// Loki regular-expressions use the RE2 syntax (https://github.com/google/re2/wiki/Syntax),\n// so every character that matches something in that list has to be escaped.\n// the list of meta characters is: *+?()|\\.[]{}^$\n// we make a javascript regular expression that matches those characters:\nconst RE2_METACHARACTERS = /[*+?()|\\\\.\\[\\]{}^$]/g;\nfunction escapeLokiRegexp(value: string): string {\n return value.replace(RE2_METACHARACTERS, '\\\\$&');\n}\n\n/**\n * Get all queries in the scene that have the same datasource as provided source object\n */\nexport function getQueriesForVariables(\n sourceObject: SceneObject<SceneObjectState & { datasource: DataSourceRef | null }>\n) {\n const runners = sceneGraph.findAllObjects(\n sourceObject.getRoot(),\n (o) => o instanceof SceneQueryRunner\n ) as SceneQueryRunner[];\n\n const applicableRunners = filterOutInactiveRunnerDuplicates(runners).filter((r) => {\n return r.state.datasource?.uid === sourceObject.state.datasource?.uid;\n });\n\n if (applicableRunners.length === 0) {\n return [];\n }\n\n const result: DataQueryExtended[] = [];\n applicableRunners.forEach((r) => {\n result.push(...r.state.queries);\n });\n\n return result;\n}\n\n// Filters out inactive runner duplicates, keeping only the ones that are currently active.\n// This is needed for scnearios whan a query runner is cloned and the original is not removed but de-activated.\n// Can happen i.e. when editing a panel in Grafana Core dashboards.\nfunction filterOutInactiveRunnerDuplicates(runners: SceneQueryRunner[]) {\n // Group items by key\n const groupedItems: { [key: string]: SceneQueryRunner[] } = {};\n\n for (const item of runners) {\n if (item.state.key) {\n if (!(item.state.key in groupedItems)) {\n groupedItems[item.state.key] = [];\n }\n groupedItems[item.state.key].push(item);\n }\n }\n\n // Filter out inactive items and concatenate active items\n return Object.values(groupedItems).flatMap((group) => {\n const activeItems = group.filter((item) => item.isActive);\n // Keep inactive items if there's only one item with the key\n if (activeItems.length === 0 && group.length === 1) {\n return group;\n }\n return activeItems;\n });\n}\n"],"names":["value"],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -5,6 +5,7 @@ import * as rxjs from 'rxjs';
|
|
|
5
5
|
import { Observable, Unsubscribable, MonoTypeOperatorFunction, Subscription, ReplaySubject } from 'rxjs';
|
|
6
6
|
import * as _grafana_schema from '@grafana/schema';
|
|
7
7
|
import { VariableType, VariableHide, TimeZone, DataTopic, DataSourceRef, DataQuery as DataQuery$1, VariableRefresh, LoadingState, DashboardCursorSync, MatcherConfig, TableFieldOptions } from '@grafana/schema';
|
|
8
|
+
import { VariableInterpolation } from '@grafana/runtime';
|
|
8
9
|
import { PanelContext, IconName } from '@grafana/ui';
|
|
9
10
|
import ReactGridLayout from 'react-grid-layout';
|
|
10
11
|
import { RouteComponentProps } from 'react-router-dom';
|
|
@@ -881,8 +882,6 @@ interface GroupByVariableState extends MultiValueVariableState {
|
|
|
881
882
|
name: string;
|
|
882
883
|
/** The visible keys to group on */
|
|
883
884
|
defaultOptions?: MetricFindValue[];
|
|
884
|
-
/** Options obtained through URL sync */
|
|
885
|
-
urlOptions?: MetricFindValue[];
|
|
886
885
|
/** Base filters to always apply when looking up keys */
|
|
887
886
|
baseFilters?: AdHocVariableFilter[];
|
|
888
887
|
/** Datasource to use for getTagKeys and also controls which scene queries the group by should apply to */
|
|
@@ -918,7 +917,6 @@ type getTagKeysProvider = (set: GroupByVariable, currentKey: string | null) => P
|
|
|
918
917
|
declare class GroupByVariable extends MultiValueVariable<GroupByVariableState> {
|
|
919
918
|
static Component: typeof GroupByVariableRenderer;
|
|
920
919
|
isLazy: boolean;
|
|
921
|
-
protected _urlSync: SceneObjectUrlSyncHandler;
|
|
922
920
|
validateAndUpdate(): Observable<ValidateAndUpdateResult>;
|
|
923
921
|
private _updateValueGivenNewOptions;
|
|
924
922
|
getValueOptions(args: VariableGetOptionsArgs): Observable<VariableValueOption[]>;
|
|
@@ -1017,8 +1015,14 @@ declare function getData(sceneObject: SceneObject): SceneDataProvider;
|
|
|
1017
1015
|
declare function getLayout(scene: SceneObject): SceneLayout | null;
|
|
1018
1016
|
/**
|
|
1019
1017
|
* Interpolates the given string using the current scene object as context. *
|
|
1018
|
+
*
|
|
1019
|
+
* Note: the interpolations array will be mutated by adding information about variables that
|
|
1020
|
+
* have been interpolated during replacement. Variables that were specified in the target but not found in
|
|
1021
|
+
* the list of available variables are also added to the array. See {@link VariableInterpolation} for more details.
|
|
1022
|
+
*
|
|
1023
|
+
* @param {VariableInterpolation[]} interpolations an optional array that is updated with interpolated variables.
|
|
1020
1024
|
*/
|
|
1021
|
-
declare function interpolate(sceneObject: SceneObject, value: string | undefined | null, scopedVars?: ScopedVars, format?: string | VariableCustomFormatterFn): string;
|
|
1025
|
+
declare function interpolate(sceneObject: SceneObject, value: string | undefined | null, scopedVars?: ScopedVars, format?: string | VariableCustomFormatterFn, interpolations?: VariableInterpolation[]): string;
|
|
1022
1026
|
/**
|
|
1023
1027
|
* Checks if the variable is currently loading or waiting to update.
|
|
1024
1028
|
* It also returns true if a dependency of the variable is loading.
|
package/dist/index.js
CHANGED
|
@@ -1304,7 +1304,7 @@ function lookupVariable(name, sceneObject) {
|
|
|
1304
1304
|
return null;
|
|
1305
1305
|
}
|
|
1306
1306
|
|
|
1307
|
-
function sceneInterpolator(sceneObject, target, scopedVars, format) {
|
|
1307
|
+
function sceneInterpolator(sceneObject, target, scopedVars, format, interpolations) {
|
|
1308
1308
|
if (!target) {
|
|
1309
1309
|
return target != null ? target : "";
|
|
1310
1310
|
}
|
|
@@ -1314,9 +1314,16 @@ function sceneInterpolator(sceneObject, target, scopedVars, format) {
|
|
|
1314
1314
|
const fmt = fmt2 || fmt3 || format;
|
|
1315
1315
|
const variable = lookupFormatVariable(variableName, match, scopedVars, sceneObject);
|
|
1316
1316
|
if (!variable) {
|
|
1317
|
+
if (interpolations) {
|
|
1318
|
+
interpolations.push({ match, variableName, fieldPath, format: fmt, value: match, found: false });
|
|
1319
|
+
}
|
|
1317
1320
|
return match;
|
|
1318
1321
|
}
|
|
1319
|
-
|
|
1322
|
+
const value = formatValue(variable, variable.getValue(fieldPath), fmt);
|
|
1323
|
+
if (interpolations) {
|
|
1324
|
+
interpolations.push({ match, variableName, fieldPath, format: fmt, value, found: value !== match });
|
|
1325
|
+
}
|
|
1326
|
+
return value;
|
|
1320
1327
|
});
|
|
1321
1328
|
}
|
|
1322
1329
|
function lookupFormatVariable(name, match, scopedVars, sceneObject) {
|
|
@@ -1455,11 +1462,11 @@ function getLayout(scene) {
|
|
|
1455
1462
|
}
|
|
1456
1463
|
return null;
|
|
1457
1464
|
}
|
|
1458
|
-
function interpolate(sceneObject, value, scopedVars, format) {
|
|
1465
|
+
function interpolate(sceneObject, value, scopedVars, format, interpolations) {
|
|
1459
1466
|
if (value === "" || value == null) {
|
|
1460
1467
|
return "";
|
|
1461
1468
|
}
|
|
1462
|
-
return sceneInterpolator(sceneObject, value, scopedVars, format);
|
|
1469
|
+
return sceneInterpolator(sceneObject, value, scopedVars, format, interpolations);
|
|
1463
1470
|
}
|
|
1464
1471
|
function hasVariableDependencyInLoadingState(sceneObject) {
|
|
1465
1472
|
if (!sceneObject.variableDependency) {
|
|
@@ -2307,7 +2314,7 @@ class SceneTimeRangeCompare extends SceneObjectBase {
|
|
|
2307
2314
|
SceneTimeRangeCompare.Component = SceneTimeRangeCompareRenderer;
|
|
2308
2315
|
function SceneTimeRangeCompareRenderer({ model }) {
|
|
2309
2316
|
var _a;
|
|
2310
|
-
const styles = ui.useStyles2(getStyles$
|
|
2317
|
+
const styles = ui.useStyles2(getStyles$a);
|
|
2311
2318
|
const { compareWith, compareOptions } = model.useState();
|
|
2312
2319
|
const [previousCompare, setPreviousCompare] = React__default["default"].useState(compareWith);
|
|
2313
2320
|
const previousValue = (_a = compareOptions.find(({ value: value2 }) => value2 === previousCompare)) != null ? _a : PREVIOUS_PERIOD_COMPARE_OPTION;
|
|
@@ -2347,7 +2354,7 @@ function SceneTimeRangeCompareRenderer({ model }) {
|
|
|
2347
2354
|
isOpen: false
|
|
2348
2355
|
}, previousValue.label));
|
|
2349
2356
|
}
|
|
2350
|
-
function getStyles$
|
|
2357
|
+
function getStyles$a(theme) {
|
|
2351
2358
|
return {
|
|
2352
2359
|
previewButton: css.css({
|
|
2353
2360
|
"&:disabled": {
|
|
@@ -2840,59 +2847,6 @@ class CustomAllValue {
|
|
|
2840
2847
|
}
|
|
2841
2848
|
}
|
|
2842
2849
|
|
|
2843
|
-
class GroupByVariableUrlSyncHandler {
|
|
2844
|
-
constructor(_sceneObject) {
|
|
2845
|
-
this._sceneObject = _sceneObject;
|
|
2846
|
-
}
|
|
2847
|
-
getKey() {
|
|
2848
|
-
return `var-${this._sceneObject.state.name}`;
|
|
2849
|
-
}
|
|
2850
|
-
getKeys() {
|
|
2851
|
-
if (this._sceneObject.state.skipUrlSync) {
|
|
2852
|
-
return [];
|
|
2853
|
-
}
|
|
2854
|
-
return [this.getKey()];
|
|
2855
|
-
}
|
|
2856
|
-
getUrlState() {
|
|
2857
|
-
if (this._sceneObject.state.skipUrlSync) {
|
|
2858
|
-
return {};
|
|
2859
|
-
}
|
|
2860
|
-
let { value: values, text: texts } = this._sceneObject.state;
|
|
2861
|
-
values = Array.isArray(values) ? values : [values];
|
|
2862
|
-
texts = Array.isArray(texts) ? texts : [texts];
|
|
2863
|
-
const urlValue = lodash.zip(values, texts).map(toUrlValues);
|
|
2864
|
-
return { [this.getKey()]: urlValue };
|
|
2865
|
-
}
|
|
2866
|
-
updateFromUrl(values) {
|
|
2867
|
-
let urlValue = values[this.getKey()];
|
|
2868
|
-
if (urlValue != null) {
|
|
2869
|
-
if (!this._sceneObject.isActive) {
|
|
2870
|
-
this._sceneObject.skipNextValidation = true;
|
|
2871
|
-
}
|
|
2872
|
-
urlValue = Array.isArray(urlValue) ? urlValue : [urlValue];
|
|
2873
|
-
const valuesLabelsPairs = urlValue.map((value) => value ? value.split(",") : [value]);
|
|
2874
|
-
let [values2, labels] = lodash.unzip(valuesLabelsPairs);
|
|
2875
|
-
values2 = (values2 != null ? values2 : []).map(unescapeUrlDelimiters);
|
|
2876
|
-
labels = (labels != null ? labels : []).map(unescapeUrlDelimiters);
|
|
2877
|
-
this._sceneObject.setState({
|
|
2878
|
-
urlOptions: values2.map((value, idx) => ({
|
|
2879
|
-
value,
|
|
2880
|
-
text: labels[idx]
|
|
2881
|
-
}))
|
|
2882
|
-
});
|
|
2883
|
-
this._sceneObject.changeValueTo(values2, labels);
|
|
2884
|
-
}
|
|
2885
|
-
}
|
|
2886
|
-
}
|
|
2887
|
-
function toUrlValues([value, label]) {
|
|
2888
|
-
if (value === void 0 || value === null) {
|
|
2889
|
-
return "";
|
|
2890
|
-
}
|
|
2891
|
-
value = String(value);
|
|
2892
|
-
label = label === void 0 || label === null ? value : String(label);
|
|
2893
|
-
return toUrlCommaDelimitedString(value, label);
|
|
2894
|
-
}
|
|
2895
|
-
|
|
2896
2850
|
var __defProp$z = Object.defineProperty;
|
|
2897
2851
|
var __defProps$n = Object.defineProperties;
|
|
2898
2852
|
var __getOwnPropDescs$n = Object.getOwnPropertyDescriptors;
|
|
@@ -2929,7 +2883,6 @@ class GroupByVariable extends MultiValueVariable {
|
|
|
2929
2883
|
noValueOnClear: true
|
|
2930
2884
|
}));
|
|
2931
2885
|
this.isLazy = true;
|
|
2932
|
-
this._urlSync = new GroupByVariableUrlSyncHandler(this);
|
|
2933
2886
|
this._getKeys = async (ds) => {
|
|
2934
2887
|
var _a, _b, _c;
|
|
2935
2888
|
const override = await ((_b = (_a = this.state).getTagKeysProvider) == null ? void 0 : _b.call(_a, this, null));
|
|
@@ -2979,11 +2932,9 @@ class GroupByVariable extends MultiValueVariable {
|
|
|
2979
2932
|
this.setState(stateUpdate);
|
|
2980
2933
|
}
|
|
2981
2934
|
getValueOptions(args) {
|
|
2982
|
-
var _a;
|
|
2983
|
-
const urlOptions = (_a = this.state.urlOptions) != null ? _a : [];
|
|
2984
2935
|
if (this.state.defaultOptions) {
|
|
2985
2936
|
return rxjs.of(
|
|
2986
|
-
|
|
2937
|
+
this.state.defaultOptions.map((o) => ({
|
|
2987
2938
|
label: o.text,
|
|
2988
2939
|
value: String(o.value)
|
|
2989
2940
|
}))
|
|
@@ -2999,7 +2950,7 @@ class GroupByVariable extends MultiValueVariable {
|
|
|
2999
2950
|
return rxjs.from(this._getKeys(ds)).pipe(
|
|
3000
2951
|
rxjs.take(1),
|
|
3001
2952
|
rxjs.mergeMap((data) => {
|
|
3002
|
-
const a =
|
|
2953
|
+
const a = data.map((i) => {
|
|
3003
2954
|
return {
|
|
3004
2955
|
label: i.text,
|
|
3005
2956
|
value: i.value ? String(i.value) : i.text
|
|
@@ -3017,24 +2968,14 @@ class GroupByVariable extends MultiValueVariable {
|
|
|
3017
2968
|
}
|
|
3018
2969
|
GroupByVariable.Component = GroupByVariableRenderer;
|
|
3019
2970
|
function GroupByVariableRenderer({ model }) {
|
|
3020
|
-
const { value,
|
|
3021
|
-
const
|
|
3022
|
-
const arrayValue = lodash.isArray(value) ? value : [value];
|
|
3023
|
-
const arrayText = lodash.isArray(text) ? text : [text];
|
|
3024
|
-
return arrayValue.map((value2, idx) => {
|
|
3025
|
-
var _a;
|
|
3026
|
-
return {
|
|
3027
|
-
value: value2,
|
|
3028
|
-
label: String((_a = arrayText[idx]) != null ? _a : value2)
|
|
3029
|
-
};
|
|
3030
|
-
});
|
|
3031
|
-
}, [value, text]);
|
|
2971
|
+
const { value, key, maxVisibleValues, noValueOnClear } = model.useState();
|
|
2972
|
+
const arrayValue = React.useMemo(() => lodash.isArray(value) ? value : [value], [value]);
|
|
3032
2973
|
const [isFetchingOptions, setIsFetchingOptions] = React.useState(false);
|
|
3033
2974
|
const [isOptionsOpen, setIsOptionsOpen] = React.useState(false);
|
|
3034
|
-
const [uncommittedValue, setUncommittedValue] = React.useState(
|
|
2975
|
+
const [uncommittedValue, setUncommittedValue] = React.useState(arrayValue);
|
|
3035
2976
|
React.useEffect(() => {
|
|
3036
|
-
setUncommittedValue(
|
|
3037
|
-
}, [
|
|
2977
|
+
setUncommittedValue(arrayValue);
|
|
2978
|
+
}, [arrayValue]);
|
|
3038
2979
|
const onInputChange = model.onSearchChange ? (value2, meta) => {
|
|
3039
2980
|
if (meta.action === "input-change") {
|
|
3040
2981
|
model.onSearchChange(value2);
|
|
@@ -3059,13 +3000,13 @@ function GroupByVariableRenderer({ model }) {
|
|
|
3059
3000
|
isLoading: isFetchingOptions,
|
|
3060
3001
|
onInputChange,
|
|
3061
3002
|
onBlur: () => {
|
|
3062
|
-
model.changeValueTo(uncommittedValue
|
|
3003
|
+
model.changeValueTo(uncommittedValue);
|
|
3063
3004
|
},
|
|
3064
3005
|
onChange: (newValue, action) => {
|
|
3065
3006
|
if (action.action === "clear" && noValueOnClear) {
|
|
3066
3007
|
model.changeValueTo([]);
|
|
3067
3008
|
}
|
|
3068
|
-
setUncommittedValue(newValue);
|
|
3009
|
+
setUncommittedValue(newValue.map((x) => x.value));
|
|
3069
3010
|
},
|
|
3070
3011
|
onOpenMenu: async () => {
|
|
3071
3012
|
setIsFetchingOptions(true);
|
|
@@ -3094,7 +3035,7 @@ function LoadingIndicator(props) {
|
|
|
3094
3035
|
}
|
|
3095
3036
|
|
|
3096
3037
|
function ControlsLabel(props) {
|
|
3097
|
-
const styles = ui.useStyles2(getStyles$
|
|
3038
|
+
const styles = ui.useStyles2(getStyles$9);
|
|
3098
3039
|
const theme = ui.useTheme2();
|
|
3099
3040
|
const isVertical = props.layout === "vertical";
|
|
3100
3041
|
const loadingIndicator = Boolean(props.isLoading) ? /* @__PURE__ */ React__default["default"].createElement("div", {
|
|
@@ -3157,7 +3098,7 @@ function ControlsLabel(props) {
|
|
|
3157
3098
|
}
|
|
3158
3099
|
return labelElement;
|
|
3159
3100
|
}
|
|
3160
|
-
const getStyles$
|
|
3101
|
+
const getStyles$9 = (theme) => ({
|
|
3161
3102
|
horizontalLabel: css.css({
|
|
3162
3103
|
background: theme.isDark ? theme.colors.background.primary : theme.colors.background.secondary,
|
|
3163
3104
|
display: `flex`,
|
|
@@ -3219,7 +3160,7 @@ function keyLabelToOption(key, label) {
|
|
|
3219
3160
|
}
|
|
3220
3161
|
function AdHocFilterRenderer({ filter, model }) {
|
|
3221
3162
|
var _a, _b;
|
|
3222
|
-
const styles = ui.useStyles2(getStyles$
|
|
3163
|
+
const styles = ui.useStyles2(getStyles$8);
|
|
3223
3164
|
const [state, setState] = React.useState({});
|
|
3224
3165
|
const keyValue = keyLabelToOption(filter.key, filter.keyLabel);
|
|
3225
3166
|
const valueValue = keyLabelToOption(filter.value, filter.valueLabel);
|
|
@@ -3312,7 +3253,7 @@ function AdHocFilterRenderer({ filter, model }) {
|
|
|
3312
3253
|
onClick: () => model._removeFilter(filter)
|
|
3313
3254
|
}));
|
|
3314
3255
|
}
|
|
3315
|
-
const getStyles$
|
|
3256
|
+
const getStyles$8 = (theme) => ({
|
|
3316
3257
|
field: css.css({
|
|
3317
3258
|
marginBottom: 0
|
|
3318
3259
|
}),
|
|
@@ -3388,7 +3329,7 @@ class AdHocFiltersVariableUrlSyncHandler {
|
|
|
3388
3329
|
if (filters.length === 0) {
|
|
3389
3330
|
return { [this.getKey()]: [""] };
|
|
3390
3331
|
}
|
|
3391
|
-
const value = filters.map((filter) => toArray(filter).map(
|
|
3332
|
+
const value = filters.map((filter) => toArray(filter).map(escapePipeDelimiters).join("|"));
|
|
3392
3333
|
return { [this.getKey()]: value };
|
|
3393
3334
|
}
|
|
3394
3335
|
updateFromUrl(values) {
|
|
@@ -3408,13 +3349,39 @@ function deserializeUrlToFilters(value) {
|
|
|
3408
3349
|
const filter = toFilter(value);
|
|
3409
3350
|
return filter === null ? [] : [filter];
|
|
3410
3351
|
}
|
|
3352
|
+
function escapePipeDelimiters(value) {
|
|
3353
|
+
if (value === null || value === void 0) {
|
|
3354
|
+
return "";
|
|
3355
|
+
}
|
|
3356
|
+
return value = /\|/g[Symbol.replace](value, "__gfp__");
|
|
3357
|
+
}
|
|
3358
|
+
function escapeCommaDelimiters(value) {
|
|
3359
|
+
if (value === null || value === void 0) {
|
|
3360
|
+
return "";
|
|
3361
|
+
}
|
|
3362
|
+
return /,/g[Symbol.replace](value, "__gfc__");
|
|
3363
|
+
}
|
|
3364
|
+
function unescapeDelimiters(value) {
|
|
3365
|
+
if (value === null || value === void 0) {
|
|
3366
|
+
return "";
|
|
3367
|
+
}
|
|
3368
|
+
value = /__gfp__/g[Symbol.replace](value, "|");
|
|
3369
|
+
value = /__gfc__/g[Symbol.replace](value, ",");
|
|
3370
|
+
return value;
|
|
3371
|
+
}
|
|
3411
3372
|
function toArray(filter) {
|
|
3412
3373
|
return [
|
|
3413
|
-
|
|
3374
|
+
toCommaDelimitedString(filter.key, filter.keyLabel),
|
|
3414
3375
|
filter.operator,
|
|
3415
|
-
|
|
3376
|
+
toCommaDelimitedString(filter.value, filter.valueLabel)
|
|
3416
3377
|
];
|
|
3417
3378
|
}
|
|
3379
|
+
function toCommaDelimitedString(key, label) {
|
|
3380
|
+
if (!label || key === label) {
|
|
3381
|
+
return escapeCommaDelimiters(key);
|
|
3382
|
+
}
|
|
3383
|
+
return [key, label].map(escapeCommaDelimiters).join(",");
|
|
3384
|
+
}
|
|
3418
3385
|
function toFilter(urlValue) {
|
|
3419
3386
|
if (typeof urlValue !== "string" || urlValue.length === 0) {
|
|
3420
3387
|
return null;
|
|
@@ -3423,7 +3390,7 @@ function toFilter(urlValue) {
|
|
|
3423
3390
|
const [key2, label] = v.split(",");
|
|
3424
3391
|
acc.push(key2, label != null ? label : key2);
|
|
3425
3392
|
return acc;
|
|
3426
|
-
}, []).map(
|
|
3393
|
+
}, []).map(unescapeDelimiters);
|
|
3427
3394
|
return {
|
|
3428
3395
|
key,
|
|
3429
3396
|
keyLabel,
|
|
@@ -3580,7 +3547,7 @@ function renderExpression(builder, filters) {
|
|
|
3580
3547
|
}
|
|
3581
3548
|
function AdHocFiltersVariableRenderer({ model }) {
|
|
3582
3549
|
const { filters, readOnly, addFilterButtonText } = model.useState();
|
|
3583
|
-
const styles = ui.useStyles2(getStyles$
|
|
3550
|
+
const styles = ui.useStyles2(getStyles$7);
|
|
3584
3551
|
return /* @__PURE__ */ React__default["default"].createElement("div", {
|
|
3585
3552
|
className: styles.wrapper
|
|
3586
3553
|
}, filters.map((filter, index) => /* @__PURE__ */ React__default["default"].createElement(React__default["default"].Fragment, {
|
|
@@ -3594,7 +3561,7 @@ function AdHocFiltersVariableRenderer({ model }) {
|
|
|
3594
3561
|
addFilterButtonText
|
|
3595
3562
|
}));
|
|
3596
3563
|
}
|
|
3597
|
-
const getStyles$
|
|
3564
|
+
const getStyles$7 = (theme) => ({
|
|
3598
3565
|
wrapper: css.css({
|
|
3599
3566
|
display: "flex",
|
|
3600
3567
|
gap: theme.spacing(2),
|
|
@@ -4133,32 +4100,6 @@ function filterOutInactiveRunnerDuplicates(runners) {
|
|
|
4133
4100
|
return activeItems;
|
|
4134
4101
|
});
|
|
4135
4102
|
}
|
|
4136
|
-
function escapeUrlPipeDelimiters(value) {
|
|
4137
|
-
if (value === null || value === void 0) {
|
|
4138
|
-
return "";
|
|
4139
|
-
}
|
|
4140
|
-
return value = /\|/g[Symbol.replace](value, "__gfp__");
|
|
4141
|
-
}
|
|
4142
|
-
function escapeUrlCommaDelimiters(value) {
|
|
4143
|
-
if (value === null || value === void 0) {
|
|
4144
|
-
return "";
|
|
4145
|
-
}
|
|
4146
|
-
return /,/g[Symbol.replace](value, "__gfc__");
|
|
4147
|
-
}
|
|
4148
|
-
function unescapeUrlDelimiters(value) {
|
|
4149
|
-
if (value === null || value === void 0) {
|
|
4150
|
-
return "";
|
|
4151
|
-
}
|
|
4152
|
-
value = /__gfp__/g[Symbol.replace](value, "|");
|
|
4153
|
-
value = /__gfc__/g[Symbol.replace](value, ",");
|
|
4154
|
-
return value;
|
|
4155
|
-
}
|
|
4156
|
-
function toUrlCommaDelimitedString(key, label) {
|
|
4157
|
-
if (!label || key === label) {
|
|
4158
|
-
return escapeUrlCommaDelimiters(key);
|
|
4159
|
-
}
|
|
4160
|
-
return [key, label].map(escapeUrlCommaDelimiters).join(",");
|
|
4161
|
-
}
|
|
4162
4103
|
|
|
4163
4104
|
function isAdHocVariable(variable) {
|
|
4164
4105
|
return variable.state.type === "adhoc";
|
|
@@ -6089,22 +6030,12 @@ function VariableValueSelectWrapper({ variable, layout, showAlways }) {
|
|
|
6089
6030
|
if (state.hide === data.VariableHide.hideVariable && !showAlways) {
|
|
6090
6031
|
return null;
|
|
6091
6032
|
}
|
|
6092
|
-
if (layout === "vertical") {
|
|
6093
|
-
return /* @__PURE__ */ React__default["default"].createElement("div", {
|
|
6094
|
-
className: verticalContainer,
|
|
6095
|
-
"data-testid": e2eSelectors.selectors.pages.Dashboard.SubMenu.submenuItem
|
|
6096
|
-
}, /* @__PURE__ */ React__default["default"].createElement(VariableLabel, {
|
|
6097
|
-
variable,
|
|
6098
|
-
layout
|
|
6099
|
-
}), /* @__PURE__ */ React__default["default"].createElement(variable.Component, {
|
|
6100
|
-
model: variable
|
|
6101
|
-
}));
|
|
6102
|
-
}
|
|
6103
6033
|
return /* @__PURE__ */ React__default["default"].createElement("div", {
|
|
6104
|
-
className: containerStyle,
|
|
6034
|
+
className: css.cx(containerStyle, { [verticalContainer]: layout === "vertical" }),
|
|
6105
6035
|
"data-testid": e2eSelectors.selectors.pages.Dashboard.SubMenu.submenuItem
|
|
6106
6036
|
}, /* @__PURE__ */ React__default["default"].createElement(VariableLabel, {
|
|
6107
|
-
variable
|
|
6037
|
+
variable,
|
|
6038
|
+
layout
|
|
6108
6039
|
}), /* @__PURE__ */ React__default["default"].createElement(variable.Component, {
|
|
6109
6040
|
model: variable
|
|
6110
6041
|
}));
|
|
@@ -6120,18 +6051,15 @@ function VariableLabel({ variable, layout }) {
|
|
|
6120
6051
|
return /* @__PURE__ */ React__default["default"].createElement(ControlsLabel, {
|
|
6121
6052
|
htmlFor: elementId,
|
|
6122
6053
|
isLoading: state.loading,
|
|
6123
|
-
onCancel:
|
|
6124
|
-
var _a2;
|
|
6125
|
-
return (_a2 = variable.onCancel) == null ? void 0 : _a2.call(variable);
|
|
6126
|
-
},
|
|
6054
|
+
onCancel: variable.onCancel,
|
|
6127
6055
|
label: labelOrName,
|
|
6128
6056
|
error: state.error,
|
|
6129
6057
|
layout,
|
|
6130
6058
|
description: (_b = state.description) != null ? _b : void 0
|
|
6131
6059
|
});
|
|
6132
6060
|
}
|
|
6133
|
-
const containerStyle = css.css({ display: "flex" });
|
|
6134
|
-
const verticalContainer = css.css({
|
|
6061
|
+
const containerStyle = css.css({ display: "flex", overflow: "hidden" });
|
|
6062
|
+
const verticalContainer = css.css({ flexDirection: "column" });
|
|
6135
6063
|
|
|
6136
6064
|
class VariableValueControl extends SceneObjectBase {
|
|
6137
6065
|
}
|
|
@@ -6422,6 +6350,7 @@ class ConstantVariable extends SceneObjectBase {
|
|
|
6422
6350
|
|
|
6423
6351
|
function VariableValueSelect({ model }) {
|
|
6424
6352
|
const { value, key } = model.useState();
|
|
6353
|
+
const styles = ui.useStyles2(getStyles$6);
|
|
6425
6354
|
const onInputChange = model.onSearchChange ? (value2, meta) => {
|
|
6426
6355
|
if (meta.action === "input-change") {
|
|
6427
6356
|
model.onSearchChange(value2);
|
|
@@ -6440,7 +6369,8 @@ function VariableValueSelect({ model }) {
|
|
|
6440
6369
|
"data-testid": e2eSelectors.selectors.pages.Dashboard.SubMenu.submenuItemValueDropDownValueLinkTexts(`${value}`),
|
|
6441
6370
|
onChange: (newValue) => {
|
|
6442
6371
|
model.changeValueTo(newValue.value, newValue.label);
|
|
6443
|
-
}
|
|
6372
|
+
},
|
|
6373
|
+
className: styles.overflow
|
|
6444
6374
|
});
|
|
6445
6375
|
}
|
|
6446
6376
|
function VariableValueSelectMulti({ model }) {
|
|
@@ -6457,6 +6387,7 @@ function VariableValueSelectMulti({ model }) {
|
|
|
6457
6387
|
}
|
|
6458
6388
|
} : void 0;
|
|
6459
6389
|
const placeholder = options.length > 0 ? "Select value" : "";
|
|
6390
|
+
const styles = ui.useStyles2(getStyles$6);
|
|
6460
6391
|
return /* @__PURE__ */ React__default["default"].createElement(ui.MultiSelect, {
|
|
6461
6392
|
id: key,
|
|
6462
6393
|
placeholder,
|
|
@@ -6480,7 +6411,8 @@ function VariableValueSelectMulti({ model }) {
|
|
|
6480
6411
|
model.changeValueTo([]);
|
|
6481
6412
|
}
|
|
6482
6413
|
setUncommittedValue(newValue.map((x) => x.value));
|
|
6483
|
-
}
|
|
6414
|
+
},
|
|
6415
|
+
className: styles.overflow
|
|
6484
6416
|
});
|
|
6485
6417
|
}
|
|
6486
6418
|
function renderSelectForVariable(model) {
|
|
@@ -6494,6 +6426,11 @@ function renderSelectForVariable(model) {
|
|
|
6494
6426
|
});
|
|
6495
6427
|
}
|
|
6496
6428
|
}
|
|
6429
|
+
const getStyles$6 = () => ({
|
|
6430
|
+
overflow: css.css({
|
|
6431
|
+
overflow: "hidden"
|
|
6432
|
+
})
|
|
6433
|
+
});
|
|
6497
6434
|
|
|
6498
6435
|
var __defProp$i = Object.defineProperty;
|
|
6499
6436
|
var __getOwnPropSymbols$i = Object.getOwnPropertySymbols;
|