@grafana/scenes 6.2.1 → 6.3.1--canary.990.13763142318.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
@@ -1,5 +1,5 @@
1
1
  import * as _grafana_data from '@grafana/data';
2
- import { BusEventWithPayload, EventBus, BusEvent, BusEventType, BusEventHandler, PanelMenuItem, FieldConfigSource, PanelModel, PanelPlugin, AbsoluteTimeRange, PanelData, InterpolateFunction, TimeRange, DataQueryRequest, DataSourceGetTagKeysOptions, DataSourceGetTagValuesOptions, DataTransformContext, DataFrame, IconName, PageLayoutType, UrlQueryMap, DataQuery as DataQuery$1, DataSourceApi, Registry, RegistryItem, ScopedVars, AdHocVariableFilter, SelectableValue, MetricFindValue, GetTagResponse, VariableRefresh as VariableRefresh$1, VariableSort, EventFilterOptions, AnnotationEvent, AnnotationQuery, DataTransformerConfig, TimeOption, FieldConfig, FieldType, FieldValueMatcherConfig, ScopedVar, RawTimeRange } from '@grafana/data';
2
+ import { BusEventWithPayload, EventBus, BusEvent, BusEventType, BusEventHandler, PanelMenuItem, FieldConfigSource, PanelModel, PanelPlugin, AbsoluteTimeRange, PanelData, InterpolateFunction, TimeRange, DataQueryRequest, DataSourceGetTagKeysOptions, DataSourceGetTagValuesOptions, DataTransformContext, DataFrame, Scope, IconName, PageLayoutType, UrlQueryMap, DataQuery as DataQuery$1, DataSourceApi, Registry, RegistryItem, ScopedVars, AdHocVariableFilter, SelectableValue, MetricFindValue, GetTagResponse, VariableRefresh as VariableRefresh$1, VariableSort, EventFilterOptions, AnnotationEvent, AnnotationQuery, DataTransformerConfig, TimeOption, FieldConfig, FieldType, FieldValueMatcherConfig, ScopedVar, RawTimeRange } from '@grafana/data';
3
3
  import * as React$1 from 'react';
4
4
  import React__default, { ComponentType, CSSProperties, PointerEvent, ForwardRefExoticComponent } from 'react';
5
5
  import * as rxjs from 'rxjs';
