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