@grafana/scenes 1.30.0 → 2.0.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.
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sources":["../../../src/variables/types.ts"],"sourcesContent":["import { Observable } from 'rxjs';\n\nimport { BusEventWithPayload } from '@grafana/data';\nimport { VariableType, VariableHide } from '@grafana/schema';\n\nimport { SceneObject, SceneObjectState } from '../core/types';\n\nexport interface SceneVariableState extends SceneObjectState {\n type: VariableType;\n name: string;\n label?: string;\n hide?: VariableHide;\n skipUrlSync?: boolean;\n loading?: boolean;\n error?: any | null;\n description?: string | null;\n}\n\nexport interface SceneVariable<TState extends SceneVariableState = SceneVariableState> extends SceneObject<TState> {\n /**\n * This function is called on activation or when a dependency changes.\n */\n validateAndUpdate?(): Observable<ValidateAndUpdateResult>;\n\n /**\n * Should return the value for the given field path\n */\n getValue(fieldPath?: string): VariableValue | undefined | null;\n\n /**\n * Should return the value display text, used by the \"text\" formatter\n * Example: ${podId:text}\n * Useful for variables that have non user friendly values but friendly display text names.\n */\n getValueText?(fieldPath?: string): string;\n\n /**\n * A special function that locally scoped variables can implement\n **/\n isAncestorLoading?(): boolean;\n\n /**\n * Allows cancelling variable execution.\n */\n onCancel?(): void;\n}\n\nexport type VariableValue = VariableValueSingle | VariableValueSingle[];\n\nexport type VariableValueSingle = string | boolean | number | CustomVariableValue;\n\n/**\n * This is for edge case values like the custom \"allValue\" that should not be escaped/formatted like other values\n * The custom all value usually contain wildcards that should not be escaped.\n */\nexport interface CustomVariableValue {\n /**\n * The format name or function used in the expression\n */\n formatter(formatNameOrFn?: string | VariableCustomFormatterFn): string;\n}\n\nexport interface ValidateAndUpdateResult {}\nexport interface VariableValueOption {\n label: string;\n value: VariableValueSingle;\n}\n\nexport interface SceneVariableSetState extends SceneObjectState {\n variables: SceneVariable[];\n}\n\nexport interface SceneVariables extends SceneObject<SceneVariableSetState> {\n /**\n * Will look for and return variable matching name\n */\n getByName(name: string): SceneVariable | undefined;\n /**\n * Will return true if the variable is loading or waiting for an update to complete.\n */\n isVariableLoadingOrWaitingToUpdate(variable: SceneVariable): boolean;\n}\n\nexport class SceneVariableValueChangedEvent extends BusEventWithPayload<SceneVariable> {\n public static type = 'scene-variable-changed-value';\n}\n\nexport interface SceneVariableDependencyConfigLike {\n /** Return all variable names this object depend on */\n getNames(): Set<string>;\n\n /** Used to check for dependency on a specific variable */\n hasDependencyOn(name: string): boolean;\n\n /**\n * Will be called when the VariableSet have completed an update process\n **/\n variableUpdatesCompleted(changedVariables: Set<SceneVariable>): void;\n}\n\n/**\n * Used in CustomFormatterFn\n */\nexport interface CustomFormatterVariable {\n name: string;\n type: VariableType;\n multi?: boolean;\n includeAll?: boolean;\n}\n\nexport type VariableCustomFormatterFn = (\n value: unknown,\n legacyVariableModel: Partial<CustomFormatterVariable>,\n legacyDefaultFormatter?: VariableCustomFormatterFn\n) => string;\n\nexport type InterpolationFormatParameter = string | VariableCustomFormatterFn | undefined;\n\nexport function isCustomVariableValue(value: VariableValue): value is CustomVariableValue {\n return typeof value === 'object' && 'formatter' in value;\n}\n"],"names":[],"mappings":";;AAmFO,MAAM,uCAAuC,mBAAmC,CAAA;AAEvF,CAAA;AAFa,8BAAA,CACG,IAAO,GAAA,8BAAA,CAAA;AAkChB,SAAS,sBAAsB,KAAoD,EAAA;AACxF,EAAO,OAAA,OAAO,KAAU,KAAA,QAAA,IAAY,WAAe,IAAA,KAAA,CAAA;AACrD;;;;"}
1
+ {"version":3,"file":"types.js","sources":["../../../src/variables/types.ts"],"sourcesContent":["import { Observable } from 'rxjs';\n\nimport { BusEventWithPayload } from '@grafana/data';\nimport { VariableType, VariableHide } from '@grafana/schema';\n\nimport { SceneObject, SceneObjectState } from '../core/types';\n\nexport interface SceneVariableState extends SceneObjectState {\n type: VariableType;\n name: string;\n label?: string;\n hide?: VariableHide;\n skipUrlSync?: boolean;\n loading?: boolean;\n error?: any | null;\n description?: string | null;\n}\n\nexport interface SceneVariable<TState extends SceneVariableState = SceneVariableState> extends SceneObject<TState> {\n /**\n * This function is called on activation or when a dependency changes.\n */\n validateAndUpdate?(): Observable<ValidateAndUpdateResult>;\n\n /**\n * Should return the value for the given field path\n */\n getValue(fieldPath?: string): VariableValue | undefined | null;\n\n /**\n * Should return the value display text, used by the \"text\" formatter\n * Example: ${podId:text}\n * Useful for variables that have non user friendly values but friendly display text names.\n */\n getValueText?(fieldPath?: string): string;\n\n /**\n * A special function that locally scoped variables can implement\n **/\n isAncestorLoading?(): boolean;\n\n /**\n * Allows cancelling variable execution.\n */\n onCancel?(): void;\n}\n\nexport type VariableValue = VariableValueSingle | VariableValueSingle[];\n\nexport type VariableValueSingle = string | boolean | number | CustomVariableValue;\n\n/**\n * This is for edge case values like the custom \"allValue\" that should not be escaped/formatted like other values\n * The custom all value usually contain wildcards that should not be escaped.\n */\nexport interface CustomVariableValue {\n /**\n * The format name or function used in the expression\n */\n formatter(formatNameOrFn?: string | VariableCustomFormatterFn): string;\n}\n\nexport interface ValidateAndUpdateResult {}\nexport interface VariableValueOption {\n label: string;\n value: VariableValueSingle;\n}\n\nexport interface SceneVariableSetState extends SceneObjectState {\n variables: SceneVariable[];\n}\n\nexport interface SceneVariables extends SceneObject<SceneVariableSetState> {\n /**\n * Will look for and return variable matching name\n */\n getByName(name: string): SceneVariable | undefined;\n /**\n * Will return true if the variable is loading or waiting for an update to complete.\n */\n isVariableLoadingOrWaitingToUpdate(variable: SceneVariable): boolean;\n}\n\nexport class SceneVariableValueChangedEvent extends BusEventWithPayload<SceneVariable> {\n public static type = 'scene-variable-changed-value';\n}\n\nexport interface SceneVariableDependencyConfigLike {\n /** Return all variable names this object depend on */\n getNames(): Set<string>;\n\n /** Used to check for dependency on a specific variable */\n hasDependencyOn(name: string): boolean;\n\n /**\n * Will be called when the VariableSet have completed an update process or when a variable has changed value.\n **/\n variableUpdateCompleted(variable: SceneVariable, hasChanged: boolean): void;\n}\n\n/**\n * Used in CustomFormatterFn\n */\nexport interface CustomFormatterVariable {\n name: string;\n type: VariableType;\n multi?: boolean;\n includeAll?: boolean;\n}\n\nexport type VariableCustomFormatterFn = (\n value: unknown,\n legacyVariableModel: Partial<CustomFormatterVariable>,\n legacyDefaultFormatter?: VariableCustomFormatterFn\n) => string;\n\nexport type InterpolationFormatParameter = string | VariableCustomFormatterFn | undefined;\n\nexport function isCustomVariableValue(value: VariableValue): value is CustomVariableValue {\n return typeof value === 'object' && 'formatter' in value;\n}\n"],"names":[],"mappings":";;AAmFO,MAAM,uCAAuC,mBAAmC,CAAA;AAEvF,CAAA;AAFa,8BAAA,CACG,IAAO,GAAA,8BAAA,CAAA;AAkChB,SAAS,sBAAsB,KAAoD,EAAA;AACxF,EAAO,OAAA,OAAO,KAAU,KAAA,QAAA,IAAY,WAAe,IAAA,KAAA,CAAA;AACrD;;;;"}
package/dist/index.d.ts CHANGED
@@ -102,9 +102,9 @@ interface SceneVariableDependencyConfigLike {
102
102
  /** Used to check for dependency on a specific variable */
103
103
  hasDependencyOn(name: string): boolean;
104
104
  /**
105
- * Will be called when the VariableSet have completed an update process
105
+ * Will be called when the VariableSet have completed an update process or when a variable has changed value.
106
106
  **/
107
- variableUpdatesCompleted(changedVariables: Set<SceneVariable>): void;
107
+ variableUpdateCompleted(variable: SceneVariable, hasChanged: boolean): void;
108
108
  }
