@grafana/scenes 6.1.2--canary.967.13520771706.0 → 6.1.2--canary.990.13540617999.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';
@@ -645,6 +645,41 @@ declare class EmbeddedScene extends SceneObjectBase<EmbeddedSceneState> {
645
645
  }
646
646
  declare function EmbeddedSceneRenderer({ model }: SceneComponentProps<EmbeddedScene>): React__default.JSX.Element;
647
647
 
648
+ interface SceneObjectUrlSyncConfigOptions {
649
+ keys: string[] | (() => string[]);
650
+ }
651
+ declare class SceneObjectUrlSyncConfig implements SceneObjectUrlSyncHandler {
652
+ private _sceneObject;
653
+ private _keys;
654
+ private _nextChangeShouldAddHistoryStep;
655
+ constructor(_sceneObject: SceneObjectWithUrlSync, _options: SceneObjectUrlSyncConfigOptions);
656
+ getKeys(): string[];
657
+ getUrlState(): SceneObjectUrlValues;
658
+ updateFromUrl(values: SceneObjectUrlValues): void;
659
+ shouldCreateHistoryStep(values: SceneObjectUrlValues): boolean;
660
+ performBrowserHistoryAction(callback: () => void): void;
661
+ }
662
+
663
+ declare class SceneScopesBridge extends SceneObjectBase implements SceneObjectWithUrlSync {
664
+ static Component: typeof SceneScopesBridgeRenderer;
665
+ protected _urlSync: SceneObjectUrlSyncConfig;
666
+ protected _renderBeforeActivation: boolean;
667
+ private _contextSubject;
668
+ private _pendingScopes;
669
+ getUrlState(): SceneObjectUrlValues;
670
+ updateFromUrl(values: SceneObjectUrlValues): void;
671
+ getValue(): Scope[];
672
+ subscribeToValue(cb: (newScopes: Scope[], prevScopes: Scope[]) => void): Unsubscribable;
673
+ isLoading(): boolean;
674
+ subscribeToLoading(cb: (loading: boolean) => void): Unsubscribable;
675
+ setEnabled(enabled: boolean): void;
676
+ setReadOnly(readOnly: boolean): void;
677
+ updateContext(newContext: ScopesContextValue | undefined): void;
678
+ private get context();
679
+ private get contextObservable();
680
+ }
681
+ declare function SceneScopesBridgeRenderer({ model }: SceneComponentProps<SceneScopesBridge>): null;
682
+
648
683
  interface SceneRouteMatch<Params extends {
649
684
  [K in keyof Params]?: string;
650
685
  } = {}> {
@@ -657,6 +692,7 @@ interface SceneAppState extends SceneObjectState {
657
692
  pages: SceneAppPageLike[];
658
693
  name?: string;
659
694
  urlSyncOptions?: SceneUrlSyncOptions;
695
+ scopesBridge?: SceneScopesBridge;
660
696
  }
661
697
  interface SceneAppRoute {
662
698
  path: string;
@@ -701,6 +737,7 @@ interface SceneAppPageState extends SceneObjectState {
701
737
  */
702
738
  getFallbackPage?: () => SceneAppPageLike;
703
739
  layout?: PageLayoutType;
740
+ useScopes?: boolean;
704
741
  }
705
742
  interface SceneAppPageLike extends SceneObject<SceneAppPageState>, DataRequestEnricher {
706
743
  initializeScene(scene: SceneObject): void;
@@ -923,8 +960,10 @@ declare class AdHocFiltersVariable extends SceneObjectBase<AdHocFiltersVariableS
923
960
  static Component: typeof AdHocFiltersVariableRenderer;
924
961
  private _scopedVars;
925
962
  private _dataSourceSrv;
963
+ private _scopesBridge;
926
964
  protected _urlSync: AdHocFiltersVariableUrlSyncHandler;
927
965
  constructor(state: Partial<AdHocFiltersVariableState>);
966
+ private _activationHandler;
928
967
  setState(update: Partial<AdHocFiltersVariableState>): void;
929
968
  /**
930
969
  * Updates the variable's `filters` and `filterExpression` state.
@@ -1165,6 +1204,7 @@ declare class GroupByVariable extends MultiValueVariable<GroupByVariableState> {
1165
1204
  static Component: typeof GroupByVariableRenderer;
1166
1205
  isLazy: boolean;
1167
1206
  protected _urlSync: SceneObjectUrlSyncHandler;
1207
+ private _scopesBridge;
1168
1208
  validateAndUpdate(): Observable<ValidateAndUpdateResult>;
1169
1209
  private _updateValueGivenNewOptions;
1170
1210
  getValueOptions(args: VariableGetOptionsArgs): Observable<VariableValueOption[]>;
@@ -1181,7 +1221,7 @@ declare class GroupByVariable extends MultiValueVariable<GroupByVariableState> {
1181
1221
  text: string[];
1182
1222
  };
1183
1223
  }
1184
- declare function GroupByVariableRenderer({ model }: SceneComponentProps<MultiValueVariable>): React__default.JSX.Element;
1224
+ declare function GroupByVariableRenderer({ model }: SceneComponentProps<GroupByVariable>): React__default.JSX.Element;
1185
1225
 
1186
1226
  declare function isAdHocVariable(variable: SceneVariable): variable is AdHocFiltersVariable;
1187
1227
  declare function isConstantVariable(variable: SceneVariable): variable is ConstantVariable;
@@ -1360,6 +1400,10 @@ declare function getAncestor<ParentType>(sceneObject: SceneObject, ancestorType:
1360
1400
  * This will search down the full scene graph, looking for objects that match the provided descendentType type.
1361
1401
  */
1362
1402
  declare function findDescendents<T extends SceneObject>(scene: SceneObject, descendentType: SceneType<T>): T[];
1403
+ /**
1404
+ * Will walk up the scene object graph to the closest $scopesBridge scene object
1405
+ */
1406
+ declare function getScopesBridge(sceneObject: SceneObject): SceneScopesBridge | undefined;
1363
1407
 
1364
1408
  declare const sceneGraph: {
1365
1409
  getVariables: typeof getVariables;
@@ -1377,6 +1421,7 @@ declare const sceneGraph: {
1377
1421
  getAncestor: typeof getAncestor;
1378
1422
  getQueryController: typeof getQueryController;
1379
1423
  findDescendents: typeof findDescendents;
1424
+ getScopesBridge: typeof getScopesBridge;
1380
1425
  };
1381
1426
 
1382
1427
  interface ActWhenVariableChangedState extends SceneObjectState {
@@ -1554,21 +1599,6 @@ declare class SceneDataNode extends SceneObjectBase<SceneDataNodeState> implemen
1554
1599
  getResultsStream(): rxjs.Observable<SceneDataProviderResult>;
1555
1600
  }
1556
1601
 
1557
- interface SceneObjectUrlSyncConfigOptions {
1558
- keys: string[] | (() => string[]);
1559
- }
1560
- declare class SceneObjectUrlSyncConfig implements SceneObjectUrlSyncHandler {
1561
- private _sceneObject;
1562
- private _keys;
1563
- private _nextChangeShouldAddHistoryStep;
1564
- constructor(_sceneObject: SceneObjectWithUrlSync, _options: SceneObjectUrlSyncConfigOptions);
1565
- getKeys(): string[];
1566
- getUrlState(): SceneObjectUrlValues;
1567
- updateFromUrl(values: SceneObjectUrlValues): void;
1568
- shouldCreateHistoryStep(values: SceneObjectUrlValues): boolean;
1569
- performBrowserHistoryAction(callback: () => void): void;
1570
- }
1571
-
1572
1602
  declare class SceneTimeRange extends SceneObjectBase<SceneTimeRangeState> implements SceneTimeRangeLike {
1573
1603
  protected _urlSync: SceneObjectUrlSyncConfig;
1574
1604
  constructor(state?: Partial<SceneTimeRangeState>);
@@ -1643,6 +1673,8 @@ declare class SceneQueryRunner extends SceneObjectBase<QueryRunnerState> impleme
1643
1673
  private _dataLayersMerger;
1644
1674
  private _timeSub?;
1645
1675
  private _timeSubRange?;
1676
+ private _scopesSub?;
1677
+ private _scopesSubBridge?;
1646
1678
  private _containerWidth?;
1647
1679
  private _variableValueRecorder;
1648
1680
  private _results;
@@ -1681,11 +1713,12 @@ declare class SceneQueryRunner extends SceneObjectBase<QueryRunnerState> impleme
1681
1713
  private _onDeactivate;
1682
1714
  setContainerWidth(width: number): void;
1683
1715
  isDataReadyToDisplay(): boolean;
1716
+ private subscribeToScopesChanges;
1684
1717
  private subscribeToTimeRangeChanges;
1685
1718
  runQueries(): void;
1686
1719
  private getMaxDataPoints;
1687
1720
  cancelQuery(): void;
1688
- private runWithTimeRange;
1721
+ private runWithTimeRangeAndScopes;
1689
1722
  clone(withState?: Partial<QueryRunnerState>): this;
1690
1723
  private prepareRequests;
1691
1724
  private onDataReceived;
@@ -2409,6 +2442,7 @@ declare const LazyLoader: LazyLoaderType;
2409
2442
  * Responsible for top level pages routing
2410
2443
  */
2411
2444
  declare class SceneApp extends SceneObjectBase<SceneAppState> implements DataRequestEnricher {
2445
+ protected _renderBeforeActivation: boolean;
2412
2446
  enrichDataRequest(): {
2413
2447
  app: string;
2414
2448
  };
@@ -2426,7 +2460,9 @@ declare class SceneAppPage extends SceneObjectBase<SceneAppPageState> implements
2426
2460
  static Component: typeof SceneAppPageRenderer;
2427
2461
  private _sceneCache;
2428
2462
  private _drilldownCache;
2463
+ private _scopesBridge;
2429
2464
  constructor(state: SceneAppPageState);
2465
+ private _activationHandler;
2430
2466
  initializeScene(scene: EmbeddedScene): void;
2431
2467
  getScene(routeMatch: SceneRouteMatch): EmbeddedScene;
2432
2468
  getDrilldownPage(drilldown: SceneAppDrilldownView, routeMatch: SceneRouteMatch<{}>): SceneAppPageLike;
@@ -2927,4 +2963,4 @@ declare const sceneUtils: {
2927
2963
  isGroupByVariable: typeof isGroupByVariable;
2928
2964
  };
2929
2965
 
2930
- 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, 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 };
2966
+ 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, 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
@@ -537,28 +537,23 @@ function cloneSceneObjectState(sceneState, withState) {
537
537
  continue;
538
538
  }
539
539
  const propValue = clonedState[key];
540
+ if (propValue instanceof SceneObjectBase) {
541
+ clonedState[key] = propValue.clone();
542
+ }
540
543
  if (propValue instanceof SceneObjectRef) {
541
544
  console.warn("Cloning object with SceneObjectRef");
542
545
  continue;
543
546
  }
544
- if (propValue instanceof SceneObjectBase) {
545
- clonedState[key] = propValue.clone();
546
- } else if (Array.isArray(propValue)) {
547
+ if (Array.isArray(propValue)) {
547
548
  const newArray = [];
548
549
  for (const child of propValue) {
549
550
  if (child instanceof SceneObjectBase) {
550
551
  newArray.push(child.clone());
551
- } else if (typeof child === "object") {
552
- newArray.push(lodash.cloneDeep(child));
553
552
  } else {
554
553
  newArray.push(child);
555
554
  }
556
555
  }
557
556
  clonedState[key] = newArray;
558
- } else if (typeof propValue === "object") {
559
- clonedState[key] = lodash.cloneDeep(propValue);
560
- } else {
561
- clonedState[key] = propValue;
562
557
  }
563
558
  }
564
559
  return clonedState;
@@ -3233,7 +3228,7 @@ class GroupByVariable extends MultiValueVariable {
3233
3228
  this.isLazy = true;
3234
3229
  this._urlSync = new GroupByVariableUrlSyncHandler(this);
3235
3230
  this._getKeys = async (ds) => {
3236
- var _a, _b, _c;
3231
+ var _a, _b, _c, _d;
3237
3232
  const override = await ((_b = (_a = this.state).getTagKeysProvider) == null ? void 0 : _b.call(_a, this, null));
3238
3233
  if (override && override.replace) {
3239
3234
  return override.values;
@@ -3250,7 +3245,8 @@ class GroupByVariable extends MultiValueVariable {
3250
3245
  const response = await ds.getTagKeys(__spreadValues$F({
3251
3246
  filters: otherFilters,
3252
3247
  queries,
3253
- timeRange
3248
+ timeRange,
3249
+ scopes: (_d = this._scopesBridge) == null ? void 0 : _d.getValue()
3254
3250
  }, getEnrichedFiltersRequest(this)));
3255
3251
  if (responseHasError(response)) {
3256
3252
  this.setState({ error: response.error.message });
@@ -5388,9 +5384,13 @@ class AdHocFiltersVariable extends SceneObjectBase {
5388
5384
  this._scopedVars = { __sceneObject: wrapInSafeSerializableSceneObject(this) };
5389
5385
  this._dataSourceSrv = runtime.getDataSourceSrv();
5390
5386
  this._urlSync = new AdHocFiltersVariableUrlSyncHandler(this);
5387
+ this._activationHandler = () => {
5388
+ this._scopesBridge = sceneGraph.getScopesBridge(this);
5389
+ };
5391
5390
  if (this.state.applyMode === "auto") {
5392
5391
  patchGetAdhocFilters(this);
5393
5392
  }
5393
+ this.addActivationHandler(this._activationHandler);
5394
5394
  }
5395
5395
  setState(update) {
5396
5396
  let filterExpressionChanged = false;
@@ -5474,7 +5474,7 @@ class AdHocFiltersVariable extends SceneObjectBase {
5474
5474
  }
5475
5475
  }
5476
5476
  async _getKeys(currentKey) {
5477
- var _a, _b, _c;
5477
+ var _a, _b, _c, _d;
5478
5478
  const override = await ((_b = (_a = this.state).getTagKeysProvider) == null ? void 0 : _b.call(_a, this, currentKey));
5479
5479
  if (override && override.replace) {
5480
5480
  return dataFromResponse(override.values).map(toSelectableValue);
@@ -5492,7 +5492,8 @@ class AdHocFiltersVariable extends SceneObjectBase {
5492
5492
  const response = await ds.getTagKeys(__spreadValues$z({
5493
5493
  filters: otherFilters,
5494
5494
  queries,
5495
- timeRange
5495
+ timeRange,
5496
+ scopes: (_d = this._scopesBridge) == null ? void 0 : _d.getValue()
5496
5497
  }, getEnrichedFiltersRequest(this)));
5497
5498
  if (responseHasError(response)) {
5498
5499
  this.setState({ error: response.error.message });
@@ -5508,7 +5509,7 @@ class AdHocFiltersVariable extends SceneObjectBase {
5508
5509
  return keys.map(toSelectableValue);
5509
5510
  }
5510
5511
  async _getValuesFor(filter) {
5511
- var _a, _b, _c;
5512
+ var _a, _b, _c, _d;
5512
5513
  const override = await ((_b = (_a = this.state).getTagValuesProvider) == null ? void 0 : _b.call(_a, this, filter));
5513
5514
  if (override && override.replace) {
5514
5515
  return dataFromResponse(override.values).map(toSelectableValue);
@@ -5524,7 +5525,8 @@ class AdHocFiltersVariable extends SceneObjectBase {
5524
5525
  key: filter.key,
5525
5526
  filters: otherFilters,
5526
5527
  timeRange,
5527
- queries
5528
+ queries,
5529
+ scopes: (_d = this._scopesBridge) == null ? void 0 : _d.getValue()
5528
5530
  }, getEnrichedFiltersRequest(this)));
5529
5531
  if (responseHasError(response)) {
5530
5532
  this.setState({ error: response.error.message });
@@ -5712,6 +5714,7 @@ class SceneQueryRunner extends SceneObjectBase {
5712
5714
  _onActivate() {
5713
5715
  if (this.isQueryModeAuto()) {
5714
5716
  const timeRange = sceneGraph.getTimeRange(this);
5717
+ const scopesBridge = sceneGraph.getScopesBridge(this);
5715
5718
  const providers = this.getClosestExtraQueryProviders();
5716
5719
  for (const provider of providers) {
5717
5720
  this._subs.add(
@@ -5722,6 +5725,7 @@ class SceneQueryRunner extends SceneObjectBase {
5722
5725
  })
5723
5726
  );
5724
5727
  }
5728
+ this.subscribeToScopesChanges(scopesBridge);
5725
5729
  this.subscribeToTimeRangeChanges(timeRange);
5726
5730
  if (this.shouldRunQueriesOnActivate()) {
5727
5731
  this.runQueries();
@@ -5867,6 +5871,21 @@ class SceneQueryRunner extends SceneObjectBase {
5867
5871
  isDataReadyToDisplay() {
5868
5872
  return Boolean(this.state._hasFetchedData);
5869
5873
  }
5874
+ subscribeToScopesChanges(scopesBridge) {
5875
+ if (!scopesBridge) {
5876
+ return;
5877
+ }
5878
+ if (this._scopesSubBridge === scopesBridge) {
5879
+ return;
5880
+ }
5881
+ if (this._scopesSub) {
5882
+ this._scopesSub.unsubscribe();
5883
+ }
5884
+ this._scopesSubBridge = scopesBridge;
5885
+ this._scopesSub = scopesBridge.subscribeToValue(() => {
5886
+ this.runWithTimeRangeAndScopes(sceneGraph.getTimeRange(this), scopesBridge);
5887
+ });
5888
+ }
5870
5889
  subscribeToTimeRangeChanges(timeRange) {
5871
5890
  if (this._timeSubRange === timeRange) {
5872
5891
  return;
@@ -5876,15 +5895,17 @@ class SceneQueryRunner extends SceneObjectBase {
5876
5895
  }
5877
5896
  this._timeSubRange = timeRange;
5878
5897
  this._timeSub = timeRange.subscribeToState(() => {
5879
- this.runWithTimeRange(timeRange);
5898
+ this.runWithTimeRangeAndScopes(timeRange, sceneGraph.getScopesBridge(this));
5880
5899
  });
5881
5900
  }
5882
5901
  runQueries() {
5883
5902
  const timeRange = sceneGraph.getTimeRange(this);
5903
+ const scopesBridge = sceneGraph.getScopesBridge(this);
5884
5904
  if (this.isQueryModeAuto()) {
5885
5905
  this.subscribeToTimeRangeChanges(timeRange);
5906
+ this.subscribeToScopesChanges(scopesBridge);
5886
5907
  }
5887
- this.runWithTimeRange(timeRange);
5908
+ this.runWithTimeRangeAndScopes(timeRange, scopesBridge);
5888
5909
  }
5889
5910
  getMaxDataPoints() {
5890
5911
  var _a;
@@ -5904,8 +5925,8 @@ class SceneQueryRunner extends SceneObjectBase {
5904
5925
  data: __spreadProps$m(__spreadValues$y({}, this.state.data), { state: schema.LoadingState.Done })
5905
5926
  });
5906
5927
  }
5907
- async runWithTimeRange(timeRange) {
5908
- var _a, _b, _c;
5928
+ async runWithTimeRangeAndScopes(timeRange, scopesBridge) {
5929
+ var _a, _b, _c, _d;
5909
5930
  if (!this.state.maxDataPoints && this.state.maxDataPointsFromWidth && !this._containerWidth) {
5910
5931
  return;
5911
5932
  }
@@ -5918,17 +5939,22 @@ class SceneQueryRunner extends SceneObjectBase {
5918
5939
  this.setState({ data: __spreadProps$m(__spreadValues$y({}, (_b = this.state.data) != null ? _b : emptyPanelData), { state: schema.LoadingState.Loading }) });
5919
5940
  return;
5920
5941
  }
5942
+ if (scopesBridge == null ? void 0 : scopesBridge.isLoading()) {
5943
+ writeSceneLog("SceneQueryRunner", "Scopes are in loading state, skipping query execution");
5944
+ this.setState({ data: __spreadProps$m(__spreadValues$y({}, (_c = this.state.data) != null ? _c : emptyPanelData), { state: schema.LoadingState.Loading }) });
5945
+ return;
5946
+ }
5921
5947
  const { queries } = this.state;
5922
5948
  if (!(queries == null ? void 0 : queries.length)) {
5923
5949
  this._setNoDataState();
5924
5950
  return;
5925
5951
  }
5926
5952
  try {
5927
- const datasource = (_c = this.state.datasource) != null ? _c : findFirstDatasource(queries);
5953
+ const datasource = (_d = this.state.datasource) != null ? _d : findFirstDatasource(queries);
5928
5954
  const ds = await getDataSource(datasource, this._scopedVars);
5929
5955
  this.findAndSubscribeToAdHocFilters(ds.uid);
5930
5956
  const runRequest = runtime.getRunRequest();
5931
- const { primary, secondaries, processors } = this.prepareRequests(timeRange, ds);
5957
+ const { primary, secondaries, processors } = this.prepareRequests(timeRange, ds, scopesBridge);
5932
5958
  writeSceneLog("SceneQueryRunner", "Starting runRequest", this.state.key);
5933
5959
  let stream = runRequest(ds, primary);
5934
5960
  if (secondaries.length > 0) {
@@ -5967,7 +5993,7 @@ class SceneQueryRunner extends SceneObjectBase {
5967
5993
  clone["_results"].next({ origin: this, data: (_a = this.state.data) != null ? _a : emptyPanelData });
5968
5994
  return clone;
5969
5995
  }
5970
- prepareRequests(timeRange, ds) {
5996
+ prepareRequests(timeRange, ds, scopesBridge) {
5971
5997
  var _a;
5972
5998
  const { minInterval, queries } = this.state;
5973
5999
  let request = __spreadValues$y({
@@ -5987,7 +6013,8 @@ class SceneQueryRunner extends SceneObjectBase {
5987
6013
  to: timeRange.state.to
5988
6014
  },
5989
6015
  cacheTimeout: this.state.cacheTimeout,
5990
- queryCachingTTL: this.state.queryCachingTTL
6016
+ queryCachingTTL: this.state.queryCachingTTL,
6017
+ scopes: scopesBridge == null ? void 0 : scopesBridge.getValue()
5991
6018
  }, getEnrichedDataRequest(this));
5992
6019
  if (this._adhocFiltersVar) {
5993
6020
  request.filters = this._adhocFiltersVar.state.filters.filter(isFilterComplete);
@@ -6955,6 +6982,108 @@ function containsSearchFilter(query) {
6955
6982
  return str.indexOf(SEARCH_FILTER_VARIABLE) > -1;
6956
6983
  }
6957
6984
 
6985
+ class SceneScopesBridge extends SceneObjectBase {
6986
+ constructor() {
6987
+ super(...arguments);
6988
+ this._urlSync = new SceneObjectUrlSyncConfig(this, { keys: ["scopes"] });
6989
+ this._renderBeforeActivation = true;
6990
+ this._contextSubject = new rxjs.BehaviorSubject(void 0);
6991
+ this._pendingScopes = null;
6992
+ }
6993
+ getUrlState() {
6994
+ var _a, _b, _c;
6995
+ return {
6996
+ scopes: (_c = this._pendingScopes) != null ? _c : ((_b = (_a = this.context) == null ? void 0 : _a.state.value) != null ? _b : []).map((scope) => scope.metadata.name)
6997
+ };
6998
+ }
6999
+ updateFromUrl(values) {
7000
+ var _a, _b;
7001
+ let scopes = (_a = values["scopes"]) != null ? _a : [];
7002
+ scopes = (Array.isArray(scopes) ? scopes : [scopes]).map(String);
7003
+ if (!this.context) {
7004
+ this._pendingScopes = scopes;
7005
+ return;
7006
+ }
7007
+ (_b = this.context) == null ? void 0 : _b.changeScopes(scopes);
7008
+ }
7009
+ getValue() {
7010
+ var _a, _b;
7011
+ return (_b = (_a = this.context) == null ? void 0 : _a.state.value) != null ? _b : [];
7012
+ }
7013
+ subscribeToValue(cb) {
7014
+ return this.contextObservable.pipe(
7015
+ rxjs.filter((context) => !!context && !context.state.loading),
7016
+ rxjs.pairwise(),
7017
+ rxjs.map(
7018
+ ([prevContext, newContext]) => {
7019
+ var _a, _b;
7020
+ return [(_a = prevContext == null ? void 0 : prevContext.state.value) != null ? _a : [], (_b = newContext == null ? void 0 : newContext.state.value) != null ? _b : []];
7021
+ }
7022
+ ),
7023
+ rxjs.filter(([prevScopes, newScopes]) => !lodash.isEqual(prevScopes, newScopes))
7024
+ ).subscribe(([prevScopes, newScopes]) => {
7025
+ cb(newScopes, prevScopes);
7026
+ });
7027
+ }
7028
+ isLoading() {
7029
+ var _a, _b;
7030
+ return (_b = (_a = this.context) == null ? void 0 : _a.state.loading) != null ? _b : false;
7031
+ }
7032
+ subscribeToLoading(cb) {
7033
+ return this.contextObservable.pipe(
7034
+ rxjs.filter((context) => !!context),
7035
+ rxjs.pairwise(),
7036
+ rxjs.map(
7037
+ ([prevContext, newContext]) => {
7038
+ var _a, _b;
7039
+ return [(_a = prevContext == null ? void 0 : prevContext.state.loading) != null ? _a : false, (_b = newContext == null ? void 0 : newContext.state.loading) != null ? _b : false];
7040
+ }
7041
+ ),
7042
+ rxjs.filter(([prevLoading, newLoading]) => prevLoading !== newLoading)
7043
+ ).subscribe(([_prevLoading, newLoading]) => {
7044
+ cb(newLoading);
7045
+ });
7046
+ }
7047
+ setEnabled(enabled) {
7048
+ var _a;
7049
+ (_a = this.context) == null ? void 0 : _a.setEnabled(enabled);
7050
+ }
7051
+ setReadOnly(readOnly) {
7052
+ var _a;
7053
+ (_a = this.context) == null ? void 0 : _a.setReadOnly(readOnly);
7054
+ }
7055
+ updateContext(newContext) {
7056
+ var _a, _b;
7057
+ if (this._pendingScopes && newContext) {
7058
+ setTimeout(() => {
7059
+ newContext == null ? void 0 : newContext.changeScopes(this._pendingScopes);
7060
+ this._pendingScopes = null;
7061
+ });
7062
+ }
7063
+ if (this.context !== newContext || ((_a = this.context) == null ? void 0 : _a.state) !== (newContext == null ? void 0 : newContext.state)) {
7064
+ const shouldUpdate = ((_b = this.context) == null ? void 0 : _b.state.value) !== (newContext == null ? void 0 : newContext.state.value);
7065
+ this._contextSubject.next(newContext);
7066
+ if (shouldUpdate) {
7067
+ this.forceRender();
7068
+ }
7069
+ }
7070
+ }
7071
+ get context() {
7072
+ return this._contextSubject.getValue();
7073
+ }
7074
+ get contextObservable() {
7075
+ return this._contextSubject.asObservable();
7076
+ }
7077
+ }
7078
+ SceneScopesBridge.Component = SceneScopesBridgeRenderer;
7079
+ function SceneScopesBridgeRenderer({ model }) {
7080
+ const context = runtime.useScopes();
7081
+ React.useEffect(() => {
7082
+ model.updateContext(context);
7083
+ }, [context, model]);
7084
+ return null;
7085
+ }
7086
+
6958
7087
  function getVariables(sceneObject) {
6959
7088
  var _a;
6960
7089
  return (_a = getClosest(sceneObject, (s) => s.state.$variables)) != null ? _a : EmptyVariableSet;
@@ -7098,6 +7227,10 @@ function findDescendents(scene, descendentType) {
7098
7227
  const targetScenes = findAllObjects(scene, isDescendentType);
7099
7228
  return targetScenes.filter(isDescendentType);
7100
7229
  }
7230
+ function getScopesBridge(sceneObject) {
7231
+ var _a;
7232
+ return (_a = findObject(sceneObject, (s) => s instanceof SceneScopesBridge)) != null ? _a : void 0;
7233
+ }
7101
7234
 
7102
7235
  const sceneGraph = {
7103
7236
  getVariables,
@@ -7114,7 +7247,8 @@ const sceneGraph = {
7114
7247
  findAllObjects,
7115
7248
  getAncestor,
7116
7249
  getQueryController,
7117
- findDescendents
7250
+ findDescendents,
7251
+ getScopesBridge
7118
7252
  };
7119
7253
 
7120
7254
  class UniqueUrlKeyMapper {
@@ -12868,6 +13002,10 @@ class SplitLayout extends SceneObjectBase {
12868
13002
  SplitLayout.Component = SplitLayoutRenderer;
12869
13003
 
12870
13004
  class SceneApp extends SceneObjectBase {
13005
+ constructor() {
13006
+ super(...arguments);
13007
+ this._renderBeforeActivation = true;
13008
+ }
12871
13009
  enrichDataRequest() {
12872
13010
  return {
12873
13011
  app: this.state.name || "app"
@@ -12875,8 +13013,10 @@ class SceneApp extends SceneObjectBase {
12875
13013
  }
12876
13014
  }
12877
13015
  SceneApp.Component = ({ model }) => {
12878
- const { pages } = model.useState();
12879
- return /* @__PURE__ */ React__default["default"].createElement(SceneAppContext.Provider, {
13016
+ const { pages, scopesBridge } = model.useState();
13017
+ return /* @__PURE__ */ React__default["default"].createElement(React__default["default"].Fragment, null, scopesBridge && /* @__PURE__ */ React__default["default"].createElement(scopesBridge.Component, {
13018
+ model: scopesBridge
13019
+ }), /* @__PURE__ */ React__default["default"].createElement(SceneAppContext.Provider, {
12880
13020
  value: model
12881
13021
  }, /* @__PURE__ */ React__default["default"].createElement(reactRouterDom.Routes, null, pages.map((page) => /* @__PURE__ */ React__default["default"].createElement(reactRouterDom.Route, {
12882
13022
  key: page.state.url,
@@ -12884,7 +13024,7 @@ SceneApp.Component = ({ model }) => {
12884
13024
  element: /* @__PURE__ */ React__default["default"].createElement(page.Component, {
12885
13025
  model: page
12886
13026
  })
12887
- }))));
13027
+ })))));
12888
13028
  };
12889
13029
  const SceneAppContext = React.createContext(null);
12890
13030
  const sceneAppCache = /* @__PURE__ */ new Map();
@@ -13239,6 +13379,21 @@ class SceneAppPage extends SceneObjectBase {
13239
13379
  super(state);
13240
13380
  this._sceneCache = /* @__PURE__ */ new Map();
13241
13381
  this._drilldownCache = /* @__PURE__ */ new Map();
13382
+ this._activationHandler = () => {
13383
+ if (!this.state.useScopes) {
13384
+ return;
13385
+ }
13386
+ this._scopesBridge = sceneGraph.getScopesBridge(this);
13387
+ if (!this._scopesBridge) {
13388
+ throw new Error("Use of scopes is enabled but no scopes bridge found");
13389
+ }
13390
+ this._scopesBridge.setEnabled(true);
13391
+ return () => {
13392
+ var _a;
13393
+ (_a = this._scopesBridge) == null ? void 0 : _a.setEnabled(false);
13394
+ };
13395
+ };
13396
+ this.addActivationHandler(this._activationHandler);
13242
13397
  }
13243
13398
  initializeScene(scene) {
13244
13399
  this.setState({ initializedScene: scene });
@@ -14237,6 +14392,7 @@ exports.SceneObjectUrlSyncConfig = SceneObjectUrlSyncConfig;
14237
14392
  exports.SceneQueryRunner = SceneQueryRunner;
14238
14393
  exports.SceneReactObject = SceneReactObject;
14239
14394
  exports.SceneRefreshPicker = SceneRefreshPicker;
14395
+ exports.SceneScopesBridge = SceneScopesBridge;
14240
14396
  exports.SceneTimePicker = SceneTimePicker;
14241
14397
  exports.SceneTimeRange = SceneTimeRange;
14242
14398
  exports.SceneTimeRangeCompare = SceneTimeRangeCompare;