@grafana/scenes 6.4.0--canary.1062.13769817941.0 → 6.4.0--canary.1062.13788998678.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;
@@ -934,8 +985,10 @@ declare class AdHocFiltersVariable extends SceneObjectBase<AdHocFiltersVariableS
934
985
  static Component: typeof AdHocFiltersVariableRenderer;
935
986
  private _scopedVars;
936
987
  private _dataSourceSrv;
988
+ private _scopesBridge;
937
989
  protected _urlSync: AdHocFiltersVariableUrlSyncHandler;
938
990
  constructor(state: Partial<AdHocFiltersVariableState>);
991
+ private _activationHandler;
939
992
  setState(update: Partial<AdHocFiltersVariableState>): void;
940
993
  /**
941
994
  * Updates the variable's `filters` and `filterExpression` state.
@@ -1177,6 +1230,7 @@ declare class GroupByVariable extends MultiValueVariable<GroupByVariableState> {
1177
1230
  static Component: typeof GroupByVariableRenderer;
1178
1231
  isLazy: boolean;
1179
1232
  protected _urlSync: SceneObjectUrlSyncHandler;
1233
+ private _scopesBridge;
1180
1234
  validateAndUpdate(): Observable<ValidateAndUpdateResult>;
1181
1235
  private _updateValueGivenNewOptions;
1182
1236
  getValueOptions(args: VariableGetOptionsArgs): Observable<VariableValueOption[]>;
@@ -1193,7 +1247,7 @@ declare class GroupByVariable extends MultiValueVariable<GroupByVariableState> {
1193
1247
  text: string[];
1194
1248
  };
1195
1249
  }
1196
- declare function GroupByVariableRenderer({ model }: SceneComponentProps<MultiValueVariable>): React__default.JSX.Element;
1250
+ declare function GroupByVariableRenderer({ model }: SceneComponentProps<GroupByVariable>): React__default.JSX.Element;
1197
1251
 
1198
1252
  declare function isAdHocVariable(variable: SceneVariable): variable is AdHocFiltersVariable;
1199
1253
  declare function isConstantVariable(variable: SceneVariable): variable is ConstantVariable;
@@ -1372,6 +1426,10 @@ declare function getAncestor<ParentType>(sceneObject: SceneObject, ancestorType:
1372
1426
  * This will search down the full scene graph, looking for objects that match the provided descendentType type.
1373
1427
  */
1374
1428
  declare function findDescendents<T extends SceneObject>(scene: SceneObject, descendentType: SceneType<T>): T[];
1429
+ /**
1430
+ * Will walk up the scene object graph to the closest $scopesBridge scene object
1431
+ */
1432
+ declare function getScopesBridge(sceneObject: SceneObject): SceneScopesBridge | undefined;
1375
1433
 
