@grafana/scenes 6.3.1--canary.990.13763142318.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/components/SceneApp/SceneApp.js +3 -9
- package/dist/esm/components/SceneApp/SceneApp.js.map +1 -1
- package/dist/esm/components/SceneApp/SceneAppPage.js +0 -16
- package/dist/esm/components/SceneApp/SceneAppPage.js.map +1 -1
- package/dist/esm/core/sceneGraph/index.js +2 -3
- package/dist/esm/core/sceneGraph/index.js.map +1 -1
- package/dist/esm/core/sceneGraph/sceneGraph.js +1 -6
- package/dist/esm/core/sceneGraph/sceneGraph.js.map +1 -1
- package/dist/esm/index.js +0 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/querying/SceneQueryRunner.js +8 -33
- package/dist/esm/querying/SceneQueryRunner.js.map +1 -1
- 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 +73 -18
- 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/groupby/GroupByVariable.js +2 -3
- package/dist/esm/variables/groupby/GroupByVariable.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 +22 -70
- package/dist/index.js +158 -198
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
- package/dist/esm/core/SceneScopesBridge.js +0 -108
- package/dist/esm/core/SceneScopesBridge.js.map +0 -1
package/dist/index.js
CHANGED
|
@@ -3270,7 +3270,7 @@ class GroupByVariable extends MultiValueVariable {
|
|
|
3270
3270
|
this.isLazy = true;
|
|
3271
3271
|
this._urlSync = new GroupByVariableUrlSyncHandler(this);
|
|
3272
3272
|
this._getKeys = async (ds) => {
|
|
3273
|
-
var _a, _b, _c
|
|
3273
|
+
var _a, _b, _c;
|
|
3274
3274
|
const override = await ((_b = (_a = this.state).getTagKeysProvider) == null ? void 0 : _b.call(_a, this, null));
|
|
3275
3275
|
if (override && override.replace) {
|
|
3276
3276
|
return override.values;
|
|
@@ -3287,8 +3287,7 @@ class GroupByVariable extends MultiValueVariable {
|
|
|
3287
3287
|
const response = await ds.getTagKeys(__spreadValues$F({
|
|
3288
3288
|
filters: otherFilters,
|
|
3289
3289
|
queries,
|
|
3290
|
-
timeRange
|
|
3291
|
-
scopes: (_d = this._scopesBridge) == null ? void 0 : _d.getValue()
|
|
3290
|
+
timeRange
|
|
3292
3291
|
}, getEnrichedFiltersRequest(this)));
|
|
3293
3292
|
if (responseHasError(response)) {
|
|
3294
3293
|
this.setState({ error: response.error.message });
|
|
@@ -3972,19 +3971,44 @@ class AdHocFiltersVariableUrlSyncHandler {
|
|
|
3972
3971
|
}
|
|
3973
3972
|
getUrlState() {
|
|
3974
3973
|
const filters = this._variable.state.filters;
|
|
3975
|
-
|
|
3974
|
+
const baseFilters = this._variable.state.baseFilters;
|
|
3975
|
+
let value = [];
|
|
3976
|
+
if (filters.length === 0 && (baseFilters == null ? void 0 : baseFilters.length) === 0) {
|
|
3976
3977
|
return { [this.getKey()]: [""] };
|
|
3977
3978
|
}
|
|
3978
|
-
|
|
3979
|
-
|
|
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
|
+
};
|
|
3980
3999
|
}
|
|
3981
4000
|
updateFromUrl(values) {
|
|
3982
4001
|
const urlValue = values[this.getKey()];
|
|
3983
4002
|
if (urlValue == null) {
|
|
3984
4003
|
return;
|
|
3985
4004
|
}
|
|
3986
|
-
|
|
3987
|
-
|
|
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
|
+
}
|
|
3988
4012
|
}
|
|
3989
4013
|
}
|
|
3990
4014
|
function deserializeUrlToFilters(value) {
|
|
@@ -4009,10 +4033,12 @@ function toArray(filter) {
|
|
|
4009
4033
|
return result;
|
|
4010
4034
|
}
|
|
4011
4035
|
function toFilter(urlValue) {
|
|
4036
|
+
var _a;
|
|
4012
4037
|
if (typeof urlValue !== "string" || urlValue.length === 0) {
|
|
4013
4038
|
return null;
|
|
4014
4039
|
}
|
|
4015
|
-
const [
|
|
4040
|
+
const [filter, originalValues, origin] = urlValue.split("#");
|
|
4041
|
+
const [key, keyLabel, operator, _operatorLabel, ...values] = filter.split("|").reduce((acc, v) => {
|
|
4016
4042
|
const [key2, label] = v.split(",");
|
|
4017
4043
|
acc.push(key2, label != null ? label : key2);
|
|
4018
4044
|
return acc;
|
|
@@ -4024,9 +4050,14 @@ function toFilter(urlValue) {
|
|
|
4024
4050
|
value: values[0],
|
|
4025
4051
|
values: isMultiValueOperator(operator) ? values.filter((_, index) => index % 2 === 0) : void 0,
|
|
4026
4052
|
valueLabels: values.filter((_, index) => index % 2 === 1),
|
|
4027
|
-
condition: ""
|
|
4053
|
+
condition: "",
|
|
4054
|
+
origin: isFilterOrigin(origin) ? origin : void 0,
|
|
4055
|
+
originalValue: originalValues && originalValues.length ? (_a = originalValues.split("|")) != null ? _a : [originalValues] : void 0
|
|
4028
4056
|
};
|
|
4029
4057
|
}
|
|
4058
|
+
function isFilterOrigin(value) {
|
|
4059
|
+
return value === FilterOrigin.Scopes || value === FilterOrigin.Dashboards;
|
|
4060
|
+
}
|
|
4030
4061
|
function isFilter(filter) {
|
|
4031
4062
|
return filter !== null && typeof filter.key === "string" && typeof filter.value === "string";
|
|
4032
4063
|
}
|
|
@@ -4874,13 +4905,20 @@ const AdHocCombobox = React.forwardRef(function AdHocCombobox2({ filter, model,
|
|
|
4874
4905
|
className: styles.pillWrapper
|
|
4875
4906
|
}, (filter == null ? void 0 : filter.key) ? /* @__PURE__ */ React__default["default"].createElement("div", {
|
|
4876
4907
|
className: css.cx(styles.basePill, styles.keyPill)
|
|
4877
|
-
}, 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({
|
|
4878
4909
|
id: operatorIdentifier,
|
|
4879
|
-
className: css.cx(
|
|
4880
|
-
|
|
4910
|
+
className: css.cx(
|
|
4911
|
+
styles.basePill,
|
|
4912
|
+
!filter.origin && styles.operatorPill,
|
|
4913
|
+
filter.origin && styles.keyPill,
|
|
4914
|
+
operatorIdentifier
|
|
4915
|
+
),
|
|
4881
4916
|
"aria-label": "Edit filter operator",
|
|
4882
4917
|
tabIndex: 0,
|
|
4883
4918
|
onClick: (event) => {
|
|
4919
|
+
if (filter.origin) {
|
|
4920
|
+
return;
|
|
4921
|
+
}
|
|
4884
4922
|
event.stopPropagation();
|
|
4885
4923
|
setInputValue("");
|
|
4886
4924
|
switchInputType("operator", setInputType, void 0, refs.domReference.current);
|
|
@@ -4892,7 +4930,7 @@ const AdHocCombobox = React.forwardRef(function AdHocCombobox2({ filter, model,
|
|
|
4892
4930
|
switchInputType("operator", setInputType, void 0, refs.domReference.current);
|
|
4893
4931
|
}
|
|
4894
4932
|
}
|
|
4895
|
-
}, filter.operator) : null, /* @__PURE__ */ React__default["default"].createElement("div", {
|
|
4933
|
+
}, !filter.origin && { role: "button" }), filter.operator) : null, /* @__PURE__ */ React__default["default"].createElement("div", {
|
|
4896
4934
|
ref: multiValuePillWrapperRef
|
|
4897
4935
|
}), isMultiValueEdit ? filterMultiValues.map((item, i) => /* @__PURE__ */ React__default["default"].createElement(MultiValuePill, {
|
|
4898
4936
|
key: `${item.value}-${i}`,
|
|
@@ -5139,13 +5177,13 @@ function AdHocFilterPill({ filter, model, readOnly, focusOnWipInputRef }) {
|
|
|
5139
5177
|
const handleChangeViewMode = React.useCallback(
|
|
5140
5178
|
(event, shouldFocusOnPillWrapperOverride) => {
|
|
5141
5179
|
event == null ? void 0 : event.stopPropagation();
|
|
5142
|
-
if (readOnly
|
|
5180
|
+
if (readOnly) {
|
|
5143
5181
|
return;
|
|
5144
5182
|
}
|
|
5145
5183
|
setShouldFocusOnPillWrapper(shouldFocusOnPillWrapperOverride != null ? shouldFocusOnPillWrapperOverride : !viewMode);
|
|
5146
5184
|
setViewMode(!viewMode);
|
|
5147
5185
|
},
|
|
5148
|
-
[readOnly, viewMode
|
|
5186
|
+
[readOnly, viewMode]
|
|
5149
5187
|
);
|
|
5150
5188
|
React.useEffect(() => {
|
|
5151
5189
|
var _a2;
|
|
@@ -5209,11 +5247,20 @@ function AdHocFilterPill({ filter, model, readOnly, focusOnWipInputRef }) {
|
|
|
5209
5247
|
size: "md",
|
|
5210
5248
|
className: styles.pillIcon,
|
|
5211
5249
|
tooltip: `Remove filter with key ${keyLabel}`
|
|
5212
|
-
}) : null, filter.origin && /* @__PURE__ */ React__default["default"].createElement(ui.IconButton, {
|
|
5250
|
+
}) : null, filter.origin && !filter.originalValue && /* @__PURE__ */ React__default["default"].createElement(ui.IconButton, {
|
|
5213
5251
|
name: "info-circle",
|
|
5214
5252
|
size: "md",
|
|
5215
5253
|
className: styles.pillIcon,
|
|
5216
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`
|
|
5217
5264
|
}));
|
|
5218
5265
|
}
|
|
5219
5266
|
return /* @__PURE__ */ React__default["default"].createElement(AdHocCombobox, {
|
|
@@ -5411,30 +5458,35 @@ const OPERATORS = [
|
|
|
5411
5458
|
];
|
|
5412
5459
|
class AdHocFiltersVariable extends SceneObjectBase {
|
|
5413
5460
|
constructor(state) {
|
|
5414
|
-
var _a, _b;
|
|
5461
|
+
var _a, _b, _c, _d, _e;
|
|
5415
5462
|
super(__spreadValues$z({
|
|
5416
5463
|
type: "adhoc",
|
|
5417
5464
|
name: (_a = state.name) != null ? _a : "Filters",
|
|
5418
5465
|
filters: [],
|
|
5419
5466
|
datasource: null,
|
|
5420
5467
|
applyMode: "auto",
|
|
5421
|
-
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
|
+
])
|
|
5422
5472
|
}, state));
|
|
5423
5473
|
this._scopedVars = { __sceneObject: wrapInSafeSerializableSceneObject(this) };
|
|
5424
5474
|
this._dataSourceSrv = runtime.getDataSourceSrv();
|
|
5425
5475
|
this._urlSync = new AdHocFiltersVariableUrlSyncHandler(this);
|
|
5426
|
-
this._activationHandler = () => {
|
|
5427
|
-
this._scopesBridge = sceneGraph.getScopesBridge(this);
|
|
5428
|
-
};
|
|
5429
5476
|
if (this.state.applyMode === "auto") {
|
|
5430
5477
|
patchGetAdhocFilters(this);
|
|
5431
5478
|
}
|
|
5432
|
-
this.addActivationHandler(this._activationHandler);
|
|
5433
5479
|
}
|
|
5434
5480
|
setState(update) {
|
|
5481
|
+
var _a, _b, _c;
|
|
5435
5482
|
let filterExpressionChanged = false;
|
|
5436
|
-
if (update.filters && update.filters !== this.state.filters && !update.filterExpression) {
|
|
5437
|
-
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
|
+
]);
|
|
5438
5490
|
filterExpressionChanged = update.filterExpression !== this.state.filterExpression;
|
|
5439
5491
|
}
|
|
5440
5492
|
super.setState(update);
|
|
@@ -5443,10 +5495,14 @@ class AdHocFiltersVariable extends SceneObjectBase {
|
|
|
5443
5495
|
}
|
|
5444
5496
|
}
|
|
5445
5497
|
updateFilters(filters, options) {
|
|
5498
|
+
var _a, _b;
|
|
5446
5499
|
let filterExpressionChanged = false;
|
|
5447
5500
|
let filterExpression = void 0;
|
|
5448
5501
|
if (filters && filters !== this.state.filters) {
|
|
5449
|
-
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
|
+
]);
|
|
5450
5506
|
filterExpressionChanged = filterExpression !== this.state.filterExpression;
|
|
5451
5507
|
}
|
|
5452
5508
|
super.setState({
|
|
@@ -5457,11 +5513,40 @@ class AdHocFiltersVariable extends SceneObjectBase {
|
|
|
5457
5513
|
this.publishEvent(new SceneVariableValueChangedEvent(this), true);
|
|
5458
5514
|
}
|
|
5459
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
|
+
}
|
|
5460
5528
|
getValue() {
|
|
5461
5529
|
return this.state.filterExpression;
|
|
5462
5530
|
}
|
|
5463
5531
|
_updateFilter(filter, update) {
|
|
5464
|
-
|
|
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
|
+
}
|
|
5465
5550
|
if (filter === _wip) {
|
|
5466
5551
|
if ("value" in update && update["value"] !== "") {
|
|
5467
5552
|
this.setState({ filters: [...filters, __spreadValues$z(__spreadValues$z({}, _wip), update)], _wip: void 0 });
|
|
@@ -5513,7 +5598,7 @@ class AdHocFiltersVariable extends SceneObjectBase {
|
|
|
5513
5598
|
}
|
|
5514
5599
|
}
|
|
5515
5600
|
async _getKeys(currentKey) {
|
|
5516
|
-
var _a, _b, _c
|
|
5601
|
+
var _a, _b, _c;
|
|
5517
5602
|
const override = await ((_b = (_a = this.state).getTagKeysProvider) == null ? void 0 : _b.call(_a, this, currentKey));
|
|
5518
5603
|
if (override && override.replace) {
|
|
5519
5604
|
return dataFromResponse(override.values).map(toSelectableValue);
|
|
@@ -5531,8 +5616,7 @@ class AdHocFiltersVariable extends SceneObjectBase {
|
|
|
5531
5616
|
const response = await ds.getTagKeys(__spreadValues$z({
|
|
5532
5617
|
filters: otherFilters,
|
|
5533
5618
|
queries,
|
|
5534
|
-
timeRange
|
|
5535
|
-
scopes: (_d = this._scopesBridge) == null ? void 0 : _d.getValue()
|
|
5619
|
+
timeRange
|
|
5536
5620
|
}, getEnrichedFiltersRequest(this)));
|
|
5537
5621
|
if (responseHasError(response)) {
|
|
5538
5622
|
this.setState({ error: response.error.message });
|
|
@@ -5548,7 +5632,7 @@ class AdHocFiltersVariable extends SceneObjectBase {
|
|
|
5548
5632
|
return keys.map(toSelectableValue);
|
|
5549
5633
|
}
|
|
5550
5634
|
async _getValuesFor(filter) {
|
|
5551
|
-
var _a, _b, _c, _d;
|
|
5635
|
+
var _a, _b, _c, _d, _e, _f;
|
|
5552
5636
|
const override = await ((_b = (_a = this.state).getTagValuesProvider) == null ? void 0 : _b.call(_a, this, filter));
|
|
5553
5637
|
if (override && override.replace) {
|
|
5554
5638
|
return dataFromResponse(override.values).map(toSelectableValue);
|
|
@@ -5557,16 +5641,33 @@ class AdHocFiltersVariable extends SceneObjectBase {
|
|
|
5557
5641
|
if (!ds || !ds.getTagValues) {
|
|
5558
5642
|
return [];
|
|
5559
5643
|
}
|
|
5560
|
-
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);
|
|
5561
5646
|
const timeRange = sceneGraph.getTimeRange(this).state.value;
|
|
5562
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
|
+
}
|
|
5563
5665
|
const response = await ds.getTagValues(__spreadValues$z({
|
|
5564
5666
|
key: filter.key,
|
|
5565
5667
|
filters: otherFilters,
|
|
5566
5668
|
timeRange,
|
|
5567
|
-
queries
|
|
5568
|
-
|
|
5569
|
-
}, getEnrichedFiltersRequest(this)));
|
|
5669
|
+
queries
|
|
5670
|
+
}, scopeProps));
|
|
5570
5671
|
if (responseHasError(response)) {
|
|
5571
5672
|
this.setState({ error: response.error.message });
|
|
5572
5673
|
}
|
|
@@ -5753,7 +5854,6 @@ class SceneQueryRunner extends SceneObjectBase {
|
|
|
5753
5854
|
_onActivate() {
|
|
5754
5855
|
if (this.isQueryModeAuto()) {
|
|
5755
5856
|
const timeRange = sceneGraph.getTimeRange(this);
|
|
5756
|
-
const scopesBridge = sceneGraph.getScopesBridge(this);
|
|
5757
5857
|
const providers = this.getClosestExtraQueryProviders();
|
|
5758
5858
|
for (const provider of providers) {
|
|
5759
5859
|
this._subs.add(
|
|
@@ -5764,7 +5864,6 @@ class SceneQueryRunner extends SceneObjectBase {
|
|
|
5764
5864
|
})
|
|
5765
5865
|
);
|
|
5766
5866
|
}
|
|
5767
|
-
this.subscribeToScopesChanges(scopesBridge);
|
|
5768
5867
|
this.subscribeToTimeRangeChanges(timeRange);
|
|
5769
5868
|
if (this.shouldRunQueriesOnActivate()) {
|
|
5770
5869
|
this.runQueries();
|
|
@@ -5910,21 +6009,6 @@ class SceneQueryRunner extends SceneObjectBase {
|
|
|
5910
6009
|
isDataReadyToDisplay() {
|
|
5911
6010
|
return Boolean(this.state._hasFetchedData);
|
|
5912
6011
|
}
|
|
5913
|
-
subscribeToScopesChanges(scopesBridge) {
|
|
5914
|
-
if (!scopesBridge) {
|
|
5915
|
-
return;
|
|
5916
|
-
}
|
|
5917
|
-
if (this._scopesSubBridge === scopesBridge) {
|
|
5918
|
-
return;
|
|
5919
|
-
}
|
|
5920
|
-
if (this._scopesSub) {
|
|
5921
|
-
this._scopesSub.unsubscribe();
|
|
5922
|
-
}
|
|
5923
|
-
this._scopesSubBridge = scopesBridge;
|
|
5924
|
-
this._scopesSub = scopesBridge.subscribeToValue(() => {
|
|
5925
|
-
this.runWithTimeRangeAndScopes(sceneGraph.getTimeRange(this), scopesBridge);
|
|
5926
|
-
});
|
|
5927
|
-
}
|
|
5928
6012
|
subscribeToTimeRangeChanges(timeRange) {
|
|
5929
6013
|
if (this._timeSubRange === timeRange) {
|
|
5930
6014
|
return;
|
|
@@ -5934,17 +6018,15 @@ class SceneQueryRunner extends SceneObjectBase {
|
|
|
5934
6018
|
}
|
|
5935
6019
|
this._timeSubRange = timeRange;
|
|
5936
6020
|
this._timeSub = timeRange.subscribeToState(() => {
|
|
5937
|
-
this.
|
|
6021
|
+
this.runWithTimeRange(timeRange);
|
|
5938
6022
|
});
|
|
5939
6023
|
}
|
|
5940
6024
|
runQueries() {
|
|
5941
6025
|
const timeRange = sceneGraph.getTimeRange(this);
|
|
5942
|
-
const scopesBridge = sceneGraph.getScopesBridge(this);
|
|
5943
6026
|
if (this.isQueryModeAuto()) {
|
|
5944
6027
|
this.subscribeToTimeRangeChanges(timeRange);
|
|
5945
|
-
this.subscribeToScopesChanges(scopesBridge);
|
|
5946
6028
|
}
|
|
5947
|
-
this.
|
|
6029
|
+
this.runWithTimeRange(timeRange);
|
|
5948
6030
|
}
|
|
5949
6031
|
getMaxDataPoints() {
|
|
5950
6032
|
var _a;
|
|
@@ -5964,8 +6046,8 @@ class SceneQueryRunner extends SceneObjectBase {
|
|
|
5964
6046
|
data: __spreadProps$m(__spreadValues$y({}, this.state.data), { state: schema.LoadingState.Done })
|
|
5965
6047
|
});
|
|
5966
6048
|
}
|
|
5967
|
-
async
|
|
5968
|
-
var _a, _b, _c
|
|
6049
|
+
async runWithTimeRange(timeRange) {
|
|
6050
|
+
var _a, _b, _c;
|
|
5969
6051
|
if (!this.state.maxDataPoints && this.state.maxDataPointsFromWidth && !this._containerWidth) {
|
|
5970
6052
|
return;
|
|
5971
6053
|
}
|
|
@@ -5978,22 +6060,17 @@ class SceneQueryRunner extends SceneObjectBase {
|
|
|
5978
6060
|
this.setState({ data: __spreadProps$m(__spreadValues$y({}, (_b = this.state.data) != null ? _b : emptyPanelData), { state: schema.LoadingState.Loading }) });
|
|
5979
6061
|
return;
|
|
5980
6062
|
}
|
|
5981
|
-
if (scopesBridge == null ? void 0 : scopesBridge.isLoading()) {
|
|
5982
|
-
writeSceneLog("SceneQueryRunner", "Scopes are in loading state, skipping query execution");
|
|
5983
|
-
this.setState({ data: __spreadProps$m(__spreadValues$y({}, (_c = this.state.data) != null ? _c : emptyPanelData), { state: schema.LoadingState.Loading }) });
|
|
5984
|
-
return;
|
|
5985
|
-
}
|
|
5986
6063
|
const { queries } = this.state;
|
|
5987
6064
|
if (!(queries == null ? void 0 : queries.length)) {
|
|
5988
6065
|
this._setNoDataState();
|
|
5989
6066
|
return;
|
|
5990
6067
|
}
|
|
5991
6068
|
try {
|
|
5992
|
-
const datasource = (
|
|
6069
|
+
const datasource = (_c = this.state.datasource) != null ? _c : findFirstDatasource(queries);
|
|
5993
6070
|
const ds = await getDataSource(datasource, this._scopedVars);
|
|
5994
6071
|
this.findAndSubscribeToAdHocFilters(ds.uid);
|
|
5995
6072
|
const runRequest = runtime.getRunRequest();
|
|
5996
|
-
const { primary, secondaries, processors } = this.prepareRequests(timeRange, ds
|
|
6073
|
+
const { primary, secondaries, processors } = this.prepareRequests(timeRange, ds);
|
|
5997
6074
|
writeSceneLog("SceneQueryRunner", "Starting runRequest", this.state.key);
|
|
5998
6075
|
let stream = runRequest(ds, primary);
|
|
5999
6076
|
if (secondaries.length > 0) {
|
|
@@ -6032,7 +6109,7 @@ class SceneQueryRunner extends SceneObjectBase {
|
|
|
6032
6109
|
clone["_results"].next({ origin: this, data: (_a = this.state.data) != null ? _a : emptyPanelData });
|
|
6033
6110
|
return clone;
|
|
6034
6111
|
}
|
|
6035
|
-
prepareRequests(timeRange, ds
|
|
6112
|
+
prepareRequests(timeRange, ds) {
|
|
6036
6113
|
var _a, _b;
|
|
6037
6114
|
const { minInterval, queries } = this.state;
|
|
6038
6115
|
let request = __spreadValues$y({
|
|
@@ -6052,8 +6129,7 @@ class SceneQueryRunner extends SceneObjectBase {
|
|
|
6052
6129
|
to: timeRange.state.to
|
|
6053
6130
|
},
|
|
6054
6131
|
cacheTimeout: this.state.cacheTimeout,
|
|
6055
|
-
queryCachingTTL: this.state.queryCachingTTL
|
|
6056
|
-
scopes: scopesBridge == null ? void 0 : scopesBridge.getValue()
|
|
6132
|
+
queryCachingTTL: this.state.queryCachingTTL
|
|
6057
6133
|
}, getEnrichedDataRequest(this));
|
|
6058
6134
|
if (this._adhocFiltersVar) {
|
|
6059
6135
|
request.filters = [];
|
|
@@ -6284,6 +6360,15 @@ function escapeUrlCommaDelimiters(value) {
|
|
|
6284
6360
|
}
|
|
6285
6361
|
return /,/g[Symbol.replace](value, "__gfc__");
|
|
6286
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
|
+
}
|
|
6287
6372
|
function escapeURLDelimiters(value) {
|
|
6288
6373
|
return escapeUrlCommaDelimiters(escapeUrlPipeDelimiters(value));
|
|
6289
6374
|
}
|
|
@@ -6293,6 +6378,7 @@ function unescapeUrlDelimiters(value) {
|
|
|
6293
6378
|
}
|
|
6294
6379
|
value = /__gfp__/g[Symbol.replace](value, "|");
|
|
6295
6380
|
value = /__gfc__/g[Symbol.replace](value, ",");
|
|
6381
|
+
value = /__gfh__/g[Symbol.replace](value, "#");
|
|
6296
6382
|
return value;
|
|
6297
6383
|
}
|
|
6298
6384
|
function toUrlCommaDelimitedString(key, label) {
|
|
@@ -7005,105 +7091,6 @@ function containsSearchFilter(query) {
|
|
|
7005
7091
|
return str.indexOf(SEARCH_FILTER_VARIABLE) > -1;
|
|
7006
7092
|
}
|
|
7007
7093
|
|
|
7008
|
-
class SceneScopesBridge extends SceneObjectBase {
|
|
7009
|
-
constructor() {
|
|
7010
|
-
super(...arguments);
|
|
7011
|
-
this._urlSync = new SceneObjectUrlSyncConfig(this, { keys: ["scopes"] });
|
|
7012
|
-
this._renderBeforeActivation = true;
|
|
7013
|
-
this._contextSubject = new rxjs.BehaviorSubject(void 0);
|
|
7014
|
-
this._pendingScopes = null;
|
|
7015
|
-
}
|
|
7016
|
-
getUrlState() {
|
|
7017
|
-
var _a, _b, _c;
|
|
7018
|
-
return {
|
|
7019
|
-
scopes: (_c = this._pendingScopes) != null ? _c : ((_b = (_a = this.context) == null ? void 0 : _a.state.value) != null ? _b : []).map((scope) => scope.metadata.name)
|
|
7020
|
-
};
|
|
7021
|
-
}
|
|
7022
|
-
updateFromUrl(values) {
|
|
7023
|
-
var _a, _b;
|
|
7024
|
-
let scopes = (_a = values["scopes"]) != null ? _a : [];
|
|
7025
|
-
scopes = (Array.isArray(scopes) ? scopes : [scopes]).map(String);
|
|
7026
|
-
if (!this.context) {
|
|
7027
|
-
this._pendingScopes = scopes;
|
|
7028
|
-
return;
|
|
7029
|
-
}
|
|
7030
|
-
(_b = this.context) == null ? void 0 : _b.changeScopes(scopes);
|
|
7031
|
-
}
|
|
7032
|
-
getValue() {
|
|
7033
|
-
var _a, _b;
|
|
7034
|
-
return (_b = (_a = this.context) == null ? void 0 : _a.state.value) != null ? _b : [];
|
|
7035
|
-
}
|
|
7036
|
-
subscribeToValue(cb) {
|
|
7037
|
-
return this.contextObservable.pipe(
|
|
7038
|
-
rxjs.map((context) => {
|
|
7039
|
-
var _a;
|
|
7040
|
-
return (_a = context == null ? void 0 : context.state.value) != null ? _a : [];
|
|
7041
|
-
}),
|
|
7042
|
-
rxjs.pairwise(),
|
|
7043
|
-
rxjs.filter(([prevScopes, newScopes]) => !lodash.isEqual(prevScopes, newScopes))
|
|
7044
|
-
).subscribe(([prevScopes, newScopes]) => {
|
|
7045
|
-
cb(newScopes, prevScopes);
|
|
7046
|
-
});
|
|
7047
|
-
}
|
|
7048
|
-
isLoading() {
|
|
7049
|
-
var _a, _b;
|
|
7050
|
-
return (_b = (_a = this.context) == null ? void 0 : _a.state.loading) != null ? _b : false;
|
|
7051
|
-
}
|
|
7052
|
-
subscribeToLoading(cb) {
|
|
7053
|
-
return this.contextObservable.pipe(
|
|
7054
|
-
rxjs.filter((context) => !!context),
|
|
7055
|
-
rxjs.pairwise(),
|
|
7056
|
-
rxjs.map(
|
|
7057
|
-
([prevContext, newContext]) => {
|
|
7058
|
-
var _a, _b;
|
|
7059
|
-
return [(_a = prevContext == null ? void 0 : prevContext.state.loading) != null ? _a : false, (_b = newContext == null ? void 0 : newContext.state.loading) != null ? _b : false];
|
|
7060
|
-
}
|
|
7061
|
-
),
|
|
7062
|
-
rxjs.filter(([prevLoading, newLoading]) => prevLoading !== newLoading)
|
|
7063
|
-
).subscribe(([_prevLoading, newLoading]) => {
|
|
7064
|
-
cb(newLoading);
|
|
7065
|
-
});
|
|
7066
|
-
}
|
|
7067
|
-
setEnabled(enabled) {
|
|
7068
|
-
var _a;
|
|
7069
|
-
(_a = this.context) == null ? void 0 : _a.setEnabled(enabled);
|
|
7070
|
-
}
|
|
7071
|
-
setReadOnly(readOnly) {
|
|
7072
|
-
var _a;
|
|
7073
|
-
(_a = this.context) == null ? void 0 : _a.setReadOnly(readOnly);
|
|
7074
|
-
}
|
|
7075
|
-
updateContext(newContext) {
|
|
7076
|
-
var _a, _b;
|
|
7077
|
-
if (this._pendingScopes && newContext) {
|
|
7078
|
-
setTimeout(() => {
|
|
7079
|
-
newContext == null ? void 0 : newContext.changeScopes(this._pendingScopes);
|
|
7080
|
-
this._pendingScopes = null;
|
|
7081
|
-
});
|
|
7082
|
-
}
|
|
7083
|
-
if (this.context !== newContext || ((_a = this.context) == null ? void 0 : _a.state) !== (newContext == null ? void 0 : newContext.state)) {
|
|
7084
|
-
const shouldUpdate = ((_b = this.context) == null ? void 0 : _b.state.value) !== (newContext == null ? void 0 : newContext.state.value);
|
|
7085
|
-
this._contextSubject.next(newContext);
|
|
7086
|
-
if (shouldUpdate) {
|
|
7087
|
-
this.forceRender();
|
|
7088
|
-
}
|
|
7089
|
-
}
|
|
7090
|
-
}
|
|
7091
|
-
get context() {
|
|
7092
|
-
return this._contextSubject.getValue();
|
|
7093
|
-
}
|
|
7094
|
-
get contextObservable() {
|
|
7095
|
-
return this._contextSubject.asObservable();
|
|
7096
|
-
}
|
|
7097
|
-
}
|
|
7098
|
-
SceneScopesBridge.Component = SceneScopesBridgeRenderer;
|
|
7099
|
-
function SceneScopesBridgeRenderer({ model }) {
|
|
7100
|
-
const context = runtime.useScopes();
|
|
7101
|
-
React.useEffect(() => {
|
|
7102
|
-
model.updateContext(context);
|
|
7103
|
-
}, [context, model]);
|
|
7104
|
-
return null;
|
|
7105
|
-
}
|
|
7106
|
-
|
|
7107
7094
|
function getVariables(sceneObject) {
|
|
7108
7095
|
var _a;
|
|
7109
7096
|
return (_a = getClosest(sceneObject, (s) => s.state.$variables)) != null ? _a : EmptyVariableSet;
|
|
@@ -7247,10 +7234,6 @@ function findDescendents(scene, descendentType) {
|
|
|
7247
7234
|
const targetScenes = findAllObjects(scene, isDescendentType);
|
|
7248
7235
|
return targetScenes.filter(isDescendentType);
|
|
7249
7236
|
}
|
|
7250
|
-
function getScopesBridge(sceneObject) {
|
|
7251
|
-
var _a;
|
|
7252
|
-
return (_a = findObject(sceneObject, (s) => s instanceof SceneScopesBridge)) != null ? _a : void 0;
|
|
7253
|
-
}
|
|
7254
7237
|
|
|
7255
7238
|
const sceneGraph = {
|
|
7256
7239
|
getVariables,
|
|
@@ -7267,8 +7250,7 @@ const sceneGraph = {
|
|
|
7267
7250
|
findAllObjects,
|
|
7268
7251
|
getAncestor,
|
|
7269
7252
|
getQueryController,
|
|
7270
|
-
findDescendents
|
|
7271
|
-
getScopesBridge
|
|
7253
|
+
findDescendents
|
|
7272
7254
|
};
|
|
7273
7255
|
|
|
7274
7256
|
class UniqueUrlKeyMapper {
|
|
@@ -13022,10 +13004,6 @@ class SplitLayout extends SceneObjectBase {
|
|
|
13022
13004
|
SplitLayout.Component = SplitLayoutRenderer;
|
|
13023
13005
|
|
|
13024
13006
|
class SceneApp extends SceneObjectBase {
|
|
13025
|
-
constructor() {
|
|
13026
|
-
super(...arguments);
|
|
13027
|
-
this._renderBeforeActivation = true;
|
|
13028
|
-
}
|
|
13029
13007
|
enrichDataRequest() {
|
|
13030
13008
|
return {
|
|
13031
13009
|
app: this.state.name || "app"
|
|
@@ -13033,10 +13011,8 @@ class SceneApp extends SceneObjectBase {
|
|
|
13033
13011
|
}
|
|
13034
13012
|
}
|
|
13035
13013
|
SceneApp.Component = ({ model }) => {
|
|
13036
|
-
const { pages
|
|
13037
|
-
return /* @__PURE__ */ React__default["default"].createElement(
|
|
13038
|
-
model: scopesBridge
|
|
13039
|
-
}), /* @__PURE__ */ React__default["default"].createElement(SceneAppContext.Provider, {
|
|
13014
|
+
const { pages } = model.useState();
|
|
13015
|
+
return /* @__PURE__ */ React__default["default"].createElement(SceneAppContext.Provider, {
|
|
13040
13016
|
value: model
|
|
13041
13017
|
}, /* @__PURE__ */ React__default["default"].createElement(reactRouterDom.Routes, null, pages.map((page) => /* @__PURE__ */ React__default["default"].createElement(reactRouterDom.Route, {
|
|
13042
13018
|
key: page.state.url,
|
|
@@ -13044,7 +13020,7 @@ SceneApp.Component = ({ model }) => {
|
|
|
13044
13020
|
element: /* @__PURE__ */ React__default["default"].createElement(page.Component, {
|
|
13045
13021
|
model: page
|
|
13046
13022
|
})
|
|
13047
|
-
}))))
|
|
13023
|
+
}))));
|
|
13048
13024
|
};
|
|
13049
13025
|
const SceneAppContext = React.createContext(null);
|
|
13050
13026
|
const sceneAppCache = /* @__PURE__ */ new Map();
|
|
@@ -13399,21 +13375,6 @@ class SceneAppPage extends SceneObjectBase {
|
|
|
13399
13375
|
super(state);
|
|
13400
13376
|
this._sceneCache = /* @__PURE__ */ new Map();
|
|
13401
13377
|
this._drilldownCache = /* @__PURE__ */ new Map();
|
|
13402
|
-
this._activationHandler = () => {
|
|
13403
|
-
if (!this.state.useScopes) {
|
|
13404
|
-
return;
|
|
13405
|
-
}
|
|
13406
|
-
this._scopesBridge = sceneGraph.getScopesBridge(this);
|
|
13407
|
-
if (!this._scopesBridge) {
|
|
13408
|
-
throw new Error("Use of scopes is enabled but no scopes bridge found");
|
|
13409
|
-
}
|
|
13410
|
-
this._scopesBridge.setEnabled(true);
|
|
13411
|
-
return () => {
|
|
13412
|
-
var _a;
|
|
13413
|
-
(_a = this._scopesBridge) == null ? void 0 : _a.setEnabled(false);
|
|
13414
|
-
};
|
|
13415
|
-
};
|
|
13416
|
-
this.addActivationHandler(this._activationHandler);
|
|
13417
13378
|
}
|
|
13418
13379
|
initializeScene(scene) {
|
|
13419
13380
|
this.setState({ initializedScene: scene });
|
|
@@ -14413,7 +14374,6 @@ exports.SceneObjectUrlSyncConfig = SceneObjectUrlSyncConfig;
|
|
|
14413
14374
|
exports.SceneQueryRunner = SceneQueryRunner;
|
|
14414
14375
|
exports.SceneReactObject = SceneReactObject;
|
|
14415
14376
|
exports.SceneRefreshPicker = SceneRefreshPicker;
|
|
14416
|
-
exports.SceneScopesBridge = SceneScopesBridge;
|
|
14417
14377
|
exports.SceneTimePicker = SceneTimePicker;
|
|
14418
14378
|
exports.SceneTimeRange = SceneTimeRange;
|
|
14419
14379
|
exports.SceneTimeRangeCompare = SceneTimeRangeCompare;
|