@@ -7,7 +7,7 @@ import { Observable, Subscription, Unsubscribable, MonoTypeOperatorFunction, Rep
7
7
  import * as _grafana_schema from '@grafana/schema';
8
8
  import { VariableType, VariableHide, TimeZone, DataTopic, DataQuery, DataSourceRef, VariableRefresh, LoadingState, DashboardCursorSync, MatcherConfig, TableFieldOptions } from '@grafana/schema';
9
9
  import { PanelContext, WeekStart, IconName as IconName$1 } from '@grafana/ui';
10
- import { LocationService, VariableInterpolation } from '@grafana/runtime';
10
+ import { ScopesContextValue, LocationService, VariableInterpolation } from '@grafana/runtime';
11
11
  import { Location } from 'history';
12
12
  import ReactGridLayout from 'react-grid-layout';
13
13
  import { Options, FieldConfig as FieldConfig$1 } from '@grafana/schema/dist/esm/raw/composable/barchart/panelcfg/x/BarChartPanelCfg_types.gen';
@@ -650,6 +650,55 @@ declare class EmbeddedScene extends SceneObjectBase<EmbeddedSceneState> {
650
650
  }
651
651
  declare function EmbeddedSceneRenderer({ model }: SceneComponentProps<EmbeddedScene>): React__default.JSX.Element;
652
652
 
653
+ interface SceneObjectUrlSyncConfigOptions {
654
+ keys: string[] | (() => string[]);
655
+ }
656
+ declare class SceneObjectUrlSyncConfig implements SceneObjectUrlSyncHandler {
657
+ private _sceneObject;
658
+ private _keys;
659
+ private _nextChangeShouldAddHistoryStep;
660
+ constructor(_sceneObject: SceneObjectWithUrlSync, _options: SceneObjectUrlSyncConfigOptions);
661
+ getKeys(): string[];
662
+ getUrlState(): SceneObjectUrlValues;
663
+ updateFromUrl(values: SceneObjectUrlValues): void;
664
+ shouldCreateHistoryStep(values: SceneObjectUrlValues): boolean;
665
+ performBrowserHistoryAction(callback: () => void): void;
666
+ }
667
+
668
+ declare class SceneScopesBridge extends SceneObjectBase implements SceneObjectWithUrlSync {
669
+ static Component: typeof SceneScopesBridgeRenderer;
670
+ protected _urlSync: SceneObjectUrlSyncConfig;
671
+ protected _renderBeforeActivation: boolean;
672
+ private _contextSubject;
673
+ private _pendingScopes;
674
+ getUrlState(): SceneObjectUrlValues;
675
+ updateFromUrl(values: SceneObjectUrlValues): void;
676
+ getValue(): Scope[];
677
+ /**
678
+ * Emits values of the selected scopes array. It emits the current value and the previous value if there is a change.
679
+ * @param cb
680
+ */
681
+ subscribeToValue(cb: (newScopes: Scope[], prevScopes: Scope[]) => void): Unsubscribable;
682
+ isLoading(): boolean;
683
+ subscribeToLoading(cb: (loading: boolean) => void): Unsubscribable;
684
+ setEnabled(enabled: boolean): void;
685
+ setReadOnly(readOnly: boolean): void;
686
+ /**
687
+ * This method is used to keep the context up to date with the scopes context received from React
688
+ *
689
+ * Its rationale is:
690
+ * - When a new context is available, check if we have pending scopes passed from the URL
691
+ * - If we have pending scopes, ask the new context to load them
692
+ * - The loading should happen in a setTimeout to allow the existing context to pass its values to the URL sync handler
693
+ * - If a new context is received, propagate it as a new value in the behavior subject
694
+ * - If a new value is received, force a re-render to trigger the URL sync handler
695
+ */
696
+ updateContext(newContext: ScopesContextValue | undefined): void;
697
+ private get context();
698
+ private get contextObservable();
699
+ }
700
+ declare function SceneScopesBridgeRenderer({ model }: SceneComponentProps<SceneScopesBridge>): null;
701
+
653
702
  interface SceneRouteMatch<Params extends {
654
703
  [K in keyof Params]?: string;
655
704
  } = {}> {
@@ -662,6 +711,7 @@ interface SceneAppState extends SceneObjectState {
662
711
  pages: SceneAppPageLike[];
663
712
  name?: string;
664
713
  urlSyncOptions?: SceneUrlSyncOptions;
714
+ scopesBridge?: SceneScopesBridge;
665
715
  }
666
716
  interface SceneAppRoute {
667
717
  path: string;
@@ -706,6 +756,7 @@ interface SceneAppPageState extends SceneObjectState {
706
756
  */
707
757
  getFallbackPage?: () => SceneAppPageLike;
708
758
  layout?: PageLayoutType;
759
+ useScopes?: boolean;
709
760
  }
710
761
  interface SceneAppPageLike extends SceneObject<SceneAppPageState>, DataRequestEnricher {
711
762
  initializeScene(scene: SceneObject): void;
@@ -933,8 +984,10 @@ declare class AdHocFiltersVariable extends SceneObjectBase<AdHocFiltersVariableS
933
984
  static Component: typeof AdHocFiltersVariableRenderer;
934
985
  private _scopedVars;
935
986
  private _dataSourceSrv;
987
+ private _scopesBridge;
936
988
  protected _urlSync: AdHocFiltersVariableUrlSyncHandler;
937
989
  constructor(state: Partial<AdHocFiltersVariableState>);
990
+ private _activationHandler;
938
991
  setState(update: Partial<AdHocFiltersVariableState>): void;
939
992
  /**
940
993
  * Updates the variable's `filters` and `filterExpression` state.
@@ -1175,6 +1228,7 @@ declare class GroupByVariable extends MultiValueVariable<GroupByVariableState> {
1175
1228
  static Component: typeof GroupByVariableRenderer;
1176
1229
  isLazy: boolean;
1177
1230
  protected _urlSync: SceneObjectUrlSyncHandler;
1231
+ private _scopesBridge;
1178
1232
  validateAndUpdate(): Observable<ValidateAndUpdateResult>;
1179
1233
  private _updateValueGivenNewOptions;
1180
1234
  getValueOptions(args: VariableGetOptionsArgs): Observable<VariableValueOption[]>;
@@ -1191,7 +1245,7 @@ declare class GroupByVariable extends MultiValueVariable<GroupByVariableState> {
1191
1245
  text: string[];
1192
1246
  };
1193
1247
  }
1194
- declare function GroupByVariableRenderer({ model }: SceneComponentProps<MultiValueVariable>): React__default.JSX.Element;
1248
+ declare function GroupByVariableRenderer({ model }: SceneComponentProps<GroupByVariable>): React__default.JSX.Element;
1195
1249
 
1196
1250
  declare function isAdHocVariable(variable: SceneVariable): variable is AdHocFiltersVariable;
1197
1251
  declare function isConstantVariable(variable: SceneVariable): variable is ConstantVariable;
@@ -1370,6 +1424,10 @@ declare function getAncestor<ParentType>(sceneObject: SceneObject, ancestorType:
1370
1424
  * This will search down the full scene graph, looking for objects that match the provided descendentType type.
1371
1425
  */
1372
1426
  declare function findDescendents<T extends SceneObject>(scene: SceneObject, descendentType: SceneType<T>): T[];
1427
+ /**
1428
+ * Will walk up the scene object graph to the closest $scopesBridge scene object
1429
+ */
1430
+ declare function getScopesBridge(sceneObject: SceneObject): SceneScopesBridge | undefined;
1373
1431
 
1374
1432
  declare const sceneGraph: {
1375
1433
  getVariables: typeof getVariables;
@@ -1387,6 +1445,7 @@ declare const sceneGraph: {
1387
1445
  getAncestor: typeof getAncestor;
1388
1446
  getQueryController: typeof getQueryController;
1389
1447
  findDescendents: typeof findDescendents;
1448
+ getScopesBridge: typeof getScopesBridge;
1390
1449
  };
1391
1450
 
1392
1451
  interface ActWhenVariableChangedState extends SceneObjectState {
@@ -1564,21 +1623,6 @@ declare class SceneDataNode extends SceneObjectBase<SceneDataNodeState> implemen
1564
1623
  getResultsStream(): rxjs.Observable<SceneDataProviderResult>;
1565
1624
  }
1566
1625
 
1567
- interface SceneObjectUrlSyncConfigOptions {
1568
- keys: string[] | (() => string[]);
1569
- }
1570
- declare class SceneObjectUrlSyncConfig implements SceneObjectUrlSyncHandler {
1571
- private _sceneObject;
1572
- private _keys;
1573
- private _nextChangeShouldAddHistoryStep;
1574
- constructor(_sceneObject: SceneObjectWithUrlSync, _options: SceneObjectUrlSyncConfigOptions);
1575
- getKeys(): string[];
1576
- getUrlState(): SceneObjectUrlValues;
1577
- updateFromUrl(values: SceneObjectUrlValues): void;
1578
- shouldCreateHistoryStep(values: SceneObjectUrlValues): boolean;
1579
- performBrowserHistoryAction(callback: () => void): void;
1580
- }
1581
-
1582
1626
  declare class SceneTimeRange extends SceneObjectBase<SceneTimeRangeState> implements SceneTimeRangeLike {
1583
1627
  protected _urlSync: SceneObjectUrlSyncConfig;
1584
1628
  constructor(state?: Partial<SceneTimeRangeState>);
@@ -1653,6 +1697,8 @@ declare class SceneQueryRunner extends SceneObjectBase<QueryRunnerState> impleme
1653
1697
  private _dataLayersMerger;
1654
1698
  private _timeSub?;
1655
1699
  private _timeSubRange?;
1700
+ private _scopesSub?;
1701
+ private _scopesSubBridge?;
1656
1702
  private _containerWidth?;
1657
1703
  private _variableValueRecorder;
1658
1704
  private _results;
@@ -1691,11 +1737,12 @@ declare class SceneQueryRunner extends SceneObjectBase<QueryRunnerState> impleme
1691
1737
  private _onDeactivate;
1692
1738
  setContainerWidth(width: number): void;
1693
1739
  isDataReadyToDisplay(): boolean;
1740
+ private subscribeToScopesChanges;
1694
1741
  private subscribeToTimeRangeChanges;
1695
1742
  runQueries(): void;
1696
1743
  private getMaxDataPoints;
1697
1744
  cancelQuery(): void;
1698
- private runWithTimeRange;
1745
+ private runWithTimeRangeAndScopes;
1699
1746
  clone(withState?: Partial<QueryRunnerState>): this;
1700
1747
  private prepareRequests;
1701
1748
  private onDataReceived;
@@ -2419,6 +2466,7 @@ declare const LazyLoader: LazyLoaderType;
2419
2466
  * Responsible for top level pages routing
2420
2467
  */
2421
2468
  declare class SceneApp extends SceneObjectBase<SceneAppState> implements DataRequestEnricher {
2469
+ protected _renderBeforeActivation: boolean;
2422
2470
  enrichDataRequest(): {
2423
2471
  app: string;
2424
2472
  };
@@ -2436,7 +2484,9 @@ declare class SceneAppPage extends SceneObjectBase<SceneAppPageState> implements
2436
2484
  static Component: typeof SceneAppPageRenderer;
2437
2485
  private _sceneCache;
2438
2486
  private _drilldownCache;
2487
+ private _scopesBridge;
2439
2488
  constructor(state: SceneAppPageState);
2489
+ private _activationHandler;
2440
2490
  initializeScene(scene: EmbeddedScene): void;
2441
2491
  getScene(routeMatch: SceneRouteMatch): EmbeddedScene;
2442
2492
  getDrilldownPage(drilldown: SceneAppDrilldownView, routeMatch: SceneRouteMatch<{}>): SceneAppPageLike;
@@ -2937,4 +2987,4 @@ declare const sceneUtils: {
2937
2987
  isGroupByVariable: typeof isGroupByVariable;
2938
2988
  };
2939
2989
 
2940
- export { AdHocFilterWithLabels, AdHocFiltersVariable, CancelActivationHandler, ConstantVariable, ControlsLabel, ControlsLayout, CustomFormatterVariable, CustomTransformOperator, CustomTransformerDefinition, CustomVariable, CustomVariableValue, DataLayerFilter, DataProviderProxy, DataRequestEnricher, DataSourceVariable, DeepPartial, EmbeddedScene, EmbeddedSceneState, ExtraQueryDataProcessor, ExtraQueryDescriptor, ExtraQueryProvider, FieldConfigBuilder, FieldConfigBuilders, FieldConfigOverridesBuilder, FilterOrigin, FiltersRequestEnricher, FormatVariable, GroupByVariable, InterpolationFormatParameter, IntervalVariable, LazyLoader, LocalValueVariable, MacroVariableConstructor, MultiValueVariable, MultiValueVariableState, NestedScene, NewSceneObjectAddedEvent, PanelBuilders, PanelOptionsBuilders, QueryRunnerState, QueryVariable, RuntimeDataSource, SafeSerializableSceneObject, SceneActivationHandler, SceneApp, SceneAppDrilldownView, SceneAppPage, SceneAppPageLike, SceneAppPageState, SceneAppRoute, SceneByFrameRepeater, SceneByVariableRepeater, SceneCSSGridItem, SceneCSSGridLayout, SceneCanvasText, SceneComponent, SceneComponentProps, SceneControlsSpacer, SceneDataLayerBase, SceneDataLayerControls, SceneDataLayerProvider, SceneDataLayerProviderState, SceneDataLayerSet, SceneDataLayerSetBase, SceneDataNode, SceneDataProvider, SceneDataProviderResult, SceneDataQuery, SceneDataState, SceneDataTransformer, SceneDataTransformerState, SceneDeactivationHandler, SceneDebugger, SceneFlexItem, SceneFlexItemLike, SceneFlexItemState, SceneFlexLayout, SceneGridItem, SceneGridItemLike, SceneGridItemStateLike, SceneGridLayout, SceneGridLayoutDragStartEvent, SceneGridRow, SceneInteractionProfileEvent, SceneLayout, SceneLayoutChildOptions, SceneLayoutState, SceneObject, SceneObjectBase, SceneObjectRef, SceneObjectState, SceneObjectStateChangedEvent, SceneObjectStateChangedPayload, SceneObjectUrlSyncConfig, SceneObjectUrlSyncHandler, SceneObjectUrlValue, SceneObjectUrlValues, SceneObjectWithUrlSync, SceneQueryControllerEntry, SceneQueryControllerEntryType, SceneQueryControllerLike, SceneQueryRunner, SceneReactObject, SceneRefreshPicker, SceneRefreshPickerState, SceneRouteMatch, SceneStateChangedHandler, SceneStatelessBehavior, SceneTimePicker, SceneTimeRange, SceneTimeRangeCompare, SceneTimeRangeLike, SceneTimeRangeState, SceneTimeRangeTransformerBase, SceneTimeZoneOverride, SceneToolbarButton, SceneToolbarInput, SceneUrlSyncOptions, SceneVariable, SceneVariableDependencyConfigLike, SceneVariableSet, SceneVariableSetState, SceneVariableState, SceneVariableValueChangedEvent, SceneVariables, SplitLayout, TestVariable, TextBoxVariable, UrlSyncContextProvider, UrlSyncManager, UrlSyncManagerLike, UseStateHookOptions, UserActionEvent, ValidateAndUpdateResult, VariableCustomFormatterFn, VariableDependencyConfig, VariableGetOptionsArgs, VariableValue, VariableValueControl, VariableValueOption, VariableValueSelectWrapper, VariableValueSelectors, VariableValueSingle, VizConfig, VizConfigBuilder, VizConfigBuilders, VizPanel, VizPanelBuilder, VizPanelExploreButton, VizPanelMenu, VizPanelState, index$1 as behaviors, index as dataLayers, formatRegistry, getExploreURL, isCustomVariableValue, isDataLayer, isDataRequestEnricher, isFiltersRequestEnricher, isSceneObject, registerQueryWithController, registerRuntimeDataSource, renderSelectForVariable, sceneGraph, sceneUtils, useSceneApp, useSceneObjectState, useUrlSync };
2990
+ export { AdHocFilterWithLabels, AdHocFiltersVariable, CancelActivationHandler, ConstantVariable, ControlsLabel, ControlsLayout, CustomFormatterVariable, CustomTransformOperator, CustomTransformerDefinition, CustomVariable, CustomVariableValue, DataLayerFilter, DataProviderProxy, DataRequestEnricher, DataSourceVariable, DeepPartial, EmbeddedScene, EmbeddedSceneState, ExtraQueryDataProcessor, ExtraQueryDescriptor, ExtraQueryProvider, FieldConfigBuilder, FieldConfigBuilders, FieldConfigOverridesBuilder, FilterOrigin, FiltersRequestEnricher, FormatVariable, GroupByVariable, InterpolationFormatParameter, IntervalVariable, LazyLoader, LocalValueVariable, MacroVariableConstructor, MultiValueVariable, MultiValueVariableState, NestedScene, NewSceneObjectAddedEvent, PanelBuilders, PanelOptionsBuilders, QueryRunnerState, QueryVariable, RuntimeDataSource, SafeSerializableSceneObject, SceneActivationHandler, SceneApp, SceneAppDrilldownView, SceneAppPage, SceneAppPageLike, SceneAppPageState, SceneAppRoute, SceneByFrameRepeater, SceneByVariableRepeater, SceneCSSGridItem, SceneCSSGridLayout, SceneCanvasText, SceneComponent, SceneComponentProps, SceneControlsSpacer, SceneDataLayerBase, SceneDataLayerControls, SceneDataLayerProvider, SceneDataLayerProviderState, SceneDataLayerSet, SceneDataLayerSetBase, SceneDataNode, SceneDataProvider, SceneDataProviderResult, SceneDataQuery, SceneDataState, SceneDataTransformer, SceneDataTransformerState, SceneDeactivationHandler, SceneDebugger, SceneFlexItem, SceneFlexItemLike, SceneFlexItemState, SceneFlexLayout, SceneGridItem, SceneGridItemLike, SceneGridItemStateLike, SceneGridLayout, SceneGridLayoutDragStartEvent, SceneGridRow, SceneInteractionProfileEvent, SceneLayout, SceneLayoutChildOptions, SceneLayoutState, SceneObject, SceneObjectBase, SceneObjectRef, SceneObjectState, SceneObjectStateChangedEvent, SceneObjectStateChangedPayload, SceneObjectUrlSyncConfig, SceneObjectUrlSyncHandler, SceneObjectUrlValue, SceneObjectUrlValues, SceneObjectWithUrlSync, SceneQueryControllerEntry, SceneQueryControllerEntryType, SceneQueryControllerLike, SceneQueryRunner, SceneReactObject, SceneRefreshPicker, SceneRefreshPickerState, SceneRouteMatch, SceneScopesBridge, SceneStateChangedHandler, SceneStatelessBehavior, SceneTimePicker, SceneTimeRange, SceneTimeRangeCompare, SceneTimeRangeLike, SceneTimeRangeState, SceneTimeRangeTransformerBase, SceneTimeZoneOverride, SceneToolbarButton, SceneToolbarInput, SceneUrlSyncOptions, SceneVariable, SceneVariableDependencyConfigLike, SceneVariableSet, SceneVariableSetState, SceneVariableState, SceneVariableValueChangedEvent, SceneVariables, SplitLayout, TestVariable, TextBoxVariable, UrlSyncContextProvider, UrlSyncManager, UrlSyncManagerLike, UseStateHookOptions, UserActionEvent, ValidateAndUpdateResult, VariableCustomFormatterFn, VariableDependencyConfig, VariableGetOptionsArgs, VariableValue, VariableValueControl, VariableValueOption, VariableValueSelectWrapper, VariableValueSelectors, VariableValueSingle, VizConfig, VizConfigBuilder, VizConfigBuilders, VizPanel, VizPanelBuilder, VizPanelExploreButton, VizPanelMenu, VizPanelState, index$1 as behaviors, index as dataLayers, formatRegistry, getExploreURL, isCustomVariableValue, isDataLayer, isDataRequestEnricher, isFiltersRequestEnricher, isSceneObject, registerQueryWithController, registerRuntimeDataSource, renderSelectForVariable, sceneGraph, sceneUtils, useSceneApp, useSceneObjectState, useUrlSync };
package/dist/index.js CHANGED
@@ -3270,7 +3270,7 @@ class GroupByVariable extends MultiValueVariable {
3270
3270
  this.isLazy = true;
3271
3271
  this._urlSync = new GroupByVariableUrlSyncHandler(this);
3272
3272
  this._getKeys = async (ds) => {
3273
- var _a, _b, _c;
3273
+ var _a, _b, _c, _d;
3274
3274
  const override = await ((_b = (_a = this.state).getTagKeysProvider) == null ? void 0 : _b.call(_a, this, null));
3275
3275
  if (override && override.replace) {
3276
3276
  return override.values;
@@ -3287,7 +3287,8 @@ class GroupByVariable extends MultiValueVariable {
3287
3287
  const response = await ds.getTagKeys(__spreadValues$F({
3288
3288
  filters: otherFilters,
3289
3289
  queries,
3290
- timeRange
3290
+ timeRange,
3291
+ scopes: (_d = this._scopesBridge) == null ? void 0 : _d.getValue()
3291
3292
  }, getEnrichedFiltersRequest(this)));
3292
3293
  if (responseHasError(response)) {
3293
3294
  this.setState({ error: response.error.message });
@@ -5422,9 +5423,13 @@ class AdHocFiltersVariable extends SceneObjectBase {
5422
5423
  this._scopedVars = { __sceneObject: wrapInSafeSerializableSceneObject(this) };
5423
5424
  this._dataSourceSrv = runtime.getDataSourceSrv();
5424
5425
  this._urlSync = new AdHocFiltersVariableUrlSyncHandler(this);
5426
+ this._activationHandler = () => {
5427
+ this._scopesBridge = sceneGraph.getScopesBridge(this);
5428
+ };
5425
5429
  if (this.state.applyMode === "auto") {
5426
5430
  patchGetAdhocFilters(this);
5427
5431
  }
5432
+ this.addActivationHandler(this._activationHandler);
5428
5433
  }
5429
5434
  setState(update) {
5430
5435
  let filterExpressionChanged = false;
@@ -5508,7 +5513,7 @@ class AdHocFiltersVariable extends SceneObjectBase {
5508
5513
  }
5509
5514
  }
5510
5515
  async _getKeys(currentKey) {
5511
- var _a, _b, _c;
5516
+ var _a, _b, _c, _d;
5512
5517
  const override = await ((_b = (_a = this.state).getTagKeysProvider) == null ? void 0 : _b.call(_a, this, currentKey));
5513
5518
  if (override && override.replace) {
5514
5519
  return dataFromResponse(override.values).map(toSelectableValue);
@@ -5526,7 +5531,8 @@ class AdHocFiltersVariable extends SceneObjectBase {
5526
5531
  const response = await ds.getTagKeys(__spreadValues$z({
5527
5532
  filters: otherFilters,
5528
5533
  queries,
5529
- timeRange
5534
+ timeRange,
5535
+ scopes: (_d = this._scopesBridge) == null ? void 0 : _d.getValue()
5530
5536
  }, getEnrichedFiltersRequest(this)));
5531
5537
  if (responseHasError(response)) {
5532
5538
  this.setState({ error: response.error.message });
@@ -5542,7 +5548,7 @@ class AdHocFiltersVariable extends SceneObjectBase {
5542
5548
  return keys.map(toSelectableValue);
5543
5549
  }
5544
5550
  async _getValuesFor(filter) {
5545
- var _a, _b, _c;
5551
+ var _a, _b, _c, _d;
5546
5552
  const override = await ((_b = (_a = this.state).getTagValuesProvider) == null ? void 0 : _b.call(_a, this, filter));
5547
5553
  if (override && override.replace) {
5548
5554
  return dataFromResponse(override.values).map(toSelectableValue);
@@ -5558,7 +5564,8 @@ class AdHocFiltersVariable extends SceneObjectBase {
5558
5564
  key: filter.key,
5559
5565
  filters: otherFilters,
5560
5566
  timeRange,
5561
- queries
5567
+ queries,
5568
+ scopes: (_d = this._scopesBridge) == null ? void 0 : _d.getValue()
5562
5569
  }, getEnrichedFiltersRequest(this)));
5563
5570
  if (responseHasError(response)) {
5564
5571
  this.setState({ error: response.error.message });
@@ -5746,6 +5753,7 @@ class SceneQueryRunner extends SceneObjectBase {
5746
5753
  _onActivate() {
5747
5754
  if (this.isQueryModeAuto()) {
5748
5755
  const timeRange = sceneGraph.getTimeRange(this);
5756
+ const scopesBridge = sceneGraph.getScopesBridge(this);
5749
5757
  const providers = this.getClosestExtraQueryProviders();
5750
5758
  for (const provider of providers) {
5751
5759
  this._subs.add(
@@ -5756,6 +5764,7 @@ class SceneQueryRunner extends SceneObjectBase {
5756
5764
  })
5757
5765
  );
5758
5766
  }
5767
+ this.subscribeToScopesChanges(scopesBridge);
5759
5768
  this.subscribeToTimeRangeChanges(timeRange);
5760
5769
  if (this.shouldRunQueriesOnActivate()) {
5761
5770
  this.runQueries();
@@ -5901,6 +5910,21 @@ class SceneQueryRunner extends SceneObjectBase {
5901
5910
  isDataReadyToDisplay() {
5902
5911
  return Boolean(this.state._hasFetchedData);
5903
5912
  }
5913
+ subscribeToScopesChanges(scopesBridge) {
5914
+ if (!scopesBridge) {
5915
+ return;
5916
+ }
5917
+ if (this._scopesSubBridge === scopesBridge) {
5918
+ return;
5919
+ }
5920
+ if (this._scopesSub) {
5921
+ this._scopesSub.unsubscribe();
5922
+ }
5923
+ this._scopesSubBridge = scopesBridge;
5924
+ this._scopesSub = scopesBridge.subscribeToValue(() => {
5925
+ this.runWithTimeRangeAndScopes(sceneGraph.getTimeRange(this), scopesBridge);
5926
+ });
5927
+ }
5904
5928
  subscribeToTimeRangeChanges(timeRange) {
5905
5929
  if (this._timeSubRange === timeRange) {
5906
5930
  return;
@@ -5910,15 +5934,17 @@ class SceneQueryRunner extends SceneObjectBase {
5910
5934
  }
5911
5935
  this._timeSubRange = timeRange;
5912
5936
  this._timeSub = timeRange.subscribeToState(() => {
5913
- this.runWithTimeRange(timeRange);
5937
+ this.runWithTimeRangeAndScopes(timeRange, sceneGraph.getScopesBridge(this));
5914
5938
  });
5915
5939
  }
5916
5940
  runQueries() {
5917
5941
  const timeRange = sceneGraph.getTimeRange(this);
5942
+ const scopesBridge = sceneGraph.getScopesBridge(this);
5918
5943
  if (this.isQueryModeAuto()) {
5919
5944
  this.subscribeToTimeRangeChanges(timeRange);
5945
+ this.subscribeToScopesChanges(scopesBridge);
5920
5946
  }
5921
- this.runWithTimeRange(timeRange);
5947
+ this.runWithTimeRangeAndScopes(timeRange, scopesBridge);
5922
5948
  }
5923
5949
  getMaxDataPoints() {
5924
5950
  var _a;
@@ -5938,8 +5964,8 @@ class SceneQueryRunner extends SceneObjectBase {
5938
5964
  data: __spreadProps$m(__spreadValues$y({}, this.state.data), { state: schema.LoadingState.Done })
5939
5965
  });
5940
5966
  }
5941
- async runWithTimeRange(timeRange) {
5942
- var _a, _b, _c;
5967
+ async runWithTimeRangeAndScopes(timeRange, scopesBridge) {
5968
+ var _a, _b, _c, _d;
5943
5969
  if (!this.state.maxDataPoints && this.state.maxDataPointsFromWidth && !this._containerWidth) {
5944
5970
  return;
5945
5971
  }
@@ -5952,17 +5978,22 @@ class SceneQueryRunner extends SceneObjectBase {
5952
5978
  this.setState({ data: __spreadProps$m(__spreadValues$y({}, (_b = this.state.data) != null ? _b : emptyPanelData), { state: schema.LoadingState.Loading }) });
5953
5979
  return;
5954
5980
  }
5981
+ if (scopesBridge == null ? void 0 : scopesBridge.isLoading()) {
5982
+ writeSceneLog("SceneQueryRunner", "Scopes are in loading state, skipping query execution");
5983
+ this.setState({ data: __spreadProps$m(__spreadValues$y({}, (_c = this.state.data) != null ? _c : emptyPanelData), { state: schema.LoadingState.Loading }) });
5984
+ return;
5985
+ }
5955
5986
  const { queries } = this.state;
5956
5987
  if (!(queries == null ? void 0 : queries.length)) {
5957
5988
  this._setNoDataState();
5958
5989
  return;
5959
5990
  }
5960
5991
  try {
5961
- const datasource = (_c = this.state.datasource) != null ? _c : findFirstDatasource(queries);
5992
+ const datasource = (_d = this.state.datasource) != null ? _d : findFirstDatasource(queries);
5962
5993
  const ds = await getDataSource(datasource, this._scopedVars);
5963
5994
  this.findAndSubscribeToAdHocFilters(ds.uid);
5964
5995
  const runRequest = runtime.getRunRequest();
5965
- const { primary, secondaries, processors } = this.prepareRequests(timeRange, ds);
5996
+ const { primary, secondaries, processors } = this.prepareRequests(timeRange, ds, scopesBridge);
5966
5997
  writeSceneLog("SceneQueryRunner", "Starting runRequest", this.state.key);
5967
5998
  let stream = runRequest(ds, primary);
5968
5999
  if (secondaries.length > 0) {
@@ -6001,7 +6032,7 @@ class SceneQueryRunner extends SceneObjectBase {
6001
6032
  clone["_results"].next({ origin: this, data: (_a = this.state.data) != null ? _a : emptyPanelData });
6002
6033
  return clone;
6003
6034
  }
6004
- prepareRequests(timeRange, ds) {
6035
+ prepareRequests(timeRange, ds, scopesBridge) {
6005
6036
  var _a, _b;
6006
6037
  const { minInterval, queries } = this.state;
6007
6038
  let request = __spreadValues$y({
@@ -6021,7 +6052,8 @@ class SceneQueryRunner extends SceneObjectBase {
6021
6052
  to: timeRange.state.to
6022
6053
  },
6023
6054
  cacheTimeout: this.state.cacheTimeout,
6024
- queryCachingTTL: this.state.queryCachingTTL
6055
+ queryCachingTTL: this.state.queryCachingTTL,
6056
+ scopes: scopesBridge == null ? void 0 : scopesBridge.getValue()
6025
6057
  }, getEnrichedDataRequest(this));
6026
6058
  if (this._adhocFiltersVar) {
6027
6059
  request.filters = [];
@@ -6614,7 +6646,7 @@ class DatasourceQueryRunner {
6614
6646
  if (!hasDataSourceVariableSupport(this.datasource)) {
6615
6647
  return getEmptyMetricFindValueObservable();
6616
6648
  }
6617
- return this._runRequest(this.datasource, request, this.datasource.query);
6649
+ return this._runRequest(this.datasource, request);
6618
6650
  }
6619
6651
  }
6620
6652
  function getEmptyMetricFindValueObservable() {
@@ -6973,6 +7005,105 @@ function containsSearchFilter(query) {
6973
7005
  return str.indexOf(SEARCH_FILTER_VARIABLE) > -1;
6974
7006
  }
6975
7007
 
7008
+ class SceneScopesBridge extends SceneObjectBase {
7009
+ constructor() {
7010
+ super(...arguments);
7011
+ this._urlSync = new SceneObjectUrlSyncConfig(this, { keys: ["scopes"] });
7012
+ this._renderBeforeActivation = true;
7013
+ this._contextSubject = new rxjs.BehaviorSubject(void 0);
7014
+ this._pendingScopes = null;
7015
+ }
7016
+ getUrlState() {
7017
+ var _a, _b, _c;
7018
+ return {
7019
+ scopes: (_c = this._pendingScopes) != null ? _c : ((_b = (_a = this.context) == null ? void 0 : _a.state.value) != null ? _b : []).map((scope) => scope.metadata.name)
7020
+ };
7021
+ }
7022
+ updateFromUrl(values) {
7023
+ var _a, _b;
7024
+ let scopes = (_a = values["scopes"]) != null ? _a : [];
7025
+ scopes = (Array.isArray(scopes) ? scopes : [scopes]).map(String);
7026
+ if (!this.context) {
7027
+ this._pendingScopes = scopes;
7028
+ return;
7029
+ }
7030
+ (_b = this.context) == null ? void 0 : _b.changeScopes(scopes);
7031
+ }
7032
+ getValue() {
7033
+ var _a, _b;
7034
+ return (_b = (_a = this.context) == null ? void 0 : _a.state.value) != null ? _b : [];
7035
+ }
7036
+ subscribeToValue(cb) {
7037
+ return this.contextObservable.pipe(
7038
+ rxjs.map((context) => {
7039
+ var _a;
7040
+ return (_a = context == null ? void 0 : context.state.value) != null ? _a : [];
7041
+ }),
7042
+ rxjs.pairwise(),
7043
+ rxjs.filter(([prevScopes, newScopes]) => !lodash.isEqual(prevScopes, newScopes))
7044
+ ).subscribe(([prevScopes, newScopes]) => {
7045
+ cb(newScopes, prevScopes);
7046
+ });
7047
+ }
7048
+ isLoading() {
7049
+ var _a, _b;
7050
+ return (_b = (_a = this.context) == null ? void 0 : _a.state.loading) != null ? _b : false;
7051
+ }
7052
+ subscribeToLoading(cb) {
7053
+ return this.contextObservable.pipe(
7054
+ rxjs.filter((context) => !!context),
7055
+ rxjs.pairwise(),
7056
+ rxjs.map(
7057
+ ([prevContext, newContext]) => {
7058
+ var _a, _b;
7059
+ return [(_a = prevContext == null ? void 0 : prevContext.state.loading) != null ? _a : false, (_b = newContext == null ? void 0 : newContext.state.loading) != null ? _b : false];
7060
+ }
7061
+ ),
7062
+ rxjs.filter(([prevLoading, newLoading]) => prevLoading !== newLoading)
7063
+ ).subscribe(([_prevLoading, newLoading]) => {
7064
+ cb(newLoading);
7065
+ });
7066
+ }
7067
+ setEnabled(enabled) {
7068
+ var _a;
7069
+ (_a = this.context) == null ? void 0 : _a.setEnabled(enabled);
7070
+ }
7071
+ setReadOnly(readOnly) {
7072
+ var _a;
7073
+ (_a = this.context) == null ? void 0 : _a.setReadOnly(readOnly);
7074
+ }
7075
+ updateContext(newContext) {
7076
+ var _a, _b;
7077
+ if (this._pendingScopes && newContext) {
7078
+ setTimeout(() => {
7079
+ newContext == null ? void 0 : newContext.changeScopes(this._pendingScopes);
7080
+ this._pendingScopes = null;
7081
+ });
7082
+ }
7083
+ if (this.context !== newContext || ((_a = this.context) == null ? void 0 : _a.state) !== (newContext == null ? void 0 : newContext.state)) {
7084
+ const shouldUpdate = ((_b = this.context) == null ? void 0 : _b.state.value) !== (newContext == null ? void 0 : newContext.state.value);
7085
+ this._contextSubject.next(newContext);
7086
+ if (shouldUpdate) {
7087
+ this.forceRender();
7088
+ }
7089
+ }
7090
+ }
7091
+ get context() {
7092
+ return this._contextSubject.getValue();
7093
+ }
7094
+ get contextObservable() {
7095
+ return this._contextSubject.asObservable();
7096
+ }
7097
+ }
7098
+ SceneScopesBridge.Component = SceneScopesBridgeRenderer;
7099
+ function SceneScopesBridgeRenderer({ model }) {
7100
+ const context = runtime.useScopes();
7101
+ React.useEffect(() => {
7102
+ model.updateContext(context);
7103
+ }, [context, model]);
7104
+ return null;
7105
+ }
7106
+
6976
7107
  function getVariables(sceneObject) {
6977
7108
  var _a;
6978
7109
  return (_a = getClosest(sceneObject, (s) => s.state.$variables)) != null ? _a : EmptyVariableSet;
@@ -7116,6 +7247,10 @@ function findDescendents(scene, descendentType) {
7116
7247
  const targetScenes = findAllObjects(scene, isDescendentType);
7117
7248
  return targetScenes.filter(isDescendentType);
7118
7249
  }
7250
+ function getScopesBridge(sceneObject) {
7251
+ var _a;
7252
+ return (_a = findObject(sceneObject, (s) => s instanceof SceneScopesBridge)) != null ? _a : void 0;
7253
+ }
7119
7254
 
7120
7255
  const sceneGraph = {
7121
7256
  getVariables,
@@ -7132,7 +7267,8 @@ const sceneGraph = {
7132
7267
  findAllObjects,
7133
7268
  getAncestor,
7134
7269
  getQueryController,
7135
- findDescendents
7270
+ findDescendents,
7271
+ getScopesBridge
7136
7272
  };
7137
7273
 
7138
7274
  class UniqueUrlKeyMapper {
@@ -12886,6 +13022,10 @@ class SplitLayout extends SceneObjectBase {
12886
13022
  SplitLayout.Component = SplitLayoutRenderer;
12887
13023
 
12888
13024
  class SceneApp extends SceneObjectBase {
13025
+ constructor() {
13026
+ super(...arguments);
13027
+ this._renderBeforeActivation = true;
13028
+ }
12889
13029
  enrichDataRequest() {
12890
13030
  return {
12891
13031
  app: this.state.name || "app"
@@ -12893,8 +13033,10 @@ class SceneApp extends SceneObjectBase {
12893
13033
  }
12894
13034
  }
12895
13035
  SceneApp.Component = ({ model }) => {
12896
- const { pages } = model.useState();
12897
- return /* @__PURE__ */ React__default["default"].createElement(SceneAppContext.Provider, {
13036
+ const { pages, scopesBridge } = model.useState();
13037
+ return /* @__PURE__ */ React__default["default"].createElement(React__default["default"].Fragment, null, scopesBridge && /* @__PURE__ */ React__default["default"].createElement(scopesBridge.Component, {
13038
+ model: scopesBridge
13039
+ }), /* @__PURE__ */ React__default["default"].createElement(SceneAppContext.Provider, {
12898
13040
  value: model
12899
13041
  }, /* @__PURE__ */ React__default["default"].createElement(reactRouterDom.Routes, null, pages.map((page) => /* @__PURE__ */ React__default["default"].createElement(reactRouterDom.Route, {
12900
13042
  key: page.state.url,
@@ -12902,7 +13044,7 @@ SceneApp.Component = ({ model }) => {
12902
13044
  element: /* @__PURE__ */ React__default["default"].createElement(page.Component, {
12903
13045
  model: page
12904
13046
  })
12905
- }))));
13047
+ })))));
12906
13048
  };
12907
13049
  const SceneAppContext = React.createContext(null);
12908
13050
  const sceneAppCache = /* @__PURE__ */ new Map();
@@ -13257,6 +13399,21 @@ class SceneAppPage extends SceneObjectBase {
13257
13399
  super(state);
13258
13400
  this._sceneCache = /* @__PURE__ */ new Map();
13259
13401
  this._drilldownCache = /* @__PURE__ */ new Map();
13402
+ this._activationHandler = () => {
13403
+ if (!this.state.useScopes) {
13404
+ return;
13405
+ }
13406
+ this._scopesBridge = sceneGraph.getScopesBridge(this);
13407
+ if (!this._scopesBridge) {
13408
+ throw new Error("Use of scopes is enabled but no scopes bridge found");
13409
+ }
13410
+ this._scopesBridge.setEnabled(true);
13411
+ return () => {
13412
+ var _a;
13413
+ (_a = this._scopesBridge) == null ? void 0 : _a.setEnabled(false);
13414
+ };
13415
+ };
13416
+ this.addActivationHandler(this._activationHandler);
13260
13417
  }
13261
13418
  initializeScene(scene) {
13262
13419
  this.setState({ initializedScene: scene });
@@ -14256,6 +14413,7 @@ exports.SceneObjectUrlSyncConfig = SceneObjectUrlSyncConfig;
14256
14413
  exports.SceneQueryRunner = SceneQueryRunner;
14257
14414
  exports.SceneReactObject = SceneReactObject;
14258
14415
  exports.SceneRefreshPicker = SceneRefreshPicker;
14416
+ exports.SceneScopesBridge = SceneScopesBridge;
14259
14417
  exports.SceneTimePicker = SceneTimePicker;
14260
14418
  exports.SceneTimeRange = SceneTimeRange;
14261
14419
  exports.SceneTimeRangeCompare = SceneTimeRangeCompare;