@grafana/scenes 6.0.2 → 6.0.3--canary.990.13366792126.0

Sign up to get free protection for your applications and to get access to all the features.
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 } 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
+ performBrowserHistoryAction(callback: () => void): void;
660
+ shouldCreateHistoryStep(values: SceneObjectUrlValues): boolean;
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
- performBrowserHistoryAction(callback: () => void): void;
1569
- shouldCreateHistoryStep(values: SceneObjectUrlValues): boolean;
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;
@@ -2385,6 +2418,7 @@ declare class SplitLayout extends SceneObjectBase<SplitLayoutState> {
2385
2418
  * Responsible for top level pages routing
2386
2419
  */
2387
2420
  declare class SceneApp extends SceneObjectBase<SceneAppState> implements DataRequestEnricher {
2421
+ protected _renderBeforeActivation: boolean;
2388
2422
  enrichDataRequest(): {
2389
2423
  app: string;
2390
2424
  };
@@ -2402,7 +2436,9 @@ declare class SceneAppPage extends SceneObjectBase<SceneAppPageState> implements
2402
2436
  static Component: typeof SceneAppPageRenderer;
2403
2437
  private _sceneCache;
2404
2438
  private _drilldownCache;
2439
+ private _scopesBridge;
2405
2440
  constructor(state: SceneAppPageState);
2441
+ private _activationHandler;
2406
2442
  initializeScene(scene: EmbeddedScene): void;
2407
2443
  getScene(routeMatch: SceneRouteMatch): EmbeddedScene;
2408
2444
  getDrilldownPage(drilldown: SceneAppDrilldownView, routeMatch: SceneRouteMatch<{}>): SceneAppPageLike;
@@ -2903,4 +2939,4 @@ declare const sceneUtils: {
2903
2939
  isGroupByVariable: typeof isGroupByVariable;
2904
2940
  };
2905
2941
 
2906
- 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, 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, 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 };
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, FiltersRequestEnricher, FormatVariable, GroupByVariable, InterpolationFormatParameter, IntervalVariable, 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, 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
@@ -3213,7 +3213,7 @@ class GroupByVariable extends MultiValueVariable {
3213
3213
  this.isLazy = true;
3214
3214
  this._urlSync = new GroupByVariableUrlSyncHandler(this);
3215
3215
  this._getKeys = async (ds) => {
3216
- var _a, _b, _c;
3216
+ var _a, _b, _c, _d;
3217
3217
  const override = await ((_b = (_a = this.state).getTagKeysProvider) == null ? void 0 : _b.call(_a, this, null));
3218
3218
  if (override && override.replace) {
3219
3219
  return override.values;
@@ -3230,7 +3230,8 @@ class GroupByVariable extends MultiValueVariable {
3230
3230
  const response = await ds.getTagKeys(__spreadValues$F({
3231
3231
  filters: otherFilters,
3232
3232
  queries,
3233
- timeRange
3233
+ timeRange,
3234
+ scopes: (_d = this._scopesBridge) == null ? void 0 : _d.getValue()
3234
3235
  }, getEnrichedFiltersRequest(this)));
3235
3236
  if (responseHasError(response)) {
3236
3237
  this.setState({ error: response.error.message });
@@ -5367,9 +5368,13 @@ class AdHocFiltersVariable extends SceneObjectBase {
5367
5368
  this._scopedVars = { __sceneObject: wrapInSafeSerializableSceneObject(this) };
5368
5369
  this._dataSourceSrv = runtime.getDataSourceSrv();
5369
5370
  this._urlSync = new AdHocFiltersVariableUrlSyncHandler(this);
5371
+ this._activationHandler = () => {
5372
+ this._scopesBridge = sceneGraph.getScopesBridge(this);
5373
+ };
5370
5374
  if (this.state.applyMode === "auto") {
5371
5375
  patchGetAdhocFilters(this);
5372
5376
  }
5377
+ this.addActivationHandler(this._activationHandler);
5373
5378
  }
5374
5379
  setState(update) {
5375
5380
  let filterExpressionChanged = false;
@@ -5453,7 +5458,7 @@ class AdHocFiltersVariable extends SceneObjectBase {
5453
5458
  }
5454
5459
  }
5455
5460
  async _getKeys(currentKey) {
5456
- var _a, _b, _c;
5461
+ var _a, _b, _c, _d;
5457
5462
  const override = await ((_b = (_a = this.state).getTagKeysProvider) == null ? void 0 : _b.call(_a, this, currentKey));
5458
5463
  if (override && override.replace) {
5459
5464
  return dataFromResponse(override.values).map(toSelectableValue);
@@ -5471,7 +5476,8 @@ class AdHocFiltersVariable extends SceneObjectBase {
5471
5476
  const response = await ds.getTagKeys(__spreadValues$z({
5472
5477
  filters: otherFilters,
5473
5478
  queries,
5474
- timeRange
5479
+ timeRange,
5480
+ scopes: (_d = this._scopesBridge) == null ? void 0 : _d.getValue()
5475
5481
  }, getEnrichedFiltersRequest(this)));
5476
5482
  if (responseHasError(response)) {
5477
5483
  this.setState({ error: response.error.message });
@@ -5487,7 +5493,7 @@ class AdHocFiltersVariable extends SceneObjectBase {
5487
5493
  return keys.map(toSelectableValue);
5488
5494
  }
5489
5495
  async _getValuesFor(filter) {
5490
- var _a, _b, _c;
5496
+ var _a, _b, _c, _d;
5491
5497
  const override = await ((_b = (_a = this.state).getTagValuesProvider) == null ? void 0 : _b.call(_a, this, filter));
5492
5498
  if (override && override.replace) {
5493
5499
  return dataFromResponse(override.values).map(toSelectableValue);
@@ -5503,7 +5509,8 @@ class AdHocFiltersVariable extends SceneObjectBase {
5503
5509
  key: filter.key,
5504
5510
  filters: otherFilters,
5505
5511
  timeRange,
5506
- queries
5512
+ queries,
5513
+ scopes: (_d = this._scopesBridge) == null ? void 0 : _d.getValue()
5507
5514
  }, getEnrichedFiltersRequest(this)));
5508
5515
  if (responseHasError(response)) {
5509
5516
  this.setState({ error: response.error.message });
@@ -5520,7 +5527,7 @@ class AdHocFiltersVariable extends SceneObjectBase {
5520
5527
  });
5521
5528
  }
5522
5529
  _getOperators() {
5523
- const { supportsMultiValueOperators, allowCustomValue } = this.state;
5530
+ const { supportsMultiValueOperators, allowCustomValue = true } = this.state;
5524
5531
  return OPERATORS.filter(({ isMulti, isRegex }) => {
5525
5532
  if (!supportsMultiValueOperators && isMulti) {
5526
5533
  return false;
@@ -5691,6 +5698,7 @@ class SceneQueryRunner extends SceneObjectBase {
5691
5698
  _onActivate() {
5692
5699
  if (this.isQueryModeAuto()) {
5693
5700
  const timeRange = sceneGraph.getTimeRange(this);
5701
+ const scopesBridge = sceneGraph.getScopesBridge(this);
5694
5702
  const providers = this.getClosestExtraQueryProviders();
5695
5703
  for (const provider of providers) {
5696
5704
  this._subs.add(
@@ -5701,6 +5709,7 @@ class SceneQueryRunner extends SceneObjectBase {
5701
5709
  })
5702
5710
  );
5703
5711
  }
5712
+ this.subscribeToScopesChanges(scopesBridge);
5704
5713
  this.subscribeToTimeRangeChanges(timeRange);
5705
5714
  if (this.shouldRunQueriesOnActivate()) {
5706
5715
  this.runQueries();
@@ -5846,6 +5855,21 @@ class SceneQueryRunner extends SceneObjectBase {
5846
5855
  isDataReadyToDisplay() {
5847
5856
  return Boolean(this.state._hasFetchedData);
5848
5857
  }
5858
+ subscribeToScopesChanges(scopesBridge) {
5859
+ if (!scopesBridge) {
5860
+ return;
5861
+ }
5862
+ if (this._scopesSubBridge === scopesBridge) {
5863
+ return;
5864
+ }
5865
+ if (this._scopesSub) {
5866
+ this._scopesSub.unsubscribe();
5867
+ }
5868
+ this._scopesSubBridge = scopesBridge;
5869
+ this._scopesSub = scopesBridge.subscribeToValue(() => {
5870
+ this.runWithTimeRangeAndScopes(sceneGraph.getTimeRange(this), scopesBridge);
5871
+ });
5872
+ }
5849
5873
  subscribeToTimeRangeChanges(timeRange) {
5850
5874
  if (this._timeSubRange === timeRange) {
5851
5875
  return;
@@ -5855,15 +5879,17 @@ class SceneQueryRunner extends SceneObjectBase {
5855
5879
  }
5856
5880
  this._timeSubRange = timeRange;
5857
5881
  this._timeSub = timeRange.subscribeToState(() => {
5858
- this.runWithTimeRange(timeRange);
5882
+ this.runWithTimeRangeAndScopes(timeRange, sceneGraph.getScopesBridge(this));
5859
5883
  });
5860
5884
  }
5861
5885
  runQueries() {
5862
5886
  const timeRange = sceneGraph.getTimeRange(this);
5887
+ const scopesBridge = sceneGraph.getScopesBridge(this);
5863
5888
  if (this.isQueryModeAuto()) {
5864
5889
  this.subscribeToTimeRangeChanges(timeRange);
5890
+ this.subscribeToScopesChanges(scopesBridge);
5865
5891
  }
5866
- this.runWithTimeRange(timeRange);
5892
+ this.runWithTimeRangeAndScopes(timeRange, scopesBridge);
5867
5893
  }
5868
5894
  getMaxDataPoints() {
5869
5895
  var _a;
@@ -5883,8 +5909,8 @@ class SceneQueryRunner extends SceneObjectBase {
5883
5909
  data: __spreadProps$m(__spreadValues$y({}, this.state.data), { state: schema.LoadingState.Done })
5884
5910
  });
5885
5911
  }
5886
- async runWithTimeRange(timeRange) {
5887
- var _a, _b, _c;
5912
+ async runWithTimeRangeAndScopes(timeRange, scopesBridge) {
5913
+ var _a, _b, _c, _d;
5888
5914
  if (!this.state.maxDataPoints && this.state.maxDataPointsFromWidth && !this._containerWidth) {
5889
5915
  return;
5890
5916
  }
@@ -5897,17 +5923,22 @@ class SceneQueryRunner extends SceneObjectBase {
5897
5923
  this.setState({ data: __spreadProps$m(__spreadValues$y({}, (_b = this.state.data) != null ? _b : emptyPanelData), { state: schema.LoadingState.Loading }) });
5898
5924
  return;
5899
5925
  }
5926
+ if (scopesBridge == null ? void 0 : scopesBridge.isLoading()) {
5927
+ writeSceneLog("SceneQueryRunner", "Scopes are in loading state, skipping query execution");
5928
+ this.setState({ data: __spreadProps$m(__spreadValues$y({}, (_c = this.state.data) != null ? _c : emptyPanelData), { state: schema.LoadingState.Loading }) });
5929
+ return;
5930
+ }
5900
5931
  const { queries } = this.state;
5901
5932
  if (!(queries == null ? void 0 : queries.length)) {
5902
5933
  this._setNoDataState();
5903
5934
  return;
5904
5935
  }
5905
5936
  try {
5906
- const datasource = (_c = this.state.datasource) != null ? _c : findFirstDatasource(queries);
5937
+ const datasource = (_d = this.state.datasource) != null ? _d : findFirstDatasource(queries);
5907
5938
  const ds = await getDataSource(datasource, this._scopedVars);
5908
5939
  this.findAndSubscribeToAdHocFilters(ds.uid);
5909
5940
  const runRequest = runtime.getRunRequest();
5910
- const { primary, secondaries, processors } = this.prepareRequests(timeRange, ds);
5941
+ const { primary, secondaries, processors } = this.prepareRequests(timeRange, ds, scopesBridge);
5911
5942
  writeSceneLog("SceneQueryRunner", "Starting runRequest", this.state.key);
5912
5943
  let stream = runRequest(ds, primary);
5913
5944
  if (secondaries.length > 0) {
@@ -5946,7 +5977,7 @@ class SceneQueryRunner extends SceneObjectBase {
5946
5977
  clone["_results"].next({ origin: this, data: (_a = this.state.data) != null ? _a : emptyPanelData });
5947
5978
  return clone;
5948
5979
  }
5949
- prepareRequests(timeRange, ds) {
5980
+ prepareRequests(timeRange, ds, scopesBridge) {
5950
5981
  var _a;
5951
5982
  const { minInterval, queries } = this.state;
5952
5983
  let request = __spreadValues$y({
@@ -5966,7 +5997,8 @@ class SceneQueryRunner extends SceneObjectBase {
5966
5997
  to: timeRange.state.to
5967
5998
  },
5968
5999
  cacheTimeout: this.state.cacheTimeout,
5969
- queryCachingTTL: this.state.queryCachingTTL
6000
+ queryCachingTTL: this.state.queryCachingTTL,
6001
+ scopes: scopesBridge == null ? void 0 : scopesBridge.getValue()
5970
6002
  }, getEnrichedDataRequest(this));
5971
6003
  if (this._adhocFiltersVar) {
5972
6004
  request.filters = this._adhocFiltersVar.state.filters.filter(isFilterComplete);
@@ -6934,6 +6966,108 @@ function containsSearchFilter(query) {
6934
6966
  return str.indexOf(SEARCH_FILTER_VARIABLE) > -1;
6935
6967
  }
6936
6968
 
6969
+ class SceneScopesBridge extends SceneObjectBase {
6970
+ constructor() {
6971
+ super(...arguments);
6972
+ this._urlSync = new SceneObjectUrlSyncConfig(this, { keys: ["scopes"] });
6973
+ this._renderBeforeActivation = true;
6974
+ this._contextSubject = new rxjs.BehaviorSubject(void 0);
6975
+ this._pendingScopes = null;
6976
+ }
6977
+ getUrlState() {
6978
+ var _a, _b, _c;
6979
+ return {
6980
+ scopes: (_c = this._pendingScopes) != null ? _c : ((_b = (_a = this.context) == null ? void 0 : _a.state.value) != null ? _b : []).map((scope) => scope.metadata.name)
6981
+ };
6982
+ }
6983
+ updateFromUrl(values) {
6984
+ var _a, _b;
6985
+ let scopes = (_a = values["scopes"]) != null ? _a : [];
6986
+ scopes = (Array.isArray(scopes) ? scopes : [scopes]).map(String);
6987
+ if (!this.context) {
6988
+ this._pendingScopes = scopes;
6989
+ return;
6990
+ }
6991
+ (_b = this.context) == null ? void 0 : _b.changeScopes(scopes);
6992
+ }
6993
+ getValue() {
6994
+ var _a, _b;
6995
+ return (_b = (_a = this.context) == null ? void 0 : _a.state.value) != null ? _b : [];
6996
+ }
6997
+ subscribeToValue(cb) {
6998
+ return this.contextObservable.pipe(
6999
+ rxjs.filter((context) => !!context && !context.state.loading),
7000
+ rxjs.pairwise(),
7001
+ rxjs.map(
7002
+ ([prevContext, newContext]) => {
7003
+ var _a, _b;
7004
+ return [(_a = prevContext == null ? void 0 : prevContext.state.value) != null ? _a : [], (_b = newContext == null ? void 0 : newContext.state.value) != null ? _b : []];
7005
+ }
7006
+ ),
7007
+ rxjs.filter(([prevScopes, newScopes]) => !lodash.isEqual(prevScopes, newScopes))
7008
+ ).subscribe(([prevScopes, newScopes]) => {
7009
+ cb(newScopes, prevScopes);
7010
+ });
7011
+ }
7012
+ isLoading() {
7013
+ var _a, _b;
7014
+ return (_b = (_a = this.context) == null ? void 0 : _a.state.loading) != null ? _b : false;
7015
+ }
7016
+ subscribeToLoading(cb) {
7017
+ return this.contextObservable.pipe(
7018
+ rxjs.filter((context) => !!context),
7019
+ rxjs.pairwise(),
7020
+ rxjs.map(
7021
+ ([prevContext, newContext]) => {
7022
+ var _a, _b;
7023
+ return [(_a = prevContext == null ? void 0 : prevContext.state.loading) != null ? _a : false, (_b = newContext == null ? void 0 : newContext.state.loading) != null ? _b : false];
7024
+ }
7025
+ ),
7026
+ rxjs.filter(([prevLoading, newLoading]) => prevLoading !== newLoading)
7027
+ ).subscribe(([_prevLoading, newLoading]) => {
7028
+ cb(newLoading);
7029
+ });
7030
+ }
7031
+ setEnabled(enabled) {
7032
+ var _a;
7033
+ (_a = this.context) == null ? void 0 : _a.setEnabled(enabled);
7034
+ }
7035
+ setReadOnly(readOnly) {
7036
+ var _a;
7037
+ (_a = this.context) == null ? void 0 : _a.setReadOnly(readOnly);
7038
+ }
7039
+ updateContext(newContext) {
7040
+ var _a, _b;
7041
+ if (this._pendingScopes && newContext) {
7042
+ setTimeout(() => {
7043
+ newContext == null ? void 0 : newContext.changeScopes(this._pendingScopes);
7044
+ this._pendingScopes = null;
7045
+ });
7046
+ }
7047
+ if (this.context !== newContext || ((_a = this.context) == null ? void 0 : _a.state) !== (newContext == null ? void 0 : newContext.state)) {
7048
+ const shouldUpdate = ((_b = this.context) == null ? void 0 : _b.state.value) !== (newContext == null ? void 0 : newContext.state.value);
7049
+ this._contextSubject.next(newContext);
7050
+ if (shouldUpdate) {
7051
+ this.forceRender();
7052
+ }
7053
+ }
7054
+ }
7055
+ get context() {
7056
+ return this._contextSubject.getValue();
7057
+ }
7058
+ get contextObservable() {
7059
+ return this._contextSubject.asObservable();
7060
+ }
7061
+ }
7062
+ SceneScopesBridge.Component = SceneScopesBridgeRenderer;
7063
+ function SceneScopesBridgeRenderer({ model }) {
7064
+ const context = runtime.useScopes();
7065
+ React.useEffect(() => {
7066
+ model.updateContext(context);
7067
+ }, [context, model]);
7068
+ return null;
7069
+ }
7070
+
6937
7071
  function getVariables(sceneObject) {
6938
7072
  var _a;
6939
7073
  return (_a = getClosest(sceneObject, (s) => s.state.$variables)) != null ? _a : EmptyVariableSet;
@@ -7077,6 +7211,10 @@ function findDescendents(scene, descendentType) {
7077
7211
  const targetScenes = findAllObjects(scene, isDescendentType);
7078
7212
  return targetScenes.filter(isDescendentType);
7079
7213
  }
7214
+ function getScopesBridge(sceneObject) {
7215
+ var _a;
7216
+ return (_a = findObject(sceneObject, (s) => s instanceof SceneScopesBridge)) != null ? _a : void 0;
7217
+ }
7080
7218
 
7081
7219
  const sceneGraph = {
7082
7220
  getVariables,
@@ -7093,7 +7231,8 @@ const sceneGraph = {
7093
7231
  findAllObjects,
7094
7232
  getAncestor,
7095
7233
  getQueryController,
7096
- findDescendents
7234
+ findDescendents,
7235
+ getScopesBridge
7097
7236
  };
7098
7237
 
7099
7238
  class UniqueUrlKeyMapper {
@@ -12836,6 +12975,10 @@ class SplitLayout extends SceneObjectBase {
12836
12975
  SplitLayout.Component = SplitLayoutRenderer;
12837
12976
 
12838
12977
  class SceneApp extends SceneObjectBase {
12978
+ constructor() {
12979
+ super(...arguments);
12980
+ this._renderBeforeActivation = true;
12981
+ }
12839
12982
  enrichDataRequest() {
12840
12983
  return {
12841
12984
  app: this.state.name || "app"
@@ -12843,8 +12986,10 @@ class SceneApp extends SceneObjectBase {
12843
12986
  }
12844
12987
  }
12845
12988
  SceneApp.Component = ({ model }) => {
12846
- const { pages } = model.useState();
12847
- return /* @__PURE__ */ React__default["default"].createElement(SceneAppContext.Provider, {
12989
+ const { pages, scopesBridge } = model.useState();
12990
+ return /* @__PURE__ */ React__default["default"].createElement(React__default["default"].Fragment, null, scopesBridge && /* @__PURE__ */ React__default["default"].createElement(scopesBridge.Component, {
12991
+ model: scopesBridge
12992
+ }), /* @__PURE__ */ React__default["default"].createElement(SceneAppContext.Provider, {
12848
12993
  value: model
12849
12994
  }, /* @__PURE__ */ React__default["default"].createElement(reactRouterDom.Routes, null, pages.map((page) => /* @__PURE__ */ React__default["default"].createElement(reactRouterDom.Route, {
12850
12995
  key: page.state.url,
@@ -12852,7 +12997,7 @@ SceneApp.Component = ({ model }) => {
12852
12997
  element: /* @__PURE__ */ React__default["default"].createElement(page.Component, {
12853
12998
  model: page
12854
12999
  })
12855
- }))));
13000
+ })))));
12856
13001
  };
12857
13002
  const SceneAppContext = React.createContext(null);
12858
13003
  const sceneAppCache = /* @__PURE__ */ new Map();
@@ -13207,6 +13352,21 @@ class SceneAppPage extends SceneObjectBase {
13207
13352
  super(state);
13208
13353
  this._sceneCache = /* @__PURE__ */ new Map();
13209
13354
  this._drilldownCache = /* @__PURE__ */ new Map();
13355
+ this._activationHandler = () => {
13356
+ if (!this.state.useScopes) {
13357
+ return;
13358
+ }
13359
+ this._scopesBridge = sceneGraph.getScopesBridge(this);
13360
+ if (!this._scopesBridge) {
13361
+ throw new Error("Use of scopes is enabled but no scopes bridge found");
13362
+ }
13363
+ this._scopesBridge.setEnabled(true);
13364
+ return () => {
13365
+ var _a;
13366
+ (_a = this._scopesBridge) == null ? void 0 : _a.setEnabled(false);
13367
+ };
13368
+ };
13369
+ this.addActivationHandler(this._activationHandler);
13210
13370
  }
13211
13371
  initializeScene(scene) {
13212
13372
  this.setState({ initializedScene: scene });
@@ -14206,6 +14366,7 @@ exports.SceneObjectUrlSyncConfig = SceneObjectUrlSyncConfig;
14206
14366
  exports.SceneQueryRunner = SceneQueryRunner;
14207
14367
  exports.SceneReactObject = SceneReactObject;
14208
14368
  exports.SceneRefreshPicker = SceneRefreshPicker;
14369
+ exports.SceneScopesBridge = SceneScopesBridge;
14209
14370
  exports.SceneTimePicker = SceneTimePicker;
14210
14371
  exports.SceneTimeRange = SceneTimeRange;
14211
14372
  exports.SceneTimeRangeCompare = SceneTimeRangeCompare;