@grafana/scenes 5.16.1--canary.924.11083854672.0 → 5.16.1--canary.924.11102256507.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
@@ -1384,434 +1384,727 @@ class IntervalMacro {
1384
1384
  }
1385
1385
  }
1386
1386
 
1387
- class AllVariablesMacro {
1388
- constructor(name, sceneObject) {
1389
- this.state = { name, type: "url_variable" };
1390
- this._sceneObject = sceneObject;
1387
+ function setBaseClassState(sceneObject, newState) {
1388
+ sceneObject.setState(newState);
1389
+ }
1390
+ function useLocationServiceSafe() {
1391
+ return runtime.useLocationService ? runtime.useLocationService() : runtime.locationService;
1392
+ }
1393
+
1394
+ class MultiValueVariable extends SceneObjectBase {
1395
+ constructor() {
1396
+ super(...arguments);
1397
+ this._urlSync = new MultiValueUrlSyncHandler(this);
1391
1398
  }
1392
- getValue() {
1393
- const allVars = collectAllVariables(this._sceneObject);
1394
- const format = formatRegistry.get(schema.VariableFormatID.QueryParam);
1395
- const params = [];
1396
- for (const name of Object.keys(allVars)) {
1397
- const variable = allVars[name];
1398
- const value = variable.getValue();
1399
- if (!value) {
1400
- continue;
1401
- }
1402
- if (isCustomVariableValue(value)) {
1403
- params.push(value.formatter(schema.VariableFormatID.QueryParam));
1404
- } else {
1405
- params.push(format.formatter(value, [], variable));
1406
- }
1407
- }
1408
- return new SkipFormattingValue(params.join("&"));
1399
+ validateAndUpdate() {
1400
+ return this.getValueOptions({}).pipe(
1401
+ rxjs.map((options) => {
1402
+ this.updateValueGivenNewOptions(options);
1403
+ return {};
1404
+ })
1405
+ );
1409
1406
  }
1410
- getValueText() {
1411
- return "";
1407
+ onCancel() {
1408
+ this.setStateHelper({ loading: false });
1409
+ const sceneVarSet = this.parent;
1410
+ sceneVarSet == null ? void 0 : sceneVarSet.cancel(this);
1412
1411
  }
1413
- }
1414
- function collectAllVariables(sceneObject, record = {}) {
1415
- if (sceneObject.state.$variables) {
1416
- for (const variable of sceneObject.state.$variables.state.variables) {
1417
- if (variable.state.skipUrlSync) {
1418
- continue;
1419
- }
1420
- if (!record[variable.state.name]) {
1421
- record[variable.state.name] = variable;
1422
- }
1412
+ updateValueGivenNewOptions(options) {
1413
+ const { value: currentValue, text: currentText, options: oldOptions } = this.state;
1414
+ const stateUpdate = this.getStateUpdateGivenNewOptions(options, currentValue, currentText);
1415
+ this.interceptStateUpdateAfterValidation(stateUpdate);
1416
+ this.setStateHelper(stateUpdate);
1417
+ if (stateUpdate.value !== currentValue || stateUpdate.text !== currentText || this.hasAllValue() && !lodash.isEqual(options, oldOptions)) {
1418
+ this.publishEvent(new SceneVariableValueChangedEvent(this), true);
1423
1419
  }
1424
1420
  }
1425
- if (sceneObject.parent) {
1426
- collectAllVariables(sceneObject.parent, record);
1427
- }
1428
- return record;
1429
- }
1430
-
1431
- var __defProp$H = Object.defineProperty;
1432
- var __defProps$s = Object.defineProperties;
1433
- var __getOwnPropDescs$s = Object.getOwnPropertyDescriptors;
1434
- var __getOwnPropSymbols$H = Object.getOwnPropertySymbols;
1435
- var __hasOwnProp$H = Object.prototype.hasOwnProperty;
1436
- var __propIsEnum$H = Object.prototype.propertyIsEnumerable;
1437
- var __defNormalProp$H = (obj, key, value) => key in obj ? __defProp$H(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
1438
- var __spreadValues$H = (a, b) => {
1439
- for (var prop in b || (b = {}))
1440
- if (__hasOwnProp$H.call(b, prop))
1441
- __defNormalProp$H(a, prop, b[prop]);
1442
- if (__getOwnPropSymbols$H)
1443
- for (var prop of __getOwnPropSymbols$H(b)) {
1444
- if (__propIsEnum$H.call(b, prop))
1445
- __defNormalProp$H(a, prop, b[prop]);
1421
+ getStateUpdateGivenNewOptions(options, currentValue, currentText) {
1422
+ const stateUpdate = {
1423
+ options,
1424
+ loading: false,
1425
+ value: currentValue,
1426
+ text: currentText
1427
+ };
1428
+ if (options.length === 0) {
1429
+ if (this.state.defaultToAll || this.state.includeAll) {
1430
+ stateUpdate.value = ALL_VARIABLE_VALUE;
1431
+ stateUpdate.text = ALL_VARIABLE_TEXT;
1432
+ } else if (this.state.isMulti) {
1433
+ stateUpdate.value = [];
1434
+ stateUpdate.text = [];
1435
+ } else {
1436
+ stateUpdate.value = "";
1437
+ stateUpdate.text = "";
1438
+ }
1439
+ return stateUpdate;
1446
1440
  }
1447
- return a;
1448
- };
1449
- var __spreadProps$s = (a, b) => __defProps$s(a, __getOwnPropDescs$s(b));
1450
- function getTemplateProxyForField(field, frame, frames) {
1451
- return new Proxy(
1452
- {},
1453
- {
1454
- get: (obj, key) => {
1455
- if (key === "name") {
1456
- return field.name;
1441
+ if (this.hasAllValue()) {
1442
+ if (!this.state.includeAll) {
1443
+ stateUpdate.value = options[0].value;
1444
+ stateUpdate.text = options[0].label;
1445
+ if (this.state.isMulti) {
1446
+ stateUpdate.value = [stateUpdate.value];
1447
+ stateUpdate.text = [stateUpdate.text];
1457
1448
  }
1458
- if (key === "displayName") {
1459
- return data.getFieldDisplayName(field, frame, frames);
1449
+ }
1450
+ return stateUpdate;
1451
+ }
1452
+ if (this.state.isMulti) {
1453
+ const currentValues = Array.isArray(currentValue) ? currentValue : [currentValue];
1454
+ const validValues = currentValues.filter((v) => options.find((o) => o.value === v));
1455
+ const validTexts = validValues.map((v) => options.find((o) => o.value === v).label);
1456
+ if (validValues.length === 0) {
1457
+ const defaultState = this.getDefaultMultiState(options);
1458
+ stateUpdate.value = defaultState.value;
1459
+ stateUpdate.text = defaultState.text;
1460
+ } else {
1461
+ if (!lodash.isEqual(validValues, currentValue)) {
1462
+ stateUpdate.value = validValues;
1460
1463
  }
1461
- if (key === "labels" || key === "formattedLabels") {
1462
- if (!field.labels) {
1463
- return "";
1464
- }
1465
- return __spreadProps$s(__spreadValues$H({}, field.labels), {
1466
- __values: Object.values(field.labels).sort().join(", "),
1467
- toString: () => {
1468
- return data.formatLabels(field.labels, "", true);
1469
- }
1470
- });
1464
+ if (!lodash.isEqual(validTexts, currentText)) {
1465
+ stateUpdate.text = validTexts;
1471
1466
  }
1472
- return void 0;
1473
1467
  }
1468
+ return stateUpdate;
1474
1469
  }
1475
- );
1476
- }
1477
-
1478
- class ValueMacro {
1479
- constructor(name, sceneObject, _match, _scopedVars) {
1480
- this._match = _match;
1481
- this._scopedVars = _scopedVars;
1482
- this.state = { name, type: "__value" };
1483
- }
1484
- getValue(fieldPath) {
1485
- var _a, _b;
1486
- const dataContext = (_a = this._scopedVars) == null ? void 0 : _a.__dataContext;
1487
- if (!dataContext) {
1488
- return this._match;
1489
- }
1490
- const { frame, rowIndex, field, calculatedValue } = dataContext.value;
1491
- if (calculatedValue) {
1492
- switch (fieldPath) {
1493
- case "numeric":
1494
- return calculatedValue.numeric;
1495
- case "raw":
1496
- return calculatedValue.numeric;
1497
- case "time":
1498
- return "";
1499
- case "text":
1500
- default:
1501
- return data.formattedValueToString(calculatedValue);
1470
+ let matchingOption = findOptionMatchingCurrent(currentValue, currentText, options);
1471
+ if (matchingOption) {
1472
+ stateUpdate.text = matchingOption.label;
1473
+ stateUpdate.value = matchingOption.value;
1474
+ } else {
1475
+ if (this.state.defaultToAll) {
1476
+ stateUpdate.value = ALL_VARIABLE_VALUE;
1477
+ stateUpdate.text = ALL_VARIABLE_TEXT;
1478
+ } else {
1479
+ stateUpdate.value = options[0].value;
1480
+ stateUpdate.text = options[0].label;
1502
1481
  }
1503
1482
  }
1504
- if (rowIndex == null) {
1505
- return this._match;
1506
- }
1507
- if (fieldPath === "time") {
1508
- const timeField = frame.fields.find((f) => f.type === data.FieldType.time);
1509
- return timeField ? timeField.values.get(rowIndex) : void 0;
1510
- }
1511
- if (!field) {
1512
- return this._match;
1513
- }
1514
- const value = field.values.get(rowIndex);
1515
- if (fieldPath === "raw") {
1516
- return value;
1483
+ return stateUpdate;
1484
+ }
1485
+ interceptStateUpdateAfterValidation(stateUpdate) {
1486
+ const isAllValueFix = stateUpdate.value === ALL_VARIABLE_VALUE && this.state.text === ALL_VARIABLE_TEXT;
1487
+ if (this.skipNextValidation && stateUpdate.value !== this.state.value && stateUpdate.text !== this.state.text && !isAllValueFix) {
1488
+ stateUpdate.value = this.state.value;
1489
+ stateUpdate.text = this.state.text;
1517
1490
  }
1518
- const displayProcessor = (_b = field.display) != null ? _b : fallbackDisplayProcessor;
1519
- const result = displayProcessor(value);
1520
- switch (fieldPath) {
1521
- case "numeric":
1522
- return result.numeric;
1523
- case "text":
1524
- default:
1525
- return data.formattedValueToString(result);
1491
+ this.skipNextValidation = false;
1492
+ }
1493
+ getValue() {
1494
+ if (this.hasAllValue()) {
1495
+ if (this.state.allValue) {
1496
+ return new CustomAllValue(this.state.allValue, this);
1497
+ }
1498
+ return this.state.options.map((x) => x.value);
1526
1499
  }
1500
+ return this.state.value;
1527
1501
  }
1528
1502
  getValueText() {
1529
- return "";
1530
- }
1531
- }
1532
- const fallbackDisplayProcessor = data.getDisplayProcessor();
1533
- class DataMacro {
1534
- constructor(name, sceneObject, _match, _scopedVars) {
1535
- this._match = _match;
1536
- this._scopedVars = _scopedVars;
1537
- this.state = { name, type: "__data" };
1538
- }
1539
- getValue(fieldPath) {
1540
- var _a, _b;
1541
- const dataContext = (_a = this._scopedVars) == null ? void 0 : _a.__dataContext;
1542
- if (!dataContext || !fieldPath) {
1543
- return this._match;
1503
+ if (this.hasAllValue()) {
1504
+ return ALL_VARIABLE_TEXT;
1544
1505
  }
1545
- const { frame, rowIndex } = dataContext.value;
1546
- if (rowIndex === void 0 || fieldPath === void 0) {
1547
- return this._match;
1506
+ if (Array.isArray(this.state.text)) {
1507
+ return this.state.text.join(" + ");
1548
1508
  }
1549
- const obj = {
1550
- name: frame.name,
1551
- refId: frame.refId,
1552
- fields: data.getFieldDisplayValuesProxy({ frame, rowIndex })
1553
- };
1554
- return (_b = getFieldAccessor(fieldPath)(obj)) != null ? _b : "";
1555
- }
1556
- getValueText() {
1557
- return "";
1509
+ return String(this.state.text);
1558
1510
  }
1559
- }
1560
- class SeriesMacro {
1561
- constructor(name, sceneObject, _match, _scopedVars) {
1562
- this._match = _match;
1563
- this._scopedVars = _scopedVars;
1564
- this.state = { name, type: "__series" };
1511
+ hasAllValue() {
1512
+ const value = this.state.value;
1513
+ return value === ALL_VARIABLE_VALUE || Array.isArray(value) && value[0] === ALL_VARIABLE_VALUE;
1565
1514
  }
1566
- getValue(fieldPath) {
1567
- var _a;
1568
- const dataContext = (_a = this._scopedVars) == null ? void 0 : _a.__dataContext;
1569
- if (!dataContext || !fieldPath) {
1570
- return this._match;
1515
+ getDefaultMultiState(options) {
1516
+ if (this.state.defaultToAll) {
1517
+ return { value: [ALL_VARIABLE_VALUE], text: [ALL_VARIABLE_TEXT] };
1518
+ } else if (options.length > 0) {
1519
+ return { value: [options[0].value], text: [options[0].label] };
1520
+ } else {
1521
+ return { value: [], text: [] };
1571
1522
  }
1572
- if (fieldPath !== "name") {
1573
- return this._match;
1523
+ }
1524
+ changeValueTo(value, text) {
1525
+ if (value === this.state.value && text === this.state.text) {
1526
+ return;
1574
1527
  }
1575
- const { frame, frameIndex } = dataContext.value;
1576
- return data.getFrameDisplayName(frame, frameIndex);
1528
+ if (!text) {
1529
+ if (Array.isArray(value)) {
1530
+ text = value.map((v) => this.findLabelTextForValue(v));
1531
+ } else {
1532
+ text = this.findLabelTextForValue(value);
1533
+ }
1534
+ }
1535
+ if (Array.isArray(value)) {
1536
+ if (value.length === 0) {
1537
+ const state = this.getDefaultMultiState(this.state.options);
1538
+ value = state.value;
1539
+ text = state.text;
1540
+ }
1541
+ if (value[value.length - 1] === ALL_VARIABLE_VALUE) {
1542
+ value = [ALL_VARIABLE_VALUE];
1543
+ text = [ALL_VARIABLE_TEXT];
1544
+ } else if (value[0] === ALL_VARIABLE_VALUE && value.length > 1) {
1545
+ value.shift();
1546
+ if (Array.isArray(text)) {
1547
+ text.shift();
1548
+ }
1549
+ }
1550
+ }
1551
+ if (lodash.isEqual(value, this.state.value) && lodash.isEqual(text, this.state.text)) {
1552
+ return;
1553
+ }
1554
+ this.setStateHelper({ value, text, loading: false });
1555
+ this.publishEvent(new SceneVariableValueChangedEvent(this), true);
1577
1556
  }
1578
- getValueText() {
1579
- return "";
1557
+ findLabelTextForValue(value) {
1558
+ if (value === ALL_VARIABLE_VALUE) {
1559
+ return ALL_VARIABLE_TEXT;
1560
+ }
1561
+ const option = this.state.options.find((x) => x.value === value);
1562
+ if (option) {
1563
+ return option.label;
1564
+ }
1565
+ const optionByLabel = this.state.options.find((x) => x.label === value);
1566
+ if (optionByLabel) {
1567
+ return optionByLabel.label;
1568
+ }
1569
+ return value;
1580
1570
  }
1581
- }
1582
- class FieldMacro {
1583
- constructor(name, sceneObject, _match, _scopedVars) {
1584
- this._match = _match;
1585
- this._scopedVars = _scopedVars;
1586
- this.state = { name, type: "__field" };
1571
+ setStateHelper(state) {
1572
+ setBaseClassState(this, state);
1587
1573
  }
1588
- getValue(fieldPath) {
1589
- var _a, _b;
1590
- const dataContext = (_a = this._scopedVars) == null ? void 0 : _a.__dataContext;
1591
- if (!dataContext || !fieldPath) {
1592
- return this._match;
1574
+ getOptionsForSelect() {
1575
+ let options = this.state.options;
1576
+ if (this.state.includeAll) {
1577
+ options = [{ value: ALL_VARIABLE_VALUE, label: ALL_VARIABLE_TEXT }, ...options];
1593
1578
  }
1594
- if (fieldPath === void 0 || fieldPath === "") {
1595
- return this._match;
1579
+ if (!Array.isArray(this.state.value)) {
1580
+ const current = options.find((x) => x.value === this.state.value);
1581
+ if (!current) {
1582
+ options = [{ value: this.state.value, label: String(this.state.text) }, ...options];
1583
+ }
1596
1584
  }
1597
- const { frame, field, data } = dataContext.value;
1598
- const obj = getTemplateProxyForField(field, frame, data);
1599
- return (_b = getFieldAccessor(fieldPath)(obj)) != null ? _b : "";
1585
+ return options;
1600
1586
  }
1601
- getValueText() {
1602
- return "";
1587
+ refreshOptions() {
1588
+ this.getValueOptions({}).subscribe((options) => {
1589
+ this.updateValueGivenNewOptions(options);
1590
+ });
1603
1591
  }
1604
1592
  }
1605
-
1606
- class UrlMacro {
1607
- constructor(name, _) {
1608
- this.state = { name, type: "url_macro" };
1593
+ function findOptionMatchingCurrent(currentValue, currentText, options) {
1594
+ let textMatch;
1595
+ for (const item of options) {
1596
+ if (item.value === currentValue) {
1597
+ return item;
1598
+ }
1599
+ if (item.label === currentText) {
1600
+ textMatch = item;
1601
+ }
1609
1602
  }
1610
- getValue(fieldPath) {
1611
- var _a;
1612
- const location = runtime.locationService.getLocation();
1613
- const subUrl = (_a = runtime.config.appSubUrl) != null ? _a : "";
1614
- switch (fieldPath != null ? fieldPath : "") {
1615
- case "params":
1616
- return new UrlStateFormatter(location.search);
1617
- case "path":
1618
- return subUrl + location.pathname;
1619
- case "":
1620
- default:
1621
- return subUrl + location.pathname + location.search;
1603
+ return textMatch;
1604
+ }
1605
+ class MultiValueUrlSyncHandler {
1606
+ constructor(_sceneObject) {
1607
+ this._sceneObject = _sceneObject;
1608
+ }
1609
+ getKey() {
1610
+ return `var-${this._sceneObject.state.name}`;
1611
+ }
1612
+ getKeys() {
1613
+ if (this._sceneObject.state.skipUrlSync) {
1614
+ return [];
1622
1615
  }
1616
+ return [this.getKey()];
1623
1617
  }
1624
- getValueText() {
1625
- return "";
1618
+ getUrlState() {
1619
+ if (this._sceneObject.state.skipUrlSync) {
1620
+ return {};
1621
+ }
1622
+ let urlValue = null;
1623
+ let value = this._sceneObject.state.value;
1624
+ if (Array.isArray(value)) {
1625
+ urlValue = value.map(String);
1626
+ } else if (this._sceneObject.state.isMulti) {
1627
+ urlValue = [String(value)];
1628
+ } else {
1629
+ urlValue = String(value);
1630
+ }
1631
+ return { [this.getKey()]: urlValue };
1632
+ }
1633
+ updateFromUrl(values) {
1634
+ let urlValue = values[this.getKey()];
1635
+ if (urlValue != null) {
1636
+ if (this._sceneObject.state.includeAll) {
1637
+ urlValue = handleLegacyUrlAllValue(urlValue);
1638
+ }
1639
+ if (this._sceneObject.state.allValue && this._sceneObject.state.allValue === urlValue) {
1640
+ urlValue = ALL_VARIABLE_VALUE;
1641
+ }
1642
+ if (!this._sceneObject.isActive) {
1643
+ this._sceneObject.skipNextValidation = true;
1644
+ }
1645
+ this._sceneObject.changeValueTo(urlValue);
1646
+ }
1626
1647
  }
1627
1648
  }
1628
- class UrlStateFormatter {
1629
- constructor(_urlQueryParams) {
1630
- this._urlQueryParams = _urlQueryParams;
1649
+ function handleLegacyUrlAllValue(value) {
1650
+ if (lodash.isArray(value) && value[0] === ALL_VARIABLE_TEXT) {
1651
+ return [ALL_VARIABLE_VALUE];
1652
+ } else if (value === ALL_VARIABLE_TEXT) {
1653
+ return ALL_VARIABLE_VALUE;
1631
1654
  }
1632
- formatter(options) {
1633
- if (!options) {
1634
- return this._urlQueryParams;
1655
+ return value;
1656
+ }
1657
+ class CustomAllValue {
1658
+ constructor(_value, _variable) {
1659
+ this._value = _value;
1660
+ this._variable = _variable;
1661
+ }
1662
+ formatter(formatNameOrFn) {
1663
+ if (formatNameOrFn === schema.VariableFormatID.Text) {
1664
+ return ALL_VARIABLE_TEXT;
1635
1665
  }
1636
- const params = options.split(":");
1637
- if (params[0] === "exclude" && params.length > 1) {
1638
- const allParams = new URLSearchParams(this._urlQueryParams);
1639
- for (const param of params[1].split(",")) {
1640
- allParams.delete(param);
1641
- }
1642
- return `?${allParams}`;
1666
+ if (formatNameOrFn === schema.VariableFormatID.PercentEncode) {
1667
+ return formatRegistry.get(schema.VariableFormatID.PercentEncode).formatter(this._value, [], this._variable);
1643
1668
  }
1644
- if (params[0] === "include" && params.length > 1) {
1645
- const allParams = new URLSearchParams(this._urlQueryParams);
1646
- const includeOnly = params[1].split(",");
1647
- for (const param of allParams.keys()) {
1648
- if (!includeOnly.includes(param)) {
1649
- allParams.delete(param);
1650
- }
1651
- }
1652
- return `?${allParams}`;
1669
+ if (formatNameOrFn === schema.VariableFormatID.QueryParam) {
1670
+ return formatRegistry.get(schema.VariableFormatID.QueryParam).formatter(ALL_VARIABLE_TEXT, [], this._variable);
1653
1671
  }
1654
- return this._urlQueryParams;
1672
+ return this._value;
1655
1673
  }
1656
1674
  }
1657
1675
 
1658
- class UserMacro {
1659
- constructor(name, _) {
1660
- this.state = { name, type: "user_macro" };
1676
+ class AllVariablesMacro {
1677
+ constructor(name, sceneObject) {
1678
+ this.state = { name, type: "url_variable" };
1679
+ this._sceneObject = sceneObject;
1661
1680
  }
1662
- getValue(fieldPath) {
1663
- const user = runtime.config.bootData.user;
1664
- switch (fieldPath) {
1665
- case "login":
1666
- return user.login;
1667
- case "email":
1668
- return user.email;
1669
- case "id":
1670
- default:
1671
- return String(user.id);
1681
+ getValue() {
1682
+ const allVars = collectAllVariables(this._sceneObject);
1683
+ const format = formatRegistry.get(schema.VariableFormatID.QueryParam);
1684
+ const params = [];
1685
+ for (const name of Object.keys(allVars)) {
1686
+ const variable = allVars[name];
1687
+ if (variable instanceof MultiValueVariable && variable.hasAllValue() && !variable.state.allValue) {
1688
+ params.push(format.formatter(ALL_VARIABLE_VALUE, [], variable));
1689
+ continue;
1690
+ }
1691
+ const value = variable.getValue();
1692
+ if (!value) {
1693
+ continue;
1694
+ }
1695
+ if (isCustomVariableValue(value)) {
1696
+ params.push(value.formatter(schema.VariableFormatID.QueryParam));
1697
+ } else {
1698
+ params.push(format.formatter(value, [], variable));
1699
+ }
1672
1700
  }
1701
+ return new SkipFormattingValue(params.join("&"));
1673
1702
  }
1674
1703
  getValueText() {
1675
1704
  return "";
1676
1705
  }
1677
1706
  }
1678
- class OrgMacro {
1679
- constructor(name, _) {
1680
- this.state = { name, type: "org_macro" };
1681
- }
1682
- getValue(fieldPath) {
1683
- const user = runtime.config.bootData.user;
1684
- switch (fieldPath) {
1685
- case "name":
1686
- return user.orgName;
1687
- case "id":
1688
- default:
1689
- return String(user.orgId);
1707
+ function collectAllVariables(sceneObject, record = {}) {
1708
+ if (sceneObject.state.$variables) {
1709
+ for (const variable of sceneObject.state.$variables.state.variables) {
1710
+ if (variable.state.skipUrlSync) {
1711
+ continue;
1712
+ }
1713
+ if (!record[variable.state.name]) {
1714
+ record[variable.state.name] = variable;
1715
+ }
1690
1716
  }
1691
1717
  }
1692
- getValueText() {
1693
- return "";
1718
+ if (sceneObject.parent) {
1719
+ collectAllVariables(sceneObject.parent, record);
1694
1720
  }
1721
+ return record;
1695
1722
  }
1696
1723
 
1697
- const macrosIndex = /* @__PURE__ */ new Map([
1698
- [data.DataLinkBuiltInVars.includeVars, AllVariablesMacro],
1699
- [data.DataLinkBuiltInVars.keepTime, UrlTimeRangeMacro],
1700
- ["__value", ValueMacro],
1701
- ["__data", DataMacro],
1702
- ["__series", SeriesMacro],
1703
- ["__field", FieldMacro],
1704
- ["__url", UrlMacro],
1705
- ["__from", TimeFromAndToMacro],
1706
- ["__to", TimeFromAndToMacro],
1707
- ["__timezone", TimezoneMacro],
1708
- ["__user", UserMacro],
1709
- ["__org", OrgMacro],
1710
- ["__interval", IntervalMacro],
1711
- ["__interval_ms", IntervalMacro]
1712
- ]);
1713
- function registerVariableMacro(name, macro) {
1714
- if (macrosIndex.get(name)) {
1715
- throw new Error(`Macro already registered ${name}`);
1716
- }
1717
- macrosIndex.set(name, macro);
1718
- return () => {
1719
- macrosIndex.delete(name);
1720
- };
1724
+ var __defProp$H = Object.defineProperty;
1725
+ var __defProps$s = Object.defineProperties;
1726
+ var __getOwnPropDescs$s = Object.getOwnPropertyDescriptors;
1727
+ var __getOwnPropSymbols$H = Object.getOwnPropertySymbols;
1728
+ var __hasOwnProp$H = Object.prototype.hasOwnProperty;
1729
+ var __propIsEnum$H = Object.prototype.propertyIsEnumerable;
1730
+ var __defNormalProp$H = (obj, key, value) => key in obj ? __defProp$H(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
1731
+ var __spreadValues$H = (a, b) => {
1732
+ for (var prop in b || (b = {}))
1733
+ if (__hasOwnProp$H.call(b, prop))
1734
+ __defNormalProp$H(a, prop, b[prop]);
1735
+ if (__getOwnPropSymbols$H)
1736
+ for (var prop of __getOwnPropSymbols$H(b)) {
1737
+ if (__propIsEnum$H.call(b, prop))
1738
+ __defNormalProp$H(a, prop, b[prop]);
1739
+ }
1740
+ return a;
1741
+ };
1742
+ var __spreadProps$s = (a, b) => __defProps$s(a, __getOwnPropDescs$s(b));
1743
+ function getTemplateProxyForField(field, frame, frames) {
1744
+ return new Proxy(
1745
+ {},
1746
+ {
1747
+ get: (obj, key) => {
1748
+ if (key === "name") {
1749
+ return field.name;
1750
+ }
1751
+ if (key === "displayName") {
1752
+ return data.getFieldDisplayName(field, frame, frames);
1753
+ }
1754
+ if (key === "labels" || key === "formattedLabels") {
1755
+ if (!field.labels) {
1756
+ return "";
1757
+ }
1758
+ return __spreadProps$s(__spreadValues$H({}, field.labels), {
1759
+ __values: Object.values(field.labels).sort().join(", "),
1760
+ toString: () => {
1761
+ return data.formatLabels(field.labels, "", true);
1762
+ }
1763
+ });
1764
+ }
1765
+ return void 0;
1766
+ }
1767
+ }
1768
+ );
1721
1769
  }
1722
1770
 
1723
- function sceneInterpolator(sceneObject, target, scopedVars, format, interpolations) {
1724
- if (!target || typeof target !== "string") {
1725
- return target != null ? target : "";
1771
+ class ValueMacro {
1772
+ constructor(name, sceneObject, _match, _scopedVars) {
1773
+ this._match = _match;
1774
+ this._scopedVars = _scopedVars;
1775
+ this.state = { name, type: "__value" };
1726
1776
  }
1727
- VARIABLE_REGEX.lastIndex = 0;
1728
- return target.replace(VARIABLE_REGEX, (match, var1, var2, fmt2, var3, fieldPath, fmt3) => {
1729
- const variableName = var1 || var2 || var3;
1730
- const fmt = fmt2 || fmt3 || format;
1731
- const variable = lookupFormatVariable(variableName, match, scopedVars, sceneObject);
1732
- if (!variable) {
1733
- if (interpolations) {
1734
- interpolations.push({ match, variableName, fieldPath, format: fmt, value: match, found: false });
1777
+ getValue(fieldPath) {
1778
+ var _a, _b;
1779
+ const dataContext = (_a = this._scopedVars) == null ? void 0 : _a.__dataContext;
1780
+ if (!dataContext) {
1781
+ return this._match;
1782
+ }
1783
+ const { frame, rowIndex, field, calculatedValue } = dataContext.value;
1784
+ if (calculatedValue) {
1785
+ switch (fieldPath) {
1786
+ case "numeric":
1787
+ return calculatedValue.numeric;
1788
+ case "raw":
1789
+ return calculatedValue.numeric;
1790
+ case "time":
1791
+ return "";
1792
+ case "text":
1793
+ default:
1794
+ return data.formattedValueToString(calculatedValue);
1735
1795
  }
1736
- return match;
1737
1796
  }
1738
- const value = formatValue(sceneObject, variable, variable.getValue(fieldPath), fmt);
1739
- if (interpolations) {
1740
- interpolations.push({ match, variableName, fieldPath, format: fmt, value, found: value !== match });
1797
+ if (rowIndex == null) {
1798
+ return this._match;
1741
1799
  }
1742
- return value;
1743
- });
1744
- }
1745
- function lookupFormatVariable(name, match, scopedVars, sceneObject) {
1746
- if (scopedVars && scopedVars.hasOwnProperty(name)) {
1747
- const scopedVar = scopedVars[name];
1748
- if (scopedVar) {
1749
- return getSceneVariableForScopedVar(name, scopedVar);
1800
+ if (fieldPath === "time") {
1801
+ const timeField = frame.fields.find((f) => f.type === data.FieldType.time);
1802
+ return timeField ? timeField.values.get(rowIndex) : void 0;
1803
+ }
1804
+ if (!field) {
1805
+ return this._match;
1806
+ }
1807
+ const value = field.values.get(rowIndex);
1808
+ if (fieldPath === "raw") {
1809
+ return value;
1810
+ }
1811
+ const displayProcessor = (_b = field.display) != null ? _b : fallbackDisplayProcessor;
1812
+ const result = displayProcessor(value);
1813
+ switch (fieldPath) {
1814
+ case "numeric":
1815
+ return result.numeric;
1816
+ case "text":
1817
+ default:
1818
+ return data.formattedValueToString(result);
1750
1819
  }
1751
1820
  }
1752
- const variable = lookupVariable(name, sceneObject);
1753
- if (variable) {
1754
- return variable;
1755
- }
1756
- const Macro = macrosIndex.get(name);
1757
- if (Macro) {
1758
- return new Macro(name, sceneObject, match, scopedVars);
1821
+ getValueText() {
1822
+ return "";
1759
1823
  }
1760
- return null;
1761
1824
  }
1762
- function formatValue(context, variable, value, formatNameOrFn) {
1763
- if (value === null || value === void 0) {
1764
- return "";
1825
+ const fallbackDisplayProcessor = data.getDisplayProcessor();
1826
+ class DataMacro {
1827
+ constructor(name, sceneObject, _match, _scopedVars) {
1828
+ this._match = _match;
1829
+ this._scopedVars = _scopedVars;
1830
+ this.state = { name, type: "__data" };
1765
1831
  }
1766
- if (isCustomVariableValue(value)) {
1767
- return sceneInterpolator(context, value.formatter(formatNameOrFn));
1832
+ getValue(fieldPath) {
1833
+ var _a, _b;
1834
+ const dataContext = (_a = this._scopedVars) == null ? void 0 : _a.__dataContext;
1835
+ if (!dataContext || !fieldPath) {
1836
+ return this._match;
1837
+ }
1838
+ const { frame, rowIndex } = dataContext.value;
1839
+ if (rowIndex === void 0 || fieldPath === void 0) {
1840
+ return this._match;
1841
+ }
1842
+ const obj = {
1843
+ name: frame.name,
1844
+ refId: frame.refId,
1845
+ fields: data.getFieldDisplayValuesProxy({ frame, rowIndex })
1846
+ };
1847
+ return (_b = getFieldAccessor(fieldPath)(obj)) != null ? _b : "";
1768
1848
  }
1769
- if (!Array.isArray(value) && typeof value === "object") {
1770
- value = `${value}`;
1849
+ getValueText() {
1850
+ return "";
1771
1851
  }
1772
- if (typeof formatNameOrFn === "function") {
1773
- return formatNameOrFn(value, {
1774
- name: variable.state.name,
1775
- type: variable.state.type,
1776
- multi: variable.state.isMulti,
1777
- includeAll: variable.state.includeAll
1778
- });
1852
+ }
1853
+ class SeriesMacro {
1854
+ constructor(name, sceneObject, _match, _scopedVars) {
1855
+ this._match = _match;
1856
+ this._scopedVars = _scopedVars;
1857
+ this.state = { name, type: "__series" };
1779
1858
  }
1780
- let args = [];
1781
- if (!formatNameOrFn) {
1782
- formatNameOrFn = schema.VariableFormatID.Glob;
1783
- } else {
1784
- args = formatNameOrFn.split(":");
1785
- if (args.length > 1) {
1786
- formatNameOrFn = args[0];
1787
- args = args.slice(1);
1788
- } else {
1789
- args = [];
1859
+ getValue(fieldPath) {
1860
+ var _a;
1861
+ const dataContext = (_a = this._scopedVars) == null ? void 0 : _a.__dataContext;
1862
+ if (!dataContext || !fieldPath) {
1863
+ return this._match;
1790
1864
  }
1865
+ if (fieldPath !== "name") {
1866
+ return this._match;
1867
+ }
1868
+ const { frame, frameIndex } = dataContext.value;
1869
+ return data.getFrameDisplayName(frame, frameIndex);
1791
1870
  }
1792
- let formatter = formatRegistry.getIfExists(formatNameOrFn);
1793
- if (!formatter) {
1794
- console.error(`Variable format ${formatNameOrFn} not found. Using glob format as fallback.`);
1795
- formatter = formatRegistry.get(schema.VariableFormatID.Glob);
1871
+ getValueText() {
1872
+ return "";
1796
1873
  }
1797
- return formatter.formatter(value, args, variable);
1798
1874
  }
1799
-
1800
- function isSceneObject(obj) {
1801
- return obj.useState !== void 0;
1802
- }
1803
- function isDataRequestEnricher(obj) {
1804
- return "enrichDataRequest" in obj;
1805
- }
1806
- function isFiltersRequestEnricher(obj) {
1807
- return "enrichFiltersRequest" in obj;
1808
- }
1809
- function isDataLayer(obj) {
1810
- return "isDataLayer" in obj;
1811
- }
1812
-
1813
- var __accessCheck$2 = (obj, member, msg) => {
1814
- if (!member.has(obj))
1875
+ class FieldMacro {
1876
+ constructor(name, sceneObject, _match, _scopedVars) {
1877
+ this._match = _match;
1878
+ this._scopedVars = _scopedVars;
1879
+ this.state = { name, type: "__field" };
1880
+ }
1881
+ getValue(fieldPath) {
1882
+ var _a, _b;
1883
+ const dataContext = (_a = this._scopedVars) == null ? void 0 : _a.__dataContext;
1884
+ if (!dataContext || !fieldPath) {
1885
+ return this._match;
1886
+ }
1887
+ if (fieldPath === void 0 || fieldPath === "") {
1888
+ return this._match;
1889
+ }
1890
+ const { frame, field, data } = dataContext.value;
1891
+ const obj = getTemplateProxyForField(field, frame, data);
1892
+ return (_b = getFieldAccessor(fieldPath)(obj)) != null ? _b : "";
1893
+ }
1894
+ getValueText() {
1895
+ return "";
1896
+ }
1897
+ }
1898
+
1899
+ class UrlMacro {
1900
+ constructor(name, _) {
1901
+ this.state = { name, type: "url_macro" };
1902
+ }
1903
+ getValue(fieldPath) {
1904
+ var _a;
1905
+ const location = runtime.locationService.getLocation();
1906
+ const subUrl = (_a = runtime.config.appSubUrl) != null ? _a : "";
1907
+ switch (fieldPath != null ? fieldPath : "") {
1908
+ case "params":
1909
+ return new UrlStateFormatter(location.search);
1910
+ case "path":
1911
+ return subUrl + location.pathname;
1912
+ case "":
1913
+ default:
1914
+ return subUrl + location.pathname + location.search;
1915
+ }
1916
+ }
1917
+ getValueText() {
1918
+ return "";
1919
+ }
1920
+ }
1921
+ class UrlStateFormatter {
1922
+ constructor(_urlQueryParams) {
1923
+ this._urlQueryParams = _urlQueryParams;
1924
+ }
1925
+ formatter(options) {
1926
+ if (!options) {
1927
+ return this._urlQueryParams;
1928
+ }
1929
+ const params = options.split(":");
1930
+ if (params[0] === "exclude" && params.length > 1) {
1931
+ const allParams = new URLSearchParams(this._urlQueryParams);
1932
+ for (const param of params[1].split(",")) {
1933
+ allParams.delete(param);
1934
+ }
1935
+ return `?${allParams}`;
1936
+ }
1937
+ if (params[0] === "include" && params.length > 1) {
1938
+ const allParams = new URLSearchParams(this._urlQueryParams);
1939
+ const includeOnly = params[1].split(",");
1940
+ for (const param of allParams.keys()) {
1941
+ if (!includeOnly.includes(param)) {
1942
+ allParams.delete(param);
1943
+ }
1944
+ }
1945
+ return `?${allParams}`;
1946
+ }
1947
+ return this._urlQueryParams;
1948
+ }
1949
+ }
1950
+
1951
+ class UserMacro {
1952
+ constructor(name, _) {
1953
+ this.state = { name, type: "user_macro" };
1954
+ }
1955
+ getValue(fieldPath) {
1956
+ const user = runtime.config.bootData.user;
1957
+ switch (fieldPath) {
1958
+ case "login":
1959
+ return user.login;
1960
+ case "email":
1961
+ return user.email;
1962
+ case "id":
1963
+ default:
1964
+ return String(user.id);
1965
+ }
1966
+ }
1967
+ getValueText() {
1968
+ return "";
1969
+ }
1970
+ }
1971
+ class OrgMacro {
1972
+ constructor(name, _) {
1973
+ this.state = { name, type: "org_macro" };
1974
+ }
1975
+ getValue(fieldPath) {
1976
+ const user = runtime.config.bootData.user;
1977
+ switch (fieldPath) {
1978
+ case "name":
1979
+ return user.orgName;
1980
+ case "id":
1981
+ default:
1982
+ return String(user.orgId);
1983
+ }
1984
+ }
1985
+ getValueText() {
1986
+ return "";
1987
+ }
1988
+ }
1989
+
1990
+ const macrosIndex = /* @__PURE__ */ new Map([
1991
+ [data.DataLinkBuiltInVars.includeVars, AllVariablesMacro],
1992
+ [data.DataLinkBuiltInVars.keepTime, UrlTimeRangeMacro],
1993
+ ["__value", ValueMacro],
1994
+ ["__data", DataMacro],
1995
+ ["__series", SeriesMacro],
1996
+ ["__field", FieldMacro],
1997
+ ["__url", UrlMacro],
1998
+ ["__from", TimeFromAndToMacro],
1999
+ ["__to", TimeFromAndToMacro],
2000
+ ["__timezone", TimezoneMacro],
2001
+ ["__user", UserMacro],
2002
+ ["__org", OrgMacro],
2003
+ ["__interval", IntervalMacro],
2004
+ ["__interval_ms", IntervalMacro]
2005
+ ]);
2006
+ function registerVariableMacro(name, macro) {
2007
+ if (macrosIndex.get(name)) {
2008
+ throw new Error(`Macro already registered ${name}`);
2009
+ }
2010
+ macrosIndex.set(name, macro);
2011
+ return () => {
2012
+ macrosIndex.delete(name);
2013
+ };
2014
+ }
2015
+
2016
+ function sceneInterpolator(sceneObject, target, scopedVars, format, interpolations) {
2017
+ if (!target || typeof target !== "string") {
2018
+ return target != null ? target : "";
2019
+ }
2020
+ VARIABLE_REGEX.lastIndex = 0;
2021
+ return target.replace(VARIABLE_REGEX, (match, var1, var2, fmt2, var3, fieldPath, fmt3) => {
2022
+ const variableName = var1 || var2 || var3;
2023
+ const fmt = fmt2 || fmt3 || format;
2024
+ const variable = lookupFormatVariable(variableName, match, scopedVars, sceneObject);
2025
+ if (!variable) {
2026
+ if (interpolations) {
2027
+ interpolations.push({ match, variableName, fieldPath, format: fmt, value: match, found: false });
2028
+ }
2029
+ return match;
2030
+ }
2031
+ const value = formatValue(sceneObject, variable, variable.getValue(fieldPath), fmt);
2032
+ if (interpolations) {
2033
+ interpolations.push({ match, variableName, fieldPath, format: fmt, value, found: value !== match });
2034
+ }
2035
+ return value;
2036
+ });
2037
+ }
2038
+ function lookupFormatVariable(name, match, scopedVars, sceneObject) {
2039
+ if (scopedVars && scopedVars.hasOwnProperty(name)) {
2040
+ const scopedVar = scopedVars[name];
2041
+ if (scopedVar) {
2042
+ return getSceneVariableForScopedVar(name, scopedVar);
2043
+ }
2044
+ }
2045
+ const variable = lookupVariable(name, sceneObject);
2046
+ if (variable) {
2047
+ return variable;
2048
+ }
2049
+ const Macro = macrosIndex.get(name);
2050
+ if (Macro) {
2051
+ return new Macro(name, sceneObject, match, scopedVars);
2052
+ }
2053
+ return null;
2054
+ }
2055
+ function formatValue(context, variable, value, formatNameOrFn) {
2056
+ if (value === null || value === void 0) {
2057
+ return "";
2058
+ }
2059
+ if (isCustomVariableValue(value)) {
2060
+ return sceneInterpolator(context, value.formatter(formatNameOrFn));
2061
+ }
2062
+ if (!Array.isArray(value) && typeof value === "object") {
2063
+ value = `${value}`;
2064
+ }
2065
+ if (typeof formatNameOrFn === "function") {
2066
+ return formatNameOrFn(value, {
2067
+ name: variable.state.name,
2068
+ type: variable.state.type,
2069
+ multi: variable.state.isMulti,
2070
+ includeAll: variable.state.includeAll
2071
+ });
2072
+ }
2073
+ let args = [];
2074
+ if (!formatNameOrFn) {
2075
+ formatNameOrFn = schema.VariableFormatID.Glob;
2076
+ } else {
2077
+ args = formatNameOrFn.split(":");
2078
+ if (args.length > 1) {
2079
+ formatNameOrFn = args[0];
2080
+ args = args.slice(1);
2081
+ } else {
2082
+ args = [];
2083
+ }
2084
+ }
2085
+ let formatter = formatRegistry.getIfExists(formatNameOrFn);
2086
+ if (!formatter) {
2087
+ console.error(`Variable format ${formatNameOrFn} not found. Using glob format as fallback.`);
2088
+ formatter = formatRegistry.get(schema.VariableFormatID.Glob);
2089
+ }
2090
+ return formatter.formatter(value, args, variable);
2091
+ }
2092
+
2093
+ function isSceneObject(obj) {
2094
+ return obj.useState !== void 0;
2095
+ }
2096
+ function isDataRequestEnricher(obj) {
2097
+ return "enrichDataRequest" in obj;
2098
+ }
2099
+ function isFiltersRequestEnricher(obj) {
2100
+ return "enrichFiltersRequest" in obj;
2101
+ }
2102
+ function isDataLayer(obj) {
2103
+ return "isDataLayer" in obj;
2104
+ }
2105
+
2106
+ var __accessCheck$2 = (obj, member, msg) => {
2107
+ if (!member.has(obj))
1815
2108
  throw TypeError("Cannot " + msg);
1816
2109
  };
1817
2110
  var __privateGet$2 = (obj, member, getter) => {
@@ -1871,602 +2164,313 @@ function writeSceneLog(logger, message, ...rest) {
1871
2164
  if (typeof window !== "undefined") {
1872
2165
  loggingEnabled = localStorage.getItem("grafana.debug.scenes") === "true";
1873
2166
  }
1874
- if (loggingEnabled) {
1875
- console.log(`${logger}: `, message, ...rest);
1876
- }
1877
- }
1878
-
1879
- async function getDataSource(datasource, scopedVars) {
1880
- if (datasource == null ? void 0 : datasource.uid) {
1881
- const runtimeDataSource = runtimeDataSources.get(datasource.uid);
1882
- if (runtimeDataSource) {
1883
- return runtimeDataSource;
1884
- }
1885
- }
1886
- if (datasource && datasource.query) {
1887
- return datasource;
1888
- }
1889
- return await runtime.getDataSourceSrv().get(datasource, scopedVars);
1890
- }
1891
-
1892
- class VariableValueRecorder {
1893
- constructor() {
1894
- this._values = /* @__PURE__ */ new Map();
1895
- }
1896
- recordCurrentDependencyValuesForSceneObject(sceneObject) {
1897
- this.clearValues();
1898
- if (!sceneObject.variableDependency) {
1899
- return;
1900
- }
1901
- for (const variableName of sceneObject.variableDependency.getNames()) {
1902
- const variable = sceneGraph.lookupVariable(variableName, sceneObject);
1903
- if (variable) {
1904
- this._values.set(variable.state.name, variable.getValue());
1905
- }
1906
- }
1907
- }
1908
- cloneAndRecordCurrentValuesForSceneObject(sceneObject) {
1909
- const clone = new VariableValueRecorder();
1910
- clone.recordCurrentDependencyValuesForSceneObject(sceneObject);
1911
- return clone;
1912
- }
1913
- clearValues() {
1914
- this._values.clear();
1915
- }
1916
- hasValues() {
1917
- return !!this._values;
1918
- }
1919
- recordCurrentValue(variable) {
1920
- this._values.set(variable.state.name, variable.getValue());
1921
- }
1922
- hasRecordedValue(variable) {
1923
- return this._values.has(variable.state.name);
1924
- }
1925
- hasValueChanged(variable) {
1926
- if (this._values.has(variable.state.name)) {
1927
- const value = this._values.get(variable.state.name);
1928
- if (!isVariableValueEqual(value, variable.getValue())) {
1929
- return true;
1930
- }
1931
- }
1932
- return false;
1933
- }
1934
- hasDependenciesChanged(sceneObject) {
1935
- if (!this._values) {
1936
- return false;
1937
- }
1938
- if (!sceneObject.variableDependency) {
1939
- return false;
1940
- }
1941
- for (const variableName of sceneObject.variableDependency.getNames()) {
1942
- const variable = sceneGraph.lookupVariable(variableName, sceneObject);
1943
- if (!variable) {
1944
- continue;
1945
- }
1946
- const name = variable.state.name;
1947
- if (variable && this._values.has(name)) {
1948
- const value = this._values.get(name);
1949
- if (!isVariableValueEqual(value, variable.getValue())) {
1950
- return true;
1951
- }
1952
- }
1953
- }
1954
- return false;
1955
- }
1956
- }
1957
-
1958
- function isExtraQueryProvider(obj) {
1959
- return typeof obj === "object" && "getExtraQueries" in obj;
1960
- }
1961
-
1962
- var __defProp$G = Object.defineProperty;
1963
- var __defProps$r = Object.defineProperties;
1964
- var __getOwnPropDescs$r = Object.getOwnPropertyDescriptors;
1965
- var __getOwnPropSymbols$G = Object.getOwnPropertySymbols;
1966
- var __hasOwnProp$G = Object.prototype.hasOwnProperty;
1967
- var __propIsEnum$G = Object.prototype.propertyIsEnumerable;
1968
- var __defNormalProp$G = (obj, key, value) => key in obj ? __defProp$G(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
1969
- var __spreadValues$G = (a, b) => {
1970
- for (var prop in b || (b = {}))
1971
- if (__hasOwnProp$G.call(b, prop))
1972
- __defNormalProp$G(a, prop, b[prop]);
1973
- if (__getOwnPropSymbols$G)
1974
- for (var prop of __getOwnPropSymbols$G(b)) {
1975
- if (__propIsEnum$G.call(b, prop))
1976
- __defNormalProp$G(a, prop, b[prop]);
1977
- }
1978
- return a;
1979
- };
1980
- var __spreadProps$r = (a, b) => __defProps$r(a, __getOwnPropDescs$r(b));
1981
- const passthroughProcessor = (_, secondary) => rxjs.of(secondary);
1982
- const extraQueryProcessingOperator = (processors) => (data) => {
1983
- return data.pipe(
1984
- rxjs.mergeMap(([primary, ...secondaries]) => {
1985
- const processedSecondaries = secondaries.flatMap((s) => {
1986
- var _a, _b;
1987
- return (_b = (_a = processors.get(s.request.requestId)) == null ? void 0 : _a(primary, s)) != null ? _b : rxjs.of(s);
1988
- });
1989
- return rxjs.forkJoin([rxjs.of(primary), ...processedSecondaries]);
1990
- }),
1991
- rxjs.map(([primary, ...processedSecondaries]) => {
1992
- var _a;
1993
- return __spreadProps$r(__spreadValues$G({}, primary), {
1994
- series: [...primary.series, ...processedSecondaries.flatMap((s) => s.series)],
1995
- annotations: [...(_a = primary.annotations) != null ? _a : [], ...processedSecondaries.flatMap((s) => {
1996
- var _a2;
1997
- return (_a2 = s.annotations) != null ? _a2 : [];
1998
- })]
1999
- });
2000
- })
2001
- );
2002
- };
2003
-
2004
- var __defProp$F = Object.defineProperty;
2005
- var __defProps$q = Object.defineProperties;
2006
- var __getOwnPropDescs$q = Object.getOwnPropertyDescriptors;
2007
- var __getOwnPropSymbols$F = Object.getOwnPropertySymbols;
2008
- var __hasOwnProp$F = Object.prototype.hasOwnProperty;
2009
- var __propIsEnum$F = Object.prototype.propertyIsEnumerable;
2010
- var __defNormalProp$F = (obj, key, value) => key in obj ? __defProp$F(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
2011
- var __spreadValues$F = (a, b) => {
2012
- for (var prop in b || (b = {}))
2013
- if (__hasOwnProp$F.call(b, prop))
2014
- __defNormalProp$F(a, prop, b[prop]);
2015
- if (__getOwnPropSymbols$F)
2016
- for (var prop of __getOwnPropSymbols$F(b)) {
2017
- if (__propIsEnum$F.call(b, prop))
2018
- __defNormalProp$F(a, prop, b[prop]);
2019
- }
2020
- return a;
2021
- };
2022
- var __spreadProps$q = (a, b) => __defProps$q(a, __getOwnPropDescs$q(b));
2023
- function filterAnnotations(data, filters) {
2024
- var _a;
2025
- if (!Array.isArray(data) || data.length === 0) {
2026
- return data;
2027
- }
2028
- const rows = Array.from({ length: data.length }, () => /* @__PURE__ */ new Set());
2029
- let frameIdx = 0;
2030
- for (const frame of data) {
2031
- for (let index = 0; index < frame.length; index++) {
2032
- if (rows[frameIdx].has(index)) {
2033
- continue;
2034
- }
2035
- let matching = true;
2036
- const panelIdField = frame.fields.find((f) => f.name === "panelId");
2037
- const sourceField = frame.fields.find((f) => f.name === "source");
2038
- if (sourceField) {
2039
- if (panelIdField && sourceField.values[index].type === "dashboard") {
2040
- matching = panelIdField.values[index] === filters.panelId;
2041
- }
2042
- const sourceFilter = sourceField.values[index].filter;
2043
- if (sourceFilter) {
2044
- const includes = ((_a = sourceFilter.ids) != null ? _a : []).includes(filters.panelId);
2045
- if (sourceFilter.exclude) {
2046
- if (includes) {
2047
- matching = false;
2048
- }
2049
- } else if (!includes) {
2050
- matching = false;
2051
- }
2052
- }
2053
- }
2054
- if (matching) {
2055
- rows[frameIdx].add(index);
2056
- }
2057
- }
2058
- frameIdx++;
2059
- }
2060
- const processed = [];
2061
- frameIdx = 0;
2062
- for (const frame of data) {
2063
- const frameLength = rows[frameIdx].size;
2064
- const fields = [];
2065
- for (const field of frame.fields) {
2066
- const buffer = [];
2067
- for (let index = 0; index < frame.length; index++) {
2068
- if (rows[frameIdx].has(index)) {
2069
- buffer.push(field.values[index]);
2070
- continue;
2071
- }
2072
- }
2073
- fields.push(__spreadProps$q(__spreadValues$F({}, field), {
2074
- values: buffer
2075
- }));
2076
- }
2077
- processed.push(__spreadProps$q(__spreadValues$F({}, frame), {
2078
- fields,
2079
- length: frameLength
2080
- }));
2081
- frameIdx++;
2082
- }
2083
- return processed;
2084
- }
2085
-
2086
- function getEnrichedDataRequest(sourceRunner) {
2087
- const root = sourceRunner.getRoot();
2088
- if (isDataRequestEnricher(root)) {
2089
- return root.enrichDataRequest(sourceRunner);
2090
- }
2091
- return null;
2092
- }
2093
-
2094
- let originalGetAdhocFilters = void 0;
2095
- let allActiveFilterSets = /* @__PURE__ */ new Set();
2096
- function patchGetAdhocFilters(filterVar) {
2097
- filterVar.addActivationHandler(() => {
2098
- allActiveFilterSets.add(filterVar);
2099
- return () => allActiveFilterSets.delete(filterVar);
2100
- });
2101
- if (originalGetAdhocFilters) {
2102
- return;
2103
- }
2104
- const templateSrv = runtime.getTemplateSrv();
2105
- if (!(templateSrv == null ? void 0 : templateSrv.getAdhocFilters)) {
2106
- console.log("Failed to patch getAdhocFilters");
2107
- return;
2108
- }
2109
- originalGetAdhocFilters = templateSrv.getAdhocFilters;
2110
- templateSrv.getAdhocFilters = function getAdhocFiltersScenePatch(dsName) {
2111
- var _a;
2112
- if (allActiveFilterSets.size === 0) {
2113
- return originalGetAdhocFilters.call(templateSrv);
2114
- }
2115
- const ds = runtime.getDataSourceSrv().getInstanceSettings(dsName);
2116
- if (!ds) {
2117
- return [];
2118
- }
2119
- for (const filter of allActiveFilterSets.values()) {
2120
- if (((_a = filter.state.datasource) == null ? void 0 : _a.uid) === ds.uid) {
2121
- return filter.state.filters;
2122
- }
2123
- }
2124
- return [];
2125
- }.bind(templateSrv);
2126
- }
2127
- function findActiveAdHocFilterVariableByUid(dsUid) {
2128
- var _a;
2129
- for (const filter of allActiveFilterSets.values()) {
2130
- if (((_a = filter.state.datasource) == null ? void 0 : _a.uid) === dsUid) {
2131
- return filter;
2132
- }
2133
- }
2134
- return void 0;
2135
- }
2136
-
2137
- function registerQueryWithController(entry) {
2138
- return (queryStream) => {
2139
- const queryControler = sceneGraph.getQueryController(entry.origin);
2140
- if (!queryControler) {
2141
- return queryStream;
2142
- }
2143
- return new rxjs.Observable((observer) => {
2144
- if (!entry.cancel) {
2145
- entry.cancel = () => observer.complete();
2146
- }
2147
- queryControler.queryStarted(entry);
2148
- let markedAsCompleted = false;
2149
- const sub = queryStream.subscribe({
2150
- next: (v) => {
2151
- if (!markedAsCompleted && v.state !== schema.LoadingState.Loading) {
2152
- markedAsCompleted = true;
2153
- queryControler.queryCompleted(entry);
2154
- }
2155
- observer.next(v);
2156
- },
2157
- error: (e) => observer.error(e),
2158
- complete: () => {
2159
- observer.complete();
2160
- }
2161
- });
2162
- return () => {
2163
- sub.unsubscribe();
2164
- if (!markedAsCompleted) {
2165
- queryControler.queryCompleted(entry);
2166
- }
2167
- };
2168
- });
2169
- };
2170
- }
2171
-
2172
- const allActiveGroupByVariables = /* @__PURE__ */ new Set();
2173
- function findActiveGroupByVariablesByUid(dsUid) {
2174
- var _a;
2175
- for (const groupByVariable of allActiveGroupByVariables.values()) {
2176
- if (((_a = groupByVariable.state.datasource) == null ? void 0 : _a.uid) === dsUid) {
2177
- return groupByVariable;
2178
- }
2167
+ if (loggingEnabled) {
2168
+ console.log(`${logger}: `, message, ...rest);
2179
2169
  }
2180
- return void 0;
2181
2170
  }
2182
2171
 
2183
- function setBaseClassState(sceneObject, newState) {
2184
- sceneObject.setState(newState);
2185
- }
2186
- function useLocationServiceSafe() {
2187
- return runtime.useLocationService ? runtime.useLocationService() : runtime.locationService;
2172
+ async function getDataSource(datasource, scopedVars) {
2173
+ if (datasource == null ? void 0 : datasource.uid) {
2174
+ const runtimeDataSource = runtimeDataSources.get(datasource.uid);
2175
+ if (runtimeDataSource) {
2176
+ return runtimeDataSource;
2177
+ }
2178
+ }
2179
+ if (datasource && datasource.query) {
2180
+ return datasource;
2181
+ }
2182
+ return await runtime.getDataSourceSrv().get(datasource, scopedVars);
2188
2183
  }
2189
2184
 
2190
- class MultiValueVariable extends SceneObjectBase {
2185
+ class VariableValueRecorder {
2191
2186
  constructor() {
2192
- super(...arguments);
2193
- this._urlSync = new MultiValueUrlSyncHandler(this);
2194
- }
2195
- validateAndUpdate() {
2196
- return this.getValueOptions({}).pipe(
2197
- rxjs.map((options) => {
2198
- this.updateValueGivenNewOptions(options);
2199
- return {};
2200
- })
2201
- );
2202
- }
2203
- onCancel() {
2204
- this.setStateHelper({ loading: false });
2205
- const sceneVarSet = this.parent;
2206
- sceneVarSet == null ? void 0 : sceneVarSet.cancel(this);
2207
- }
2208
- updateValueGivenNewOptions(options) {
2209
- const { value: currentValue, text: currentText, options: oldOptions } = this.state;
2210
- const stateUpdate = this.getStateUpdateGivenNewOptions(options, currentValue, currentText);
2211
- this.interceptStateUpdateAfterValidation(stateUpdate);
2212
- this.setStateHelper(stateUpdate);
2213
- if (stateUpdate.value !== currentValue || stateUpdate.text !== currentText || this.hasAllValue() && !lodash.isEqual(options, oldOptions)) {
2214
- this.publishEvent(new SceneVariableValueChangedEvent(this), true);
2215
- }
2187
+ this._values = /* @__PURE__ */ new Map();
2216
2188
  }
2217
- getStateUpdateGivenNewOptions(options, currentValue, currentText) {
2218
- const stateUpdate = {
2219
- options,
2220
- loading: false,
2221
- value: currentValue,
2222
- text: currentText
2223
- };
2224
- if (options.length === 0) {
2225
- if (this.state.defaultToAll || this.state.includeAll) {
2226
- stateUpdate.value = ALL_VARIABLE_VALUE;
2227
- stateUpdate.text = ALL_VARIABLE_TEXT;
2228
- } else if (this.state.isMulti) {
2229
- stateUpdate.value = [];
2230
- stateUpdate.text = [];
2231
- } else {
2232
- stateUpdate.value = "";
2233
- stateUpdate.text = "";
2234
- }
2235
- return stateUpdate;
2236
- }
2237
- if (this.hasAllValue()) {
2238
- if (!this.state.includeAll) {
2239
- stateUpdate.value = options[0].value;
2240
- stateUpdate.text = options[0].label;
2241
- if (this.state.isMulti) {
2242
- stateUpdate.value = [stateUpdate.value];
2243
- stateUpdate.text = [stateUpdate.text];
2244
- }
2245
- }
2246
- return stateUpdate;
2247
- }
2248
- if (this.state.isMulti) {
2249
- const currentValues = Array.isArray(currentValue) ? currentValue : [currentValue];
2250
- const validValues = currentValues.filter((v) => options.find((o) => o.value === v));
2251
- const validTexts = validValues.map((v) => options.find((o) => o.value === v).label);
2252
- if (validValues.length === 0) {
2253
- const defaultState = this.getDefaultMultiState(options);
2254
- stateUpdate.value = defaultState.value;
2255
- stateUpdate.text = defaultState.text;
2256
- } else {
2257
- if (!lodash.isEqual(validValues, currentValue)) {
2258
- stateUpdate.value = validValues;
2259
- }
2260
- if (!lodash.isEqual(validTexts, currentText)) {
2261
- stateUpdate.text = validTexts;
2262
- }
2263
- }
2264
- return stateUpdate;
2189
+ recordCurrentDependencyValuesForSceneObject(sceneObject) {
2190
+ this.clearValues();
2191
+ if (!sceneObject.variableDependency) {
2192
+ return;
2265
2193
  }
2266
- let matchingOption = findOptionMatchingCurrent(currentValue, currentText, options);
2267
- if (matchingOption) {
2268
- stateUpdate.text = matchingOption.label;
2269
- stateUpdate.value = matchingOption.value;
2270
- } else {
2271
- if (this.state.defaultToAll) {
2272
- stateUpdate.value = ALL_VARIABLE_VALUE;
2273
- stateUpdate.text = ALL_VARIABLE_TEXT;
2274
- } else {
2275
- stateUpdate.value = options[0].value;
2276
- stateUpdate.text = options[0].label;
2194
+ for (const variableName of sceneObject.variableDependency.getNames()) {
2195
+ const variable = sceneGraph.lookupVariable(variableName, sceneObject);
2196
+ if (variable) {
2197
+ this._values.set(variable.state.name, variable.getValue());
2277
2198
  }
2278
2199
  }
2279
- return stateUpdate;
2280
2200
  }
2281
- interceptStateUpdateAfterValidation(stateUpdate) {
2282
- const isAllValueFix = stateUpdate.value === ALL_VARIABLE_VALUE && this.state.text === ALL_VARIABLE_TEXT;
2283
- if (this.skipNextValidation && stateUpdate.value !== this.state.value && stateUpdate.text !== this.state.text && !isAllValueFix) {
2284
- stateUpdate.value = this.state.value;
2285
- stateUpdate.text = this.state.text;
2286
- }
2287
- this.skipNextValidation = false;
2201
+ cloneAndRecordCurrentValuesForSceneObject(sceneObject) {
2202
+ const clone = new VariableValueRecorder();
2203
+ clone.recordCurrentDependencyValuesForSceneObject(sceneObject);
2204
+ return clone;
2288
2205
  }
2289
- getValue() {
2290
- if (this.hasAllValue()) {
2291
- if (this.state.allValue) {
2292
- return new CustomAllValue(this.state.allValue, this);
2206
+ clearValues() {
2207
+ this._values.clear();
2208
+ }
2209
+ hasValues() {
2210
+ return !!this._values;
2211
+ }
2212
+ recordCurrentValue(variable) {
2213
+ this._values.set(variable.state.name, variable.getValue());
2214
+ }
2215
+ hasRecordedValue(variable) {
2216
+ return this._values.has(variable.state.name);
2217
+ }
2218
+ hasValueChanged(variable) {
2219
+ if (this._values.has(variable.state.name)) {
2220
+ const value = this._values.get(variable.state.name);
2221
+ if (!isVariableValueEqual(value, variable.getValue())) {
2222
+ return true;
2293
2223
  }
2294
- return this.state.options.map((x) => x.value);
2295
2224
  }
2296
- return this.state.value;
2225
+ return false;
2297
2226
  }
2298
- getValueText() {
2299
- if (this.hasAllValue()) {
2300
- return ALL_VARIABLE_TEXT;
2227
+ hasDependenciesChanged(sceneObject) {
2228
+ if (!this._values) {
2229
+ return false;
2301
2230
  }
2302
- if (Array.isArray(this.state.text)) {
2303
- return this.state.text.join(" + ");
2231
+ if (!sceneObject.variableDependency) {
2232
+ return false;
2304
2233
  }
2305
- return String(this.state.text);
2306
- }
2307
- hasAllValue() {
2308
- const value = this.state.value;
2309
- return value === ALL_VARIABLE_VALUE || Array.isArray(value) && value[0] === ALL_VARIABLE_VALUE;
2310
- }
2311
- getDefaultMultiState(options) {
2312
- if (this.state.defaultToAll) {
2313
- return { value: [ALL_VARIABLE_VALUE], text: [ALL_VARIABLE_TEXT] };
2314
- } else if (options.length > 0) {
2315
- return { value: [options[0].value], text: [options[0].label] };
2316
- } else {
2317
- return { value: [], text: [] };
2234
+ for (const variableName of sceneObject.variableDependency.getNames()) {
2235
+ const variable = sceneGraph.lookupVariable(variableName, sceneObject);
2236
+ if (!variable) {
2237
+ continue;
2238
+ }
2239
+ const name = variable.state.name;
2240
+ if (variable && this._values.has(name)) {
2241
+ const value = this._values.get(name);
2242
+ if (!isVariableValueEqual(value, variable.getValue())) {
2243
+ return true;
2244
+ }
2245
+ }
2318
2246
  }
2247
+ return false;
2319
2248
  }
2320
- changeValueTo(value, text) {
2321
- if (value === this.state.value && text === this.state.text) {
2322
- return;
2249
+ }
2250
+
2251
+ function isExtraQueryProvider(obj) {
2252
+ return typeof obj === "object" && "getExtraQueries" in obj;
2253
+ }
2254
+
2255
+ var __defProp$G = Object.defineProperty;
2256
+ var __defProps$r = Object.defineProperties;
2257
+ var __getOwnPropDescs$r = Object.getOwnPropertyDescriptors;
2258
+ var __getOwnPropSymbols$G = Object.getOwnPropertySymbols;
2259
+ var __hasOwnProp$G = Object.prototype.hasOwnProperty;
2260
+ var __propIsEnum$G = Object.prototype.propertyIsEnumerable;
2261
+ var __defNormalProp$G = (obj, key, value) => key in obj ? __defProp$G(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
2262
+ var __spreadValues$G = (a, b) => {
2263
+ for (var prop in b || (b = {}))
2264
+ if (__hasOwnProp$G.call(b, prop))
2265
+ __defNormalProp$G(a, prop, b[prop]);
2266
+ if (__getOwnPropSymbols$G)
2267
+ for (var prop of __getOwnPropSymbols$G(b)) {
2268
+ if (__propIsEnum$G.call(b, prop))
2269
+ __defNormalProp$G(a, prop, b[prop]);
2323
2270
  }
2324
- if (!text) {
2325
- if (Array.isArray(value)) {
2326
- text = value.map((v) => this.findLabelTextForValue(v));
2327
- } else {
2328
- text = this.findLabelTextForValue(value);
2329
- }
2271
+ return a;
2272
+ };
2273
+ var __spreadProps$r = (a, b) => __defProps$r(a, __getOwnPropDescs$r(b));
2274
+ const passthroughProcessor = (_, secondary) => rxjs.of(secondary);
2275
+ const extraQueryProcessingOperator = (processors) => (data) => {
2276
+ return data.pipe(
2277
+ rxjs.mergeMap(([primary, ...secondaries]) => {
2278
+ const processedSecondaries = secondaries.flatMap((s) => {
2279
+ var _a, _b;
2280
+ return (_b = (_a = processors.get(s.request.requestId)) == null ? void 0 : _a(primary, s)) != null ? _b : rxjs.of(s);
2281
+ });
2282
+ return rxjs.forkJoin([rxjs.of(primary), ...processedSecondaries]);
2283
+ }),
2284
+ rxjs.map(([primary, ...processedSecondaries]) => {
2285
+ var _a;
2286
+ return __spreadProps$r(__spreadValues$G({}, primary), {
2287
+ series: [...primary.series, ...processedSecondaries.flatMap((s) => s.series)],
2288
+ annotations: [...(_a = primary.annotations) != null ? _a : [], ...processedSecondaries.flatMap((s) => {
2289
+ var _a2;
2290
+ return (_a2 = s.annotations) != null ? _a2 : [];
2291
+ })]
2292
+ });
2293
+ })
2294
+ );
2295
+ };
2296
+
2297
+ var __defProp$F = Object.defineProperty;
2298
+ var __defProps$q = Object.defineProperties;
2299
+ var __getOwnPropDescs$q = Object.getOwnPropertyDescriptors;
2300
+ var __getOwnPropSymbols$F = Object.getOwnPropertySymbols;
2301
+ var __hasOwnProp$F = Object.prototype.hasOwnProperty;
2302
+ var __propIsEnum$F = Object.prototype.propertyIsEnumerable;
2303
+ var __defNormalProp$F = (obj, key, value) => key in obj ? __defProp$F(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
2304
+ var __spreadValues$F = (a, b) => {
2305
+ for (var prop in b || (b = {}))
2306
+ if (__hasOwnProp$F.call(b, prop))
2307
+ __defNormalProp$F(a, prop, b[prop]);
2308
+ if (__getOwnPropSymbols$F)
2309
+ for (var prop of __getOwnPropSymbols$F(b)) {
2310
+ if (__propIsEnum$F.call(b, prop))
2311
+ __defNormalProp$F(a, prop, b[prop]);
2330
2312
  }
2331
- if (Array.isArray(value)) {
2332
- if (value.length === 0) {
2333
- const state = this.getDefaultMultiState(this.state.options);
2334
- value = state.value;
2335
- text = state.text;
2313
+ return a;
2314
+ };
2315
+ var __spreadProps$q = (a, b) => __defProps$q(a, __getOwnPropDescs$q(b));
2316
+ function filterAnnotations(data, filters) {
2317
+ var _a;
2318
+ if (!Array.isArray(data) || data.length === 0) {
2319
+ return data;
2320
+ }
2321
+ const rows = Array.from({ length: data.length }, () => /* @__PURE__ */ new Set());
2322
+ let frameIdx = 0;
2323
+ for (const frame of data) {
2324
+ for (let index = 0; index < frame.length; index++) {
2325
+ if (rows[frameIdx].has(index)) {
2326
+ continue;
2336
2327
  }
2337
- if (value[value.length - 1] === ALL_VARIABLE_VALUE) {
2338
- value = [ALL_VARIABLE_VALUE];
2339
- text = [ALL_VARIABLE_TEXT];
2340
- } else if (value[0] === ALL_VARIABLE_VALUE && value.length > 1) {
2341
- value.shift();
2342
- if (Array.isArray(text)) {
2343
- text.shift();
2328
+ let matching = true;
2329
+ const panelIdField = frame.fields.find((f) => f.name === "panelId");
2330
+ const sourceField = frame.fields.find((f) => f.name === "source");
2331
+ if (sourceField) {
2332
+ if (panelIdField && sourceField.values[index].type === "dashboard") {
2333
+ matching = panelIdField.values[index] === filters.panelId;
2334
+ }
2335
+ const sourceFilter = sourceField.values[index].filter;
2336
+ if (sourceFilter) {
2337
+ const includes = ((_a = sourceFilter.ids) != null ? _a : []).includes(filters.panelId);
2338
+ if (sourceFilter.exclude) {
2339
+ if (includes) {
2340
+ matching = false;
2341
+ }
2342
+ } else if (!includes) {
2343
+ matching = false;
2344
+ }
2344
2345
  }
2345
2346
  }
2347
+ if (matching) {
2348
+ rows[frameIdx].add(index);
2349
+ }
2346
2350
  }
2347
- if (lodash.isEqual(value, this.state.value) && lodash.isEqual(text, this.state.text)) {
2348
- return;
2349
- }
2350
- this.setStateHelper({ value, text, loading: false });
2351
- this.publishEvent(new SceneVariableValueChangedEvent(this), true);
2352
- }
2353
- findLabelTextForValue(value) {
2354
- if (value === ALL_VARIABLE_VALUE) {
2355
- return ALL_VARIABLE_TEXT;
2356
- }
2357
- const option = this.state.options.find((x) => x.value === value);
2358
- if (option) {
2359
- return option.label;
2360
- }
2361
- const optionByLabel = this.state.options.find((x) => x.label === value);
2362
- if (optionByLabel) {
2363
- return optionByLabel.label;
2364
- }
2365
- return value;
2366
- }
2367
- setStateHelper(state) {
2368
- setBaseClassState(this, state);
2351
+ frameIdx++;
2369
2352
  }
2370
- getOptionsForSelect() {
2371
- let options = this.state.options;
2372
- if (this.state.includeAll) {
2373
- options = [{ value: ALL_VARIABLE_VALUE, label: ALL_VARIABLE_TEXT }, ...options];
2374
- }
2375
- if (!Array.isArray(this.state.value)) {
2376
- const current = options.find((x) => x.value === this.state.value);
2377
- if (!current) {
2378
- options = [{ value: this.state.value, label: String(this.state.text) }, ...options];
2353
+ const processed = [];
2354
+ frameIdx = 0;
2355
+ for (const frame of data) {
2356
+ const frameLength = rows[frameIdx].size;
2357
+ const fields = [];
2358
+ for (const field of frame.fields) {
2359
+ const buffer = [];
2360
+ for (let index = 0; index < frame.length; index++) {
2361
+ if (rows[frameIdx].has(index)) {
2362
+ buffer.push(field.values[index]);
2363
+ continue;
2364
+ }
2379
2365
  }
2366
+ fields.push(__spreadProps$q(__spreadValues$F({}, field), {
2367
+ values: buffer
2368
+ }));
2380
2369
  }
2381
- return options;
2382
- }
2383
- refreshOptions() {
2384
- this.getValueOptions({}).subscribe((options) => {
2385
- this.updateValueGivenNewOptions(options);
2386
- });
2370
+ processed.push(__spreadProps$q(__spreadValues$F({}, frame), {
2371
+ fields,
2372
+ length: frameLength
2373
+ }));
2374
+ frameIdx++;
2387
2375
  }
2376
+ return processed;
2388
2377
  }
2389
- function findOptionMatchingCurrent(currentValue, currentText, options) {
2390
- let textMatch;
2391
- for (const item of options) {
2392
- if (item.value === currentValue) {
2393
- return item;
2394
- }
2395
- if (item.label === currentText) {
2396
- textMatch = item;
2397
- }
2378
+
2379
+ function getEnrichedDataRequest(sourceRunner) {
2380
+ const root = sourceRunner.getRoot();
2381
+ if (isDataRequestEnricher(root)) {
2382
+ return root.enrichDataRequest(sourceRunner);
2398
2383
  }
2399
- return textMatch;
2384
+ return null;
2400
2385
  }
2401
- class MultiValueUrlSyncHandler {
2402
- constructor(_sceneObject) {
2403
- this._sceneObject = _sceneObject;
2404
- }
2405
- getKey() {
2406
- return `var-${this._sceneObject.state.name}`;
2386
+
2387
+ let originalGetAdhocFilters = void 0;
2388
+ let allActiveFilterSets = /* @__PURE__ */ new Set();
2389
+ function patchGetAdhocFilters(filterVar) {
2390
+ filterVar.addActivationHandler(() => {
2391
+ allActiveFilterSets.add(filterVar);
2392
+ return () => allActiveFilterSets.delete(filterVar);
2393
+ });
2394
+ if (originalGetAdhocFilters) {
2395
+ return;
2407
2396
  }
2408
- getKeys() {
2409
- if (this._sceneObject.state.skipUrlSync) {
2410
- return [];
2411
- }
2412
- return [this.getKey()];
2397
+ const templateSrv = runtime.getTemplateSrv();
2398
+ if (!(templateSrv == null ? void 0 : templateSrv.getAdhocFilters)) {
2399
+ console.log("Failed to patch getAdhocFilters");
2400
+ return;
2413
2401
  }
2414
- getUrlState() {
2415
- if (this._sceneObject.state.skipUrlSync) {
2416
- return {};
2402
+ originalGetAdhocFilters = templateSrv.getAdhocFilters;
2403
+ templateSrv.getAdhocFilters = function getAdhocFiltersScenePatch(dsName) {
2404
+ var _a;
2405
+ if (allActiveFilterSets.size === 0) {
2406
+ return originalGetAdhocFilters.call(templateSrv);
2417
2407
  }
2418
- let urlValue = null;
2419
- let value = this._sceneObject.state.value;
2420
- if (Array.isArray(value)) {
2421
- urlValue = value.map(String);
2422
- } else if (this._sceneObject.state.isMulti) {
2423
- urlValue = [String(value)];
2424
- } else {
2425
- urlValue = String(value);
2408
+ const ds = runtime.getDataSourceSrv().getInstanceSettings(dsName);
2409
+ if (!ds) {
2410
+ return [];
2426
2411
  }
2427
- return { [this.getKey()]: urlValue };
2428
- }
2429
- updateFromUrl(values) {
2430
- let urlValue = values[this.getKey()];
2431
- if (urlValue != null) {
2432
- if (this._sceneObject.state.includeAll) {
2433
- urlValue = handleLegacyUrlAllValue(urlValue);
2434
- }
2435
- if (this._sceneObject.state.allValue && this._sceneObject.state.allValue === urlValue) {
2436
- urlValue = ALL_VARIABLE_VALUE;
2437
- }
2438
- if (!this._sceneObject.isActive) {
2439
- this._sceneObject.skipNextValidation = true;
2412
+ for (const filter of allActiveFilterSets.values()) {
2413
+ if (((_a = filter.state.datasource) == null ? void 0 : _a.uid) === ds.uid) {
2414
+ return filter.state.filters;
2440
2415
  }
2441
- this._sceneObject.changeValueTo(urlValue);
2442
2416
  }
2443
- }
2417
+ return [];
2418
+ }.bind(templateSrv);
2444
2419
  }
2445
- function handleLegacyUrlAllValue(value) {
2446
- if (lodash.isArray(value) && value[0] === ALL_VARIABLE_TEXT) {
2447
- return [ALL_VARIABLE_VALUE];
2448
- } else if (value === ALL_VARIABLE_TEXT) {
2449
- return ALL_VARIABLE_VALUE;
2420
+ function findActiveAdHocFilterVariableByUid(dsUid) {
2421
+ var _a;
2422
+ for (const filter of allActiveFilterSets.values()) {
2423
+ if (((_a = filter.state.datasource) == null ? void 0 : _a.uid) === dsUid) {
2424
+ return filter;
2425
+ }
2450
2426
  }
2451
- return value;
2427
+ return void 0;
2452
2428
  }
2453
- class CustomAllValue {
2454
- constructor(_value, _variable) {
2455
- this._value = _value;
2456
- this._variable = _variable;
2457
- }
2458
- formatter(formatNameOrFn) {
2459
- if (formatNameOrFn === schema.VariableFormatID.Text) {
2460
- return ALL_VARIABLE_TEXT;
2461
- }
2462
- if (formatNameOrFn === schema.VariableFormatID.PercentEncode) {
2463
- return formatRegistry.get(schema.VariableFormatID.PercentEncode).formatter(this._value, [], this._variable);
2429
+
2430
+ function registerQueryWithController(entry) {
2431
+ return (queryStream) => {
2432
+ const queryControler = sceneGraph.getQueryController(entry.origin);
2433
+ if (!queryControler) {
2434
+ return queryStream;
2464
2435
  }
2465
- if (formatNameOrFn === schema.VariableFormatID.QueryParam) {
2466
- return formatRegistry.get(schema.VariableFormatID.QueryParam).formatter(ALL_VARIABLE_TEXT, [], this._variable);
2436
+ return new rxjs.Observable((observer) => {
2437
+ if (!entry.cancel) {
2438
+ entry.cancel = () => observer.complete();
2439
+ }
2440
+ queryControler.queryStarted(entry);
2441
+ let markedAsCompleted = false;
2442
+ const sub = queryStream.subscribe({
2443
+ next: (v) => {
2444
+ if (!markedAsCompleted && v.state !== schema.LoadingState.Loading) {
2445
+ markedAsCompleted = true;
2446
+ queryControler.queryCompleted(entry);
2447
+ }
2448
+ observer.next(v);
2449
+ },
2450
+ error: (e) => observer.error(e),
2451
+ complete: () => {
2452
+ observer.complete();
2453
+ }
2454
+ });
2455
+ return () => {
2456
+ sub.unsubscribe();
2457
+ if (!markedAsCompleted) {
2458
+ queryControler.queryCompleted(entry);
2459
+ }
2460
+ };
2461
+ });
2462
+ };
2463
+ }
2464
+
2465
+ const allActiveGroupByVariables = /* @__PURE__ */ new Set();
2466
+ function findActiveGroupByVariablesByUid(dsUid) {
2467
+ var _a;
2468
+ for (const groupByVariable of allActiveGroupByVariables.values()) {
2469
+ if (((_a = groupByVariable.state.datasource) == null ? void 0 : _a.uid) === dsUid) {
2470
+ return groupByVariable;
2467
2471
  }
2468
- return this._value;
2469
2472
  }
2473
+ return void 0;
2470
2474
  }
2471
2475
 
2472
2476
  function getOptionSearcher(options, includeAll) {
@@ -10377,6 +10381,7 @@ const getSceneGridRowStyles = (theme) => {
10377
10381
  cursor: "pointer",
10378
10382
  background: "transparent",
10379
10383
  border: "none",
10384
+ minWidth: 0,
10380
10385
  gap: theme.spacing(1)
10381
10386
  }),
10382
10387
  rowCollapsed: css.css({
@@ -10384,7 +10389,13 @@ const getSceneGridRowStyles = (theme) => {
10384
10389
  }),
10385
10390
  rowTitle: css.css({
10386
10391
  fontSize: theme.typography.h5.fontSize,
10387
- fontWeight: theme.typography.fontWeightMedium
10392
+ fontWeight: theme.typography.fontWeightMedium,
10393
+ whiteSpace: "nowrap",
10394
+ overflow: "hidden",
10395
+ textOverflow: "ellipsis",
10396
+ maxWidth: "100%",
10397
+ flexGrow: 1,
10398
+ minWidth: 0
10388
10399
  }),
10389
10400
  collapsedInfo: css.css({
10390
10401
  fontSize: theme.typography.bodySmall.fontSize,
@@ -10395,6 +10406,7 @@ const getSceneGridRowStyles = (theme) => {
10395
10406
  }),
10396
10407
  rowTitleAndActionsGroup: css.css({
10397
10408
  display: "flex",
10409
+ minWidth: 0,
10398
10410
  "&:hover, &:focus-within": {
10399
10411
  "& > div": {
10400
10412
  opacity: 1
@@ -10403,6 +10415,7 @@ const getSceneGridRowStyles = (theme) => {
10403
10415
  }),
10404
10416
  rowActions: css.css({
10405
10417
  display: "flex",
10418
+ whiteSpace: "nowrap",
10406
10419
  opacity: 0,
10407
10420
  transition: "200ms opacity ease-in 200ms",
10408
10421
  "&:hover, &:focus-within": {
@@ -10421,6 +10434,7 @@ const getSceneGridRowStyles = (theme) => {
10421
10434
  }
10422
10435
  }),
10423
10436
  panelCount: css.css({
10437
+ whiteSpace: "nowrap",
10424
10438
  paddingLeft: theme.spacing(2),
10425
10439
  color: theme.colors.text.secondary,
10426
10440
  fontStyle: "italic",