@grafana/scenes 6.15.0--canary.1131.15269893335.0 → 6.16.0--canary.1132.15279399049.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/index.js CHANGED
@@ -3938,9 +3938,9 @@ class AdHocFiltersVariableUrlSyncHandler {
3938
3938
  }
3939
3939
  getUrlState() {
3940
3940
  const filters = this._variable.state.filters;
3941
- const baseFilters = this._variable.state.baseFilters;
3941
+ const originFilters = this._variable.state.originFilters;
3942
3942
  let value = [];
3943
- if (filters.length === 0 && (baseFilters == null ? void 0 : baseFilters.length) === 0) {
3943
+ if (filters.length === 0 && (originFilters == null ? void 0 : originFilters.length) === 0) {
3944
3944
  return { [this.getKey()]: [""] };
3945
3945
  }
3946
3946
  if (filters.length) {
@@ -3948,10 +3948,10 @@ class AdHocFiltersVariableUrlSyncHandler {
3948
3948
  ...filters.filter(isFilterComplete).filter((filter) => !filter.hidden).map((filter) => toArray(filter).map(escapeUrlPipeDelimiters).join("|"))
3949
3949
  );
3950
3950
  }
3951
- if (baseFilters == null ? void 0 : baseFilters.length) {
3951
+ if (originFilters == null ? void 0 : originFilters.length) {
3952
3952
  value.push(
3953
- ...baseFilters == null ? void 0 : baseFilters.filter(isFilterComplete).filter((filter) => !filter.hidden && filter.origin && filter.restorable).map(
3954
- (filter) => toArray(filter).map(escapeInjectedFilterUrlDelimiters).join("|").concat(`#${filter.origin}#restorable`)
3953
+ ...originFilters == null ? void 0 : originFilters.filter(isFilterComplete).filter((filter) => !filter.hidden && filter.origin && filter.restorable).map(
3954
+ (filter) => toArray(filter).map(escapeOriginFilterUrlDelimiters).join("|").concat(`#${filter.origin}#restorable`)
3955
3955
  )
3956
3956
  );
3957
3957
  }
@@ -3965,31 +3965,35 @@ class AdHocFiltersVariableUrlSyncHandler {
3965
3965
  return;
3966
3966
  }
3967
3967
  const filters = deserializeUrlToFilters(urlValue);
3968
- const baseFilters = [...this._variable.state.baseFilters || []];
3969
- for (let i = 0; i < filters.length; i++) {
3970
- const foundBaseFilterIndex = baseFilters.findIndex((f) => f.key === filters[i].key);
3971
- if (foundBaseFilterIndex > -1) {
3972
- if (!filters[i].origin && baseFilters[foundBaseFilterIndex].origin === "dashboard") {
3973
- filters[i].origin = "dashboard";
3974
- filters[i].restorable = true;
3975
- }
3976
- if (isMatchAllFilter(filters[i])) {
3977
- filters[i].matchAllFilter = true;
3978
- }
3979
- baseFilters[foundBaseFilterIndex] = filters[i];
3980
- } else if (filters[i].origin === "dashboard") {
3981
- delete filters[i].origin;
3982
- delete filters[i].restorable;
3983
- } else if (foundBaseFilterIndex === -1 && filters[i].origin === "scope" && filters[i].restorable) {
3984
- baseFilters.push(filters[i]);
3985
- }
3986
- }
3968
+ const originFilters = updateOriginFilters([...this._variable.state.originFilters || []], filters);
3987
3969
  this._variable.setState({
3988
3970
  filters: filters.filter((f) => !f.origin),
3989
- baseFilters
3971
+ originFilters
3990
3972
  });
3991
3973
  }
3992
3974
  }
3975
+ function updateOriginFilters(prevOriginFilters, filters) {
3976
+ const updatedOriginFilters = [...prevOriginFilters];
3977
+ for (let i = 0; i < filters.length; i++) {
3978
+ const foundOriginFilterIndex = prevOriginFilters.findIndex((f) => f.key === filters[i].key);
3979
+ if (foundOriginFilterIndex > -1) {
3980
+ if (!filters[i].origin && prevOriginFilters[foundOriginFilterIndex].origin === "dashboard") {
3981
+ filters[i].origin = "dashboard";
3982
+ filters[i].restorable = true;
3983
+ }
3984
+ if (isMatchAllFilter(filters[i])) {
3985
+ filters[i].matchAllFilter = true;
3986
+ }
3987
+ updatedOriginFilters[foundOriginFilterIndex] = filters[i];
3988
+ } else if (filters[i].origin === "dashboard") {
3989
+ delete filters[i].origin;
3990
+ delete filters[i].restorable;
3991
+ } else if (foundOriginFilterIndex === -1 && filters[i].origin === "scope" && filters[i].restorable) {
3992
+ updatedOriginFilters.push(filters[i]);
3993
+ }
3994
+ }
3995
+ return updatedOriginFilters;
3996
+ }
3993
3997
  function deserializeUrlToFilters(value) {
3994
3998
  if (Array.isArray(value)) {
3995
3999
  const values = value;
@@ -5317,7 +5321,7 @@ const AdHocFiltersAlwaysWipCombobox = React.forwardRef(function AdHocFiltersAlwa
5317
5321
  });
5318
5322
 
5319
5323
  const AdHocFiltersComboboxRenderer = React.memo(function AdHocFiltersComboboxRenderer2({ model }) {
5320
- const { baseFilters, filters, readOnly } = model.useState();
5324
+ const { originFilters, filters, readOnly } = model.useState();
5321
5325
  const styles = ui.useStyles2(getStyles$a);
5322
5326
  const focusOnWipInputRef = React.useRef();
5323
5327
  return /* @__PURE__ */ React__default.default.createElement(
@@ -5330,7 +5334,7 @@ const AdHocFiltersComboboxRenderer = React.memo(function AdHocFiltersComboboxRen
5330
5334
  }
5331
5335
  },
5332
5336
  /* @__PURE__ */ React__default.default.createElement(ui.Icon, { name: "filter", className: styles.filterIcon, size: "lg" }),
5333
- baseFilters == null ? void 0 : baseFilters.map(
5337
+ originFilters == null ? void 0 : originFilters.map(
5334
5338
  (filter, index) => filter.origin ? /* @__PURE__ */ React__default.default.createElement(
5335
5339
  AdHocFilterPill,
5336
5340
  {
@@ -5494,17 +5498,14 @@ const OPERATORS = [
5494
5498
  ];
5495
5499
  class AdHocFiltersVariable extends SceneObjectBase {
5496
5500
  constructor(state) {
5497
- var _a, _b, _c, _d, _e, _f;
5501
+ var _a, _b, _c, _d, _e;
5498
5502
  super({
5499
5503
  type: "adhoc",
5500
5504
  name: (_a = state.name) != null ? _a : "Filters",
5501
5505
  filters: [],
5502
5506
  datasource: null,
5503
5507
  applyMode: "auto",
5504
- filterExpression: (_e = state.filterExpression) != null ? _e : renderExpression(state.expressionBuilder, [
5505
- ...(_c = (_b = state.baseFilters) == null ? void 0 : _b.filter((filter) => filter.origin)) != null ? _c : [],
5506
- ...(_d = state.filters) != null ? _d : []
5507
- ]),
5508
+ filterExpression: (_d = state.filterExpression) != null ? _d : renderExpression(state.expressionBuilder, [...(_b = state.originFilters) != null ? _b : [], ...(_c = state.filters) != null ? _c : []]),
5508
5509
  ...state
5509
5510
  });
5510
5511
  this._scopedVars = { __sceneObject: wrapInSafeSerializableSceneObject(this) };
@@ -5513,6 +5514,7 @@ class AdHocFiltersVariable extends SceneObjectBase {
5513
5514
  // are set on construct and used to restore a baseFilter with an origin
5514
5515
  // to its original value if edited at some point
5515
5516
  this._originalValues = /* @__PURE__ */ new Map();
5517
+ this._prevScopes = [];
5516
5518
  /** Needed for scopes dependency */
5517
5519
  this._variableDependency = new VariableDependencyConfig(this, {
5518
5520
  dependsOnScopes: true,
@@ -5520,44 +5522,33 @@ class AdHocFiltersVariable extends SceneObjectBase {
5520
5522
  });
5521
5523
  this._urlSync = new AdHocFiltersVariableUrlSyncHandler(this);
5522
5524
  this._activationHandler = () => {
5523
- this._updateScopesFilters();
5524
5525
  return () => {
5525
- var _a, _b;
5526
- if ((_a = this.state.baseFilters) == null ? void 0 : _a.length) {
5527
- this.setState({
5528
- baseFilters: [...this.state.baseFilters.filter((filter) => filter.origin !== "scope")]
5529
- });
5530
- (_b = this.state.baseFilters) == null ? void 0 : _b.forEach((filter) => {
5531
- if (filter.origin === "dashboard" && filter.restorable) {
5532
- this.restoreOriginalFilter(filter);
5533
- }
5534
- });
5535
- }
5526
+ var _a;
5527
+ (_a = this.state.originFilters) == null ? void 0 : _a.forEach((filter) => {
5528
+ if (filter.restorable) {
5529
+ this.restoreOriginalFilter(filter);
5530
+ }
5531
+ });
5536
5532
  };
5537
5533
  };
5538
5534
  if (this.state.applyMode === "auto") {
5539
5535
  patchGetAdhocFilters(this);
5540
5536
  }
5541
- (_f = this.state.baseFilters) == null ? void 0 : _f.forEach((baseFilter) => {
5537
+ (_e = this.state.originFilters) == null ? void 0 : _e.forEach((filter) => {
5542
5538
  var _a2;
5543
- if (baseFilter.origin === "dashboard") {
5544
- this._originalValues.set(baseFilter.key, {
5545
- operator: baseFilter.operator,
5546
- value: (_a2 = baseFilter.values) != null ? _a2 : [baseFilter.value]
5547
- });
5548
- }
5539
+ this._originalValues.set(filter.key, {
5540
+ operator: filter.operator,
5541
+ value: (_a2 = filter.values) != null ? _a2 : [filter.value]
5542
+ });
5549
5543
  });
5550
5544
  this.addActivationHandler(this._activationHandler);
5551
5545
  }
5552
5546
  _updateScopesFilters() {
5553
5547
  var _a, _b;
5554
5548
  const scopes = sceneGraph.getScopes(this);
5555
- if (!scopes) {
5556
- return;
5557
- }
5558
- if (!scopes.length) {
5549
+ if (!scopes || !scopes.length) {
5559
5550
  this.setState({
5560
- baseFilters: (_a = this.state.baseFilters) == null ? void 0 : _a.filter((filter) => filter.origin !== "scope")
5551
+ originFilters: (_a = this.state.originFilters) == null ? void 0 : _a.filter((filter) => filter.origin !== "scope")
5561
5552
  });
5562
5553
  return;
5563
5554
  }
@@ -5575,13 +5566,18 @@ class AdHocFiltersVariable extends SceneObjectBase {
5575
5566
  operator: scopeFilter.operator
5576
5567
  });
5577
5568
  });
5578
- (_b = this.state.baseFilters) == null ? void 0 : _b.forEach((filter) => {
5569
+ (_b = this.state.originFilters) == null ? void 0 : _b.forEach((filter) => {
5579
5570
  if (filter.origin === "scope") {
5580
5571
  scopeInjectedFilters.push(filter);
5581
5572
  } else {
5582
5573
  remainingFilters.push(filter);
5583
5574
  }
5584
5575
  });
5576
+ if (this._prevScopes.length) {
5577
+ this.setState({ originFilters: [...finalFilters, ...remainingFilters] });
5578
+ this._prevScopes = scopes;
5579
+ return;
5580
+ }
5585
5581
  const editedScopeFilters = scopeInjectedFilters.filter((filter) => filter.restorable);
5586
5582
  const editedScopeFilterKeys = editedScopeFilters.map((filter) => filter.key);
5587
5583
  const scopeFilterKeys = scopeFilters.map((filter) => filter.key);
@@ -5589,18 +5585,16 @@ class AdHocFiltersVariable extends SceneObjectBase {
5589
5585
  ...editedScopeFilters.filter((filter) => scopeFilterKeys.includes(filter.key)),
5590
5586
  ...scopeFilters.filter((filter) => !editedScopeFilterKeys.includes(filter.key))
5591
5587
  ];
5592
- this.setState({ baseFilters: [...finalFilters, ...remainingFilters] });
5588
+ this.setState({ originFilters: [...finalFilters, ...remainingFilters] });
5589
+ this._prevScopes = scopes;
5593
5590
  }
5594
5591
  setState(update) {
5595
- var _a, _b, _c;
5592
+ var _a, _b;
5596
5593
  let filterExpressionChanged = false;
5597
- if ((update.filters && update.filters !== this.state.filters || update.baseFilters && update.baseFilters !== this.state.baseFilters) && !update.filterExpression) {
5594
+ if ((update.filters && update.filters !== this.state.filters || update.originFilters && update.originFilters !== this.state.originFilters) && !update.filterExpression) {
5598
5595
  const filters = (_a = update.filters) != null ? _a : this.state.filters;
5599
- const baseFilters = (_b = update.baseFilters) != null ? _b : this.state.baseFilters;
5600
- update.filterExpression = renderExpression(this.state.expressionBuilder, [
5601
- ...(_c = baseFilters == null ? void 0 : baseFilters.filter((filter) => filter.origin)) != null ? _c : [],
5602
- ...filters != null ? filters : []
5603
- ]);
5596
+ const originFilters = (_b = update.originFilters) != null ? _b : this.state.originFilters;
5597
+ update.filterExpression = renderExpression(this.state.expressionBuilder, [...originFilters != null ? originFilters : [], ...filters]);
5604
5598
  filterExpressionChanged = update.filterExpression !== this.state.filterExpression;
5605
5599
  }
5606
5600
  super.setState(update);
@@ -5614,12 +5608,12 @@ class AdHocFiltersVariable extends SceneObjectBase {
5614
5608
  * allowing consumers to update the filters without triggering dependent data providers.
5615
5609
  */
5616
5610
  updateFilters(filters, options) {
5617
- var _a, _b;
5611
+ var _a;
5618
5612
  let filterExpressionChanged = false;
5619
5613
  let filterExpression = void 0;
5620
5614
  if (filters && filters !== this.state.filters) {
5621
5615
  filterExpression = renderExpression(this.state.expressionBuilder, [
5622
- ...(_b = (_a = this.state.baseFilters) == null ? void 0 : _a.filter((filter) => filter.origin)) != null ? _b : [],
5616
+ ...(_a = this.state.originFilters) != null ? _a : [],
5623
5617
  ...filters
5624
5618
  ]);
5625
5619
  filterExpressionChanged = filterExpression !== this.state.filterExpression;
@@ -5639,32 +5633,34 @@ class AdHocFiltersVariable extends SceneObjectBase {
5639
5633
  };
5640
5634
  if (filter.restorable) {
5641
5635
  const originalFilter = this._originalValues.get(filter.key);
5636
+ if (!originalFilter) {
5637
+ return;
5638
+ }
5642
5639
  original.value = originalFilter == null ? void 0 : originalFilter.value[0];
5643
5640
  original.values = originalFilter == null ? void 0 : originalFilter.value;
5644
5641
  original.valueLabels = originalFilter == null ? void 0 : originalFilter.value;
5645
5642
  original.operator = originalFilter == null ? void 0 : originalFilter.operator;
5643
+ this._updateFilter(filter, original);
5646
5644
  }
5647
- this._updateFilter(filter, original);
5648
5645
  }
5649
5646
  getValue() {
5650
5647
  return this.state.filterExpression;
5651
5648
  }
5652
5649
  _updateFilter(filter, update) {
5653
5650
  var _a;
5654
- const { baseFilters, filters, _wip } = this.state;
5651
+ const { originFilters, filters, _wip } = this.state;
5655
5652
  if (filter.origin) {
5656
5653
  const originalValues = this._originalValues.get(filter.key);
5657
5654
  const updateValues = update.values || (update.value ? [update.value] : void 0);
5658
- const isRestorableOverride = update.hasOwnProperty("restorable");
5659
- if (!isRestorableOverride && (updateValues && !lodash.isEqual(updateValues, originalValues == null ? void 0 : originalValues.value) || update.operator && update.operator !== (originalValues == null ? void 0 : originalValues.operator))) {
5655
+ if (updateValues && !lodash.isEqual(updateValues, originalValues == null ? void 0 : originalValues.value) || update.operator && update.operator !== (originalValues == null ? void 0 : originalValues.operator)) {
5660
5656
  update.restorable = true;
5661
5657
  } else if (updateValues && lodash.isEqual(updateValues, originalValues == null ? void 0 : originalValues.value)) {
5662
5658
  update.restorable = false;
5663
5659
  }
5664
- const updatedBaseFilters = (_a = baseFilters == null ? void 0 : baseFilters.map((f) => {
5660
+ const updatedFilters2 = (_a = originFilters == null ? void 0 : originFilters.map((f) => {
5665
5661
  return f === filter ? { ...f, ...update } : f;
5666
5662
  })) != null ? _a : [];
5667
- this.setState({ baseFilters: updatedBaseFilters });
5663
+ this.setState({ originFilters: updatedFilters2 });
5668
5664
  return;
5669
5665
  }
5670
5666
  if (filter === _wip) {
@@ -5727,13 +5723,13 @@ class AdHocFiltersVariable extends SceneObjectBase {
5727
5723
  return [...acc, f];
5728
5724
  }, [])
5729
5725
  });
5730
- } else if ((_a = this.state.baseFilters) == null ? void 0 : _a.length) {
5731
- let filterToForceIndex = this.state.baseFilters.length - 1;
5726
+ } else if ((_a = this.state.originFilters) == null ? void 0 : _a.length) {
5727
+ let filterToForceIndex = this.state.originFilters.length - 1;
5732
5728
  if (filter !== this.state._wip) {
5733
5729
  filterToForceIndex = -1;
5734
5730
  }
5735
5731
  this.setState({
5736
- baseFilters: this.state.baseFilters.reduce((acc, f, index) => {
5732
+ originFilters: this.state.originFilters.reduce((acc, f, index) => {
5737
5733
  if (index === filterToForceIndex && !f.readOnly) {
5738
5734
  return [
5739
5735
  ...acc,
@@ -5803,8 +5799,8 @@ class AdHocFiltersVariable extends SceneObjectBase {
5803
5799
  if (!ds || !ds.getTagValues) {
5804
5800
  return [];
5805
5801
  }
5806
- const filteredBaseFilters = (_d = (_c = this.state.baseFilters) == null ? void 0 : _c.filter((f) => f.origin && f.key !== filter.key)) != null ? _d : [];
5807
- const otherFilters = this.state.filters.filter((f) => f.key !== filter.key).concat(filteredBaseFilters);
5802
+ const originFilters = (_d = (_c = this.state.originFilters) == null ? void 0 : _c.filter((f) => f.key !== filter.key)) != null ? _d : [];
5803
+ const otherFilters = this.state.filters.filter((f) => f.key !== filter.key).concat(originFilters);
5808
5804
  const timeRange = sceneGraph.getTimeRange(this).state.value;
5809
5805
  const queries = this.state.useQueriesAsFilterForOptions ? getQueriesForVariables(this) : void 0;
5810
5806
  let scopes = sceneGraph.getScopes(this);
@@ -6288,12 +6284,10 @@ class SceneQueryRunner extends SceneObjectBase {
6288
6284
  ...getEnrichedDataRequest(this)
6289
6285
  };
6290
6286
  if (this._adhocFiltersVar) {
6291
- request.filters = [];
6292
- if ((_a = this._adhocFiltersVar.state.baseFilters) == null ? void 0 : _a.length) {
6293
- const injectedBaseFilters = this._adhocFiltersVar.state.baseFilters.filter((filter) => filter.origin);
6294
- request.filters = request.filters.concat(injectedBaseFilters);
6295
- }
6296
- request.filters = request.filters.concat(this._adhocFiltersVar.state.filters.filter(isFilterComplete));
6287
+ request.filters = [
6288
+ ...(_a = this._adhocFiltersVar.state.originFilters) != null ? _a : [],
6289
+ ...this._adhocFiltersVar.state.filters
6290
+ ].filter(isFilterComplete);
6297
6291
  }
6298
6292
  if (this._groupByVar) {
6299
6293
  request.groupByKeys = this._groupByVar.state.value;
@@ -6530,7 +6524,7 @@ function escapeUrlHashDelimiters(value) {
6530
6524
  }
6531
6525
  return /#/g[Symbol.replace](value, "__gfh__");
6532
6526
  }
6533
- function escapeInjectedFilterUrlDelimiters(value) {
6527
+ function escapeOriginFilterUrlDelimiters(value) {
6534
6528
  return escapeUrlHashDelimiters(escapeUrlPipeDelimiters(value));
6535
6529
  }
6536
6530
  function escapeURLDelimiters(value) {