@grafana/scenes 6.1.4--canary.1060.13562828942.0 → 6.1.5--canary.990.13570008543.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,51 @@ 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
+ /**
678
+ * This method is used to keep the context up to date with the scopes context received from React
679
+ *
680
+ * Its rationale is:
681
+ * - When a new context is available, check if we have pending scopes passed from the URL
682
+ * - If we have pending scopes, ask the new context to load them
683
+ * - The loading should happen in a setTimeout to allow the existing context to pass its values to the URL sync handler
684
+ * - If a new context is received, propagate it as a new value in the behavior subject
685
+ * - If a new value is received, force a re-render to trigger the URL sync handler
686
+ */
687
+ updateContext(newContext: ScopesContextValue | undefined): void;
688
+ private get context();
689
+ private get contextObservable();
690
+ }
691
+ declare function SceneScopesBridgeRenderer({ model }: SceneComponentProps<SceneScopesBridge>): null;
692
+
648
693
  interface SceneRouteMatch<Params extends {
649
694
  [K in keyof Params]?: string;
650
695
  } = {}> {
@@ -657,6 +702,7 @@ interface SceneAppState extends SceneObjectState {
657
702
  pages: SceneAppPageLike[];
658
703
  name?: string;
659
704
  urlSyncOptions?: SceneUrlSyncOptions;
705
+ scopesBridge?: SceneScopesBridge;
660
706
  }
661
707
  interface SceneAppRoute {
662
708
  path: string;
@@ -701,6 +747,7 @@ interface SceneAppPageState extends SceneObjectState {
701
747
  */
702
748
  getFallbackPage?: () => SceneAppPageLike;
703
749
  layout?: PageLayoutType;
750
+ useScopes?: boolean;
704
751
  }
705
752
  interface SceneAppPageLike extends SceneObject<SceneAppPageState>, DataRequestEnricher {
706
753
  initializeScene(scene: SceneObject): void;
@@ -928,8 +975,10 @@ declare class AdHocFiltersVariable extends SceneObjectBase<AdHocFiltersVariableS
928
975
  static Component: typeof AdHocFiltersVariableRenderer;
929
976
  private _scopedVars;
930
977
  private _dataSourceSrv;
978
+ private _scopesBridge;
931
979
  protected _urlSync: AdHocFiltersVariableUrlSyncHandler;
932
980
  constructor(state: Partial<AdHocFiltersVariableState>);
981
+ private _activationHandler;
933
982
  setState(update: Partial<AdHocFiltersVariableState>): void;
934
983
  /**
935
984
  * Updates the variable's `filters` and `filterExpression` state.
@@ -1170,6 +1219,7 @@ declare class GroupByVariable extends MultiValueVariable<GroupByVariableState> {
1170
1219
  static Component: typeof GroupByVariableRenderer;
1171
1220
  isLazy: boolean;
1172
1221
  protected _urlSync: SceneObjectUrlSyncHandler;
1222
+ private _scopesBridge;
1173
1223
  validateAndUpdate(): Observable<ValidateAndUpdateResult>;
1174
1224
  private _updateValueGivenNewOptions;
1175
1225
  getValueOptions(args: VariableGetOptionsArgs): Observable<VariableValueOption[]>;
@@ -1186,7 +1236,7 @@ declare class GroupByVariable extends MultiValueVariable<GroupByVariableState> {
1186
1236
  text: string[];
1187
1237
  };
1188
1238
  }
1189
- declare function GroupByVariableRenderer({ model }: SceneComponentProps<MultiValueVariable>): React__default.JSX.Element;
1239
+ declare function GroupByVariableRenderer({ model }: SceneComponentProps<GroupByVariable>): React__default.JSX.Element;
1190
1240
 
1191
1241
  declare function isAdHocVariable(variable: SceneVariable): variable is AdHocFiltersVariable;
1192
1242
  declare function isConstantVariable(variable: SceneVariable): variable is ConstantVariable;
@@ -1365,6 +1415,10 @@ declare function getAncestor<ParentType>(sceneObject: SceneObject, ancestorType:
1365
1415
  * This will search down the full scene graph, looking for objects that match the provided descendentType type.
1366
1416
  */
1367
1417
  declare function findDescendents<T extends SceneObject>(scene: SceneObject, descendentType: SceneType<T>): T[];
1418
+ /**
1419
+ * Will walk up the scene object graph to the closest $scopesBridge scene object
1420
+ */
1421
+ declare function getScopesBridge(sceneObject: SceneObject): SceneScopesBridge | undefined;
1368
1422
 
1369
1423
  declare const sceneGraph: {
1370
1424
  getVariables: typeof getVariables;
@@ -1382,6 +1436,7 @@ declare const sceneGraph: {
1382
1436
  getAncestor: typeof getAncestor;
1383
1437
  getQueryController: typeof getQueryController;
1384
1438
  findDescendents: typeof findDescendents;
1439
+ getScopesBridge: typeof getScopesBridge;
1385
1440
  };
1386
1441
 
1387
1442
  interface ActWhenVariableChangedState extends SceneObjectState {
@@ -1559,21 +1614,6 @@ declare class SceneDataNode extends SceneObjectBase<SceneDataNodeState> implemen
1559
1614
  getResultsStream(): rxjs.Observable<SceneDataProviderResult>;
1560
1615
  }
1561
1616
 
1562
- interface SceneObjectUrlSyncConfigOptions {
1563
- keys: string[] | (() => string[]);
1564
- }
1565
- declare class SceneObjectUrlSyncConfig implements SceneObjectUrlSyncHandler {
1566
- private _sceneObject;
1567
- private _keys;
1568
- private _nextChangeShouldAddHistoryStep;
1569
- constructor(_sceneObject: SceneObjectWithUrlSync, _options: SceneObjectUrlSyncConfigOptions);
1570
- getKeys(): string[];
1571
- getUrlState(): SceneObjectUrlValues;
1572
- updateFromUrl(values: SceneObjectUrlValues): void;
1573
- shouldCreateHistoryStep(values: SceneObjectUrlValues): boolean;
1574
- performBrowserHistoryAction(callback: () => void): void;
1575
- }
1576
-
1577
1617
  declare class SceneTimeRange extends SceneObjectBase<SceneTimeRangeState> implements SceneTimeRangeLike {
1578
1618
  protected _urlSync: SceneObjectUrlSyncConfig;
1579
1619
  constructor(state?: Partial<SceneTimeRangeState>);
@@ -1648,6 +1688,8 @@ declare class SceneQueryRunner extends SceneObjectBase<QueryRunnerState> impleme
1648
1688
  private _dataLayersMerger;
1649
1689
  private _timeSub?;
1650
1690
  private _timeSubRange?;
1691
+ private _scopesSub?;
1692
+ private _scopesSubBridge?;
1651
1693
  private _containerWidth?;
1652
1694
  private _variableValueRecorder;
1653
1695
  private _results;
@@ -1686,11 +1728,12 @@ declare class SceneQueryRunner extends SceneObjectBase<QueryRunnerState> impleme
1686
1728
  private _onDeactivate;
1687
1729
  setContainerWidth(width: number): void;
1688
1730
  isDataReadyToDisplay(): boolean;
1731
+ private subscribeToScopesChanges;
1689
1732
  private subscribeToTimeRangeChanges;
1690
1733
  runQueries(): void;
1691
1734
  private getMaxDataPoints;
1692
1735
  cancelQuery(): void;
1693
- private runWithTimeRange;
1736
+ private runWithTimeRangeAndScopes;
1694
1737
  clone(withState?: Partial<QueryRunnerState>): this;
1695
1738
  private prepareRequests;
1696
1739
  private onDataReceived;
@@ -2414,6 +2457,7 @@ declare const LazyLoader: LazyLoaderType;
2414
2457
  * Responsible for top level pages routing
2415
2458
  */
2416
2459
  declare class SceneApp extends SceneObjectBase<SceneAppState> implements DataRequestEnricher {
2460
+ protected _renderBeforeActivation: boolean;
2417
2461
  enrichDataRequest(): {
2418
2462
  app: string;
2419
2463
  };
@@ -2431,7 +2475,9 @@ declare class SceneAppPage extends SceneObjectBase<SceneAppPageState> implements
2431
2475
  static Component: typeof SceneAppPageRenderer;
2432
2476
  private _sceneCache;
2433
2477
  private _drilldownCache;
2478
+ private _scopesBridge;
2434
2479
  constructor(state: SceneAppPageState);
2480
+ private _activationHandler;
2435
2481
  initializeScene(scene: EmbeddedScene): void;
2436
2482
  getScene(routeMatch: SceneRouteMatch): EmbeddedScene;
2437
2483
  getDrilldownPage(drilldown: SceneAppDrilldownView, routeMatch: SceneRouteMatch<{}>): SceneAppPageLike;
@@ -2932,4 +2978,4 @@ declare const sceneUtils: {
2932
2978
  isGroupByVariable: typeof isGroupByVariable;
2933
2979
  };
2934
2980
 
2935
- 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 };
2981
+ 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
@@ -3233,7 +3233,7 @@ class GroupByVariable extends MultiValueVariable {
3233
3233
  this.isLazy = true;
3234
3234
  this._urlSync = new GroupByVariableUrlSyncHandler(this);
3235
3235
  this._getKeys = async (ds) => {
3236
- var _a, _b, _c;
3236
+ var _a, _b, _c, _d;
3237
3237
  const override = await ((_b = (_a = this.state).getTagKeysProvider) == null ? void 0 : _b.call(_a, this, null));
3238
3238
  if (override && override.replace) {
3239
3239
  return override.values;
@@ -3250,7 +3250,8 @@ class GroupByVariable extends MultiValueVariable {
3250
3250
  const response = await ds.getTagKeys(__spreadValues$F({
3251
3251
  filters: otherFilters,
3252
3252
  queries,
3253
- timeRange
3253
+ timeRange,
3254
+ scopes: (_d = this._scopesBridge) == null ? void 0 : _d.getValue()
3254
3255
  }, getEnrichedFiltersRequest(this)));
3255
3256
  if (responseHasError(response)) {
3256
3257
  this.setState({ error: response.error.message });
@@ -5406,9 +5407,13 @@ class AdHocFiltersVariable extends SceneObjectBase {
5406
5407
  this._scopedVars = { __sceneObject: wrapInSafeSerializableSceneObject(this) };
5407
5408
  this._dataSourceSrv = runtime.getDataSourceSrv();
5408
5409
  this._urlSync = new AdHocFiltersVariableUrlSyncHandler(this);
5410
+ this._activationHandler = () => {
5411
+ this._scopesBridge = sceneGraph.getScopesBridge(this);
5412
+ };
5409
5413
  if (this.state.applyMode === "auto") {
5410
5414
  patchGetAdhocFilters(this);
5411
5415
  }
5416
+ this.addActivationHandler(this._activationHandler);
5412
5417
  }
5413
5418
  setState(update) {
5414
5419
  let filterExpressionChanged = false;
@@ -5492,7 +5497,7 @@ class AdHocFiltersVariable extends SceneObjectBase {
5492
5497
  }
5493
5498
  }
5494
5499
  async _getKeys(currentKey) {
5495
- var _a, _b, _c;
5500
+ var _a, _b, _c, _d;
5496
5501
  const override = await ((_b = (_a = this.state).getTagKeysProvider) == null ? void 0 : _b.call(_a, this, currentKey));
5497
5502
  if (override && override.replace) {
5498
5503
  return dataFromResponse(override.values).map(toSelectableValue);
@@ -5510,7 +5515,8 @@ class AdHocFiltersVariable extends SceneObjectBase {
5510
5515
  const response = await ds.getTagKeys(__spreadValues$z({
5511
5516
  filters: otherFilters,
5512
5517
  queries,
5513
- timeRange
5518
+ timeRange,
5519
+ scopes: (_d = this._scopesBridge) == null ? void 0 : _d.getValue()
5514
5520
  }, getEnrichedFiltersRequest(this)));
5515
5521
  if (responseHasError(response)) {
5516
5522
  this.setState({ error: response.error.message });
@@ -5526,7 +5532,7 @@ class AdHocFiltersVariable extends SceneObjectBase {
5526
5532
  return keys.map(toSelectableValue);
5527
5533
  }
5528
5534
  async _getValuesFor(filter) {
5529
- var _a, _b, _c;
5535
+ var _a, _b, _c, _d;
5530
5536
  const override = await ((_b = (_a = this.state).getTagValuesProvider) == null ? void 0 : _b.call(_a, this, filter));
5531
5537
  if (override && override.replace) {
5532
5538
  return dataFromResponse(override.values).map(toSelectableValue);
@@ -5542,7 +5548,8 @@ class AdHocFiltersVariable extends SceneObjectBase {
5542
5548
  key: filter.key,
5543
5549
  filters: otherFilters,
5544
5550
  timeRange,
5545
- queries
5551
+ queries,
5552
+ scopes: (_d = this._scopesBridge) == null ? void 0 : _d.getValue()
5546
5553
  }, getEnrichedFiltersRequest(this)));
5547
5554
  if (responseHasError(response)) {
5548
5555
  this.setState({ error: response.error.message });
@@ -5730,6 +5737,7 @@ class SceneQueryRunner extends SceneObjectBase {
5730
5737
  _onActivate() {
5731
5738
  if (this.isQueryModeAuto()) {
5732
5739
  const timeRange = sceneGraph.getTimeRange(this);
5740
+ const scopesBridge = sceneGraph.getScopesBridge(this);
5733
5741
  const providers = this.getClosestExtraQueryProviders();
5734
5742
  for (const provider of providers) {
5735
5743
  this._subs.add(
@@ -5740,6 +5748,7 @@ class SceneQueryRunner extends SceneObjectBase {
5740
5748
  })
5741
5749
  );
5742
5750
  }
5751
+ this.subscribeToScopesChanges(scopesBridge);
5743
5752
  this.subscribeToTimeRangeChanges(timeRange);
5744
5753
  if (this.shouldRunQueriesOnActivate()) {
5745
5754
  this.runQueries();
@@ -5885,6 +5894,21 @@ class SceneQueryRunner extends SceneObjectBase {
5885
5894
  isDataReadyToDisplay() {
5886
5895
  return Boolean(this.state._hasFetchedData);
5887
5896
  }
5897
+ subscribeToScopesChanges(scopesBridge) {
5898
+ if (!scopesBridge) {
5899
+ return;
5900
+ }
5901
+ if (this._scopesSubBridge === scopesBridge) {
5902
+ return;
5903
+ }
5904
+ if (this._scopesSub) {
5905
+ this._scopesSub.unsubscribe();
5906
+ }
5907
+ this._scopesSubBridge = scopesBridge;
5908
+ this._scopesSub = scopesBridge.subscribeToValue(() => {
5909
+ this.runWithTimeRangeAndScopes(sceneGraph.getTimeRange(this), scopesBridge);
5910
+ });
5911
+ }
5888
5912
  subscribeToTimeRangeChanges(timeRange) {
5889
5913
  if (this._timeSubRange === timeRange) {
5890
5914
  return;
@@ -5894,15 +5918,17 @@ class SceneQueryRunner extends SceneObjectBase {
5894
5918
  }
5895
5919
  this._timeSubRange = timeRange;
5896
5920
  this._timeSub = timeRange.subscribeToState(() => {
5897
- this.runWithTimeRange(timeRange);
5921
+ this.runWithTimeRangeAndScopes(timeRange, sceneGraph.getScopesBridge(this));
5898
5922
  });
5899
5923
  }
5900
5924
  runQueries() {
5901
5925
  const timeRange = sceneGraph.getTimeRange(this);
5926
+ const scopesBridge = sceneGraph.getScopesBridge(this);
5902
5927
  if (this.isQueryModeAuto()) {
5903
5928
  this.subscribeToTimeRangeChanges(timeRange);
5929
+ this.subscribeToScopesChanges(scopesBridge);
5904
5930
  }
5905
- this.runWithTimeRange(timeRange);
5931
+ this.runWithTimeRangeAndScopes(timeRange, scopesBridge);
5906
5932
  }
5907
5933
  getMaxDataPoints() {
5908
5934
  var _a;
@@ -5922,8 +5948,8 @@ class SceneQueryRunner extends SceneObjectBase {
5922
5948
  data: __spreadProps$m(__spreadValues$y({}, this.state.data), { state: schema.LoadingState.Done })
5923
5949
  });
5924
5950
  }
5925
- async runWithTimeRange(timeRange) {
5926
- var _a, _b, _c;
5951
+ async runWithTimeRangeAndScopes(timeRange, scopesBridge) {
5952
+ var _a, _b, _c, _d;
5927
5953
  if (!this.state.maxDataPoints && this.state.maxDataPointsFromWidth && !this._containerWidth) {
5928
5954
  return;
5929
5955
  }
@@ -5936,17 +5962,22 @@ class SceneQueryRunner extends SceneObjectBase {
5936
5962
  this.setState({ data: __spreadProps$m(__spreadValues$y({}, (_b = this.state.data) != null ? _b : emptyPanelData), { state: schema.LoadingState.Loading }) });
5937
5963
  return;
5938
5964
  }
5965
+ if (scopesBridge == null ? void 0 : scopesBridge.isLoading()) {
5966
+ writeSceneLog("SceneQueryRunner", "Scopes are in loading state, skipping query execution");
5967
+ this.setState({ data: __spreadProps$m(__spreadValues$y({}, (_c = this.state.data) != null ? _c : emptyPanelData), { state: schema.LoadingState.Loading }) });
5968
+ return;
5969
+ }
5939
5970
  const { queries } = this.state;
5940
5971
  if (!(queries == null ? void 0 : queries.length)) {
5941
5972
  this._setNoDataState();
5942
5973
  return;
5943
5974
  }
5944
5975
  try {
5945
- const datasource = (_c = this.state.datasource) != null ? _c : findFirstDatasource(queries);
5976
+ const datasource = (_d = this.state.datasource) != null ? _d : findFirstDatasource(queries);
5946
5977
  const ds = await getDataSource(datasource, this._scopedVars);
5947
5978
  this.findAndSubscribeToAdHocFilters(ds.uid);
5948
5979
  const runRequest = runtime.getRunRequest();
5949
- const { primary, secondaries, processors } = this.prepareRequests(timeRange, ds);
5980
+ const { primary, secondaries, processors } = this.prepareRequests(timeRange, ds, scopesBridge);
5950
5981
  writeSceneLog("SceneQueryRunner", "Starting runRequest", this.state.key);
5951
5982
  let stream = runRequest(ds, primary);
5952
5983
  if (secondaries.length > 0) {
@@ -5985,7 +6016,7 @@ class SceneQueryRunner extends SceneObjectBase {
5985
6016
  clone["_results"].next({ origin: this, data: (_a = this.state.data) != null ? _a : emptyPanelData });
5986
6017
  return clone;
5987
6018
  }
5988
- prepareRequests(timeRange, ds) {
6019
+ prepareRequests(timeRange, ds, scopesBridge) {
5989
6020
  var _a, _b;
5990
6021
  const { minInterval, queries } = this.state;
5991
6022
  let request = __spreadValues$y({
@@ -6005,7 +6036,8 @@ class SceneQueryRunner extends SceneObjectBase {
6005
6036
  to: timeRange.state.to
6006
6037
  },
6007
6038
  cacheTimeout: this.state.cacheTimeout,
6008
- queryCachingTTL: this.state.queryCachingTTL
6039
+ queryCachingTTL: this.state.queryCachingTTL,
6040
+ scopes: scopesBridge == null ? void 0 : scopesBridge.getValue()
6009
6041
  }, getEnrichedDataRequest(this));
6010
6042
  if (this._adhocFiltersVar) {
6011
6043
  request.filters = [];
@@ -6978,6 +7010,108 @@ function containsSearchFilter(query) {
6978
7010
  return str.indexOf(SEARCH_FILTER_VARIABLE) > -1;
6979
7011
  }
6980
7012
 
7013
+ class SceneScopesBridge extends SceneObjectBase {
7014
+ constructor() {
7015
+ super(...arguments);
7016
+ this._urlSync = new SceneObjectUrlSyncConfig(this, { keys: ["scopes"] });
7017
+ this._renderBeforeActivation = true;
7018
+ this._contextSubject = new rxjs.BehaviorSubject(void 0);
7019
+ this._pendingScopes = null;
7020
+ }
7021
+ getUrlState() {
7022
+ var _a, _b, _c;
7023
+ return {
7024
+ scopes: (_c = this._pendingScopes) != null ? _c : ((_b = (_a = this.context) == null ? void 0 : _a.state.value) != null ? _b : []).map((scope) => scope.metadata.name)
7025
+ };
7026
+ }
7027
+ updateFromUrl(values) {
7028
+ var _a, _b;
7029
+ let scopes = (_a = values["scopes"]) != null ? _a : [];
7030
+ scopes = (Array.isArray(scopes) ? scopes : [scopes]).map(String);
7031
+ if (!this.context) {
7032
+ this._pendingScopes = scopes;
7033
+ return;
7034
+ }
7035
+ (_b = this.context) == null ? void 0 : _b.changeScopes(scopes);
7036
+ }
7037
+ getValue() {
7038
+ var _a, _b;
7039
+ return (_b = (_a = this.context) == null ? void 0 : _a.state.value) != null ? _b : [];
7040
+ }
7041
+ subscribeToValue(cb) {
7042
+ return this.contextObservable.pipe(
7043
+ rxjs.filter((context) => !!context && !context.state.loading),
7044
+ rxjs.pairwise(),
7045
+ rxjs.map(
7046
+ ([prevContext, newContext]) => {
7047
+ var _a, _b;
7048
+ return [(_a = prevContext == null ? void 0 : prevContext.state.value) != null ? _a : [], (_b = newContext == null ? void 0 : newContext.state.value) != null ? _b : []];
7049
+ }
7050
+ ),
7051
+ rxjs.filter(([prevScopes, newScopes]) => !lodash.isEqual(prevScopes, newScopes))
7052
+ ).subscribe(([prevScopes, newScopes]) => {
7053
+ cb(newScopes, prevScopes);
7054
+ });
7055
+ }
7056
+ isLoading() {
7057
+ var _a, _b;
7058
+ return (_b = (_a = this.context) == null ? void 0 : _a.state.loading) != null ? _b : false;
7059
+ }
7060
+ subscribeToLoading(cb) {
7061
+ return this.contextObservable.pipe(
7062
+ rxjs.filter((context) => !!context),
7063
+ rxjs.pairwise(),
7064
+ rxjs.map(
7065
+ ([prevContext, newContext]) => {
7066
+ var _a, _b;
7067
+ return [(_a = prevContext == null ? void 0 : prevContext.state.loading) != null ? _a : false, (_b = newContext == null ? void 0 : newContext.state.loading) != null ? _b : false];
7068
+ }
7069
+ ),
7070
+ rxjs.filter(([prevLoading, newLoading]) => prevLoading !== newLoading)
7071
+ ).subscribe(([_prevLoading, newLoading]) => {
7072
+ cb(newLoading);
7073
+ });
7074
+ }
7075
+ setEnabled(enabled) {
7076
+ var _a;
7077
+ (_a = this.context) == null ? void 0 : _a.setEnabled(enabled);
7078
+ }
7079
+ setReadOnly(readOnly) {
7080
+ var _a;
7081
+ (_a = this.context) == null ? void 0 : _a.setReadOnly(readOnly);
7082
+ }
7083
+ updateContext(newContext) {
7084
+ var _a, _b;
7085
+ if (this._pendingScopes && newContext) {
7086
+ setTimeout(() => {
7087
+ newContext == null ? void 0 : newContext.changeScopes(this._pendingScopes);
7088
+ this._pendingScopes = null;
7089
+ });
7090
+ }
7091
+ if (this.context !== newContext || ((_a = this.context) == null ? void 0 : _a.state) !== (newContext == null ? void 0 : newContext.state)) {
7092
+ const shouldUpdate = ((_b = this.context) == null ? void 0 : _b.state.value) !== (newContext == null ? void 0 : newContext.state.value);
7093
+ this._contextSubject.next(newContext);
7094
+ if (shouldUpdate) {
7095
+ this.forceRender();
7096
+ }
7097
+ }
7098
+ }
7099
+ get context() {
7100
+ return this._contextSubject.getValue();
7101
+ }
7102
+ get contextObservable() {
7103
+ return this._contextSubject.asObservable();
7104
+ }
7105
+ }
7106
+ SceneScopesBridge.Component = SceneScopesBridgeRenderer;
7107
+ function SceneScopesBridgeRenderer({ model }) {
7108
+ const context = runtime.useScopes();
7109
+ React.useEffect(() => {
7110
+ model.updateContext(context);
7111
+ }, [context, model]);
7112
+ return null;
7113
+ }
7114
+
6981
7115
  function getVariables(sceneObject) {
6982
7116
  var _a;
6983
7117
  return (_a = getClosest(sceneObject, (s) => s.state.$variables)) != null ? _a : EmptyVariableSet;
@@ -7121,6 +7255,10 @@ function findDescendents(scene, descendentType) {
7121
7255
  const targetScenes = findAllObjects(scene, isDescendentType);
7122
7256
  return targetScenes.filter(isDescendentType);
7123
7257
  }
7258
+ function getScopesBridge(sceneObject) {
7259
+ var _a;
7260
+ return (_a = findObject(sceneObject, (s) => s instanceof SceneScopesBridge)) != null ? _a : void 0;
7261
+ }
7124
7262
 
7125
7263
  const sceneGraph = {
7126
7264
  getVariables,
@@ -7137,7 +7275,8 @@ const sceneGraph = {
7137
7275
  findAllObjects,
7138
7276
  getAncestor,
7139
7277
  getQueryController,
7140
- findDescendents
7278
+ findDescendents,
7279
+ getScopesBridge
7141
7280
  };
7142
7281
 
7143
7282
  class UniqueUrlKeyMapper {
@@ -12891,6 +13030,10 @@ class SplitLayout extends SceneObjectBase {
12891
13030
  SplitLayout.Component = SplitLayoutRenderer;
12892
13031
 
12893
13032
  class SceneApp extends SceneObjectBase {
13033
+ constructor() {
13034
+ super(...arguments);
13035
+ this._renderBeforeActivation = true;
13036
+ }
12894
13037
  enrichDataRequest() {
12895
13038
  return {
12896
13039
  app: this.state.name || "app"
@@ -12898,8 +13041,10 @@ class SceneApp extends SceneObjectBase {
12898
13041
  }
12899
13042
  }
12900
13043
  SceneApp.Component = ({ model }) => {
12901
- const { pages } = model.useState();
12902
- return /* @__PURE__ */ React__default["default"].createElement(SceneAppContext.Provider, {
13044
+ const { pages, scopesBridge } = model.useState();
13045
+ return /* @__PURE__ */ React__default["default"].createElement(React__default["default"].Fragment, null, scopesBridge && /* @__PURE__ */ React__default["default"].createElement(scopesBridge.Component, {
13046
+ model: scopesBridge
13047
+ }), /* @__PURE__ */ React__default["default"].createElement(SceneAppContext.Provider, {
12903
13048
  value: model
12904
13049
  }, /* @__PURE__ */ React__default["default"].createElement(reactRouterDom.Routes, null, pages.map((page) => /* @__PURE__ */ React__default["default"].createElement(reactRouterDom.Route, {
12905
13050
  key: page.state.url,
@@ -12907,7 +13052,7 @@ SceneApp.Component = ({ model }) => {
12907
13052
  element: /* @__PURE__ */ React__default["default"].createElement(page.Component, {
12908
13053
  model: page
12909
13054
  })
12910
- }))));
13055
+ })))));
12911
13056
  };
12912
13057
  const SceneAppContext = React.createContext(null);
12913
13058
  const sceneAppCache = /* @__PURE__ */ new Map();
@@ -13262,6 +13407,21 @@ class SceneAppPage extends SceneObjectBase {
13262
13407
  super(state);
13263
13408
  this._sceneCache = /* @__PURE__ */ new Map();
13264
13409
  this._drilldownCache = /* @__PURE__ */ new Map();
13410
+ this._activationHandler = () => {
13411
+ if (!this.state.useScopes) {
13412
+ return;
13413
+ }
13414
+ this._scopesBridge = sceneGraph.getScopesBridge(this);
13415
+ if (!this._scopesBridge) {
13416
+ throw new Error("Use of scopes is enabled but no scopes bridge found");
13417
+ }
13418
+ this._scopesBridge.setEnabled(true);
13419
+ return () => {
13420
+ var _a;
13421
+ (_a = this._scopesBridge) == null ? void 0 : _a.setEnabled(false);
13422
+ };
13423
+ };
13424
+ this.addActivationHandler(this._activationHandler);
13265
13425
  }
13266
13426
  initializeScene(scene) {
13267
13427
  this.setState({ initializedScene: scene });
@@ -14261,6 +14421,7 @@ exports.SceneObjectUrlSyncConfig = SceneObjectUrlSyncConfig;
14261
14421
  exports.SceneQueryRunner = SceneQueryRunner;
14262
14422
  exports.SceneReactObject = SceneReactObject;
14263
14423
  exports.SceneRefreshPicker = SceneRefreshPicker;
14424
+ exports.SceneScopesBridge = SceneScopesBridge;
14264
14425
  exports.SceneTimePicker = SceneTimePicker;
14265
14426
  exports.SceneTimeRange = SceneTimeRange;
14266
14427
  exports.SceneTimeRangeCompare = SceneTimeRangeCompare;