109
109
  /**
110
110
  * Used in CustomFormatterFn
@@ -279,7 +279,6 @@ interface SceneDataLayerProviderState extends SceneObjectState {
279
279
  data?: PanelData;
280
280
  isEnabled?: boolean;
281
281
  isHidden?: boolean;
282
- _isWaitingForVariables?: boolean;
283
282
  }
284
283
  interface SceneDataLayerProvider extends SceneObject<SceneDataLayerProviderState> {
285
284
  topic: DataTopic;
@@ -412,6 +411,17 @@ interface RuntimeDataSourceOptions {
412
411
  */
413
412
  declare function registerRuntimeDataSource({ dataSource }: RuntimeDataSourceOptions): void;
414
413
 
414
+ /**
415
+ * @param root
416
+ * @returns the full scene url state as a object with keys and values
417
+ */
418
+ declare function getUrlState(root: SceneObject): SceneObjectUrlValues;
419
+ /**
420
+ * Exported util function to sync state from an initial url state.
421
+ * Useful for initializing an embedded scenes with a url state string.
422
+ */
423
+ declare function syncStateFromSearchParams(root: SceneObject, urlParams: URLSearchParams): void;
424
+
415
425
  interface FormatRegistryItem extends RegistryItem {
416
426
  formatter(value: VariableValue, args: string[], variable: FormatVariable): string;
417
427
  }