1376
1434
  declare const sceneGraph: {
1377
1435
  getVariables: typeof getVariables;
@@ -1389,6 +1447,7 @@ declare const sceneGraph: {
1389
1447
  getAncestor: typeof getAncestor;
1390
1448
  getQueryController: typeof getQueryController;
1391
1449
  findDescendents: typeof findDescendents;
1450
+ getScopesBridge: typeof getScopesBridge;
1392
1451
  };
1393
1452
 
1394
1453
  interface ActWhenVariableChangedState extends SceneObjectState {
@@ -1566,21 +1625,6 @@ declare class SceneDataNode extends SceneObjectBase<SceneDataNodeState> implemen
1566
1625
  getResultsStream(): rxjs.Observable<SceneDataProviderResult>;
1567
1626
  }
1568
1627
 
1569
- interface SceneObjectUrlSyncConfigOptions {
1570
- keys: string[] | (() => string[]);
1571
- }
1572
- declare class SceneObjectUrlSyncConfig implements SceneObjectUrlSyncHandler {
1573
- private _sceneObject;
1574
- private _keys;
1575
- private _nextChangeShouldAddHistoryStep;
1576
- constructor(_sceneObject: SceneObjectWithUrlSync, _options: SceneObjectUrlSyncConfigOptions);
1577
- getKeys(): string[];
1578
- getUrlState(): SceneObjectUrlValues;
1579
- updateFromUrl(values: SceneObjectUrlValues): void;
1580
- shouldCreateHistoryStep(values: SceneObjectUrlValues): boolean;
1581
- performBrowserHistoryAction(callback: () => void): void;
1582
- }
1583
-
1584
1628
  declare class SceneTimeRange extends SceneObjectBase<SceneTimeRangeState> implements SceneTimeRangeLike {
1585
1629
  protected _urlSync: SceneObjectUrlSyncConfig;
1586
1630
  constructor(state?: Partial<SceneTimeRangeState>);
@@ -1655,6 +1699,8 @@ declare class SceneQueryRunner extends SceneObjectBase<QueryRunnerState> impleme
1655
1699
  private _dataLayersMerger;
1656
1700
  private _timeSub?;
1657
1701
  private _timeSubRange?;
1702
+ private _scopesSub?;
1703
+ private _scopesSubBridge?;
1658
1704
  private _containerWidth?;
1659
1705
  private _variableValueRecorder;
1660
1706
  private _results;
@@ -1693,11 +1739,12 @@ declare class SceneQueryRunner extends SceneObjectBase<QueryRunnerState> impleme
1693
1739
  private _onDeactivate;
1694
1740
  setContainerWidth(width: number): void;
1695
1741
  isDataReadyToDisplay(): boolean;
1742
+ private subscribeToScopesChanges;
1696
1743
  private subscribeToTimeRangeChanges;
1697
1744
  runQueries(): void;
1698
1745
  private getMaxDataPoints;
1699
1746
  cancelQuery(): void;
1700
- private runWithTimeRange;
1747
+ private runWithTimeRangeAndScopes;
1701
1748
  clone(withState?: Partial<QueryRunnerState>): this;
1702
1749
  private prepareRequests;
1703
1750
  private onDataReceived;
@@ -2421,6 +2468,7 @@ declare const LazyLoader: LazyLoaderType;
2421
2468
  * Responsible for top level pages routing
2422
2469
  */
2423
2470
  declare class SceneApp extends SceneObjectBase<SceneAppState> implements DataRequestEnricher {
2471
+ protected _renderBeforeActivation: boolean;
2424
2472
  enrichDataRequest(): {
2425
2473
  app: string;
2426
2474
  };
@@ -2438,7 +2486,9 @@ declare class SceneAppPage extends SceneObjectBase<SceneAppPageState> implements
2438
2486
  static Component: typeof SceneAppPageRenderer;
2439
2487
  private _sceneCache;
2440
2488
  private _drilldownCache;
2489
+ private _scopesBridge;
2441
2490
  constructor(state: SceneAppPageState);
2491
+ private _activationHandler;
2442
2492
  initializeScene(scene: EmbeddedScene): void;
2443
2493
  getScene(routeMatch: SceneRouteMatch): EmbeddedScene;
2444
2494
  getDrilldownPage(drilldown: SceneAppDrilldownView, routeMatch: SceneRouteMatch<{}>): SceneAppPageLike;
@@ -2939,4 +2989,4 @@ declare const sceneUtils: {
2939
2989
  isGroupByVariable: typeof isGroupByVariable;
2940
2990
  };
2941
2991
 
2942
- 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 };
2992
+ 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 });
@@ -5473,9 +5474,13 @@ class AdHocFiltersVariable extends SceneObjectBase {
5473
5474
  this._scopedVars = { __sceneObject: wrapInSafeSerializableSceneObject(this) };
5474
5475
  this._dataSourceSrv = runtime.getDataSourceSrv();
5475
5476
  this._urlSync = new AdHocFiltersVariableUrlSyncHandler(this);
5477
+ this._activationHandler = () => {
5478
+ this._scopesBridge = sceneGraph.getScopesBridge(this);
5479
+ };
5476
5480
  if (this.state.applyMode === "auto") {
5477
5481
  patchGetAdhocFilters(this);
5478
5482
  }
5483
+ this.addActivationHandler(this._activationHandler);
5479
5484
  }
