@grafana/scenes 6.3.0 → 6.4.0--canary.1062.13769817941.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/adhoc/AdHocFiltersCombobox/AdHocFilterPill.js +12 -3
- package/dist/esm/variables/adhoc/AdHocFiltersCombobox/AdHocFilterPill.js.map +1 -1
- package/dist/esm/variables/adhoc/AdHocFiltersCombobox/AdHocFiltersCombobox.js +11 -4
- package/dist/esm/variables/adhoc/AdHocFiltersCombobox/AdHocFiltersCombobox.js.map +1 -1
- package/dist/esm/variables/adhoc/AdHocFiltersVariable.js +70 -9
- package/dist/esm/variables/adhoc/AdHocFiltersVariable.js.map +1 -1
- package/dist/esm/variables/adhoc/AdHocFiltersVariableUrlSyncHandler.js +41 -9
- package/dist/esm/variables/adhoc/AdHocFiltersVariableUrlSyncHandler.js.map +1 -1
- package/dist/esm/variables/utils.js +11 -1
- package/dist/esm/variables/utils.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.js +141 -23
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/dist/index.js
CHANGED
|
@@ -3971,19 +3971,44 @@ class AdHocFiltersVariableUrlSyncHandler {
|
|
|
3971
3971
|
}
|
|
3972
3972
|
getUrlState() {
|
|
3973
3973
|
const filters = this._variable.state.filters;
|
|
3974
|
-
|
|
3974
|
+
const baseFilters = this._variable.state.baseFilters;
|
|
3975
|
+
let value = [];
|
|
3976
|
+
if (filters.length === 0 && (baseFilters == null ? void 0 : baseFilters.length) === 0) {
|
|
3975
3977
|
return { [this.getKey()]: [""] };
|
|
3976
3978
|
}
|
|
3977
|
-
|
|
3978
|
-
|
|
3979
|
+
if (filters.length) {
|
|
3980
|
+
value.push(
|
|
3981
|
+
...filters.filter(isFilterComplete).filter((filter) => !filter.hidden).map((filter) => toArray(filter).map(escapeUrlPipeDelimiters).join("|"))
|
|
3982
|
+
);
|
|
3983
|
+
}
|
|
3984
|
+
if (baseFilters == null ? void 0 : baseFilters.length) {
|
|
3985
|
+
value.push(
|
|
3986
|
+
...baseFilters == null ? void 0 : baseFilters.filter(isFilterComplete).filter((filter) => !filter.hidden && filter.origin && filter.originalValue).map(
|
|
3987
|
+
(filter) => {
|
|
3988
|
+
var _a, _b;
|
|
3989
|
+
return toArray(filter).map(escapeInjectedFilterUrlDelimiters).join("|").concat(
|
|
3990
|
+
`#${(_b = (_a = filter.originalValue) == null ? void 0 : _a.map(escapeInjectedFilterUrlDelimiters).join("|")) != null ? _b : ""}#${filter.origin}`
|
|
3991
|
+
);
|
|
3992
|
+
}
|
|
3993
|
+
)
|
|
3994
|
+
);
|
|
3995
|
+
}
|
|
3996
|
+
return {
|
|
3997
|
+
[this.getKey()]: value.length ? value : [""]
|
|
3998
|
+
};
|
|
3979
3999
|
}
|
|
3980
4000
|
updateFromUrl(values) {
|
|
3981
4001
|
const urlValue = values[this.getKey()];
|
|
3982
4002
|
if (urlValue == null) {
|
|
3983
4003
|
return;
|
|
3984
4004
|
}
|
|
3985
|
-
|
|
3986
|
-
|
|
4005
|
+
if (urlValue) {
|
|
4006
|
+
const filters = deserializeUrlToFilters(urlValue);
|
|
4007
|
+
this._variable.setState({
|
|
4008
|
+
filters: filters.filter((f) => !f.origin),
|
|
4009
|
+
baseFilters: filters.filter((f) => f.origin)
|
|
4010
|
+
});
|
|
4011
|
+
}
|
|
3987
4012
|
}
|
|
3988
4013
|
}
|
|
3989
4014
|
function deserializeUrlToFilters(value) {
|
|
@@ -4008,10 +4033,12 @@ function toArray(filter) {
|
|
|
4008
4033
|
return result;
|
|
4009
4034
|
}
|
|
4010
4035
|
function toFilter(urlValue) {
|
|
4036
|
+
var _a;
|
|
4011
4037
|
if (typeof urlValue !== "string" || urlValue.length === 0) {
|
|
4012
4038
|
return null;
|
|
4013
4039
|
}
|
|
4014
|
-
const [
|
|
4040
|
+
const [filter, originalValues, origin] = urlValue.split("#");
|
|
4041
|
+
const [key, keyLabel, operator, _operatorLabel, ...values] = filter.split("|").reduce((acc, v) => {
|
|
4015
4042
|
const [key2, label] = v.split(",");
|
|
4016
4043
|
acc.push(key2, label != null ? label : key2);
|
|
4017
4044
|
return acc;
|
|
@@ -4023,9 +4050,14 @@ function toFilter(urlValue) {
|
|
|
4023
4050
|
value: values[0],
|
|
4024
4051
|
values: isMultiValueOperator(operator) ? values.filter((_, index) => index % 2 === 0) : void 0,
|
|
4025
4052
|
valueLabels: values.filter((_, index) => index % 2 === 1),
|
|
4026
|
-
condition: ""
|
|
4053
|
+
condition: "",
|
|
4054
|
+
origin: isFilterOrigin(origin) ? origin : void 0,
|
|
4055
|
+
originalValue: originalValues && originalValues.length ? (_a = originalValues.split("|")) != null ? _a : [originalValues] : void 0
|
|
4027
4056
|
};
|
|
4028
4057
|
}
|
|
4058
|
+
function isFilterOrigin(value) {
|
|
4059
|
+
return value === FilterOrigin.Scopes || value === FilterOrigin.Dashboards;
|
|
4060
|
+
}
|
|
4029
4061
|
function isFilter(filter) {
|
|
4030
4062
|
return filter !== null && typeof filter.key === "string" && typeof filter.value === "string";
|
|
4031
4063
|
}
|
|
@@ -4873,13 +4905,20 @@ const AdHocCombobox = React.forwardRef(function AdHocCombobox2({ filter, model,
|
|
|
4873
4905
|
className: styles.pillWrapper
|
|
4874
4906
|
}, (filter == null ? void 0 : filter.key) ? /* @__PURE__ */ React__default["default"].createElement("div", {
|
|
4875
4907
|
className: css.cx(styles.basePill, styles.keyPill)
|
|
4876
|
-
}, keyLabel) : null, (filter == null ? void 0 : filter.key) && (filter == null ? void 0 : filter.operator) && filterInputType !== "operator" ? /* @__PURE__ */ React__default["default"].createElement("div", {
|
|
4908
|
+
}, keyLabel) : null, (filter == null ? void 0 : filter.key) && (filter == null ? void 0 : filter.operator) && filterInputType !== "operator" ? /* @__PURE__ */ React__default["default"].createElement("div", __spreadValues$B({
|
|
4877
4909
|
id: operatorIdentifier,
|
|
4878
|
-
className: css.cx(
|
|
4879
|
-
|
|
4910
|
+
className: css.cx(
|
|
4911
|
+
styles.basePill,
|
|
4912
|
+
!filter.origin && styles.operatorPill,
|
|
4913
|
+
filter.origin && styles.keyPill,
|
|
4914
|
+
operatorIdentifier
|
|
4915
|
+
),
|
|
4880
4916
|
"aria-label": "Edit filter operator",
|
|
4881
4917
|
tabIndex: 0,
|
|
4882
4918
|
onClick: (event) => {
|
|
4919
|
+
if (filter.origin) {
|
|
4920
|
+
return;
|
|
4921
|
+
}
|
|
4883
4922
|
event.stopPropagation();
|
|
4884
4923
|
setInputValue("");
|
|
4885
4924
|
switchInputType("operator", setInputType, void 0, refs.domReference.current);
|
|
@@ -4891,7 +4930,7 @@ const AdHocCombobox = React.forwardRef(function AdHocCombobox2({ filter, model,
|
|
|
4891
4930
|
switchInputType("operator", setInputType, void 0, refs.domReference.current);
|
|
4892
4931
|
}
|
|
4893
4932
|
}
|
|
4894
|
-
}, filter.operator) : null, /* @__PURE__ */ React__default["default"].createElement("div", {
|
|
4933
|
+
}, !filter.origin && { role: "button" }), filter.operator) : null, /* @__PURE__ */ React__default["default"].createElement("div", {
|
|
4895
4934
|
ref: multiValuePillWrapperRef
|
|
4896
4935
|
}), isMultiValueEdit ? filterMultiValues.map((item, i) => /* @__PURE__ */ React__default["default"].createElement(MultiValuePill, {
|
|
4897
4936
|
key: `${item.value}-${i}`,
|
|
@@ -5138,13 +5177,13 @@ function AdHocFilterPill({ filter, model, readOnly, focusOnWipInputRef }) {
|
|
|
5138
5177
|
const handleChangeViewMode = React.useCallback(
|
|
5139
5178
|
(event, shouldFocusOnPillWrapperOverride) => {
|
|
5140
5179
|
event == null ? void 0 : event.stopPropagation();
|
|
5141
|
-
if (readOnly
|
|
5180
|
+
if (readOnly) {
|
|
5142
5181
|
return;
|
|
5143
5182
|
}
|
|
5144
5183
|
setShouldFocusOnPillWrapper(shouldFocusOnPillWrapperOverride != null ? shouldFocusOnPillWrapperOverride : !viewMode);
|
|
5145
5184
|
setViewMode(!viewMode);
|
|
5146
5185
|
},
|
|
5147
|
-
[readOnly, viewMode
|
|
5186
|
+
[readOnly, viewMode]
|
|
5148
5187
|
);
|
|
5149
5188
|
React.useEffect(() => {
|
|
5150
5189
|
var _a2;
|
|
@@ -5208,11 +5247,20 @@ function AdHocFilterPill({ filter, model, readOnly, focusOnWipInputRef }) {
|
|
|
5208
5247
|
size: "md",
|
|
5209
5248
|
className: styles.pillIcon,
|
|
5210
5249
|
tooltip: `Remove filter with key ${keyLabel}`
|
|
5211
|
-
}) : null, filter.origin && /* @__PURE__ */ React__default["default"].createElement(ui.IconButton, {
|
|
5250
|
+
}) : null, filter.origin && !filter.originalValue && /* @__PURE__ */ React__default["default"].createElement(ui.IconButton, {
|
|
5212
5251
|
name: "info-circle",
|
|
5213
5252
|
size: "md",
|
|
5214
5253
|
className: styles.pillIcon,
|
|
5215
5254
|
tooltip: `This is a ${filter.origin} injected filter`
|
|
5255
|
+
}), filter.origin && filter.originalValue && /* @__PURE__ */ React__default["default"].createElement(ui.IconButton, {
|
|
5256
|
+
onClick: (e) => {
|
|
5257
|
+
e.stopPropagation();
|
|
5258
|
+
model.restoreOriginalFilter(filter);
|
|
5259
|
+
},
|
|
5260
|
+
name: "history",
|
|
5261
|
+
size: "md",
|
|
5262
|
+
className: styles.pillIcon,
|
|
5263
|
+
tooltip: `Restore filter to its original value`
|
|
5216
5264
|
}));
|
|
5217
5265
|
}
|
|
5218
5266
|
return /* @__PURE__ */ React__default["default"].createElement(AdHocCombobox, {
|
|
@@ -5410,14 +5458,17 @@ const OPERATORS = [
|
|
|
5410
5458
|
];
|
|
5411
5459
|
class AdHocFiltersVariable extends SceneObjectBase {
|
|
5412
5460
|
constructor(state) {
|
|
5413
|
-
var _a, _b;
|
|
5461
|
+
var _a, _b, _c, _d, _e;
|
|
5414
5462
|
super(__spreadValues$z({
|
|
5415
5463
|
type: "adhoc",
|
|
5416
5464
|
name: (_a = state.name) != null ? _a : "Filters",
|
|
5417
5465
|
filters: [],
|
|
5418
5466
|
datasource: null,
|
|
5419
5467
|
applyMode: "auto",
|
|
5420
|
-
filterExpression: (
|
|
5468
|
+
filterExpression: (_e = state.filterExpression) != null ? _e : renderExpression(state.expressionBuilder, [
|
|
5469
|
+
...(_c = (_b = state.baseFilters) == null ? void 0 : _b.filter((filter) => filter.origin)) != null ? _c : [],
|
|
5470
|
+
...(_d = state.filters) != null ? _d : []
|
|
5471
|
+
])
|
|
5421
5472
|
}, state));
|
|
5422
5473
|
this._scopedVars = { __sceneObject: wrapInSafeSerializableSceneObject(this) };
|
|
5423
5474
|
this._dataSourceSrv = runtime.getDataSourceSrv();
|
|
@@ -5427,9 +5478,15 @@ class AdHocFiltersVariable extends SceneObjectBase {
|
|
|
5427
5478
|
}
|
|
5428
5479
|
}
|
|
5429
5480
|
setState(update) {
|
|
5481
|
+
var _a, _b, _c;
|
|
5430
5482
|
let filterExpressionChanged = false;
|
|
5431
|
-
if (update.filters && update.filters !== this.state.filters && !update.filterExpression) {
|
|
5432
|
-
update.
|
|
5483
|
+
if ((update.filters && update.filters !== this.state.filters || update.baseFilters && update.baseFilters !== this.state.baseFilters) && !update.filterExpression) {
|
|
5484
|
+
const filters = (_a = update.filters) != null ? _a : this.state.filters;
|
|
5485
|
+
const baseFilters = (_b = update.baseFilters) != null ? _b : this.state.baseFilters;
|
|
5486
|
+
update.filterExpression = renderExpression(this.state.expressionBuilder, [
|
|
5487
|
+
...(_c = baseFilters == null ? void 0 : baseFilters.filter((filter) => filter.origin)) != null ? _c : [],
|
|
5488
|
+
...filters != null ? filters : []
|
|
5489
|
+
]);
|
|
5433
5490
|
filterExpressionChanged = update.filterExpression !== this.state.filterExpression;
|
|
5434
5491
|
}
|
|
5435
5492
|
super.setState(update);
|
|
@@ -5438,10 +5495,14 @@ class AdHocFiltersVariable extends SceneObjectBase {
|
|
|
5438
5495
|
}
|
|
5439
5496
|
}
|
|
5440
5497
|
updateFilters(filters, options) {
|
|
5498
|
+
var _a, _b;
|
|
5441
5499
|
let filterExpressionChanged = false;
|
|
5442
5500
|
let filterExpression = void 0;
|
|
5443
5501
|
if (filters && filters !== this.state.filters) {
|
|
5444
|
-
filterExpression = renderExpression(this.state.expressionBuilder,
|
|
5502
|
+
filterExpression = renderExpression(this.state.expressionBuilder, [
|
|
5503
|
+
...(_b = (_a = this.state.baseFilters) == null ? void 0 : _a.filter((filter) => filter.origin)) != null ? _b : [],
|
|
5504
|
+
...filters
|
|
5505
|
+
]);
|
|
5445
5506
|
filterExpressionChanged = filterExpression !== this.state.filterExpression;
|
|
5446
5507
|
}
|
|
5447
5508
|
super.setState({
|
|
@@ -5452,11 +5513,40 @@ class AdHocFiltersVariable extends SceneObjectBase {
|
|
|
5452
5513
|
this.publishEvent(new SceneVariableValueChangedEvent(this), true);
|
|
5453
5514
|
}
|
|
5454
5515
|
}
|
|
5516
|
+
restoreOriginalFilter(filter) {
|
|
5517
|
+
var _a;
|
|
5518
|
+
const original = {
|
|
5519
|
+
originalValue: void 0
|
|
5520
|
+
};
|
|
5521
|
+
if ((_a = filter.originalValue) == null ? void 0 : _a.length) {
|
|
5522
|
+
original.value = filter.originalValue[0];
|
|
5523
|
+
original.values = filter.originalValue;
|
|
5524
|
+
original.valueLabels = filter.originalValue;
|
|
5525
|
+
}
|
|
5526
|
+
this._updateFilter(filter, original);
|
|
5527
|
+
}
|
|
5455
5528
|
getValue() {
|
|
5456
5529
|
return this.state.filterExpression;
|
|
5457
5530
|
}
|
|
5458
5531
|
_updateFilter(filter, update) {
|
|
5459
|
-
|
|
5532
|
+
var _a;
|
|
5533
|
+
const { baseFilters, filters, _wip } = this.state;
|
|
5534
|
+
if (filter.origin) {
|
|
5535
|
+
const currentValues = filter.values ? filter.values : [filter.value];
|
|
5536
|
+
const updateValues = update.values || (update.value ? [update.value] : void 0);
|
|
5537
|
+
const originalValueOverride = update.hasOwnProperty("originalValue");
|
|
5538
|
+
if (!originalValueOverride && updateValues && !filter.originalValue && !lodash.isEqual(currentValues, updateValues)) {
|
|
5539
|
+
update.originalValue = currentValues;
|
|
5540
|
+
}
|
|
5541
|
+
if (!originalValueOverride && lodash.isEqual(updateValues, filter.originalValue)) {
|
|
5542
|
+
update.originalValue = void 0;
|
|
5543
|
+
}
|
|
5544
|
+
const updatedBaseFilters = (_a = baseFilters == null ? void 0 : baseFilters.map((f) => {
|
|
5545
|
+
return f === filter ? __spreadValues$z(__spreadValues$z({}, f), update) : f;
|
|
5546
|
+
})) != null ? _a : [];
|
|
5547
|
+
this.setState({ baseFilters: updatedBaseFilters });
|
|
5548
|
+
return;
|
|
5549
|
+
}
|
|
5460
5550
|
if (filter === _wip) {
|
|
5461
5551
|
if ("value" in update && update["value"] !== "") {
|
|
5462
5552
|
this.setState({ filters: [...filters, __spreadValues$z(__spreadValues$z({}, _wip), update)], _wip: void 0 });
|
|
@@ -5542,7 +5632,7 @@ class AdHocFiltersVariable extends SceneObjectBase {
|
|
|
5542
5632
|
return keys.map(toSelectableValue);
|
|
5543
5633
|
}
|
|
5544
5634
|
async _getValuesFor(filter) {
|
|
5545
|
-
var _a, _b, _c;
|
|
5635
|
+
var _a, _b, _c, _d, _e, _f;
|
|
5546
5636
|
const override = await ((_b = (_a = this.state).getTagValuesProvider) == null ? void 0 : _b.call(_a, this, filter));
|
|
5547
5637
|
if (override && override.replace) {
|
|
5548
5638
|
return dataFromResponse(override.values).map(toSelectableValue);
|
|
@@ -5551,15 +5641,33 @@ class AdHocFiltersVariable extends SceneObjectBase {
|
|
|
5551
5641
|
if (!ds || !ds.getTagValues) {
|
|
5552
5642
|
return [];
|
|
5553
5643
|
}
|
|
5554
|
-
const
|
|
5644
|
+
const filteredBaseFilters = (_d = (_c = this.state.baseFilters) == null ? void 0 : _c.filter((f) => f.origin && f.key !== filter.key)) != null ? _d : [];
|
|
5645
|
+
const otherFilters = this.state.filters.filter((f) => f.key !== filter.key).concat(filteredBaseFilters);
|
|
5555
5646
|
const timeRange = sceneGraph.getTimeRange(this).state.value;
|
|
5556
5647
|
const queries = this.state.useQueriesAsFilterForOptions ? getQueriesForVariables(this) : void 0;
|
|
5648
|
+
const injectedScopes = (_f = (_e = getEnrichedFiltersRequest(this)) == null ? void 0 : _e.scopes) == null ? void 0 : _f.map((scope) => {
|
|
5649
|
+
return __spreadProps$n(__spreadValues$z({}, scope), {
|
|
5650
|
+
spec: __spreadProps$n(__spreadValues$z({}, scope.spec), {
|
|
5651
|
+
filters: scope.spec.filters.filter(
|
|
5652
|
+
(f) => {
|
|
5653
|
+
var _a2;
|
|
5654
|
+
return !((_a2 = this.state.baseFilters) == null ? void 0 : _a2.find((bf) => bf.key === f.key && "scopes" /* Scopes */));
|
|
5655
|
+
}
|
|
5656
|
+
)
|
|
5657
|
+
})
|
|
5658
|
+
});
|
|
5659
|
+
});
|
|
5660
|
+
const scopeProps = {};
|
|
5661
|
+
if (injectedScopes) {
|
|
5662
|
+
scopeProps.scopes = injectedScopes;
|
|
5663
|
+
scopeProps.scopesInjected = true;
|
|
5664
|
+
}
|
|
5557
5665
|
const response = await ds.getTagValues(__spreadValues$z({
|
|
5558
5666
|
key: filter.key,
|
|
5559
5667
|
filters: otherFilters,
|
|
5560
5668
|
timeRange,
|
|
5561
5669
|
queries
|
|
5562
|
-
},
|
|
5670
|
+
}, scopeProps));
|
|
5563
5671
|
if (responseHasError(response)) {
|
|
5564
5672
|
this.setState({ error: response.error.message });
|
|
5565
5673
|
}
|
|
@@ -6252,6 +6360,15 @@ function escapeUrlCommaDelimiters(value) {
|
|
|
6252
6360
|
}
|
|
6253
6361
|
return /,/g[Symbol.replace](value, "__gfc__");
|
|
6254
6362
|
}
|
|
6363
|
+
function escapeUrlHashDelimiters(value) {
|
|
6364
|
+
if (value === null || value === void 0) {
|
|
6365
|
+
return "";
|
|
6366
|
+
}
|
|
6367
|
+
return /#/g[Symbol.replace](value, "__gfh__");
|
|
6368
|
+
}
|
|
6369
|
+
function escapeInjectedFilterUrlDelimiters(value) {
|
|
6370
|
+
return escapeUrlHashDelimiters(escapeUrlPipeDelimiters(value));
|
|
6371
|
+
}
|
|
6255
6372
|
function escapeURLDelimiters(value) {
|
|
6256
6373
|
return escapeUrlCommaDelimiters(escapeUrlPipeDelimiters(value));
|
|
6257
6374
|
}
|
|
@@ -6261,6 +6378,7 @@ function unescapeUrlDelimiters(value) {
|
|
|
6261
6378
|
}
|
|
6262
6379
|
value = /__gfp__/g[Symbol.replace](value, "|");
|
|
6263
6380
|
value = /__gfc__/g[Symbol.replace](value, ",");
|
|
6381
|
+
value = /__gfh__/g[Symbol.replace](value, "#");
|
|
6264
6382
|
return value;
|
|
6265
6383
|
}
|
|
6266
6384
|
function toUrlCommaDelimitedString(key, label) {
|