@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.
Files changed (30) hide show
  1. package/dist/esm/components/SceneApp/SceneApp.js +3 -9
  2. package/dist/esm/components/SceneApp/SceneApp.js.map +1 -1
  3. package/dist/esm/components/SceneApp/SceneAppPage.js +0 -16
  4. package/dist/esm/components/SceneApp/SceneAppPage.js.map +1 -1
  5. package/dist/esm/core/sceneGraph/index.js +2 -3
  6. package/dist/esm/core/sceneGraph/index.js.map +1 -1
  7. package/dist/esm/core/sceneGraph/sceneGraph.js +1 -6
  8. package/dist/esm/core/sceneGraph/sceneGraph.js.map +1 -1
  9. package/dist/esm/index.js +0 -1
  10. package/dist/esm/index.js.map +1 -1
  11. package/dist/esm/querying/SceneQueryRunner.js +8 -33
  12. package/dist/esm/querying/SceneQueryRunner.js.map +1 -1
  13. package/dist/esm/variables/adhoc/AdHocFiltersCombobox/AdHocFilterPill.js +12 -3
  14. package/dist/esm/variables/adhoc/AdHocFiltersCombobox/AdHocFilterPill.js.map +1 -1
  15. package/dist/esm/variables/adhoc/AdHocFiltersCombobox/AdHocFiltersCombobox.js +11 -4
  16. package/dist/esm/variables/adhoc/AdHocFiltersCombobox/AdHocFiltersCombobox.js.map +1 -1
  17. package/dist/esm/variables/adhoc/AdHocFiltersVariable.js +73 -18
  18. package/dist/esm/variables/adhoc/AdHocFiltersVariable.js.map +1 -1
  19. package/dist/esm/variables/adhoc/AdHocFiltersVariableUrlSyncHandler.js +41 -9
  20. package/dist/esm/variables/adhoc/AdHocFiltersVariableUrlSyncHandler.js.map +1 -1
  21. package/dist/esm/variables/groupby/GroupByVariable.js +2 -3
  22. package/dist/esm/variables/groupby/GroupByVariable.js.map +1 -1
  23. package/dist/esm/variables/utils.js +11 -1
  24. package/dist/esm/variables/utils.js.map +1 -1
  25. package/dist/index.d.ts +22 -70
  26. package/dist/index.js +158 -198
  27. package/dist/index.js.map +1 -1
  28. package/package.json +2 -2
  29. package/dist/esm/core/SceneScopesBridge.js +0 -108
  30. 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, _d;
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
- if (filters.length === 0) {
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
- const value = filters.filter(isFilterComplete).filter((filter) => !filter.hidden).map((filter) => toArray(filter).map(escapeUrlPipeDelimiters).join("|"));
3979
- return { [this.getKey()]: value };
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
- const filters = deserializeUrlToFilters(urlValue);
3987
- this._variable.setState({ filters });
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 [key, keyLabel, operator, _operatorLabel, ...values] = urlValue.split("|").reduce((acc, v) => {
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(styles.basePill, styles.operatorPill, operatorIdentifier),
4880
- role: "button",
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 || filter.origin) {
5180
+ if (readOnly) {
5143
5181
  return;
5144
5182
  }
5145
5183
  setShouldFocusOnPillWrapper(shouldFocusOnPillWrapperOverride != null ? shouldFocusOnPillWrapperOverride : !viewMode);
5146
5184
  setViewMode(!viewMode);
5147
5185
  },
5148
- [readOnly, viewMode, filter.origin]
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: (_b = state.filterExpression) != null ? _b : renderExpression(state.expressionBuilder, state.filters)
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.filterExpression = renderExpression(this.state.expressionBuilder, update.filters);
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, filters);
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
- const { filters, _wip } = this.state;
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, _d;
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 otherFilters = this.state.filters.filter((f) => f.key !== filter.key).concat((_c = this.state.baseFilters) != null ? _c : []);
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
- scopes: (_d = this._scopesBridge) == null ? void 0 : _d.getValue()
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.runWithTimeRangeAndScopes(timeRange, sceneGraph.getScopesBridge(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.runWithTimeRangeAndScopes(timeRange, scopesBridge);
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 runWithTimeRangeAndScopes(timeRange, scopesBridge) {
5968
- var _a, _b, _c, _d;
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 = (_d = this.state.datasource) != null ? _d : findFirstDatasource(queries);
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, scopesBridge);
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, scopesBridge) {
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, scopesBridge } = model.useState();
13037
- return /* @__PURE__ */ React__default["default"].createElement(React__default["default"].Fragment, null, scopesBridge && /* @__PURE__ */ React__default["default"].createElement(scopesBridge.Component, {
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;