@grafana/scenes 5.29.0--canary.992.12182926395.0 → 5.29.1--canary.990.12238644149.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,12 +1,12 @@
1
1
  import * as _grafana_data from '@grafana/data';
2
- import { BusEventWithPayload, PanelData, BusEvent, BusEventType, BusEventHandler, TimeRange, DataQueryRequest, DataSourceGetTagKeysOptions, DataSourceGetTagValuesOptions, DataTransformContext, DataFrame, UrlQueryMap, PanelPlugin, EventBus, DataQuery as DataQuery$1, DataSourceApi, Registry, RegistryItem, ScopedVars, AdHocVariableFilter, SelectableValue, MetricFindValue, GetTagResponse, VariableRefresh as VariableRefresh$1, VariableSort, EventFilterOptions, AnnotationEvent, AnnotationQuery, DataTransformerConfig, PanelMenuItem, FieldConfigSource, PanelModel, AbsoluteTimeRange, InterpolateFunction, IconName as IconName$1, PageLayoutType, FieldConfig, FieldType, FieldValueMatcherConfig, ScopedVar, RawTimeRange } from '@grafana/data';
2
+ import { BusEventWithPayload, PanelData, BusEvent, BusEventType, BusEventHandler, TimeRange, DataQueryRequest, DataSourceGetTagKeysOptions, DataSourceGetTagValuesOptions, DataTransformContext, DataFrame, UrlQueryMap, PanelPlugin, EventBus, DataQuery as DataQuery$1, DataSourceApi, Registry, RegistryItem, ScopedVars, AdHocVariableFilter, SelectableValue, MetricFindValue, GetTagResponse, VariableRefresh as VariableRefresh$1, VariableSort, Scope, EventFilterOptions, AnnotationEvent, AnnotationQuery, DataTransformerConfig, PanelMenuItem, FieldConfigSource, PanelModel, AbsoluteTimeRange, InterpolateFunction, IconName as IconName$1, PageLayoutType, FieldConfig, FieldType, FieldValueMatcherConfig, ScopedVar, RawTimeRange } from '@grafana/data';
3
3
  import * as React$1 from 'react';
4
4
  import React__default, { CSSProperties, ComponentType } from 'react';
5
5
  import * as rxjs from 'rxjs';
6
6
  import { Observable, Unsubscribable, MonoTypeOperatorFunction, Subscription, ReplaySubject } from 'rxjs';
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
- import { LocationService, VariableInterpolation } from '@grafana/runtime';
9
+ import { LocationService, ScopesContextValue, VariableInterpolation } from '@grafana/runtime';
10
10
  import { Location } from 'history';
11
11
  import { PanelContext, IconName } from '@grafana/ui';
12
12
  import ReactGridLayout from 'react-grid-layout';
@@ -629,8 +629,10 @@ declare class AdHocFiltersVariable extends SceneObjectBase<AdHocFiltersVariableS
629
629
  static Component: typeof AdHocFiltersVariableRenderer;
630
630
  private _scopedVars;
631
631
  private _dataSourceSrv;
632
+ private _scopesBridge;
632
633
  protected _urlSync: AdHocFiltersVariableUrlSyncHandler;
633
634
  constructor(state: Partial<AdHocFiltersVariableState>);
635
+ private _activationHandler;
634
636
  setState(update: Partial<AdHocFiltersVariableState>): void;
635
637
  getValue(): VariableValue | undefined;
636
638
  _updateFilter(filter: AdHocFilterWithLabels, update: Partial<AdHocFilterWithLabels>): void;
@@ -917,6 +919,7 @@ declare class GroupByVariable extends MultiValueVariable<GroupByVariableState> {
917
919
  static Component: typeof GroupByVariableRenderer;
918
920
  isLazy: boolean;
919
921
  protected _urlSync: SceneObjectUrlSyncHandler;
922
+ private _scopesBridge;
920
923
  validateAndUpdate(): Observable<ValidateAndUpdateResult>;
921
924
  private _updateValueGivenNewOptions;
922
925
  getValueOptions(args: VariableGetOptionsArgs): Observable<VariableValueOption[]>;
@@ -933,7 +936,7 @@ declare class GroupByVariable extends MultiValueVariable<GroupByVariableState> {
933
936
  text: string[];
934
937
  };
935
938
  }
