@grafana/scenes 6.4.0--canary.1062.13918541857.0 → 6.4.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.d.ts CHANGED
@@ -878,7 +878,6 @@ interface AdHocFilterWithLabels<M extends Record<string, any> = {}> extends AdHo
878
878
  hidden?: boolean;
879
879
  meta?: M;
880
880
  origin?: FilterOrigin;
881
- originalValue?: string[];
882
881
  }
883
882
  type AdHocControlsLayout = ControlsLayout | 'combobox';
884
883
  declare enum FilterOrigin {
@@ -989,7 +988,6 @@ declare class AdHocFiltersVariable extends SceneObjectBase<AdHocFiltersVariableS
989
988
  protected _urlSync: AdHocFiltersVariableUrlSyncHandler;
990
989
  constructor(state: Partial<AdHocFiltersVariableState>);
991
990
  private _activationHandler;
992
- private _updateScopesFilters;
993
991
  setState(update: Partial<AdHocFiltersVariableState>): void;
994
992
  /**
995
993
  * Updates the variable's `filters` and `filterExpression` state.
@@ -1000,7 +998,6 @@ declare class AdHocFiltersVariable extends SceneObjectBase<AdHocFiltersVariableS
1000
998
  skipPublish?: boolean;
1001
999
  forcePublish?: boolean;
1002
1000
  }): void;
1003
- restoreOriginalFilter(filter: AdHocFilterWithLabels): void;
1004
1001
  getValue(): VariableValue | undefined;
1005
1002
  _updateFilter(filter: AdHocFilterWithLabels, update: Partial<AdHocFilterWithLabels>): void;
1006
1003
  _removeFilter(filter: AdHocFilterWithLabels): void;
package/dist/index.js CHANGED
@@ -3972,44 +3972,19 @@ class AdHocFiltersVariableUrlSyncHandler {
3972
3972
  }
3973
3973
  getUrlState() {
3974
3974
  const filters = this._variable.state.filters;
3975
- const baseFilters = this._variable.state.baseFilters;
3976
- let value = [];
3977
- if (filters.length === 0 && (baseFilters == null ? void 0 : baseFilters.length) === 0) {
3975
+ if (filters.length === 0) {
3978
3976
  return { [this.getKey()]: [""] };
3979
3977
  }
3980
- if (filters.length) {
3981
- value.push(
3982
- ...filters.filter(isFilterComplete).filter((filter) => !filter.hidden).map((filter) => toArray(filter).map(escapeUrlPipeDelimiters).join("|"))
3983
- );
3984
- }
3985
- if (baseFilters == null ? void 0 : baseFilters.length) {
3986
- value.push(
3987
- ...baseFilters == null ? void 0 : baseFilters.filter(isFilterComplete).filter((filter) => !filter.hidden && filter.origin && filter.originalValue).map(
3988
- (filter) => {
3989
- var _a, _b;
3990
- return toArray(filter).map(escapeInjectedFilterUrlDelimiters).join("|").concat(
3991
- `#${(_b = (_a = filter.originalValue) == null ? void 0 : _a.map(escapeInjectedFilterUrlDelimiters).join("|")) != null ? _b : ""}#${filter.origin}`
3992
- );
3993
- }
3994
- )
3995
- );
3996
- }
3997
- return {
3998
- [this.getKey()]: value.length ? value : [""]
3999
- };
3978
+ const value = filters.filter(isFilterComplete).filter((filter) => !filter.hidden).map((filter) => toArray(filter).map(escapeUrlPipeDelimiters).join("|"));
3979
+ return { [this.getKey()]: value };
4000
3980
  }
4001
3981
  updateFromUrl(values) {
4002
3982
  const urlValue = values[this.getKey()];
4003
3983
  if (urlValue == null) {
4004
3984
  return;
4005
3985
  }
4006
- if (urlValue) {
4007
- const filters = deserializeUrlToFilters(urlValue);
4008
- this._variable.setState({
4009
- filters: filters.filter((f) => !f.origin),
4010
- baseFilters: filters.filter((f) => f.origin)
4011
- });
4012
- }
3986
+ const filters = deserializeUrlToFilters(urlValue);
3987
+ this._variable.setState({ filters });
4013
3988
  }
4014
3989
  }
4015
3990
  function deserializeUrlToFilters(value) {
@@ -4034,12 +4009,10 @@ function toArray(filter) {
4034
4009
  return result;
4035
4010
  }
4036
4011
  function toFilter(urlValue) {
4037
- var _a;
4038
4012
  if (typeof urlValue !== "string" || urlValue.length === 0) {
4039
4013
  return null;
4040
4014
  }
4041
- const [filter, originalValues, origin] = urlValue.split("#");
4042
- const [key, keyLabel, operator, _operatorLabel, ...values] = filter.split("|").reduce((acc, v) => {
4015
+ const [key, keyLabel, operator, _operatorLabel, ...values] = urlValue.split("|").reduce((acc, v) => {
4043
4016
  const [key2, label] = v.split(",");
4044
4017
  acc.push(key2, label != null ? label : key2);
4045
4018
  return acc;
@@ -4051,14 +4024,9 @@ function toFilter(urlValue) {
4051
4024
  value: values[0],
4052
4025
  values: isMultiValueOperator(operator) ? values.filter((_, index) => index % 2 === 0) : void 0,
4053
4026
  valueLabels: values.filter((_, index) => index % 2 === 1),
4054
- condition: "",
4055
- origin: isFilterOrigin(origin) ? origin : void 0,
4056
- originalValue: originalValues && originalValues.length ? (_a = originalValues.split("|")) != null ? _a : [originalValues] : void 0
4027
+ condition: ""
4057
4028
  };
4058
4029
  }
4059
- function isFilterOrigin(value) {
4060
- return value === FilterOrigin.Scopes || value === FilterOrigin.Dashboards;
4061
- }
4062
4030
  function isFilter(filter) {
4063
4031
  return filter !== null && typeof filter.key === "string" && typeof filter.value === "string";
4064
4032
  }
@@ -4720,9 +4688,6 @@ const AdHocCombobox = React.forwardRef(function AdHocCombobox2({ filter, model,
4720
4688
  return;
4721
4689
  }
4722
4690
  }
4723
- if (filter == null ? void 0 : filter.origin) {
4724
- return;
4725
- }
4726
4691
  setInputType("operator");
4727
4692
  return;
4728
4693
  }
@@ -4909,36 +4874,25 @@ const AdHocCombobox = React.forwardRef(function AdHocCombobox2({ filter, model,
4909
4874
  className: styles.pillWrapper
4910
4875
  }, (filter == null ? void 0 : filter.key) ? /* @__PURE__ */ React__default["default"].createElement("div", {
4911
4876
  className: css.cx(styles.basePill, styles.keyPill)
4912
- }, keyLabel) : null, (filter == null ? void 0 : filter.key) && (filter == null ? void 0 : filter.operator) && filterInputType !== "operator" ? /* @__PURE__ */ React__default["default"].createElement("div", __spreadValues$B({
4877
+ }, keyLabel) : null, (filter == null ? void 0 : filter.key) && (filter == null ? void 0 : filter.operator) && filterInputType !== "operator" ? /* @__PURE__ */ React__default["default"].createElement("div", {
4913
4878
  id: operatorIdentifier,
4914
- className: css.cx(
4915
- styles.basePill,
4916
- !filter.origin && styles.operatorPill,
4917
- filter.origin && styles.keyPill,
4918
- operatorIdentifier
4919
- ),
4879
+ className: css.cx(styles.basePill, styles.operatorPill, operatorIdentifier),
4880
+ role: "button",
4920
4881
  "aria-label": "Edit filter operator",
4921
- tabIndex: filter.origin ? -1 : 0,
4882
+ tabIndex: 0,
4922
4883
  onClick: (event) => {
4923
- if (filter.origin) {
4924
- handleChangeViewMode == null ? void 0 : handleChangeViewMode();
4925
- return;
4926
- }
4927
4884
  event.stopPropagation();
4928
4885
  setInputValue("");
4929
4886
  switchInputType("operator", setInputType, void 0, refs.domReference.current);
4930
4887
  },
4931
4888
  onKeyDown: (event) => {
4932
- if (filter.origin) {
4933
- return;
4934
- }
4935
4889
  handleShiftTabInput(event, hasMultiValueOperator);
4936
4890
  if (event.key === "Enter") {
4937
4891
  setInputValue("");
4938
4892
  switchInputType("operator", setInputType, void 0, refs.domReference.current);
4939
4893
  }
4940
4894
  }
4941
- }, !filter.origin && { role: "button" }), filter.operator) : null, /* @__PURE__ */ React__default["default"].createElement("div", {
4895
+ }, filter.operator) : null, /* @__PURE__ */ React__default["default"].createElement("div", {
4942
4896
  ref: multiValuePillWrapperRef
4943
4897
  }), isMultiValueEdit ? filterMultiValues.map((item, i) => /* @__PURE__ */ React__default["default"].createElement(MultiValuePill, {
4944
4898
  key: `${item.value}-${i}`,
@@ -5185,13 +5139,13 @@ function AdHocFilterPill({ filter, model, readOnly, focusOnWipInputRef }) {
5185
5139
  const handleChangeViewMode = React.useCallback(
5186
5140
  (event, shouldFocusOnPillWrapperOverride) => {
5187
5141
  event == null ? void 0 : event.stopPropagation();
5188
- if (readOnly) {
5142
+ if (readOnly || filter.origin) {
5189
5143
  return;
5190
5144
  }
5191
5145
  setShouldFocusOnPillWrapper(shouldFocusOnPillWrapperOverride != null ? shouldFocusOnPillWrapperOverride : !viewMode);
5192
5146
  setViewMode(!viewMode);
5193
5147
  },
5194
- [readOnly, viewMode]
5148
+ [readOnly, viewMode, filter.origin]
5195
5149
  );
5196
5150
  React.useEffect(() => {
5197
5151
  var _a2;
@@ -5255,20 +5209,11 @@ function AdHocFilterPill({ filter, model, readOnly, focusOnWipInputRef }) {
5255
5209
  size: "md",
5256
5210
  className: styles.pillIcon,
5257
5211
  tooltip: `Remove filter with key ${keyLabel}`
5258
- }) : null, filter.origin && !filter.originalValue && /* @__PURE__ */ React__default["default"].createElement(ui.IconButton, {
5212
+ }) : null, filter.origin && /* @__PURE__ */ React__default["default"].createElement(ui.IconButton, {
5259
5213
  name: "info-circle",
5260
5214
  size: "md",
5261
5215
  className: styles.pillIcon,
5262
5216
  tooltip: `This is a ${filter.origin} injected filter`
5263
- }), filter.origin && filter.originalValue && /* @__PURE__ */ React__default["default"].createElement(ui.IconButton, {
5264
- onClick: (e) => {
5265
- e.stopPropagation();
5266
- model.restoreOriginalFilter(filter);
5267
- },
5268
- name: "history",
5269
- size: "md",
5270
- className: styles.pillIcon,
5271
- tooltip: `Restore filter to its original value`
5272
5217
  }));
5273
5218
  }
5274
5219
  return /* @__PURE__ */ React__default["default"].createElement(AdHocCombobox, {
@@ -5402,73 +5347,6 @@ const getStyles$a = (theme) => ({
5402
5347
  })
5403
5348
  });
5404
5349
 
5405
- const reverseScopeFilterOperatorMap = Object.fromEntries(
5406
- Object.entries(data.scopeFilterOperatorMap).map(([symbol, operator]) => [operator, symbol])
5407
- );
5408
- function isEqualityOrMultiOperator(value) {
5409
- const operators = /* @__PURE__ */ new Set(["equals", "not-equals", "one-of", "not-one-of"]);
5410
- return operators.has(value);
5411
- }
5412
- function getAdHocFiltersFromScopes(scopes) {
5413
- const formattedFilters = /* @__PURE__ */ new Map();
5414
- const duplicatedFilters = [];
5415
- const allFilters = scopes.flatMap((scope) => scope.spec.filters);
5416
- for (const filter of allFilters) {
5417
- processFilter(formattedFilters, duplicatedFilters, filter);
5418
- }
5419
- return [...formattedFilters.values(), ...duplicatedFilters];
5420
- }
5421
- function processFilter(formattedFilters, duplicatedFilters, filter) {
5422
- var _a, _b;
5423
- const existingFilter = formattedFilters.get(filter.key);
5424
- if (existingFilter && canValueBeMerged(existingFilter.operator, filter.operator)) {
5425
- mergeFilterValues(existingFilter, filter);
5426
- } else if (!existingFilter) {
5427
- formattedFilters.set(filter.key, {
5428
- key: filter.key,
5429
- operator: reverseScopeFilterOperatorMap[filter.operator],
5430
- value: filter.value,
5431
- values: (_a = filter.values) != null ? _a : [filter.value],
5432
- origin: FilterOrigin.Scopes
5433
- });
5434
- } else {
5435
- duplicatedFilters.push({
5436
- key: filter.key,
5437
- operator: reverseScopeFilterOperatorMap[filter.operator],
5438
- value: filter.value,
5439
- values: (_b = filter.values) != null ? _b : [filter.value],
5440
- origin: FilterOrigin.Scopes
5441
- });
5442
- }
5443
- }
5444
- function mergeFilterValues(adHocFilter, filter) {
5445
- var _a, _b, _c, _d;
5446
- const values = (_a = filter.values) != null ? _a : [filter.value];
5447
- for (const value of values) {
5448
- if (!((_b = adHocFilter.values) == null ? void 0 : _b.includes(value))) {
5449
- (_c = adHocFilter.values) == null ? void 0 : _c.push(value);
5450
- }
5451
- }
5452
- if (((_d = adHocFilter.values) == null ? void 0 : _d.length) === 1) {
5453
- return;
5454
- }
5455
- if (filter.operator === "equals" && adHocFilter.operator === reverseScopeFilterOperatorMap["equals"]) {
5456
- adHocFilter.operator = reverseScopeFilterOperatorMap["one-of"];
5457
- } else if (filter.operator === "not-equals" && adHocFilter.operator === reverseScopeFilterOperatorMap["not-equals"]) {
5458
- adHocFilter.operator = reverseScopeFilterOperatorMap["not-one-of"];
5459
- }
5460
- }
5461
- function canValueBeMerged(adHocFilterOperator, filterOperator) {
5462
- const scopeConvertedOperator = data.scopeFilterOperatorMap[adHocFilterOperator];
5463
- if (!isEqualityOrMultiOperator(scopeConvertedOperator) || !isEqualityOrMultiOperator(filterOperator)) {
5464
- return false;
5465
- }
5466
- if (scopeConvertedOperator.includes("not") && !filterOperator.includes("not") || !scopeConvertedOperator.includes("not") && filterOperator.includes("not")) {
5467
- return false;
5468
- }
5469
- return true;
5470
- }
5471
-
5472
5350
  var __defProp$z = Object.defineProperty;
5473
5351
  var __defProps$n = Object.defineProperties;
5474
5352
  var __getOwnPropDescs$n = Object.getOwnPropertyDescriptors;
@@ -5533,62 +5411,20 @@ const OPERATORS = [
5533
5411
  ];
5534
5412
  class AdHocFiltersVariable extends SceneObjectBase {
5535
5413
  constructor(state) {
5536
- var _a, _b, _c, _d, _e;
5414
+ var _a, _b;
5537
5415
  super(__spreadValues$z({
5538
5416
  type: "adhoc",
5539
5417
  name: (_a = state.name) != null ? _a : "Filters",
5540
5418
  filters: [],
5541
5419
  datasource: null,
5542
5420
  applyMode: "auto",
5543
- filterExpression: (_e = state.filterExpression) != null ? _e : renderExpression(state.expressionBuilder, [
5544
- ...(_c = (_b = state.baseFilters) == null ? void 0 : _b.filter((filter) => filter.origin)) != null ? _c : [],
5545
- ...(_d = state.filters) != null ? _d : []
5546
- ])
5421
+ filterExpression: (_b = state.filterExpression) != null ? _b : renderExpression(state.expressionBuilder, state.filters)
5547
5422
  }, state));
5548
5423
  this._scopedVars = { __sceneObject: wrapInSafeSerializableSceneObject(this) };
5549
5424
  this._dataSourceSrv = runtime.getDataSourceSrv();
5550
5425
  this._urlSync = new AdHocFiltersVariableUrlSyncHandler(this);
5551
5426
  this._activationHandler = () => {
5552
- var _a, _b;
5553
5427
  this._scopesBridge = sceneGraph.getScopesBridge(this);
5554
- const scopes = (_a = this._scopesBridge) == null ? void 0 : _a.getValue();
5555
- if (scopes) {
5556
- this._updateScopesFilters(scopes);
5557
- }
5558
- const sub = (_b = this._scopesBridge) == null ? void 0 : _b.subscribeToValue((n, _) => {
5559
- this._updateScopesFilters(n, true);
5560
- });
5561
- return () => {
5562
- sub == null ? void 0 : sub.unsubscribe();
5563
- };
5564
- };
5565
- this._updateScopesFilters = (scopes, overwrite) => {
5566
- var _a;
5567
- const scopeInjectedFilters = [];
5568
- const remainingFilters = [];
5569
- (_a = this.state.baseFilters) == null ? void 0 : _a.forEach((filter) => {
5570
- if (filter.origin === "scopes" /* Scopes */) {
5571
- scopeInjectedFilters.push(filter);
5572
- } else {
5573
- remainingFilters.push(filter);
5574
- }
5575
- });
5576
- const scopeFilters = getAdHocFiltersFromScopes(scopes);
5577
- let finalFilters = scopeFilters;
5578
- if (!overwrite) {
5579
- const editedScopeFilters = scopeInjectedFilters.filter((filter) => {
5580
- var _a2;
5581
- return (_a2 = filter.originalValue) == null ? void 0 : _a2.length;
5582
- });
5583
- const editedScopeFilterKeys = editedScopeFilters.map((filter) => filter.key);
5584
- const scopeFilterKeys = scopeFilters.map((filter) => filter.key);
5585
- finalFilters = [
5586
- ...editedScopeFilters.filter((filter) => scopeFilterKeys.includes(filter.key)),
5587
- ...scopeFilters.filter((filter) => !editedScopeFilterKeys.includes(filter.key))
5588
- ];
5589
- }
5590
- const newFilters = [...remainingFilters, ...finalFilters];
5591
- this.setState({ baseFilters: newFilters });
5592
5428
  };
5593
5429
  if (this.state.applyMode === "auto") {
5594
5430
  patchGetAdhocFilters(this);
@@ -5596,15 +5432,9 @@ class AdHocFiltersVariable extends SceneObjectBase {
5596
5432
  this.addActivationHandler(this._activationHandler);
5597
5433
  }
5598
5434
  setState(update) {
5599
- var _a, _b, _c;
5600
5435
  let filterExpressionChanged = false;
5601
- if ((update.filters && update.filters !== this.state.filters || update.baseFilters && update.baseFilters !== this.state.baseFilters) && !update.filterExpression) {
5602
- const filters = (_a = update.filters) != null ? _a : this.state.filters;
5603
- const baseFilters = (_b = update.baseFilters) != null ? _b : this.state.baseFilters;
5604
- update.filterExpression = renderExpression(this.state.expressionBuilder, [
5605
- ...(_c = baseFilters == null ? void 0 : baseFilters.filter((filter) => filter.origin)) != null ? _c : [],
5606
- ...filters != null ? filters : []
5607
- ]);
5436
+ if (update.filters && update.filters !== this.state.filters && !update.filterExpression) {
5437
+ update.filterExpression = renderExpression(this.state.expressionBuilder, update.filters);
5608
5438
  filterExpressionChanged = update.filterExpression !== this.state.filterExpression;
5609
5439
  }
5610
5440
  super.setState(update);
@@ -5613,14 +5443,10 @@ class AdHocFiltersVariable extends SceneObjectBase {
5613
5443
  }
5614
5444
  }
5615
5445
  updateFilters(filters, options) {
5616
- var _a, _b;
5617
5446
  let filterExpressionChanged = false;
5618
5447
  let filterExpression = void 0;
5619
5448
  if (filters && filters !== this.state.filters) {
5620
- filterExpression = renderExpression(this.state.expressionBuilder, [
5621
- ...(_b = (_a = this.state.baseFilters) == null ? void 0 : _a.filter((filter) => filter.origin)) != null ? _b : [],
5622
- ...filters
5623
- ]);
5449
+ filterExpression = renderExpression(this.state.expressionBuilder, filters);
5624
5450
  filterExpressionChanged = filterExpression !== this.state.filterExpression;
5625
5451
  }
5626
5452
  super.setState({
@@ -5631,40 +5457,11 @@ class AdHocFiltersVariable extends SceneObjectBase {
5631
5457
  this.publishEvent(new SceneVariableValueChangedEvent(this), true);
5632
5458
  }
5633
5459
  }
5634
- restoreOriginalFilter(filter) {
5635
- var _a;
5636
- const original = {
5637
- originalValue: void 0
5638
- };
5639
- if ((_a = filter.originalValue) == null ? void 0 : _a.length) {
5640
- original.value = filter.originalValue[0];
5641
- original.values = filter.originalValue;
5642
- original.valueLabels = filter.originalValue;
5643
- }
5644
- this._updateFilter(filter, original);
5645
- }
5646
5460
  getValue() {
5647
5461
  return this.state.filterExpression;
5648
5462
  }
5649
5463
  _updateFilter(filter, update) {
5650
- var _a;
5651
- const { baseFilters, filters, _wip } = this.state;
5652
- if (filter.origin) {
5653
- const currentValues = filter.values ? filter.values : [filter.value];
5654
- const updateValues = update.values || (update.value ? [update.value] : void 0);
5655
- const originalValueOverride = update.hasOwnProperty("originalValue");
5656
- if (!originalValueOverride && updateValues && !filter.originalValue && !lodash.isEqual(currentValues, updateValues)) {
5657
- update.originalValue = currentValues;
5658
- }
5659
- if (!originalValueOverride && lodash.isEqual(updateValues, filter.originalValue)) {
5660
- update.originalValue = void 0;
5661
- }
5662
- const updatedBaseFilters = (_a = baseFilters == null ? void 0 : baseFilters.map((f) => {
5663
- return f === filter ? __spreadValues$z(__spreadValues$z({}, f), update) : f;
5664
- })) != null ? _a : [];
5665
- this.setState({ baseFilters: updatedBaseFilters });
5666
- return;
5667
- }
5464
+ const { filters, _wip } = this.state;
5668
5465
  if (filter === _wip) {
5669
5466
  if ("value" in update && update["value"] !== "") {
5670
5467
  this.setState({ filters: [...filters, __spreadValues$z(__spreadValues$z({}, _wip), update)], _wip: void 0 });
@@ -5692,7 +5489,6 @@ class AdHocFiltersVariable extends SceneObjectBase {
5692
5489
  }
5693
5490
  }
5694
5491
  _handleComboboxBackspace(filter) {
5695
- var _a;
5696
5492
  if (this.state.filters.length) {
5697
5493
  let filterToForceIndex = this.state.filters.length - 1;
5698
5494
  if (filter !== this.state._wip) {
@@ -5714,27 +5510,6 @@ class AdHocFiltersVariable extends SceneObjectBase {
5714
5510
  return [...acc, f];
5715
5511
  }, [])
5716
5512
  });
5717
- } else if ((_a = this.state.baseFilters) == null ? void 0 : _a.length) {
5718
- let filterToForceIndex = this.state.baseFilters.length - 1;
5719
- if (filter !== this.state._wip) {
5720
- filterToForceIndex = -1;
5721
- }
5722
- this.setState({
5723
- baseFilters: this.state.baseFilters.reduce((acc, f, index) => {
5724
- if (index === filterToForceIndex) {
5725
- return [
5726
- ...acc,
5727
- __spreadProps$n(__spreadValues$z({}, f), {
5728
- forceEdit: true
5729
- })
5730
- ];
5731
- }
5732
- if (f === filter) {
5733
- return acc;
5734
- }
5735
- return [...acc, f];
5736
- }, [])
5737
- });
5738
5513
  }
5739
5514
  }
5740
5515
  async _getKeys(currentKey) {
@@ -5773,7 +5548,7 @@ class AdHocFiltersVariable extends SceneObjectBase {
5773
5548
  return keys.map(toSelectableValue);
5774
5549
  }
5775
5550
  async _getValuesFor(filter) {
5776
- var _a, _b, _c, _d, _e;
5551
+ var _a, _b, _c, _d;
5777
5552
  const override = await ((_b = (_a = this.state).getTagValuesProvider) == null ? void 0 : _b.call(_a, this, filter));
5778
5553
  if (override && override.replace) {
5779
5554
  return dataFromResponse(override.values).map(toSelectableValue);
@@ -5782,26 +5557,15 @@ class AdHocFiltersVariable extends SceneObjectBase {
5782
5557
  if (!ds || !ds.getTagValues) {
5783
5558
  return [];
5784
5559
  }
5785
- const filteredBaseFilters = (_d = (_c = this.state.baseFilters) == null ? void 0 : _c.filter((f) => f.origin && f.key !== filter.key)) != null ? _d : [];
5786
- const otherFilters = this.state.filters.filter((f) => f.key !== filter.key).concat(filteredBaseFilters);
5560
+ const otherFilters = this.state.filters.filter((f) => f.key !== filter.key).concat((_c = this.state.baseFilters) != null ? _c : []);
5787
5561
  const timeRange = sceneGraph.getTimeRange(this).state.value;
5788
5562
  const queries = this.state.useQueriesAsFilterForOptions ? getQueriesForVariables(this) : void 0;
5789
- let scopes = (_e = this._scopesBridge) == null ? void 0 : _e.getValue();
5790
- if (filter.origin === "scopes" /* Scopes */) {
5791
- scopes = scopes == null ? void 0 : scopes.map((scope) => {
5792
- return __spreadProps$n(__spreadValues$z({}, scope), {
5793
- spec: __spreadProps$n(__spreadValues$z({}, scope.spec), {
5794
- filters: scope.spec.filters.filter((f) => f.key !== filter.key)
5795
- })
5796
- });
5797
- });
5798
- }
5799
5563
  const response = await ds.getTagValues(__spreadValues$z({
5800
5564
  key: filter.key,
5801
5565
  filters: otherFilters,
5802
5566
  timeRange,
5803
5567
  queries,
5804
- scopes
5568
+ scopes: (_d = this._scopesBridge) == null ? void 0 : _d.getValue()
5805
5569
  }, getEnrichedFiltersRequest(this)));
5806
5570
  if (responseHasError(response)) {
5807
5571
  this.setState({ error: response.error.message });
@@ -6520,15 +6284,6 @@ function escapeUrlCommaDelimiters(value) {
6520
6284
  }
6521
6285
  return /,/g[Symbol.replace](value, "__gfc__");
6522
6286
  }
6523
- function escapeUrlHashDelimiters(value) {
6524
- if (value === null || value === void 0) {
6525
- return "";
6526
- }
6527
- return /#/g[Symbol.replace](value, "__gfh__");
6528
- }
6529
- function escapeInjectedFilterUrlDelimiters(value) {
6530
- return escapeUrlHashDelimiters(escapeUrlPipeDelimiters(value));
6531
- }
6532
6287
  function escapeURLDelimiters(value) {
6533
6288
  return escapeUrlCommaDelimiters(escapeUrlPipeDelimiters(value));
6534
6289
  }
@@ -6538,7 +6293,6 @@ function unescapeUrlDelimiters(value) {
6538
6293
  }
6539
6294
  value = /__gfp__/g[Symbol.replace](value, "|");
6540
6295
  value = /__gfc__/g[Symbol.replace](value, ",");
6541
- value = /__gfh__/g[Symbol.replace](value, "#");
6542
6296
  return value;
6543
6297
  }
6544
6298
  function toUrlCommaDelimitedString(key, label) {
@@ -10984,7 +10738,11 @@ async function getExploreURL(data, model, timeRange, transform) {
10984
10738
  return (_a2 = transform == null ? void 0 : transform(q)) != null ? _a2 : q;
10985
10739
  });
10986
10740
  const queries = interpolatedQueries != null ? interpolatedQueries : [];
10987
- const datasource = (_d = (_c = queries.find((query) => {
10741
+ const hasMixedDatasources = new Set(queries.map((q) => {
10742
+ var _a2;
10743
+ return (_a2 = q.datasource) == null ? void 0 : _a2.uid;
10744
+ })).size > 1;
10745
+ let datasource = hasMixedDatasources ? "-- Mixed --" : (_d = (_c = queries.find((query) => {
10988
10746
  var _a2;
10989
10747
  return !!((_a2 = query.datasource) == null ? void 0 : _a2.uid);
10990
10748
  })) == null ? void 0 : _c.datasource) == null ? void 0 : _d.uid;
@@ -11014,10 +10772,12 @@ function VizPanelExploreButtonComponent({ model }) {
11014
10772
  const { options } = model.useState();
11015
10773
  const { data } = sceneGraph.getData(model).useState();
11016
10774
  const { from, to } = sceneGraph.getTimeRange(model).useState();
11017
- const { value: exploreLink } = reactUse.useAsync(
11018
- async () => data ? getExploreURL(data, model, { from, to }, options.transform) : "",
11019
- [data, model, from, to]
11020
- );
10775
+ const { value: exploreLink } = reactUse.useAsync(async () => {
10776
+ if (!data) {
10777
+ return "";
10778
+ }
10779
+ return getExploreURL(data, model, { from, to }, options.transform);
10780
+ }, [data, model, from, to]);
11021
10781
  const returnToPrevious = runtime.useReturnToPrevious();
11022
10782
  if (exploreLink) {
11023
10783
  return /* @__PURE__ */ React__default["default"].createElement(ui.LinkButton, {