5480
5485
  setState(update) {
5481
5486
  var _a, _b, _c;
@@ -5598,7 +5603,7 @@ class AdHocFiltersVariable extends SceneObjectBase {
5598
5603
  }
5599
5604
  }
5600
5605
  async _getKeys(currentKey) {
5601
- var _a, _b, _c;
5606
+ var _a, _b, _c, _d;
5602
5607
  const override = await ((_b = (_a = this.state).getTagKeysProvider) == null ? void 0 : _b.call(_a, this, currentKey));
5603
5608
  if (override && override.replace) {
5604
5609
  return dataFromResponse(override.values).map(toSelectableValue);
@@ -5616,7 +5621,8 @@ class AdHocFiltersVariable extends SceneObjectBase {
5616
5621
  const response = await ds.getTagKeys(__spreadValues$z({
5617
5622
  filters: otherFilters,
5618
5623
  queries,
5619
- timeRange
5624
+ timeRange,
5625
+ scopes: (_d = this._scopesBridge) == null ? void 0 : _d.getValue()
5620
5626
  }, getEnrichedFiltersRequest(this)));
5621
5627
  if (responseHasError(response)) {
5622
5628
  this.setState({ error: response.error.message });
@@ -5632,7 +5638,7 @@ class AdHocFiltersVariable extends SceneObjectBase {
5632
5638
  return keys.map(toSelectableValue);
5633
5639
  }
5634
5640
  async _getValuesFor(filter) {
5635
- var _a, _b, _c, _d, _e, _f;
5641
+ var _a, _b, _c, _d, _e;
5636
5642
  const override = await ((_b = (_a = this.state).getTagValuesProvider) == null ? void 0 : _b.call(_a, this, filter));
5637
5643
  if (override && override.replace) {
5638
5644
  return dataFromResponse(override.values).map(toSelectableValue);
@@ -5645,7 +5651,7 @@ class AdHocFiltersVariable extends SceneObjectBase {
5645
5651
  const otherFilters = this.state.filters.filter((f) => f.key !== filter.key).concat(filteredBaseFilters);
5646
5652
  const timeRange = sceneGraph.getTimeRange(this).state.value;
5647
5653
  const queries = this.state.useQueriesAsFilterForOptions ? getQueriesForVariables(this) : void 0;
5648
- const injectedScopes = (_f = (_e = getEnrichedFiltersRequest(this)) == null ? void 0 : _e.scopes) == null ? void 0 : _f.map((scope) => {
5654
+ const scopes = (_e = this._scopesBridge) == null ? void 0 : _e.getValue().map((scope) => {
5649
5655
  return __spreadProps$n(__spreadValues$z({}, scope), {
5650
5656
  spec: __spreadProps$n(__spreadValues$z({}, scope.spec), {
5651
5657
  filters: scope.spec.filters.filter(
@@ -5657,17 +5663,13 @@ class AdHocFiltersVariable extends SceneObjectBase {
5657
5663
  })
5658
5664
  });
5659
5665
  });
5660
- const scopeProps = {};
5661
- if (injectedScopes) {
5662
- scopeProps.scopes = injectedScopes;
5663
- scopeProps.scopesInjected = true;
5664
- }
5665
5666
  const response = await ds.getTagValues(__spreadValues$z({
5666
5667
  key: filter.key,
5667
5668
  filters: otherFilters,
5668
5669
  timeRange,
5669
- queries
5670
- }, scopeProps));
5670
+ queries,
5671
+ scopes
5672
+ }, getEnrichedFiltersRequest(this)));
5671
5673
  if (responseHasError(response)) {
5672
5674
  this.setState({ error: response.error.message });
5673
5675
  }
@@ -5854,6 +5856,7 @@ class SceneQueryRunner extends SceneObjectBase {
5854
5856
  _onActivate() {
5855
5857
  if (this.isQueryModeAuto()) {
5856
5858
  const timeRange = sceneGraph.getTimeRange(this);
5859
+ const scopesBridge = sceneGraph.getScopesBridge(this);
5857
5860
  const providers = this.getClosestExtraQueryProviders();
5858
5861
  for (const provider of providers) {
5859
5862
  this._subs.add(
@@ -5864,6 +5867,7 @@ class SceneQueryRunner extends SceneObjectBase {
5864
5867
  })
5865
5868
  );
5866
5869
  }
5870
+ this.subscribeToScopesChanges(scopesBridge);
5867
5871
  this.subscribeToTimeRangeChanges(timeRange);
5868
5872
  if (this.shouldRunQueriesOnActivate()) {
5869
5873
  this.runQueries();
@@ -6009,6 +6013,21 @@ class SceneQueryRunner extends SceneObjectBase {
6009
6013
  isDataReadyToDisplay() {
6010
6014
  return Boolean(this.state._hasFetchedData);
6011
6015
  }
6016
+ subscribeToScopesChanges(scopesBridge) {
6017
+ if (!scopesBridge) {
6018
+ return;
6019
+ }
6020
+ if (this._scopesSubBridge === scopesBridge) {
6021
+ return;
6022
+ }
6023
+ if (this._scopesSub) {
6024
+ this._scopesSub.unsubscribe();
6025
+ }
6026
+ this._scopesSubBridge = scopesBridge;
6027
+ this._scopesSub = scopesBridge.subscribeToValue(() => {
6028
+ this.runWithTimeRangeAndScopes(sceneGraph.getTimeRange(this), scopesBridge);
6029
+ });
6030
+ }
6012
6031
  subscribeToTimeRangeChanges(timeRange) {
6013
6032
  if (this._timeSubRange === timeRange) {
6014
6033
  return;
@@ -6018,15 +6037,17 @@ class SceneQueryRunner extends SceneObjectBase {
6018
6037
  }
6019
6038
  this._timeSubRange = timeRange;
6020
6039
  this._timeSub = timeRange.subscribeToState(() => {
6021
- this.runWithTimeRange(timeRange);
6040
+ this.runWithTimeRangeAndScopes(timeRange, sceneGraph.getScopesBridge(this));
6022
6041
  });
6023
6042
  }
6024
6043
  runQueries() {
6025
6044
  const timeRange = sceneGraph.getTimeRange(this);
6045
+ const scopesBridge = sceneGraph.getScopesBridge(this);
6026
6046
  if (this.isQueryModeAuto()) {
6027
6047
  this.subscribeToTimeRangeChanges(timeRange);
6048
+ this.subscribeToScopesChanges(scopesBridge);
6028
6049
  }
6029
- this.runWithTimeRange(timeRange);
6050
+ this.runWithTimeRangeAndScopes(timeRange, scopesBridge);
6030
6051
  }
6031
6052
  getMaxDataPoints() {
6032
6053
  var _a;
@@ -6046,8 +6067,8 @@ class SceneQueryRunner extends SceneObjectBase {
6046
6067
  data: __spreadProps$m(__spreadValues$y({}, this.state.data), { state: schema.LoadingState.Done })
6047
6068
  });
6048
6069
  }
6049
- async runWithTimeRange(timeRange) {
6050
- var _a, _b, _c;
6070
+ async runWithTimeRangeAndScopes(timeRange, scopesBridge) {
6071
+ var _a, _b, _c, _d;
6051
6072
  if (!this.state.maxDataPoints && this.state.maxDataPointsFromWidth && !this._containerWidth) {
6052
6073
  return;
6053
6074
  }
@@ -6060,17 +6081,22 @@ class SceneQueryRunner extends SceneObjectBase {
6060
6081
  this.setState({ data: __spreadProps$m(__spreadValues$y({}, (_b = this.state.data) != null ? _b : emptyPanelData), { state: schema.LoadingState.Loading }) });
6061
6082
  return;
6062
6083
  }
6084
+ if (scopesBridge == null ? void 0 : scopesBridge.isLoading()) {
6085
+ writeSceneLog("SceneQueryRunner", "Scopes are in loading state, skipping query execution");
6086
+ this.setState({ data: __spreadProps$m(__spreadValues$y({}, (_c = this.state.data) != null ? _c : emptyPanelData), { state: schema.LoadingState.Loading }) });
6087
+ return;
6088
+ }
6063
6089
  const { queries } = this.state;
6064
6090
  if (!(queries == null ? void 0 : queries.length)) {
6065
6091
  this._setNoDataState();
6066
6092
  return;
6067
6093
  }
6068
6094
  try {
6069
- const datasource = (_c = this.state.datasource) != null ? _c : findFirstDatasource(queries);
6095
+ const datasource = (_d = this.state.datasource) != null ? _d : findFirstDatasource(queries);
6070
6096
  const ds = await getDataSource(datasource, this._scopedVars);
6071
6097
  this.findAndSubscribeToAdHocFilters(ds.uid);
6072
6098
  const runRequest = runtime.getRunRequest();
6073
- const { primary, secondaries, processors } = this.prepareRequests(timeRange, ds);
6099
+ const { primary, secondaries, processors } = this.prepareRequests(timeRange, ds, scopesBridge);
6074
6100
  writeSceneLog("SceneQueryRunner", "Starting runRequest", this.state.key);
6075
6101
  let stream = runRequest(ds, primary);
6076
6102
  if (secondaries.length > 0) {
@@ -6109,7 +6135,7 @@ class SceneQueryRunner extends SceneObjectBase {
6109
6135
  clone["_results"].next({ origin: this, data: (_a = this.state.data) != null ? _a : emptyPanelData });
6110
6136
  return clone;
6111
6137
  }
6112
- prepareRequests(timeRange, ds) {
6138
+ prepareRequests(timeRange, ds, scopesBridge) {
6113
6139
  var _a, _b;
6114
6140
  const { minInterval, queries } = this.state;
6115
6141
  let request = __spreadValues$y({
@@ -6129,7 +6155,8 @@ class SceneQueryRunner extends SceneObjectBase {
6129
6155
  to: timeRange.state.to
6130
6156
  },
6131
6157
  cacheTimeout: this.state.cacheTimeout,
6132
- queryCachingTTL: this.state.queryCachingTTL
6158
+ queryCachingTTL: this.state.queryCachingTTL,
6159
+ scopes: scopesBridge == null ? void 0 : scopesBridge.getValue()
6133
6160
  }, getEnrichedDataRequest(this));
6134
6161
  if (this._adhocFiltersVar) {
6135
6162
  request.filters = [];
@@ -7091,6 +7118,105 @@ function containsSearchFilter(query) {
7091
7118
  return str.indexOf(SEARCH_FILTER_VARIABLE) > -1;
7092
7119
  }
7093
7120
 
7121
+ class SceneScopesBridge extends SceneObjectBase {
7122
+ constructor() {
7123
+ super(...arguments);
7124
+ this._urlSync = new SceneObjectUrlSyncConfig(this, { keys: ["scopes"] });
7125
+ this._renderBeforeActivation = true;
7126
+ this._contextSubject = new rxjs.BehaviorSubject(void 0);
7127
+ this._pendingScopes = null;
7128
+ }
7129
+ getUrlState() {
7130
+ var _a, _b, _c;
7131
+ return {
7132
+ scopes: (_c = this._pendingScopes) != null ? _c : ((_b = (_a = this.context) == null ? void 0 : _a.state.value) != null ? _b : []).map((scope) => scope.metadata.name)
7133
+ };
7134
+ }
7135
+ updateFromUrl(values) {
7136
+ var _a, _b;
7137
+ let scopes = (_a = values["scopes"]) != null ? _a : [];
7138
+ scopes = (Array.isArray(scopes) ? scopes : [scopes]).map(String);
7139
+ if (!this.context) {
7140
+ this._pendingScopes = scopes;
7141
+ return;
7142
+ }
7143
+ (_b = this.context) == null ? void 0 : _b.changeScopes(scopes);
7144
+ }
7145
+ getValue() {
7146
+ var _a, _b;
7147
+ return (_b = (_a = this.context) == null ? void 0 : _a.state.value) != null ? _b : [];
7148
+ }
7149
+ subscribeToValue(cb) {
7150
+ return this.contextObservable.pipe(
7151
+ rxjs.map((context) => {
7152
+ var _a;
7153
+ return (_a = context == null ? void 0 : context.state.value) != null ? _a : [];
7154
+ }),
7155
+ rxjs.pairwise(),
7156
+ rxjs.filter(([prevScopes, newScopes]) => !lodash.isEqual(prevScopes, newScopes))
7157
+ ).subscribe(([prevScopes, newScopes]) => {
7158
+ cb(newScopes, prevScopes);
7159
+ });
7160
+ }
7161
+ isLoading() {
7162
+ var _a, _b;
7163
+ return (_b = (_a = this.context) == null ? void 0 : _a.state.loading) != null ? _b : false;
7164
+ }
7165
+ subscribeToLoading(cb) {
7166
+ return this.contextObservable.pipe(
7167
+ rxjs.filter((context) => !!context),
7168
+ rxjs.pairwise(),
7169
+ rxjs.map(
7170
+ ([prevContext, newContext]) => {
7171
+ var _a, _b;
7172
+ return [(_a = prevContext == null ? void 0 : prevContext.state.loading) != null ? _a : false, (_b = newContext == null ? void 0 : newContext.state.loading) != null ? _b : false];
7173
+ }
7174
+ ),
7175
+ rxjs.filter(([prevLoading, newLoading]) => prevLoading !== newLoading)
7176
+ ).subscribe(([_prevLoading, newLoading]) => {
7177
+ cb(newLoading);
7178
+ });
7179
+ }
7180
+ setEnabled(enabled) {
7181
+ var _a;
7182
+ (_a = this.context) == null ? void 0 : _a.setEnabled(enabled);
7183
+ }
7184
+ setReadOnly(readOnly) {
7185
+ var _a;
7186
+ (_a = this.context) == null ? void 0 : _a.setReadOnly(readOnly);
7187
+ }
7188
+ updateContext(newContext) {
7189
+ var _a, _b;
7190
+ if (this._pendingScopes && newContext) {
7191
+ setTimeout(() => {
7192
+ newContext == null ? void 0 : newContext.changeScopes(this._pendingScopes);
7193
+ this._pendingScopes = null;
7194
+ });
7195
+ }
7196
+ if (this.context !== newContext || ((_a = this.context) == null ? void 0 : _a.state) !== (newContext == null ? void 0 : newContext.state)) {
7197
+ const shouldUpdate = ((_b = this.context) == null ? void 0 : _b.state.value) !== (newContext == null ? void 0 : newContext.state.value);
7198
+ this._contextSubject.next(newContext);
7199
+ if (shouldUpdate) {
7200
+ this.forceRender();
7201
+ }
7202
+ }
7203
+ }
7204
+ get context() {
7205
+ return this._contextSubject.getValue();
7206
+ }
7207
+ get contextObservable() {
7208
+ return this._contextSubject.asObservable();
7209
+ }
7210
+ }
7211
+ SceneScopesBridge.Component = SceneScopesBridgeRenderer;
7212
+ function SceneScopesBridgeRenderer({ model }) {
7213
+ const context = runtime.useScopes();
7214
+ React.useEffect(() => {
7215
+ model.updateContext(context);
7216
+ }, [context, model]);
7217
+ return null;
7218
+ }
7219
+
7094
7220
  function getVariables(sceneObject) {
7095
7221
  var _a;
7096
7222
  return (_a = getClosest(sceneObject, (s) => s.state.$variables)) != null ? _a : EmptyVariableSet;
@@ -7234,6 +7360,10 @@ function findDescendents(scene, descendentType) {
7234
7360
  const targetScenes = findAllObjects(scene, isDescendentType);
7235
7361
  return targetScenes.filter(isDescendentType);
7236
7362
  }
7363
+ function getScopesBridge(sceneObject) {
7364
+ var _a;
7365
+ return (_a = findObject(sceneObject, (s) => s instanceof SceneScopesBridge)) != null ? _a : void 0;
7366
+ }
7237
7367
 
7238
7368
  const sceneGraph = {
7239
7369
  getVariables,
@@ -7250,7 +7380,8 @@ const sceneGraph = {
7250
7380
  findAllObjects,
7251
7381
  getAncestor,
7252
7382
  getQueryController,
7253
- findDescendents
7383
+ findDescendents,
7384
+ getScopesBridge
7254
7385
  };
7255
7386
 
7256
7387
  class UniqueUrlKeyMapper {
@@ -13004,6 +13135,10 @@ class SplitLayout extends SceneObjectBase {
13004
13135
  SplitLayout.Component = SplitLayoutRenderer;
13005
13136
 
13006
13137
  class SceneApp extends SceneObjectBase {
13138
+ constructor() {
13139
+ super(...arguments);
13140
+ this._renderBeforeActivation = true;
13141
+ }
13007
13142
  enrichDataRequest() {
13008
13143
  return {
13009
13144
  app: this.state.name || "app"
@@ -13011,8 +13146,10 @@ class SceneApp extends SceneObjectBase {
13011
13146
  }
13012
13147
  }
13013
13148
  SceneApp.Component = ({ model }) => {
13014
- const { pages } = model.useState();
13015
- return /* @__PURE__ */ React__default["default"].createElement(SceneAppContext.Provider, {
13149
+ const { pages, scopesBridge } = model.useState();
13150
+ return /* @__PURE__ */ React__default["default"].createElement(React__default["default"].Fragment, null, scopesBridge && /* @__PURE__ */ React__default["default"].createElement(scopesBridge.Component, {
13151
+ model: scopesBridge
13152
+ }), /* @__PURE__ */ React__default["default"].createElement(SceneAppContext.Provider, {
13016
13153
  value: model
13017
13154
  }, /* @__PURE__ */ React__default["default"].createElement(reactRouterDom.Routes, null, pages.map((page) => /* @__PURE__ */ React__default["default"].createElement(reactRouterDom.Route, {
13018
13155
  key: page.state.url,
@@ -13020,7 +13157,7 @@ SceneApp.Component = ({ model }) => {
13020
13157
  element: /* @__PURE__ */ React__default["default"].createElement(page.Component, {
13021
13158
  model: page
13022
13159
  })
13023
- }))));
13160
+ })))));
13024
13161
  };
13025
13162
  const SceneAppContext = React.createContext(null);
13026
13163
  const sceneAppCache = /* @__PURE__ */ new Map();
@@ -13375,6 +13512,21 @@ class SceneAppPage extends SceneObjectBase {
13375
13512
  super(state);
13376
13513
  this._sceneCache = /* @__PURE__ */ new Map();
13377
13514
  this._drilldownCache = /* @__PURE__ */ new Map();
13515
+ this._activationHandler = () => {
13516
+ if (!this.state.useScopes) {
13517
+ return;
13518
+ }
13519
+ this._scopesBridge = sceneGraph.getScopesBridge(this);
13520
+ if (!this._scopesBridge) {
13521
+ throw new Error("Use of scopes is enabled but no scopes bridge found");
13522
+ }
13523
+ this._scopesBridge.setEnabled(true);
13524
+ return () => {
13525
+ var _a;
13526
+ (_a = this._scopesBridge) == null ? void 0 : _a.setEnabled(false);
13527
+ };
13528
+ };
13529
+ this.addActivationHandler(this._activationHandler);
13378
13530
  }
13379
13531
  initializeScene(scene) {
13380
13532
  this.setState({ initializedScene: scene });
@@ -14374,6 +14526,7 @@ exports.SceneObjectUrlSyncConfig = SceneObjectUrlSyncConfig;
14374
14526
  exports.SceneQueryRunner = SceneQueryRunner;
14375
14527
  exports.SceneReactObject = SceneReactObject;
14376
14528
  exports.SceneRefreshPicker = SceneRefreshPicker;
14529
+ exports.SceneScopesBridge = SceneScopesBridge;
14377
14530
  exports.SceneTimePicker = SceneTimePicker;
14378
14531
  exports.SceneTimeRange = SceneTimeRange;
14379
14532
  exports.SceneTimeRangeCompare = SceneTimeRangeCompare;