936
- declare function GroupByVariableRenderer({ model }: SceneComponentProps<MultiValueVariable>): React__default.JSX.Element;
939
+ declare function GroupByVariableRenderer({ model }: SceneComponentProps<GroupByVariable>): React__default.JSX.Element;
937
940
 
938
941
  declare function isAdHocVariable(variable: SceneVariable): variable is AdHocFiltersVariable;
939
942
  declare function isConstantVariable(variable: SceneVariable): variable is ConstantVariable;
@@ -1034,6 +1037,41 @@ declare class UrlSyncManager implements UrlSyncManagerLike {
1034
1037
  getUrlState(root: SceneObject): SceneObjectUrlValues;
1035
1038
  }
1036
1039
 
1040
+ interface SceneObjectUrlSyncConfigOptions {
1041
+ keys: string[] | (() => string[]);
1042
+ }
1043
+ declare class SceneObjectUrlSyncConfig implements SceneObjectUrlSyncHandler {
1044
+ private _sceneObject;
1045
+ private _keys;
1046
+ private _nextChangeShouldAddHistoryStep;
1047
+ constructor(_sceneObject: SceneObjectWithUrlSync, _options: SceneObjectUrlSyncConfigOptions);
1048
+ getKeys(): string[];
1049
+ getUrlState(): SceneObjectUrlValues;
1050
+ updateFromUrl(values: SceneObjectUrlValues): void;
1051
+ performBrowserHistoryAction(callback: () => void): void;
1052
+ shouldCreateHistoryStep(values: SceneObjectUrlValues): boolean;
1053
+ }
1054
+
1055
+ declare class SceneScopesBridge extends SceneObjectBase implements SceneObjectWithUrlSync {
1056
+ static Component: typeof SceneScopesBridgeRenderer;
1057
+ protected _urlSync: SceneObjectUrlSyncConfig;
1058
+ protected _renderBeforeActivation: boolean;
1059
+ private _contextSubject;
1060
+ private _pendingScopes;
1061
+ getUrlState(): SceneObjectUrlValues;
1062
+ updateFromUrl(values: SceneObjectUrlValues): void;
1063
+ getValue(): Scope[];
1064
+ subscribeToValue(cb: (newScopes: Scope[], prevScopes: Scope[]) => void): Unsubscribable;
1065
+ isLoading(): boolean;
1066
+ subscribeToLoading(cb: (loading: boolean) => void): Unsubscribable;
1067
+ setEnabled(enabled: boolean): void;
1068
+ setReadOnly(readOnly: boolean): void;
1069
+ updateContext(newContext: ScopesContextValue | undefined): void;
1070
+ private get context();
1071
+ private get contextObservable();
1072
+ }
1073
+ declare function SceneScopesBridgeRenderer({ model }: SceneComponentProps<SceneScopesBridge>): null;
1074
+
1037
1075
  /**
1038
1076
  * Get the closest node with variables
1039
1077
  */
@@ -1112,6 +1150,10 @@ declare function getQueryController(sceneObject: SceneObject): SceneQueryControl
1112
1150
  * name urlSyncManager that is of type UrlSyncManager
1113
1151
  */
1114
1152
  declare function getUrlSyncManager(sceneObject: SceneObject): UrlSyncManagerLike | undefined;
1153
+ /**
1154
+ * Will walk up the scene object graph to the closest $scopesBridge scene object
1155
+ */
1156
+ declare function getScopesBridge(sceneObject: SceneObject): SceneScopesBridge | undefined;
1115
1157
 