@@ -559,11 +569,14 @@ interface VariableDependencyConfigOptions<TState extends SceneObjectState> {
559
569
  * Optional way to customize how to handle when a dependent variable changes
560
570
  * If not specified the default behavior is to trigger a re-render
561
571
  */
562
- onReferencedVariableValueChanged?: () => void;
572
+ onReferencedVariableValueChanged?: (variable: SceneVariable) => void;
563
573
  /**
564
- * Optional way to customize how to handle when the variable system has completed an update
574
+ * Two scenarios trigger this callback to be called.
575
+ * 1. When any direct dependency changed value
576
+ * 2. In case hasDependencyInLoadingState was called and returned true we really care about any variable update. So in this scenario this callback is called
577
+ * after any variable update completes. This is to cover scenarios where an object is waiting for indirect dependencies to complete.
565
578
  */
566
- onVariableUpdatesCompleted?: (changedVariables: Set<SceneVariable>, dependencyChanged: boolean) => void;
579
+ onVariableUpdateCompleted?: () => void;
567
580
  }
568
581
  declare class VariableDependencyConfig<TState extends SceneObjectState> implements SceneVariableDependencyConfigLike {
569
582
  private _sceneObject;
@@ -571,6 +584,7 @@ declare class VariableDependencyConfig<TState extends SceneObjectState> implemen
571
584
  private _state;
572
585
  private _dependencies;
573
586
  private _statePaths?;
587
+ private _isWaitingForVariables;
574
588
  scanCount: number;
575
589
  constructor(_sceneObject: SceneObject<TState>, _options: VariableDependencyConfigOptions<TState>);
576
590
  /**
@@ -580,11 +594,8 @@ declare class VariableDependencyConfig<TState extends SceneObjectState> implemen
580
594
  /**
581
595
  * This is called whenever any set of variables have new values. It up to this implementation to check if it's relevant given the current dependencies.
582
596
  */
583
- variableUpdatesCompleted(changedVariables: Set<SceneVariable>): void;
584
- /**
585
- * Only way to force a re-render is to update state right now
586
- */
587
- private defaultHandlerReferencedVariableValueChanged;
597
+ variableUpdateCompleted(variable: SceneVariable, hasChanged: boolean): void;
598
+ hasDependencyInLoadingState(): boolean;
588
599
  getNames(): Set<string>;
589
600
  setPaths(paths: Array<keyof TState>): void;
590
601
  private scanStateForDependencies;
@@ -723,7 +734,6 @@ interface QueryRunnerState extends SceneObjectState {
723
734
  liveStreaming?: boolean;
724
735
  maxDataPointsFromWidth?: boolean;
725
736
  dataLayerFilter?: DataLayerFilter;
726
- _isWaitingForVariables?: boolean;
727
737
  _hasFetchedData?: boolean;
728
738
  }
729
739
  interface DataQueryExtended extends DataQuery$1 {
@@ -747,8 +757,17 @@ declare class SceneQueryRunner extends SceneObjectBase<QueryRunnerState> impleme
747
757
  private _handleDataLayers;
748
758
  private _onLayersReceived;
749
759
  /**
750
- * Handles some tricky cases where we need to run queries even when they have not changed in case
751
- * the query execution on activate was stopped due to VariableSet still not having processed all variables.
760
+ * This tries to start a new query whenever a variable completes or is changed.
761
+ *
762
+ * We care about variable update completions even when the variable has not changed and even when it is not a direct dependency.
763
+ * Example: Variables A and B (B depends on A). A update depends on time range. So when time change query runner will
764
+ * find that variable A is loading which is a dependency on of variable B so will set _isWaitingForVariables to true and
765
+ * not issue any query.
766
+ *
767
+ * When A completes it's loading (with no value change, so B never updates) it will cause a call of this function letting
768
+ * the query runner know that A has completed, and in case _isWaitingForVariables we try to run the query. The query will
769
+ * only run if all variables are in a non loading state so in other scenarios where a query depends on many variables this will
770
+ * be called many times until all dependencies are in a non loading state. *
752
771
  */
753
772
  private onVariableUpdatesCompleted;
754
773
  private shouldRunQueriesOnActivate;
@@ -976,7 +995,7 @@ declare abstract class SceneDataLayerBase<T extends SceneDataLayerProviderState>
976
995
  constructor(initialState: T, variableDependencyStatePaths?: Array<keyof T>);
977
996
  protected onActivate(): CancelActivationHandler;
978
997
  protected onDeactivate(): void;
979
- protected onVariableUpdatesCompleted(variables: Set<SceneVariable>, dependencyChanged: boolean): void;
998
+ protected onVariableUpdateCompleted(): void;
980
999
  cancelQuery(): void;
981
1000
  protected publishResults(data: PanelData, topic: DataTopic): void;
982
1001
  getResultsStream(): ReplaySubject<SceneDataLayerProviderResult>;
@@ -1223,11 +1242,11 @@ declare class SceneVariableSet extends SceneObjectBase<SceneVariableSetState> im
1223
1242
  }
1224
1243
  declare class SceneVariableSetVariableDependencyHandler implements SceneVariableDependencyConfigLike {
1225
1244
  private _variableUpdatesCompleted;
1226
- constructor(_variableUpdatesCompleted: (changedVariables: Set<SceneVariable>) => void);
1245
+ constructor(_variableUpdatesCompleted: (variable: SceneVariable, hasChanged: boolean) => void);
1227
1246
  private _emptySet;
1228
1247
  getNames(): Set<string>;
1229
1248
  hasDependencyOn(name: string): boolean;
1230
- variableUpdatesCompleted(changedVariables: Set<SceneVariable>): void;
1249
+ variableUpdateCompleted(variable: SceneVariable, hasChanged: boolean): void;
1231
1250
  }
1232
1251
 
1233
1252
  interface TestVariableState extends MultiValueVariableState {
@@ -1280,6 +1299,22 @@ interface UrlSyncManagerLike {
1280
1299
  cleanUp(root: SceneObject): void;
1281
1300
  getUrlState(root: SceneObject): SceneObjectUrlValues;
1282
1301
  }
1302
+ declare class UrlSyncManager implements UrlSyncManagerLike {
1303
+ private _urlKeyMapper;
1304
+ private _sceneRoot;
1305
+ private _stateSub;
1306
+ private _locationSub?;
1307
+ private _lastPath?;
1308
+ /**
1309
+ * Updates the current scene state to match URL state.
1310
+ */
1311
+ initSync(root: SceneObject): void;
1312
+ cleanUp(root: SceneObject): void;
1313
+ syncFrom(sceneObj: SceneObject): void;
1314
+ private _onLocationUpdate;
1315
+ private _onStateChanged;
1316
+ getUrlState(root: SceneObject): SceneObjectUrlValues;
1317
+ }
1283
1318
  declare function getUrlSyncManager(): UrlSyncManagerLike;
1284
1319
 
1285
1320
  interface EmbeddedSceneState extends SceneObjectState {
@@ -2192,6 +2227,8 @@ declare const sceneUtils: {
2192
2227
  registerRuntimeDataSource: typeof registerRuntimeDataSource;
2193
2228
  registerVariableMacro: typeof registerVariableMacro;
2194
2229
  cloneSceneObjectState: typeof cloneSceneObjectState;
2230
+ syncStateFromSearchParams: typeof syncStateFromSearchParams;
2231
+ getUrlState: typeof getUrlState;
2195
2232
  renderPrometheusLabelFilters: typeof renderPrometheusLabelFilters;
2196
2233
  isAdHocVariable: typeof isAdHocVariable;
2197
2234
  isConstantVariable: typeof isConstantVariable;
@@ -2202,4 +2239,4 @@ declare const sceneUtils: {
2202
2239
  isTextBoxVariable: typeof isTextBoxVariable;
2203
2240
  };
2204
2241
 
2205
- export { AdHocFilterSet, AdHocFiltersVariable, CancelActivationHandler, ConstantVariable, ControlsLayout, CustomFormatterVariable, CustomTransformOperator, CustomVariable, CustomVariableValue, DataLayerFilter, DataRequestEnricher, DataSourceVariable, DeepPartial, EmbeddedScene, EmbeddedSceneState, FieldConfigBuilders, FormatVariable, InterpolationFormatParameter, IntervalVariable, LocalValueVariable, MacroVariableConstructor, MultiValueVariable, NestedScene, PanelBuilders, PanelOptionsBuilders, QueryRunnerState, QueryVariable, RuntimeDataSource, SceneActivationHandler, SceneApp, SceneAppDrilldownView, SceneAppPage, SceneAppPageLike, SceneAppPageState, SceneAppRoute, SceneByFrameRepeater, SceneCSSGridItem, SceneCSSGridLayout, SceneCanvasText, SceneComponent, SceneComponentProps, SceneControlsSpacer, SceneDataLayerBase, SceneDataLayerControls, SceneDataLayerProvider, SceneDataLayerProviderResult, SceneDataLayerProviderState, SceneDataLayers, SceneDataNode, SceneDataProvider, SceneDataProviderResult, SceneDataProviderResultLike, SceneDataState, SceneDataTransformer, 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, SceneQueryRunner, SceneReactObject, SceneRefreshPicker, SceneRouteMatch, SceneStateChangedHandler, SceneStatelessBehavior, SceneTimePicker, SceneTimeRange, SceneTimeRangeCompare, SceneTimeRangeLike, SceneTimeRangeState, SceneTimeRangeTransformerBase, SceneTimeZoneOverride, SceneToolbarButton, SceneToolbarInput, SceneVariable, SceneVariableDependencyConfigLike, SceneVariableSet, SceneVariableSetState, SceneVariableState, SceneVariableValueChangedEvent, SceneVariables, SplitLayout, TestVariable, TextBoxVariable, UrlSyncManagerLike as UrlSyncManager, UserActionEvent, ValidateAndUpdateResult, VariableCustomFormatterFn, VariableDependencyConfig, VariableValue, VariableValueOption, VariableValueSelectors, VariableValueSingle, VizPanel, VizPanelBuilder, VizPanelMenu, VizPanelState, index$1 as behaviors, index as dataLayers, formatRegistry, getUrlSyncManager, isCustomVariableValue, isDataRequestEnricher, isSceneObject, registerRuntimeDataSource, sceneGraph, sceneUtils, useSceneApp };
2242
+ export { AdHocFilterSet, AdHocFiltersVariable, CancelActivationHandler, ConstantVariable, ControlsLayout, CustomFormatterVariable, CustomTransformOperator, CustomVariable, CustomVariableValue, DataLayerFilter, DataRequestEnricher, DataSourceVariable, DeepPartial, EmbeddedScene, EmbeddedSceneState, FieldConfigBuilders, FormatVariable, InterpolationFormatParameter, IntervalVariable, LocalValueVariable, MacroVariableConstructor, MultiValueVariable, NestedScene, PanelBuilders, PanelOptionsBuilders, QueryRunnerState, QueryVariable, RuntimeDataSource, SceneActivationHandler, SceneApp, SceneAppDrilldownView, SceneAppPage, SceneAppPageLike, SceneAppPageState, SceneAppRoute, SceneByFrameRepeater, SceneCSSGridItem, SceneCSSGridLayout, SceneCanvasText, SceneComponent, SceneComponentProps, SceneControlsSpacer, SceneDataLayerBase, SceneDataLayerControls, SceneDataLayerProvider, SceneDataLayerProviderResult, SceneDataLayerProviderState, SceneDataLayers, SceneDataNode, SceneDataProvider, SceneDataProviderResult, SceneDataProviderResultLike, SceneDataState, SceneDataTransformer, 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, SceneQueryRunner, SceneReactObject, SceneRefreshPicker, SceneRouteMatch, SceneStateChangedHandler, SceneStatelessBehavior, SceneTimePicker, SceneTimeRange, SceneTimeRangeCompare, SceneTimeRangeLike, SceneTimeRangeState, SceneTimeRangeTransformerBase, SceneTimeZoneOverride, SceneToolbarButton, SceneToolbarInput, SceneVariable, SceneVariableDependencyConfigLike, SceneVariableSet, SceneVariableSetState, SceneVariableState, SceneVariableValueChangedEvent, SceneVariables, SplitLayout, TestVariable, TextBoxVariable, UrlSyncManager, UrlSyncManagerLike, UserActionEvent, ValidateAndUpdateResult, VariableCustomFormatterFn, VariableDependencyConfig, VariableValue, VariableValueOption, VariableValueSelectors, VariableValueSingle, VizPanel, VizPanelBuilder, VizPanelMenu, VizPanelState, index$1 as behaviors, index as dataLayers, formatRegistry, getUrlSyncManager, isCustomVariableValue, isDataRequestEnricher, isSceneObject, registerRuntimeDataSource, sceneGraph, sceneUtils, useSceneApp };