1116
1158
  declare const sceneGraph: {
1117
1159
  getVariables: typeof getVariables;
@@ -1130,6 +1172,7 @@ declare const sceneGraph: {
1130
1172
  findDescendents: typeof findDescendents;
1131
1173
  getQueryController: typeof getQueryController;
1132
1174
  getUrlSyncManager: typeof getUrlSyncManager;
1175
+ getScopesBridge: typeof getScopesBridge;
1133
1176
  };
1134
1177
 
1135
1178
  interface ActWhenVariableChangedState extends SceneObjectState {
@@ -1294,21 +1337,6 @@ declare class SceneDataNode extends SceneObjectBase<SceneDataNodeState> implemen
1294
1337
  getResultsStream(): rxjs.Observable<SceneDataProviderResult>;
1295
1338
  }
1296
1339
 
1297
- interface SceneObjectUrlSyncConfigOptions {
1298
- keys: string[] | (() => string[]);
1299
- }
1300
- declare class SceneObjectUrlSyncConfig implements SceneObjectUrlSyncHandler {
1301
- private _sceneObject;
1302
- private _keys;
1303
- private _nextChangeShouldAddHistoryStep;
1304
- constructor(_sceneObject: SceneObjectWithUrlSync, _options: SceneObjectUrlSyncConfigOptions);
1305
- getKeys(): string[];
1306
- getUrlState(): SceneObjectUrlValues;
1307
- updateFromUrl(values: SceneObjectUrlValues): void;
1308
- performBrowserHistoryAction(callback: () => void): void;
1309
- shouldCreateHistoryStep(values: SceneObjectUrlValues): boolean;
1310
- }
1311
-
1312
1340
  declare class SceneTimeRange extends SceneObjectBase<SceneTimeRangeState> implements SceneTimeRangeLike {
1313
1341
  protected _urlSync: SceneObjectUrlSyncConfig;
1314
1342
  constructor(state?: Partial<SceneTimeRangeState>);
@@ -1383,6 +1411,8 @@ declare class SceneQueryRunner extends SceneObjectBase<QueryRunnerState> impleme
1383
1411
  private _dataLayersMerger;
1384
1412
  private _timeSub?;
1385
1413
  private _timeSubRange?;
1414
+ private _scopesSub?;
1415
+ private _scopesSubBridge?;
1386
1416
  private _containerWidth?;
1387
1417
  private _variableValueRecorder;
1388
1418
  private _results;
@@ -1421,11 +1451,12 @@ declare class SceneQueryRunner extends SceneObjectBase<QueryRunnerState> impleme
1421
1451
  private _onDeactivate;
1422
1452
  setContainerWidth(width: number): void;
1423
1453
  isDataReadyToDisplay(): boolean;
1454
+ private subscribeToScopesChanges;
1424
1455
  private subscribeToTimeRangeChanges;
1425
1456
  runQueries(): void;
1426
1457
  private getMaxDataPoints;
1427
1458
  cancelQuery(): void;
1428
- private runWithTimeRange;
1459
+ private runWithTimeRangeAndScopes;
1429
1460
  clone(withState?: Partial<QueryRunnerState>): this;
1430
1461
  private prepareRequests;
1431
1462
  private onDataReceived;
@@ -2267,6 +2298,7 @@ interface SceneAppState extends SceneObjectState {
2267
2298
  pages: SceneAppPageLike[];
2268
2299
  name?: string;
2269
2300
  urlSyncOptions?: SceneUrlSyncOptions;
2301
+ scopesBridge?: SceneScopesBridge;
2270
2302
  }
2271
2303
  interface SceneAppRoute {
2272
2304
  path: string;
@@ -2311,6 +2343,7 @@ interface SceneAppPageState extends SceneObjectState {
2311
2343
  */
2312
2344
  getFallbackPage?: () => SceneAppPageLike;
2313
2345
  layout?: PageLayoutType;
2346
+ useScopes?: boolean;
2314
2347
  }
2315
2348
  interface SceneAppPageLike extends SceneObject<SceneAppPageState>, DataRequestEnricher {
2316
2349
  initializeScene(scene: SceneObject): void;
@@ -2335,6 +2368,7 @@ interface SceneAppDrilldownView {
2335
2368
  * Responsible for top level pages routing
2336
2369
  */
2337
2370
  declare class SceneApp extends SceneObjectBase<SceneAppState> implements DataRequestEnricher {
2371
+ protected _renderBeforeActivation: boolean;
2338
2372
  enrichDataRequest(): {
2339
2373
  app: string;
2340
2374
  };
@@ -2352,7 +2386,9 @@ declare class SceneAppPage extends SceneObjectBase<SceneAppPageState> implements
2352
2386
  static Component: typeof SceneAppPageRenderer;
2353
2387
  private _sceneCache;
2354
2388
  private _drilldownCache;
2389
+ private _scopesBridge;
2355
2390
  constructor(state: SceneAppPageState);
2391
+ private _activationHandler;
2356
2392
  initializeScene(scene: EmbeddedScene): void;
2357
2393
  getScene(routeMatch: SceneRouteMatch): EmbeddedScene;
2358
2394
  getDrilldownPage(drilldown: SceneAppDrilldownView, routeMatch: SceneRouteMatch<{}>): SceneAppPageLike;
@@ -2853,4 +2889,4 @@ declare const sceneUtils: {
2853
2889
  isGroupByVariable: typeof isGroupByVariable;
2854
2890
  };
2855
2891
 
2856
- export { 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, 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 };
2892
+ export { 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, 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
@@ -2904,7 +2904,7 @@ class GroupByVariable extends MultiValueVariable {
2904
2904
  this.isLazy = true;
2905
2905
  this._urlSync = new GroupByVariableUrlSyncHandler(this);
2906
2906
  this._getKeys = async (ds) => {
2907
- var _a, _b, _c;
2907
+ var _a, _b, _c, _d;
2908
2908
  const override = await ((_b = (_a = this.state).getTagKeysProvider) == null ? void 0 : _b.call(_a, this, null));
2909
2909
  if (override && override.replace) {
2910
2910
  return override.values;
@@ -2921,7 +2921,8 @@ class GroupByVariable extends MultiValueVariable {
2921
2921
  const response = await ds.getTagKeys(__spreadValues$F({
2922
2922
  filters: otherFilters,
2923
2923
  queries,
2924
- timeRange
2924
+ timeRange,
2925
+ scopes: (_d = this._scopesBridge) == null ? void 0 : _d.getValue()
2925
2926
  }, getEnrichedFiltersRequest(this)));
2926
2927
  if (responseHasError(response)) {
2927
2928
  this.setState({ error: response.error.message });
@@ -2937,6 +2938,7 @@ class GroupByVariable extends MultiValueVariable {
2937
2938
  return keys;
2938
2939
  };
2939
2940
  this.addActivationHandler(() => {
2941
+ this._scopesBridge = sceneGraph.getScopesBridge(this);
2940
2942
  allActiveGroupByVariables.add(this);
2941
2943
  return () => allActiveGroupByVariables.delete(this);
2942
2944
  });
@@ -4986,9 +4988,13 @@ class AdHocFiltersVariable extends SceneObjectBase {
4986
4988
  this._scopedVars = { __sceneObject: wrapInSafeSerializableSceneObject(this) };
4987
4989
  this._dataSourceSrv = runtime.getDataSourceSrv();
4988
4990
  this._urlSync = new AdHocFiltersVariableUrlSyncHandler(this);
4991
+ this._activationHandler = () => {
4992
+ this._scopesBridge = sceneGraph.getScopesBridge(this);
4993
+ };
4989
4994
  if (this.state.applyMode === "auto") {
4990
4995
  patchGetAdhocFilters(this);
4991
4996
  }
4997
+ this.addActivationHandler(this._activationHandler);
4992
4998
  }
4993
4999
  setState(update) {
4994
5000
  let filterExpressionChanged = false;
@@ -5057,7 +5063,7 @@ class AdHocFiltersVariable extends SceneObjectBase {
5057
5063
  }
5058
5064
  }
5059
5065
  async _getKeys(currentKey) {
5060
- var _a, _b, _c;
5066
+ var _a, _b, _c, _d;
5061
5067
  const override = await ((_b = (_a = this.state).getTagKeysProvider) == null ? void 0 : _b.call(_a, this, currentKey));
5062
5068
  if (override && override.replace) {
5063
5069
  return dataFromResponse(override.values).map(toSelectableValue);
@@ -5075,7 +5081,8 @@ class AdHocFiltersVariable extends SceneObjectBase {
5075
5081
  const response = await ds.getTagKeys(__spreadValues$z({
5076
5082
  filters: otherFilters,
5077
5083
  queries,
5078
- timeRange
5084
+ timeRange,
5085
+ scopes: (_d = this._scopesBridge) == null ? void 0 : _d.getValue()
5079
5086
  }, getEnrichedFiltersRequest(this)));
5080
5087
  if (responseHasError(response)) {
5081
5088
  this.setState({ error: response.error.message });
@@ -5091,7 +5098,7 @@ class AdHocFiltersVariable extends SceneObjectBase {
5091
5098
  return keys.map(toSelectableValue);
5092
5099
  }
5093
5100
  async _getValuesFor(filter) {
5094
- var _a, _b, _c;
5101
+ var _a, _b, _c, _d;
5095
5102
  const override = await ((_b = (_a = this.state).getTagValuesProvider) == null ? void 0 : _b.call(_a, this, filter));
5096
5103
  if (override && override.replace) {
5097
5104
  return dataFromResponse(override.values).map(toSelectableValue);
@@ -5107,7 +5114,8 @@ class AdHocFiltersVariable extends SceneObjectBase {
5107
5114
  key: filter.key,
5108
5115
  filters: otherFilters,
5109
5116
  timeRange,
5110
- queries
5117
+ queries,
5118
+ scopes: (_d = this._scopesBridge) == null ? void 0 : _d.getValue()
5111
5119
  }, getEnrichedFiltersRequest(this)));
5112
5120
  if (responseHasError(response)) {
5113
5121
  this.setState({ error: response.error.message });
@@ -5284,6 +5292,7 @@ class SceneQueryRunner extends SceneObjectBase {
5284
5292
  _onActivate() {
5285
5293
  if (this.isQueryModeAuto()) {
5286
5294
  const timeRange = sceneGraph.getTimeRange(this);
5295
+ const scopesBridge = sceneGraph.getScopesBridge(this);
5287
5296
  const providers = this.getClosestExtraQueryProviders();
5288
5297
  for (const provider of providers) {
5289
5298
  this._subs.add(
@@ -5294,6 +5303,7 @@ class SceneQueryRunner extends SceneObjectBase {
5294
5303
  })
5295
5304
  );
5296
5305
  }
5306
+ this.subscribeToScopesChanges(scopesBridge);
5297
5307
  this.subscribeToTimeRangeChanges(timeRange);
5298
5308
  if (this.shouldRunQueriesOnActivate()) {
5299
5309
  this.runQueries();
@@ -5439,6 +5449,21 @@ class SceneQueryRunner extends SceneObjectBase {
5439
5449
  isDataReadyToDisplay() {
5440
5450
  return Boolean(this.state._hasFetchedData);
5441
5451
  }
5452
+ subscribeToScopesChanges(scopesBridge) {
5453
+ if (!scopesBridge) {
5454
+ return;
5455
+ }
5456
+ if (this._scopesSubBridge === scopesBridge) {
5457
+ return;
5458
+ }
5459
+ if (this._scopesSub) {
5460
+ this._scopesSub.unsubscribe();
5461
+ }
5462
+ this._scopesSubBridge = scopesBridge;
5463
+ this._scopesSub = scopesBridge.subscribeToValue(() => {
5464
+ this.runWithTimeRangeAndScopes(sceneGraph.getTimeRange(this), scopesBridge);
5465
+ });
5466
+ }
5442
5467
  subscribeToTimeRangeChanges(timeRange) {
5443
5468
  if (this._timeSubRange === timeRange) {
5444
5469
  return;
@@ -5448,15 +5473,17 @@ class SceneQueryRunner extends SceneObjectBase {
5448
5473
  }
5449
5474
  this._timeSubRange = timeRange;
5450
5475
  this._timeSub = timeRange.subscribeToState(() => {
5451
- this.runWithTimeRange(timeRange);
5476
+ this.runWithTimeRangeAndScopes(timeRange, sceneGraph.getScopesBridge(this));
5452
5477
  });
5453
5478
  }
5454
5479
  runQueries() {
5455
5480
  const timeRange = sceneGraph.getTimeRange(this);
5481
+ const scopesBridge = sceneGraph.getScopesBridge(this);
5456
5482
  if (this.isQueryModeAuto()) {
5457
5483
  this.subscribeToTimeRangeChanges(timeRange);
5484
+ this.subscribeToScopesChanges(scopesBridge);
5458
5485
  }
5459
- this.runWithTimeRange(timeRange);
5486
+ this.runWithTimeRangeAndScopes(timeRange, scopesBridge);
5460
5487
  }
5461
5488
  getMaxDataPoints() {
5462
5489
  var _a;
@@ -5476,8 +5503,8 @@ class SceneQueryRunner extends SceneObjectBase {
5476
5503
  data: __spreadProps$m(__spreadValues$y({}, this.state.data), { state: schema.LoadingState.Done })
5477
5504
  });
5478
5505
  }
5479
- async runWithTimeRange(timeRange) {
5480
- var _a, _b, _c;
5506
+ async runWithTimeRangeAndScopes(timeRange, scopesBridge) {
5507
+ var _a, _b, _c, _d;
5481
5508
  if (!this.state.maxDataPoints && this.state.maxDataPointsFromWidth && !this._containerWidth) {
5482
5509
  return;
5483
5510
  }
@@ -5490,17 +5517,22 @@ class SceneQueryRunner extends SceneObjectBase {
5490
5517
  this.setState({ data: __spreadProps$m(__spreadValues$y({}, (_b = this.state.data) != null ? _b : emptyPanelData), { state: schema.LoadingState.Loading }) });
5491
5518
  return;
5492
5519
  }
5520
+ if (scopesBridge == null ? void 0 : scopesBridge.isLoading()) {
5521
+ writeSceneLog("SceneQueryRunner", "Scopes are in loading state, skipping query execution");
5522
+ this.setState({ data: __spreadProps$m(__spreadValues$y({}, (_c = this.state.data) != null ? _c : emptyPanelData), { state: schema.LoadingState.Loading }) });
5523
+ return;
5524
+ }
5493
5525
  const { queries } = this.state;
5494
5526
  if (!(queries == null ? void 0 : queries.length)) {
5495
5527
  this._setNoDataState();
5496
5528
  return;
5497
5529
  }
5498
5530
  try {
5499
- const datasource = (_c = this.state.datasource) != null ? _c : findFirstDatasource(queries);
5531
+ const datasource = (_d = this.state.datasource) != null ? _d : findFirstDatasource(queries);
5500
5532
  const ds = await getDataSource(datasource, this._scopedVars);
5501
5533
  this.findAndSubscribeToAdHocFilters(datasource == null ? void 0 : datasource.uid);
5502
5534
  const runRequest = runtime.getRunRequest();
5503
- const { primary, secondaries, processors } = this.prepareRequests(timeRange, ds);
5535
+ const { primary, secondaries, processors } = this.prepareRequests(timeRange, ds, scopesBridge);
5504
5536
  writeSceneLog("SceneQueryRunner", "Starting runRequest", this.state.key);
5505
5537
  let stream = runRequest(ds, primary);
5506
5538
  if (secondaries.length > 0) {
@@ -5539,7 +5571,7 @@ class SceneQueryRunner extends SceneObjectBase {
5539
5571
  clone["_results"].next({ origin: this, data: (_a = this.state.data) != null ? _a : emptyPanelData });
5540
5572
  return clone;
5541
5573
  }
5542
- prepareRequests(timeRange, ds) {
5574
+ prepareRequests(timeRange, ds, scopesBridge) {
5543
5575
  var _a;
5544
5576
  const { minInterval, queries } = this.state;
5545
5577
  let request = __spreadValues$y({
@@ -5559,7 +5591,8 @@ class SceneQueryRunner extends SceneObjectBase {
5559
5591
  to: timeRange.state.to
5560
5592
  },
5561
5593
  cacheTimeout: this.state.cacheTimeout,
5562
- queryCachingTTL: this.state.queryCachingTTL
5594
+ queryCachingTTL: this.state.queryCachingTTL,
5595
+ scopes: scopesBridge == null ? void 0 : scopesBridge.getValue()
5563
5596
  }, getEnrichedDataRequest(this));
5564
5597
  if (this._adhocFiltersVar) {
5565
5598
  request.filters = this._adhocFiltersVar.state.filters.filter(isFilterComplete);
@@ -6486,6 +6519,108 @@ function containsSearchFilter(query) {
6486
6519
  return str.indexOf(SEARCH_FILTER_VARIABLE) > -1;
6487
6520
  }
6488
6521
 
6522
+ class SceneScopesBridge extends SceneObjectBase {
6523
+ constructor() {
6524
+ super(...arguments);
6525
+ this._urlSync = new SceneObjectUrlSyncConfig(this, { keys: ["scopes"] });
6526
+ this._renderBeforeActivation = true;
6527
+ this._contextSubject = new rxjs.BehaviorSubject(void 0);
6528
+ this._pendingScopes = null;
6529
+ }
6530
+ getUrlState() {
6531
+ var _a, _b, _c;
6532
+ return {
6533
+ scopes: (_c = this._pendingScopes) != null ? _c : ((_b = (_a = this.context) == null ? void 0 : _a.state.value) != null ? _b : []).map((scope) => scope.metadata.name)
6534
+ };
6535
+ }
6536
+ updateFromUrl(values) {
6537
+ var _a, _b;
6538
+ let scopes = (_a = values["scopes"]) != null ? _a : [];
6539
+ scopes = (Array.isArray(scopes) ? scopes : [scopes]).map(String);
6540
+ if (!this.context) {
6541
+ this._pendingScopes = scopes;
6542
+ return;
6543
+ }
6544
+ (_b = this.context) == null ? void 0 : _b.changeScopes(scopes);
6545
+ }
6546
+ getValue() {
6547
+ var _a, _b;
6548
+ return (_b = (_a = this.context) == null ? void 0 : _a.state.value) != null ? _b : [];
6549
+ }
6550
+ subscribeToValue(cb) {
6551
+ return this.contextObservable.pipe(
6552
+ rxjs.filter((context) => !!context && !context.state.loading),
6553
+ rxjs.pairwise(),
6554
+ rxjs.map(
6555
+ ([prevContext, newContext]) => {
6556
+ var _a, _b;
6557
+ return [(_a = prevContext == null ? void 0 : prevContext.state.value) != null ? _a : [], (_b = newContext == null ? void 0 : newContext.state.value) != null ? _b : []];
6558
+ }
6559
+ ),
6560
+ rxjs.filter(([prevScopes, newScopes]) => !lodash.isEqual(prevScopes, newScopes))
6561
+ ).subscribe(([prevScopes, newScopes]) => {
6562
+ cb(newScopes, prevScopes);
6563
+ });
6564
+ }
6565
+ isLoading() {
6566
+ var _a, _b;
6567
+ return (_b = (_a = this.context) == null ? void 0 : _a.state.loading) != null ? _b : false;
6568
+ }
6569
+ subscribeToLoading(cb) {
6570
+ return this.contextObservable.pipe(
6571
+ rxjs.filter((context) => !!context),
6572
+ rxjs.pairwise(),
6573
+ rxjs.map(
6574
+ ([prevContext, newContext]) => {
6575
+ var _a, _b;
6576
+ return [(_a = prevContext == null ? void 0 : prevContext.state.loading) != null ? _a : false, (_b = newContext == null ? void 0 : newContext.state.loading) != null ? _b : false];
6577
+ }
6578
+ ),
6579
+ rxjs.filter(([prevLoading, newLoading]) => prevLoading !== newLoading)
6580
+ ).subscribe(([_prevLoading, newLoading]) => {
6581
+ cb(newLoading);
6582
+ });
6583
+ }
6584
+ setEnabled(enabled) {
6585
+ var _a;
6586
+ (_a = this.context) == null ? void 0 : _a.setEnabled(enabled);
6587
+ }
6588
+ setReadOnly(readOnly) {
6589
+ var _a;
6590
+ (_a = this.context) == null ? void 0 : _a.setReadOnly(readOnly);
6591
+ }
6592
+ updateContext(newContext) {
6593
+ var _a, _b;
6594
+ if (this._pendingScopes && newContext) {
6595
+ setTimeout(() => {
6596
+ newContext == null ? void 0 : newContext.changeScopes(this._pendingScopes);
6597
+ this._pendingScopes = null;
6598
+ });
6599
+ }
6600
+ if (this.context !== newContext || ((_a = this.context) == null ? void 0 : _a.state) !== (newContext == null ? void 0 : newContext.state)) {
6601
+ const shouldUpdate = ((_b = this.context) == null ? void 0 : _b.state.value) !== (newContext == null ? void 0 : newContext.state.value);
6602
+ this._contextSubject.next(newContext);
6603
+ if (shouldUpdate) {
6604
+ this.forceRender();
6605
+ }
6606
+ }
6607
+ }
6608
+ get context() {
6609
+ return this._contextSubject.getValue();
6610
+ }
6611
+ get contextObservable() {
6612
+ return this._contextSubject.asObservable();
6613
+ }
6614
+ }
6615
+ SceneScopesBridge.Component = SceneScopesBridgeRenderer;
6616
+ function SceneScopesBridgeRenderer({ model }) {
6617
+ const context = runtime.useScopes();
6618
+ React.useEffect(() => {
6619
+ model.updateContext(context);
6620
+ }, [context, model]);
6621
+ return null;
6622
+ }
6623
+
6489
6624
  function getVariables(sceneObject) {
6490
6625
  var _a;
6491
6626
  return (_a = getClosest(sceneObject, (s) => s.state.$variables)) != null ? _a : EmptyVariableSet;
@@ -6653,6 +6788,10 @@ function getUrlSyncManager(sceneObject) {
6653
6788
  }
6654
6789
  return void 0;
6655
6790
  }
6791
+ function getScopesBridge(sceneObject) {
6792
+ var _a;
6793
+ return (_a = findObject(sceneObject, (s) => s instanceof SceneScopesBridge)) != null ? _a : void 0;
6794
+ }
6656
6795
 
6657
6796
  const sceneGraph = {
6658
6797
  getVariables,
@@ -6670,7 +6809,8 @@ const sceneGraph = {
6670
6809
  getAncestor,
6671
6810
  findDescendents,
6672
6811
  getQueryController,
6673
- getUrlSyncManager
6812
+ getUrlSyncManager,
6813
+ getScopesBridge
6674
6814
  };
6675
6815
 
6676
6816
  class UniqueUrlKeyMapper {
@@ -12355,6 +12495,10 @@ class SplitLayout extends SceneObjectBase {
12355
12495
  SplitLayout.Component = SplitLayoutRenderer;
12356
12496
 
12357
12497
  class SceneApp extends SceneObjectBase {
12498
+ constructor() {
12499
+ super(...arguments);
12500
+ this._renderBeforeActivation = true;
12501
+ }
12358
12502
  enrichDataRequest() {
12359
12503
  return {
12360
12504
  app: this.state.name || "app"
@@ -12362,15 +12506,17 @@ class SceneApp extends SceneObjectBase {
12362
12506
  }
12363
12507
  }
12364
12508
  SceneApp.Component = ({ model }) => {
12365
- const { pages } = model.useState();
12366
- return /* @__PURE__ */ React__default["default"].createElement(SceneAppContext.Provider, {
12509
+ const { pages, scopesBridge } = model.useState();
12510
+ return /* @__PURE__ */ React__default["default"].createElement(React__default["default"].Fragment, null, scopesBridge && /* @__PURE__ */ React__default["default"].createElement(scopesBridge.Component, {
12511
+ model: scopesBridge
12512
+ }), /* @__PURE__ */ React__default["default"].createElement(SceneAppContext.Provider, {
12367
12513
  value: model
12368
12514
  }, /* @__PURE__ */ React__default["default"].createElement(reactRouterDom.Switch, null, pages.map((page) => /* @__PURE__ */ React__default["default"].createElement(reactRouterDom.Route, {
12369
12515
  key: page.state.url,
12370
12516
  exact: false,
12371
12517
  path: page.state.url,
12372
12518
  render: (props) => renderSceneComponentWithRouteProps(page, props)
12373
- }))));
12519
+ })))));
12374
12520
  };
12375
12521
  const SceneAppContext = React.createContext(null);
12376
12522
  const sceneAppCache = /* @__PURE__ */ new Map();
@@ -12720,6 +12866,21 @@ class SceneAppPage extends SceneObjectBase {
12720
12866
  super(state);
12721
12867
  this._sceneCache = /* @__PURE__ */ new Map();
12722
12868
  this._drilldownCache = /* @__PURE__ */ new Map();
12869
+ this._activationHandler = () => {
12870
+ if (!this.state.useScopes) {
12871
+ return;
12872
+ }
12873
+ this._scopesBridge = sceneGraph.getScopesBridge(this);
12874
+ if (!this._scopesBridge) {
12875
+ throw new Error("Use of scopes is enabled but no scopes bridge found");
12876
+ }
12877
+ this._scopesBridge.setEnabled(true);
12878
+ return () => {
12879
+ var _a;
12880
+ (_a = this._scopesBridge) == null ? void 0 : _a.setEnabled(false);
12881
+ };
12882
+ };
12883
+ this.addActivationHandler(this._activationHandler);
12723
12884
  }
12724
12885
  initializeScene(scene) {
12725
12886
  this.setState({ initializedScene: scene });
@@ -13729,6 +13890,7 @@ exports.SceneObjectUrlSyncConfig = SceneObjectUrlSyncConfig;
13729
13890
  exports.SceneQueryRunner = SceneQueryRunner;
13730
13891
  exports.SceneReactObject = SceneReactObject;
13731
13892
  exports.SceneRefreshPicker = SceneRefreshPicker;
13893
+ exports.SceneScopesBridge = SceneScopesBridge;
13732
13894
  exports.SceneTimePicker = SceneTimePicker;
13733
13895
  exports.SceneTimeRange = SceneTimeRange;
13734
13896
  exports.SceneTimeRangeCompare = SceneTimeRangeCompare;