@grafana/scenes-react 5.23.1 → 5.23.2--canary.959.11726132276.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,91 @@
1
+ import { isPlainObject } from 'lodash';
2
+ import { LRUCache } from 'lru-cache';
3
+
4
+ var __accessCheck = (obj, member, msg) => {
5
+ if (!member.has(obj))
6
+ throw TypeError("Cannot " + msg);
7
+ };
8
+ var __privateGet = (obj, member, getter) => {
9
+ __accessCheck(obj, member, "read from private field");
10
+ return getter ? getter.call(obj) : member.get(obj);
11
+ };
12
+ var __privateAdd = (obj, member, value) => {
13
+ if (member.has(obj))
14
+ throw TypeError("Cannot add the same private member more than once");
15
+ member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
16
+ };
17
+ var __privateSet = (obj, member, value, setter) => {
18
+ __accessCheck(obj, member, "write to private field");
19
+ setter ? setter.call(obj, value) : member.set(obj, value);
20
+ return value;
21
+ };
22
+ var __privateWrapper = (obj, member, setter, getter) => {
23
+ return {
24
+ set _(value) {
25
+ __privateSet(obj, member, value, setter);
26
+ },
27
+ get _() {
28
+ return __privateGet(obj, member, getter);
29
+ }
30
+ };
31
+ };
32
+ var _cache, _objectRefIds, _objectRefIdCounter;
33
+ class SceneObjectCache {
34
+ constructor() {
35
+ __privateAdd(this, _cache, void 0);
36
+ __privateAdd(this, _objectRefIds, /* @__PURE__ */ new WeakMap());
37
+ __privateAdd(this, _objectRefIdCounter, 0);
38
+ __privateSet(this, _cache, new LRUCache({
39
+ max: 500,
40
+ ttl: 1e3 * 60 * 5
41
+ }));
42
+ }
43
+ add(keyHash, object) {
44
+ __privateGet(this, _cache).set(keyHash, object);
45
+ }
46
+ get(keyHash) {
47
+ return __privateGet(this, _cache).get(keyHash);
48
+ }
49
+ getHashKey(key, type) {
50
+ if (Array.isArray(key)) {
51
+ return `${type.name}-${key.map((k) => this.getHashKeyElement(k)).join()}`;
52
+ }
53
+ return `${type.name}-${this.getHashKeyElement(key)}`;
54
+ }
55
+ getByRefHashKey(obj) {
56
+ let objectRefId = __privateGet(this, _objectRefIds).get(obj);
57
+ if (objectRefId == null) {
58
+ objectRefId = __privateWrapper(this, _objectRefIdCounter)._++;
59
+ __privateGet(this, _objectRefIds).set(obj, objectRefId);
60
+ }
61
+ return objectRefId;
62
+ }
63
+ getHashKeyElement(key) {
64
+ if (typeof key === "string" || typeof key === "boolean" || typeof key === "number") {
65
+ return key;
66
+ }
67
+ return getObjectHash(key);
68
+ }
69
+ }
70
+ _cache = new WeakMap();
71
+ _objectRefIds = new WeakMap();
72
+ _objectRefIdCounter = new WeakMap();
73
+ let cache;
74
+ function getSceneObjectCache() {
75
+ if (cache) {
76
+ return cache;
77
+ }
78
+ return cache = new SceneObjectCache();
79
+ }
80
+ function getObjectHash(obj) {
81
+ return JSON.stringify(
82
+ obj,
83
+ (_, val) => isPlainObject(val) ? Object.keys(val).sort().reduce((result, key) => {
84
+ result[key] = val[key];
85
+ return result;
86
+ }, {}) : val
87
+ );
88
+ }
89
+
90
+ export { SceneObjectCache, getObjectHash, getSceneObjectCache };
91
+ //# sourceMappingURL=SceneObjectCache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SceneObjectCache.js","sources":["../../../src/caching/SceneObjectCache.ts"],"sourcesContent":["import { SceneObject } from '@grafana/scenes';\nimport { isPlainObject } from 'lodash';\nimport { LRUCache } from 'lru-cache';\n\nexport type CacheKey = CacheKeyPart | CacheKeyPart[];\n\nexport type CacheKeyPart = string | number | object | boolean;\n\nexport type SceneObjectConstructor = { new (...args: never[]): SceneObject };\n\nexport class SceneObjectCache {\n #cache: LRUCache<string, SceneObject>;\n #objectRefIds = new WeakMap<any, number>();\n #objectRefIdCounter = 0;\n\n public constructor() {\n this.#cache = new LRUCache({\n max: 500,\n ttl: 1000 * 60 * 5,\n });\n }\n\n public add(keyHash: string, object: SceneObject) {\n this.#cache.set(keyHash, object);\n }\n\n public get<T>(keyHash: string): T | undefined {\n return this.#cache.get(keyHash) as T;\n }\n\n public getHashKey(key: CacheKey, type: SceneObjectConstructor): string {\n if (Array.isArray(key)) {\n return `${type.name}-${key.map((k) => this.getHashKeyElement(k)).join()}`;\n }\n\n return `${type.name}-${this.getHashKeyElement(key)}`;\n }\n\n public getByRefHashKey(obj: unknown) {\n let objectRefId = this.#objectRefIds.get(obj);\n if (objectRefId == null) {\n objectRefId = this.#objectRefIdCounter++;\n this.#objectRefIds.set(obj, objectRefId);\n }\n\n return objectRefId;\n }\n\n private getHashKeyElement<T>(key: CacheKey) {\n if (typeof key === 'string' || typeof key === 'boolean' || typeof key === 'number') {\n return key;\n }\n\n return getObjectHash(key);\n }\n}\n\nlet cache: SceneObjectCache | undefined;\n\nexport function getSceneObjectCache(): SceneObjectCache {\n if (cache) {\n return cache;\n }\n\n return (cache = new SceneObjectCache());\n}\n\n/**\n * Returns a unique hash key string for the given object reference.\n */\nexport function cacheByRef(value: unknown) {\n const cache = getSceneObjectCache();\n return cache.getByRefHashKey(value);\n}\n\nexport function getObjectHash(obj: unknown): string {\n return JSON.stringify(obj, (_, val) =>\n isPlainObject(val)\n ? Object.keys(val)\n .sort()\n .reduce((result, key) => {\n result[key] = val[key];\n return result;\n }, {} as any)\n : val\n );\n}\n"],"names":[],"mappings":"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"}
@@ -1,23 +1,21 @@
1
- import { useId, useEffect } from 'react';
1
+ import { useEffect } from 'react';
2
2
  import { SceneQueryRunner } from '@grafana/scenes';
3
3
  import { isEqual } from 'lodash';
4
- import { useSceneContext } from './hooks.js';
4
+ import { useSceneObject } from './useSceneObject.js';
5
5
 
6
6
  function useQueryRunner(options) {
7
- const scene = useSceneContext();
8
- const key = useId();
9
- let queryRunner = scene.findByKey(key);
10
- if (!queryRunner) {
11
- queryRunner = new SceneQueryRunner({
7
+ const queryRunner = useSceneObject({
8
+ factory: (key) => new SceneQueryRunner({
12
9
  key,
13
10
  queries: options.queries,
14
11
  maxDataPoints: options.maxDataPoints,
15
12
  datasource: options.datasource,
16
13
  liveStreaming: options.liveStreaming,
17
14
  maxDataPointsFromWidth: options.maxDataPointsFromWidth
18
- });
19
- }
20
- useEffect(() => scene.addToScene(queryRunner), [queryRunner, scene]);
15
+ }),
16
+ objectConstructor: SceneQueryRunner,
17
+ cacheKey: options.cacheKey
18
+ });
21
19
  useEffect(() => {
22
20
  if (!isEqual(queryRunner.state.queries, options.queries)) {
23
21
  queryRunner.setState({ queries: options.queries });
@@ -1 +1 @@
1
- {"version":3,"file":"useQueryRunner.js","sources":["../../../src/hooks/useQueryRunner.ts"],"sourcesContent":["import { useEffect, useId } from 'react';\nimport { SceneDataQuery, SceneQueryRunner } from '@grafana/scenes';\nimport { DataSourceRef } from '@grafana/schema';\nimport { isEqual } from 'lodash';\nimport { useSceneContext } from './hooks';\n\nexport interface UseQueryOptions {\n queries: SceneDataQuery[];\n maxDataPoints?: number;\n datasource?: DataSourceRef;\n liveStreaming?: boolean;\n maxDataPointsFromWidth?: boolean;\n}\n\n/**\n * Maintains the state of SceneQueryRunner in the scene\n *\n * @example // To access query results do\n * const query = useQueryRunner(...);\n * const { data } = query.useState();\n */\nexport function useQueryRunner(options: UseQueryOptions): SceneQueryRunner {\n const scene = useSceneContext();\n const key = useId();\n\n let queryRunner = scene.findByKey<SceneQueryRunner>(key);\n\n if (!queryRunner) {\n queryRunner = new SceneQueryRunner({\n key: key,\n queries: options.queries,\n maxDataPoints: options.maxDataPoints,\n datasource: options.datasource,\n liveStreaming: options.liveStreaming,\n maxDataPointsFromWidth: options.maxDataPointsFromWidth,\n });\n }\n\n useEffect(() => scene.addToScene(queryRunner), [queryRunner, scene]);\n\n // Update queries when they change\n useEffect(() => {\n if (!isEqual(queryRunner.state.queries, options.queries)) {\n queryRunner.setState({ queries: options.queries });\n queryRunner.runQueries();\n }\n }, [queryRunner, options]);\n\n return queryRunner;\n}\n"],"names":[],"mappings":";;;;;AAqBO,SAAS,eAAe,OAA4C,EAAA;AACzE,EAAA,MAAM,QAAQ,eAAgB,EAAA,CAAA;AAC9B,EAAA,MAAM,MAAM,KAAM,EAAA,CAAA;AAElB,EAAI,IAAA,WAAA,GAAc,KAAM,CAAA,SAAA,CAA4B,GAAG,CAAA,CAAA;AAEvD,EAAA,IAAI,CAAC,WAAa,EAAA;AAChB,IAAA,WAAA,GAAc,IAAI,gBAAiB,CAAA;AAAA,MACjC,GAAA;AAAA,MACA,SAAS,OAAQ,CAAA,OAAA;AAAA,MACjB,eAAe,OAAQ,CAAA,aAAA;AAAA,MACvB,YAAY,OAAQ,CAAA,UAAA;AAAA,MACpB,eAAe,OAAQ,CAAA,aAAA;AAAA,MACvB,wBAAwB,OAAQ,CAAA,sBAAA;AAAA,KACjC,CAAA,CAAA;AAAA,GACH;AAEA,EAAU,SAAA,CAAA,MAAM,MAAM,UAAW,CAAA,WAAW,GAAG,CAAC,WAAA,EAAa,KAAK,CAAC,CAAA,CAAA;AAGnE,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,CAAC,OAAQ,CAAA,WAAA,CAAY,MAAM,OAAS,EAAA,OAAA,CAAQ,OAAO,CAAG,EAAA;AACxD,MAAA,WAAA,CAAY,QAAS,CAAA,EAAE,OAAS,EAAA,OAAA,CAAQ,SAAS,CAAA,CAAA;AACjD,MAAA,WAAA,CAAY,UAAW,EAAA,CAAA;AAAA,KACzB;AAAA,GACC,EAAA,CAAC,WAAa,EAAA,OAAO,CAAC,CAAA,CAAA;AAEzB,EAAO,OAAA,WAAA,CAAA;AACT;;;;"}
1
+ {"version":3,"file":"useQueryRunner.js","sources":["../../../src/hooks/useQueryRunner.ts"],"sourcesContent":["import { useEffect } from 'react';\nimport { SceneDataQuery, SceneQueryRunner } from '@grafana/scenes';\nimport { DataSourceRef } from '@grafana/schema';\nimport { isEqual } from 'lodash';\nimport { CacheKey } from '../caching/SceneObjectCache';\nimport { useSceneObject } from './useSceneObject';\n\nexport interface UseQueryOptions {\n queries: SceneDataQuery[];\n maxDataPoints?: number;\n datasource?: DataSourceRef;\n cacheKey?: CacheKey;\n liveStreaming?: boolean;\n maxDataPointsFromWidth?: boolean;\n}\n\n/**\n * Maintains the state of SceneQueryRunner in the scene\n *\n * @example // To access query results do\n * const query = useQueryRunner(...);\n * const { data } = query.useState();\n */\nexport function useQueryRunner(options: UseQueryOptions): SceneQueryRunner {\n const queryRunner = useSceneObject({\n factory: (key) =>\n new SceneQueryRunner({\n key: key,\n queries: options.queries,\n maxDataPoints: options.maxDataPoints,\n datasource: options.datasource,\n liveStreaming: options.liveStreaming,\n maxDataPointsFromWidth: options.maxDataPointsFromWidth,\n }),\n objectConstructor: SceneQueryRunner,\n cacheKey: options.cacheKey,\n });\n\n // Update queries when they change\n useEffect(() => {\n if (!isEqual(queryRunner.state.queries, options.queries)) {\n queryRunner.setState({ queries: options.queries });\n queryRunner.runQueries();\n }\n }, [queryRunner, options]);\n\n return queryRunner;\n}\n"],"names":[],"mappings":";;;;;AAuBO,SAAS,eAAe,OAA4C,EAAA;AACzE,EAAA,MAAM,cAAc,cAAe,CAAA;AAAA,IACjC,OAAS,EAAA,CAAC,GACR,KAAA,IAAI,gBAAiB,CAAA;AAAA,MACnB,GAAA;AAAA,MACA,SAAS,OAAQ,CAAA,OAAA;AAAA,MACjB,eAAe,OAAQ,CAAA,aAAA;AAAA,MACvB,YAAY,OAAQ,CAAA,UAAA;AAAA,MACpB,eAAe,OAAQ,CAAA,aAAA;AAAA,MACvB,wBAAwB,OAAQ,CAAA,sBAAA;AAAA,KACjC,CAAA;AAAA,IACH,iBAAmB,EAAA,gBAAA;AAAA,IACnB,UAAU,OAAQ,CAAA,QAAA;AAAA,GACnB,CAAA,CAAA;AAGD,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,CAAC,OAAQ,CAAA,WAAA,CAAY,MAAM,OAAS,EAAA,OAAA,CAAQ,OAAO,CAAG,EAAA;AACxD,MAAA,WAAA,CAAY,QAAS,CAAA,EAAE,OAAS,EAAA,OAAA,CAAQ,SAAS,CAAA,CAAA;AACjD,MAAA,WAAA,CAAY,UAAW,EAAA,CAAA;AAAA,KACzB;AAAA,GACC,EAAA,CAAC,WAAa,EAAA,OAAO,CAAC,CAAA,CAAA;AAEzB,EAAO,OAAA,WAAA,CAAA;AACT;;;;"}
@@ -0,0 +1,35 @@
1
+ import { useId, useEffect } from 'react';
2
+ import { sceneGraph } from '@grafana/scenes';
3
+ import { useSceneContext } from './hooks.js';
4
+ import { getSceneObjectCache } from '../caching/SceneObjectCache.js';
5
+
6
+ function useSceneObject(options) {
7
+ const scene = useSceneContext();
8
+ const key = useId();
9
+ const cache = getSceneObjectCache();
10
+ let cacheKeyHash = options.cacheKey ? cache.getHashKey(options.cacheKey, options.objectConstructor) : void 0;
11
+ let obj = scene.findByKey(key);
12
+ if (!obj && cacheKeyHash) {
13
+ obj = cache.get(cacheKeyHash);
14
+ if (obj && obj.parent !== scene) {
15
+ if (sceneGraph.findObject(scene, (sceneObj) => sceneObj === obj)) {
16
+ console.error("A scene object cache key matched an object that is already in the scene");
17
+ obj = void 0;
18
+ cacheKeyHash = void 0;
19
+ } else {
20
+ obj.clearParent();
21
+ }
22
+ }
23
+ }
24
+ if (!obj) {
25
+ obj = options.factory(key);
26
+ if (cacheKeyHash) {
27
+ cache.add(cacheKeyHash, obj);
28
+ }
29
+ }
30
+ useEffect(() => scene.addToScene(obj), [obj, scene]);
31
+ return obj;
32
+ }
33
+
34
+ export { useSceneObject };
35
+ //# sourceMappingURL=useSceneObject.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useSceneObject.js","sources":["../../../src/hooks/useSceneObject.ts"],"sourcesContent":["import { useEffect, useId } from 'react';\nimport { SceneObject, sceneGraph } from '@grafana/scenes';\nimport { useSceneContext } from './hooks';\nimport { CacheKey, SceneObjectConstructor, getSceneObjectCache } from '../caching/SceneObjectCache';\n\nexport interface UseSceneObjectProps<T extends SceneObject> {\n factory: (key: string) => T;\n cacheKey?: CacheKey;\n objectConstructor: SceneObjectConstructor;\n}\n\n/**\n * Helper hook that handles adding and removing the scene object from the scene object graph.\n * Also handles the lookup of the object from the cache if a cache key is provided.\n */\nexport function useSceneObject<T extends SceneObject>(options: UseSceneObjectProps<T>) {\n const scene = useSceneContext();\n const key = useId();\n const cache = getSceneObjectCache();\n let cacheKeyHash = options.cacheKey ? cache.getHashKey(options.cacheKey, options.objectConstructor) : undefined;\n\n let obj = scene.findByKey<T>(key);\n\n if (!obj && cacheKeyHash) {\n obj = cache.get<T>(cacheKeyHash);\n\n if (obj && obj.parent !== scene) {\n // Before clearing parent make sure the object is not already in the scene\n if (sceneGraph.findObject(scene, (sceneObj) => sceneObj === obj)) {\n console.error('A scene object cache key matched an object that is already in the scene');\n obj = undefined;\n // Setting this to undefined so that we later do not add/overwrite the object that is already in the scene\n cacheKeyHash = undefined;\n } else {\n obj.clearParent();\n }\n }\n }\n\n if (!obj) {\n obj = options.factory(key);\n if (cacheKeyHash) {\n cache.add(cacheKeyHash, obj);\n }\n }\n\n useEffect(() => scene.addToScene(obj), [obj, scene]);\n\n return obj;\n}\n"],"names":[],"mappings":";;;;;AAeO,SAAS,eAAsC,OAAiC,EAAA;AACrF,EAAA,MAAM,QAAQ,eAAgB,EAAA,CAAA;AAC9B,EAAA,MAAM,MAAM,KAAM,EAAA,CAAA;AAClB,EAAA,MAAM,QAAQ,mBAAoB,EAAA,CAAA;AAClC,EAAI,IAAA,YAAA,GAAe,QAAQ,QAAW,GAAA,KAAA,CAAM,WAAW,OAAQ,CAAA,QAAA,EAAU,OAAQ,CAAA,iBAAiB,CAAI,GAAA,KAAA,CAAA,CAAA;AAEtG,EAAI,IAAA,GAAA,GAAM,KAAM,CAAA,SAAA,CAAa,GAAG,CAAA,CAAA;AAEhC,EAAI,IAAA,CAAC,OAAO,YAAc,EAAA;AACxB,IAAM,GAAA,GAAA,KAAA,CAAM,IAAO,YAAY,CAAA,CAAA;AAE/B,IAAI,IAAA,GAAA,IAAO,GAAI,CAAA,MAAA,KAAW,KAAO,EAAA;AAE/B,MAAA,IAAI,WAAW,UAAW,CAAA,KAAA,EAAO,CAAC,QAAa,KAAA,QAAA,KAAa,GAAG,CAAG,EAAA;AAChE,QAAA,OAAA,CAAQ,MAAM,yEAAyE,CAAA,CAAA;AACvF,QAAM,GAAA,GAAA,KAAA,CAAA,CAAA;AAEN,QAAe,YAAA,GAAA,KAAA,CAAA,CAAA;AAAA,OACV,MAAA;AACL,QAAA,GAAA,CAAI,WAAY,EAAA,CAAA;AAAA,OAClB;AAAA,KACF;AAAA,GACF;AAEA,EAAA,IAAI,CAAC,GAAK,EAAA;AACR,IAAM,GAAA,GAAA,OAAA,CAAQ,QAAQ,GAAG,CAAA,CAAA;AACzB,IAAA,IAAI,YAAc,EAAA;AAChB,MAAM,KAAA,CAAA,GAAA,CAAI,cAAc,GAAG,CAAA,CAAA;AAAA,KAC7B;AAAA,GACF;AAEA,EAAU,SAAA,CAAA,MAAM,MAAM,UAAW,CAAA,GAAG,GAAG,CAAC,GAAA,EAAK,KAAK,CAAC,CAAA,CAAA;AAEnD,EAAO,OAAA,GAAA,CAAA;AACT;;;;"}
package/dist/index.d.ts CHANGED
@@ -3,10 +3,14 @@ import { DataSourceRef, DataTransformerConfig, VariableHide, VariableRefresh, Va
3
3
  import React from 'react';
4
4
  import { NavModelItem, AnnotationQuery, TimeRange } from '@grafana/data';
5
5
 
6
+ type CacheKey = CacheKeyPart | CacheKeyPart[];
7
+ type CacheKeyPart = string | number | object | boolean;
8
+
6
9
  interface UseQueryOptions {
7
10
  queries: SceneDataQuery[];
8
11
  maxDataPoints?: number;
9
12
  datasource?: DataSourceRef;
13
+ cacheKey?: CacheKey;
10
14
  liveStreaming?: boolean;
11
15
  maxDataPointsFromWidth?: boolean;
12
16
  }
package/dist/index.js CHANGED
@@ -6,6 +6,7 @@ var React = require('react');
6
6
  var scenes = require('@grafana/scenes');
7
7
  var lodash = require('lodash');
8
8
  var rxjs = require('rxjs');
9
+ var lruCache = require('lru-cache');
9
10
  var ui = require('@grafana/ui');
10
11
  var reactUse = require('react-use');
11
12
  var data = require('@grafana/data');
@@ -204,21 +205,133 @@ function useVariableInterpolator(options) {
204
205
  );
205
206
  }
206
207
 
207
- function useQueryRunner(options) {
208
+ var __accessCheck = (obj, member, msg) => {
209
+ if (!member.has(obj))
210
+ throw TypeError("Cannot " + msg);
211
+ };
212
+ var __privateGet = (obj, member, getter) => {
213
+ __accessCheck(obj, member, "read from private field");
214
+ return getter ? getter.call(obj) : member.get(obj);
215
+ };
216
+ var __privateAdd = (obj, member, value) => {
217
+ if (member.has(obj))
218
+ throw TypeError("Cannot add the same private member more than once");
219
+ member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
220
+ };
221
+ var __privateSet = (obj, member, value, setter) => {
222
+ __accessCheck(obj, member, "write to private field");
223
+ setter ? setter.call(obj, value) : member.set(obj, value);
224
+ return value;
225
+ };
226
+ var __privateWrapper = (obj, member, setter, getter) => {
227
+ return {
228
+ set _(value) {
229
+ __privateSet(obj, member, value, setter);
230
+ },
231
+ get _() {
232
+ return __privateGet(obj, member, getter);
233
+ }
234
+ };
235
+ };
236
+ var _cache, _objectRefIds, _objectRefIdCounter;
237
+ class SceneObjectCache {
238
+ constructor() {
239
+ __privateAdd(this, _cache, void 0);
240
+ __privateAdd(this, _objectRefIds, /* @__PURE__ */ new WeakMap());
241
+ __privateAdd(this, _objectRefIdCounter, 0);
242
+ __privateSet(this, _cache, new lruCache.LRUCache({
243
+ max: 500,
244
+ ttl: 1e3 * 60 * 5
245
+ }));
246
+ }
247
+ add(keyHash, object) {
248
+ __privateGet(this, _cache).set(keyHash, object);
249
+ }
250
+ get(keyHash) {
251
+ return __privateGet(this, _cache).get(keyHash);
252
+ }
253
+ getHashKey(key, type) {
254
+ if (Array.isArray(key)) {
255
+ return `${type.name}-${key.map((k) => this.getHashKeyElement(k)).join()}`;
256
+ }
257
+ return `${type.name}-${this.getHashKeyElement(key)}`;
258
+ }
259
+ getByRefHashKey(obj) {
260
+ let objectRefId = __privateGet(this, _objectRefIds).get(obj);
261
+ if (objectRefId == null) {
262
+ objectRefId = __privateWrapper(this, _objectRefIdCounter)._++;
263
+ __privateGet(this, _objectRefIds).set(obj, objectRefId);
264
+ }
265
+ return objectRefId;
266
+ }
267
+ getHashKeyElement(key) {
268
+ if (typeof key === "string" || typeof key === "boolean" || typeof key === "number") {
269
+ return key;
270
+ }
271
+ return getObjectHash(key);
272
+ }
273
+ }
274
+ _cache = new WeakMap();
275
+ _objectRefIds = new WeakMap();
276
+ _objectRefIdCounter = new WeakMap();
277
+ let cache;
278
+ function getSceneObjectCache() {
279
+ if (cache) {
280
+ return cache;
281
+ }
282
+ return cache = new SceneObjectCache();
283
+ }
284
+ function getObjectHash(obj) {
285
+ return JSON.stringify(
286
+ obj,
287
+ (_, val) => lodash.isPlainObject(val) ? Object.keys(val).sort().reduce((result, key) => {
288
+ result[key] = val[key];
289
+ return result;
290
+ }, {}) : val
291
+ );
292
+ }
293
+
294
+ function useSceneObject(options) {
208
295
  const scene = useSceneContext();
209
296
  const key = React.useId();
210
- let queryRunner = scene.findByKey(key);
211
- if (!queryRunner) {
212
- queryRunner = new scenes.SceneQueryRunner({
297
+ const cache = getSceneObjectCache();
298
+ let cacheKeyHash = options.cacheKey ? cache.getHashKey(options.cacheKey, options.objectConstructor) : void 0;
299
+ let obj = scene.findByKey(key);
300
+ if (!obj && cacheKeyHash) {
301
+ obj = cache.get(cacheKeyHash);
302
+ if (obj && obj.parent !== scene) {
303
+ if (scenes.sceneGraph.findObject(scene, (sceneObj) => sceneObj === obj)) {
304
+ console.error("A scene object cache key matched an object that is already in the scene");
305
+ obj = void 0;
306
+ cacheKeyHash = void 0;
307
+ } else {
308
+ obj.clearParent();
309
+ }
310
+ }
311
+ }
312
+ if (!obj) {
313
+ obj = options.factory(key);
314
+ if (cacheKeyHash) {
315
+ cache.add(cacheKeyHash, obj);
316
+ }
317
+ }
318
+ React.useEffect(() => scene.addToScene(obj), [obj, scene]);
319
+ return obj;
320
+ }
321
+
322
+ function useQueryRunner(options) {
323
+ const queryRunner = useSceneObject({
324
+ factory: (key) => new scenes.SceneQueryRunner({
213
325
  key,
214
326
  queries: options.queries,
215
327
  maxDataPoints: options.maxDataPoints,
216
328
  datasource: options.datasource,
217
329
  liveStreaming: options.liveStreaming,
218
330
  maxDataPointsFromWidth: options.maxDataPointsFromWidth
219
- });
220
- }
221
- React.useEffect(() => scene.addToScene(queryRunner), [queryRunner, scene]);
331
+ }),
332
+ objectConstructor: scenes.SceneQueryRunner,
333
+ cacheKey: options.cacheKey
334
+ });
222
335
  React.useEffect(() => {
223
336
  if (!lodash.isEqual(queryRunner.state.queries, options.queries)) {
224
337
  queryRunner.setState({ queries: options.queries });
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/utils.ts","../src/contexts/SceneContextObject.tsx","../src/contexts/SceneContextProvider.tsx","../src/hooks/hooks.ts","../src/hooks/useQueryRunner.ts","../src/hooks/useDataTransformer.ts","../src/components/TimeRangePicker.tsx","../src/components/VariableControl.tsx","../src/components/VizPanel.tsx","../src/components/RefreshPicker.tsx","../src/components/DataLayerControl.tsx","../src/variables/CustomVariable.tsx","../src/variables/DataSourceVariable.tsx","../src/variables/QueryVariable.tsx","../src/contexts/BreadcrumbContext.tsx","../src/hooks/useVariableValues.ts","../src/hooks/useQueryVariable.ts","../src/hooks/useVariableValue.ts","../src/components/AnnotationLayer.tsx","../src/interoperability/EmbeddedSceneWithContext.tsx","../src/components/VizGridLayout.tsx"],"sourcesContent":["export function writeSceneLog(logger: string, message: string, ...rest: unknown[]) {\n let loggingEnabled = false;\n\n if (typeof window !== 'undefined') {\n loggingEnabled = localStorage.getItem('grafana.debug.scenes') === 'true';\n }\n\n if (loggingEnabled) {\n console.log(`${logger}: `, message, ...rest);\n }\n}\n","import {\n SceneObjectBase,\n SceneObject,\n SceneObjectState,\n SceneVariable,\n SceneVariableSet,\n NewSceneObjectAddedEvent,\n} from '@grafana/scenes';\nimport { writeSceneLog } from '../utils';\n\nexport interface SceneContextObjectState extends SceneObjectState {\n childContexts?: SceneContextObject[];\n children: SceneObject[];\n}\n\nexport class SceneContextObject extends SceneObjectBase<SceneContextObjectState> {\n public constructor(state?: Partial<SceneContextObjectState>) {\n super({\n ...state,\n children: state?.children ?? [],\n childContexts: state?.childContexts ?? [],\n });\n }\n\n public addToScene(obj: SceneObject) {\n this.publishEvent(new NewSceneObjectAddedEvent(obj), true);\n\n this.setState({ children: [...this.state.children, obj] });\n writeSceneLog('SceneContext', `Adding to scene: ${obj.constructor.name} key: ${obj.state.key}`);\n\n const deactivate = obj.activate();\n\n return () => {\n writeSceneLog('SceneContext', `Removing from scene: ${obj.constructor.name} key: ${obj.state.key}`);\n this.setState({ children: this.state.children.filter((x) => x !== obj) });\n\n deactivate();\n };\n }\n\n public findByKey<T>(key: string): T | undefined {\n return this.state.children.find((x) => x.state.key === key) as T;\n }\n\n public findVariable<T>(name: string): T | undefined {\n const variables = this.state.$variables as SceneVariableSet;\n if (!variables) {\n return;\n }\n\n return variables.getByName(name) as T;\n }\n\n public addVariable(variable: SceneVariable) {\n let set = this.state.$variables as SceneVariableSet;\n\n this.publishEvent(new NewSceneObjectAddedEvent(variable), true);\n\n if (set) {\n set.setState({ variables: [...set.state.variables, variable] });\n } else {\n set = new SceneVariableSet({ variables: [variable] });\n this.setState({ $variables: set });\n }\n\n writeSceneLog('SceneContext', `Adding variable: ${variable.constructor.name} key: ${variable.state.key}`);\n\n return () => {\n set.setState({ variables: set.state.variables.filter((x) => x !== variable) });\n writeSceneLog('SceneContext', `Removing variable: ${variable.constructor.name} key: ${variable.state.key}`);\n };\n }\n\n public addChildContext(ctx: SceneContextObject) {\n this.publishEvent(new NewSceneObjectAddedEvent(ctx), true);\n\n this.setState({ childContexts: [...(this.state.childContexts ?? []), ctx] });\n\n writeSceneLog('SceneContext', `Adding child context: ${ctx.constructor.name} key: ${ctx.state.key}`);\n }\n\n public removeChildContext(ctx: SceneContextObject) {\n this.setState({\n childContexts: this.state.childContexts?.filter((context) => ctx !== context),\n });\n\n writeSceneLog('SceneContext', `Remvoing child context: ${ctx.constructor.name} key: ${ctx.state.key}`);\n }\n}\n","import React, { createContext, useContext, useEffect, useState } from 'react';\nimport { SceneTimeRangeState, SceneTimeRange, behaviors, UrlSyncContextProvider } from '@grafana/scenes';\n\nimport { SceneContextObject, SceneContextObjectState } from './SceneContextObject';\n\nexport const SceneContext = createContext<SceneContextObject | null>(null);\n\nexport interface SceneContextProviderProps {\n /**\n * Only the initial time range, cannot be used to update time range\n **/\n timeRange?: Partial<SceneTimeRangeState>;\n /**\n * This makes it possbile to view running state of queries via\n * refresh picker and also cancel all queries in the scene.\n */\n withQueryController?: boolean;\n /**\n * Children\n */\n children: React.ReactNode;\n}\n\n/**\n * Wrapps the react children in a SceneContext\n */\nexport function SceneContextProvider({ children, timeRange, withQueryController }: SceneContextProviderProps) {\n const parentContext = useContext(SceneContext);\n const [childContext, setChildContext] = useState<SceneContextObject | undefined>();\n\n // Becasue timeRange is not part of useEffect dependencies\n const initialTimeRange = timeRange;\n\n useEffect(() => {\n const state: SceneContextObjectState = { children: [] };\n\n if (withQueryController) {\n state.$behaviors = [new behaviors.SceneQueryController()];\n }\n\n if (initialTimeRange) {\n state.$timeRange = new SceneTimeRange(initialTimeRange);\n }\n\n const childContext = new SceneContextObject(state);\n\n if (parentContext) {\n parentContext.addChildContext(childContext);\n }\n\n const deactivate = childContext.activate();\n setChildContext(childContext);\n\n return () => {\n deactivate();\n\n if (parentContext) {\n parentContext.removeChildContext(childContext);\n }\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [parentContext, withQueryController]);\n\n if (!childContext) {\n return null;\n }\n\n const innerProvider = <SceneContext.Provider value={childContext}>{children}</SceneContext.Provider>;\n\n if (parentContext) {\n return innerProvider;\n }\n\n // For root context we wrap the provider in a UrlSyncWrapper that handles the hook that updates state on location changes\n return (\n <UrlSyncContextProvider scene={childContext} updateUrlOnInit={true} createBrowserHistorySteps={true}>\n {innerProvider}\n </UrlSyncContextProvider>\n );\n}\n","import { useCallback, useContext, useEffect, useState } from 'react';\nimport { SceneContext } from '../contexts/SceneContextProvider';\nimport { TimeRange } from '@grafana/data';\nimport {\n SceneVariable,\n SceneVariableValueChangedEvent,\n VariableValue,\n sceneGraph,\n SceneTimeRangeLike,\n} from '@grafana/scenes';\nimport { Subscription } from 'rxjs';\n\nexport function useSceneContext() {\n const scene = useContext(SceneContext);\n if (!scene) {\n throw new Error('Cannot find a SceneContext');\n }\n\n return scene;\n}\n\nexport function useTimeRange(): [TimeRange, SceneTimeRangeLike] {\n const scene = useSceneContext();\n const sceneTimeRange = sceneGraph.getTimeRange(scene);\n const { value } = sceneTimeRange.useState();\n\n return [value, sceneTimeRange];\n}\n\n/**\n * Only returns the variables on the closest context level.\n * We could modify it to extract all variables from the full context tree.\n */\nexport function useVariables(): SceneVariable[] {\n const scene = useSceneContext();\n const variables = sceneGraph.getVariables(scene);\n return variables.useState().variables;\n}\n\nexport interface UseUpdateWhenSceneChangesOptions {\n /** Variable names */\n variables?: string[];\n timeRange?: boolean;\n}\n\nexport interface UseUpdateWhenSceneChangesReason {\n variableName?: string;\n variableValue?: VariableValue | undefined | null;\n timeRange?: TimeRange;\n}\n\n/**\n * A utility hook to re-render the calling react component when specified variables or time range changes\n */\nexport function useUpdateWhenSceneChanges({ timeRange, variables = [] }: UseUpdateWhenSceneChangesOptions) {\n const scene = useSceneContext();\n const [updateReason, setUpdateReason] = useState<UseUpdateWhenSceneChangesReason>();\n\n useEffect(() => {\n const subscriptions = new Subscription();\n\n if (variables && variables.length > 0) {\n for (const v of variables) {\n const variable = sceneGraph.lookupVariable(v, scene);\n if (variable) {\n subscriptions.add(\n variable.subscribeToEvent(SceneVariableValueChangedEvent, () => {\n setUpdateReason({ variableName: variable.state.name, variableValue: variable.getValue() });\n })\n );\n }\n }\n }\n\n if (timeRange) {\n const tr = sceneGraph.getTimeRange(scene);\n tr.subscribeToState((newState, oldState) => {\n if (newState.value !== oldState.value) {\n setUpdateReason({ timeRange: newState.value });\n }\n });\n }\n\n return () => subscriptions.unsubscribe();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [scene, timeRange, ...variables]);\n\n return updateReason;\n}\n\n/**\n * Mainly a utility hook to re-render the calling react component when specified variables or time range changes\n */\nexport function useVariableInterpolator(options: UseUpdateWhenSceneChangesOptions) {\n const scene = useSceneContext();\n\n useUpdateWhenSceneChanges(options);\n\n return useCallback(\n (str: string) => {\n return sceneGraph.interpolate(scene, str);\n },\n [scene]\n );\n}\n","import { useEffect, useId } from 'react';\nimport { SceneDataQuery, SceneQueryRunner } from '@grafana/scenes';\nimport { DataSourceRef } from '@grafana/schema';\nimport { isEqual } from 'lodash';\nimport { useSceneContext } from './hooks';\n\nexport interface UseQueryOptions {\n queries: SceneDataQuery[];\n maxDataPoints?: number;\n datasource?: DataSourceRef;\n liveStreaming?: boolean;\n maxDataPointsFromWidth?: boolean;\n}\n\n/**\n * Maintains the state of SceneQueryRunner in the scene\n *\n * @example // To access query results do\n * const query = useQueryRunner(...);\n * const { data } = query.useState();\n */\nexport function useQueryRunner(options: UseQueryOptions): SceneQueryRunner {\n const scene = useSceneContext();\n const key = useId();\n\n let queryRunner = scene.findByKey<SceneQueryRunner>(key);\n\n if (!queryRunner) {\n queryRunner = new SceneQueryRunner({\n key: key,\n queries: options.queries,\n maxDataPoints: options.maxDataPoints,\n datasource: options.datasource,\n liveStreaming: options.liveStreaming,\n maxDataPointsFromWidth: options.maxDataPointsFromWidth,\n });\n }\n\n useEffect(() => scene.addToScene(queryRunner), [queryRunner, scene]);\n\n // Update queries when they change\n useEffect(() => {\n if (!isEqual(queryRunner.state.queries, options.queries)) {\n queryRunner.setState({ queries: options.queries });\n queryRunner.runQueries();\n }\n }, [queryRunner, options]);\n\n return queryRunner;\n}\n","import {\n CustomTransformerDefinition,\n DataProviderProxy,\n SceneDataProvider,\n SceneDataTransformer,\n} from '@grafana/scenes';\nimport { useSceneContext } from './hooks';\nimport { useEffect, useId } from 'react';\nimport { isEqual } from 'lodash';\nimport { DataTransformerConfig } from '@grafana/schema';\n\nexport interface UseDataTransformerOptions {\n transformations: Array<DataTransformerConfig | CustomTransformerDefinition>;\n data: SceneDataProvider;\n}\n\nexport function useDataTransformer(options: UseDataTransformerOptions) {\n const scene = useSceneContext();\n const key = useId();\n\n let dataTransformer = scene.findByKey<SceneDataTransformer>(key);\n\n if (!dataTransformer) {\n dataTransformer = new SceneDataTransformer({\n key: key,\n $data: new DataProviderProxy({ source: options.data.getRef() }),\n transformations: options.transformations,\n });\n }\n\n useEffect(() => scene.addToScene(dataTransformer), [dataTransformer, scene]);\n\n useEffect(() => {\n if (!isEqual(dataTransformer.state.transformations, options.transformations)) {\n dataTransformer.setState({ transformations: options.transformations });\n dataTransformer.reprocessTransformations();\n }\n }, [dataTransformer, options.transformations]);\n\n return dataTransformer;\n}\n","import { TimeRangePicker as TimeRangePickerUI } from '@grafana/ui';\nimport React from 'react';\nimport { useTimeRange } from '../hooks/hooks';\n\nexport interface Props {}\n\nexport function TimeRangePicker(props: Props) {\n const [value, sceneTimeRange] = useTimeRange();\n\n return (\n <TimeRangePickerUI\n isOnCanvas={true}\n value={value}\n onChange={sceneTimeRange.onTimeRangeChange}\n timeZone={sceneTimeRange.getTimeZone()}\n onMoveBackward={() => {}}\n onMoveForward={() => {}}\n onZoom={() => {}}\n onChangeTimeZone={() => {}}\n onChangeFiscalYearStartMonth={() => {}}\n />\n );\n}\n","import React from 'react';\nimport { ControlsLayout, sceneGraph, VariableValueSelectWrapper } from '@grafana/scenes';\nimport { useSceneContext } from '../hooks/hooks';\n\nexport interface Props {\n name: string;\n hideLabel?: boolean;\n layout?: ControlsLayout;\n}\n\nexport function VariableControl({ name, hideLabel, layout }: Props) {\n const scene = useSceneContext();\n const variable = sceneGraph.lookupVariable(name, scene);\n\n if (!variable) {\n return <div>Variable {name} not found</div>;\n }\n\n return (\n <VariableValueSelectWrapper key={variable.state.key} variable={variable} hideLabel={hideLabel} layout={layout} />\n );\n}\n","import React, { useEffect, useId } from 'react';\nimport {\n SceneDataProvider,\n VizPanel as VizPanelObject,\n VizPanelState,\n VizConfig,\n DataProviderProxy,\n SceneDataNode,\n} from '@grafana/scenes';\nimport { usePrevious } from 'react-use';\nimport { getPanelOptionsWithDefaults } from '@grafana/data';\nimport { writeSceneLog } from '../utils';\nimport { useSceneContext } from '../hooks/hooks';\n\nexport interface VizPanelProps {\n title: string;\n dataProvider?: SceneDataProvider;\n viz: VizConfig;\n headerActions?: React.ReactNode;\n}\n\nexport function VizPanel(props: VizPanelProps) {\n const { title, viz, dataProvider, headerActions } = props;\n const scene = useSceneContext();\n const key = useId();\n const prevProps = usePrevious(props);\n\n let panel = scene.findByKey<VizPanelObject>(key);\n\n if (!panel) {\n panel = new VizPanelObject({\n key: key,\n title: title,\n pluginId: viz.pluginId,\n pluginVersion: viz.pluginVersion,\n options: viz.options,\n fieldConfig: viz.fieldConfig,\n $data: getDataProviderForVizPanel(dataProvider),\n headerActions: headerActions,\n });\n }\n\n useEffect(() => scene.addToScene(panel), [panel, scene]);\n\n // Update options\n useEffect(() => {\n const stateUpdate: Partial<VizPanelState> = {};\n\n if (!prevProps) {\n return;\n }\n\n if (title !== prevProps.title) {\n stateUpdate.title = title;\n }\n\n if (headerActions !== prevProps.headerActions) {\n stateUpdate.headerActions = headerActions;\n }\n\n if (dataProvider !== prevProps.dataProvider) {\n stateUpdate.$data = getDataProviderForVizPanel(dataProvider);\n }\n\n if (viz !== prevProps.viz) {\n if (viz.pluginId === prevProps.viz.pluginId) {\n const plugin = panel.getPlugin();\n if (plugin) {\n const optionsWithDefaults = getPanelOptionsWithDefaults({\n plugin,\n currentOptions: viz.options,\n currentFieldConfig: viz.fieldConfig,\n isAfterPluginChange: false,\n });\n stateUpdate.options = optionsWithDefaults.options;\n stateUpdate.fieldConfig = optionsWithDefaults.fieldConfig;\n\n panel.clearFieldConfigCache();\n }\n }\n }\n\n if (Object.keys(stateUpdate).length > 0) {\n panel.setState(stateUpdate);\n writeSceneLog('VizPanel', 'Updating VizPanel state', stateUpdate);\n }\n }, [panel, title, headerActions, viz, dataProvider, prevProps]);\n\n return <panel.Component model={panel} />;\n}\n\n/**\n * Since the useQueryRunner attaches query runners to the scene context their parent is already set\n * This proxy is to work around that.\n * TODO: Figure out a better way to handle this'\n */\nfunction getDataProviderForVizPanel(data: SceneDataProvider | undefined): SceneDataProvider | undefined {\n if (data && !(data instanceof SceneDataNode)) {\n return new DataProviderProxy({ source: data.getRef() });\n }\n return data;\n}\n","import React, { useEffect, useId } from 'react';\nimport { useSceneContext } from '../hooks/hooks';\nimport { SceneRefreshPicker, SceneRefreshPickerState } from '@grafana/scenes';\nimport { usePrevious } from 'react-use';\n\nexport interface Props {\n refresh?: string;\n withText?: boolean;\n}\n\nexport function RefreshPicker(props: Props) {\n const scene = useSceneContext();\n const key = useId();\n const prevProps = usePrevious(props);\n\n let picker = scene.findByKey<SceneRefreshPicker>(key);\n\n if (!picker) {\n picker = new SceneRefreshPicker({\n key: key,\n ...props,\n });\n }\n\n useEffect(() => scene.addToScene(picker), [picker, scene]);\n\n // Update options\n useEffect(() => {\n const stateUpdate: Partial<SceneRefreshPickerState> = {};\n\n if (!prevProps) {\n return;\n }\n\n if (props.refresh !== prevProps.refresh) {\n stateUpdate.refresh = props.refresh;\n }\n\n if (props.withText !== prevProps.withText) {\n stateUpdate.withText = props.withText;\n }\n\n picker.setState(stateUpdate);\n }, [picker, props, prevProps]);\n\n return <picker.Component model={picker} />;\n}\n","import React from 'react';\nimport { SceneDataLayerProvider, SceneDataLayerSet, sceneGraph } from '@grafana/scenes';\nimport { useSceneContext } from '../hooks/hooks';\n\nexport interface Props {\n name: string;\n}\n\nexport function DataLayerControl({ name }: Props) {\n const scene = useSceneContext();\n const layerSets = sceneGraph.getDataLayers(scene);\n\n const layer = getLayer(layerSets, name);\n\n if (!layer) {\n return <div>Annotation {name} not found</div>;\n }\n\n return <layer.Component model={layer} />;\n}\n\nfunction getLayer(layers: SceneDataLayerProvider[], name: string): SceneDataLayerProvider | undefined {\n for (let i = 0; i < layers.length; i++) {\n const layer = (layers[i] as SceneDataLayerSet).state.layers.find((layer) => layer.state.name === name);\n\n if (layer) {\n return layer;\n }\n }\n\n return undefined;\n}\n","import React, { useEffect, useState } from 'react';\nimport { CustomVariable as CustomVariableObject } from '@grafana/scenes';\nimport { useSceneContext } from '../hooks/hooks';\nimport { VariableProps } from './types';\n\nexport interface CustomVariableProps extends VariableProps {\n query: string;\n isMulti?: boolean;\n includeAll?: boolean;\n children: React.ReactNode;\n}\n\nexport function CustomVariable({\n query,\n name,\n label,\n hide,\n initialValue,\n isMulti,\n includeAll,\n children,\n}: CustomVariableProps): React.ReactNode {\n const scene = useSceneContext();\n const [variableAdded, setVariableAdded] = useState<boolean>();\n\n let variable: CustomVariableObject | undefined = scene.findVariable(name);\n\n if (!variable) {\n variable = new CustomVariableObject({ name, label, query, value: initialValue, isMulti, includeAll, hide});\n }\n\n useEffect(() => {\n const removeFn = scene.addVariable(variable);\n setVariableAdded(true);\n return removeFn;\n }, [variable, scene, name]);\n\n useEffect(() => {\n variable?.setState({\n label,\n query,\n hide,\n isMulti,\n includeAll\n })\n }, [hide, includeAll, isMulti, label, query, variable]);\n\n // Need to block child rendering until the variable is added so that child components like RVariableSelect find the variable\n if (!variableAdded) {\n return null;\n }\n\n return children;\n}\n","import React, { useEffect, useState } from 'react';\nimport { DataSourceVariable as DataSourceVariableObject } from '@grafana/scenes';\nimport { useSceneContext } from '../hooks/hooks';\nimport { VariableRefresh, VariableSort } from '@grafana/schema';\nimport { VariableProps } from './types';\n\nexport interface DataSourceVariableProps extends VariableProps {\n pluginId: string;\n regex?: string;\n refresh?: VariableRefresh;\n sort?: VariableSort;\n isMulti?: boolean;\n includeAll?: boolean;\n children: React.ReactNode;\n}\n\nexport function DataSourceVariable({\n pluginId,\n regex,\n name,\n label,\n hide,\n initialValue,\n isMulti,\n includeAll,\n children,\n}: DataSourceVariableProps): React.ReactNode {\n const scene = useSceneContext();\n const [variableAdded, setVariableAdded] = useState<boolean>();\n\n let variable: DataSourceVariableObject | undefined = scene.findVariable(name);\n\n if (!variable) {\n variable = new DataSourceVariableObject({ \n pluginId,\n regex,\n name,\n label,\n value: initialValue, \n isMulti,\n hide, \n includeAll,\n });\n }\n\n useEffect(() => {\n const removeFn = scene.addVariable(variable);\n setVariableAdded(true);\n return removeFn;\n }, [variable, scene, name]);\n\n useEffect(() => {\n if (!variableAdded) {\n return;\n }\n\n if (\n variable.state.pluginId === pluginId &&\n variable.state.regex === regex &&\n variable.state.label === label &&\n variable.state.hide === hide &&\n variable.state.includeAll === includeAll\n ) {\n return;\n }\n\n variable.setState({\n pluginId,\n regex,\n label,\n hide, \n includeAll,\n })\n\n variable.refreshOptions();\n }, [hide, includeAll, label, pluginId, regex, variable, variableAdded])\n\n // Need to block child rendering until the variable is added so that child components like RVariableSelect find the variable\n if (!variableAdded) {\n return null;\n }\n\n return children;\n}\n","import React, { useEffect, useState } from 'react';\nimport { QueryVariable as QueryVariableObject, SceneDataQuery } from '@grafana/scenes';\nimport { useSceneContext } from '../hooks/hooks';\nimport { DataSourceRef, VariableRefresh, VariableSort } from '@grafana/schema';\nimport { VariableProps } from './types';\nimport { isEqual } from 'lodash';\n\nexport interface QueryVariableProps extends VariableProps {\n query: string | SceneDataQuery;\n datasource: DataSourceRef | null;\n regex?: string;\n refresh?: VariableRefresh;\n sort?: VariableSort;\n isMulti?: boolean;\n includeAll?: boolean;\n children: React.ReactNode;\n}\n\nexport function QueryVariable({\n query,\n name,\n datasource,\n label,\n hide,\n regex,\n refresh,\n sort,\n initialValue,\n isMulti,\n includeAll,\n children,\n}: QueryVariableProps): React.ReactNode {\n const scene = useSceneContext();\n const [variableAdded, setVariableAdded] = useState<boolean>();\n\n let variable: QueryVariableObject | undefined = scene.findVariable(name);\n\n if (!variable) {\n variable = new QueryVariableObject({ \n name,\n label,\n query,\n datasource, \n refresh, \n sort, \n regex, \n value: initialValue, \n isMulti,\n hide, \n includeAll,\n });\n }\n\n useEffect(() => {\n const removeFn = scene.addVariable(variable);\n setVariableAdded(true);\n return removeFn;\n }, [variable, scene, name]);\n\n useEffect(() => {\n if (!variableAdded) {\n return;\n }\n\n if (\n isEqual(variable.state.query, query) &&\n isEqual(variable.state.datasource, datasource) &&\n variable.state.regex === regex &&\n variable.state.label === label &&\n variable.state.hide === hide &&\n variable.state.includeAll === includeAll &&\n variable.state.refresh === refresh &&\n variable.state.sort === sort\n ) {\n return;\n }\n\n variable.setState({\n label,\n query,\n datasource, \n refresh, \n sort, \n regex, \n hide, \n includeAll,\n });\n\n variable.refreshOptions();\n }, [datasource, hide, includeAll, label, query, refresh, regex, sort, variable, variableAdded]);\n \n\n // Need to block child rendering until the variable is added so that child components like RVariableSelect find the variable\n if (!variableAdded) {\n return null;\n }\n\n return children;\n}\n","import { NavModelItem, UrlQueryMap, urlUtil } from '@grafana/data';\nimport { locationSearchToObject, locationService } from '@grafana/runtime';\nimport React, { createContext, useCallback, useContext, useEffect, useMemo, useState } from 'react';\nimport { useLocation } from 'react-router-dom';\nimport { useTimeRange, useVariables } from '../hooks/hooks';\n\n/**\n * Code and concepts copied from https://github.com/grafana/hackathon-2023-12-grafana-react/blob/main/src/grafana-react\n *\n * These contexts & components needs some more thought and naming considerations, just a quick proof of concept for now.\n */\n\ntype BreadcrumbItem = Pick<NavModelItem, 'text' | 'url'>;\n\nexport interface BreadcrumbContextValue {\n breadcrumbs: BreadcrumbItem[];\n addBreadcrumb(breadcrumb: BreadcrumbItem): void;\n removeBreadcrumb(breadcrumb: BreadcrumbItem): void;\n}\n\nexport const BreadcrumbContext = createContext<BreadcrumbContextValue>({\n breadcrumbs: [],\n addBreadcrumb: () => {},\n removeBreadcrumb: () => {},\n});\n\nexport function BreadcrumbProvider({ children }: { children: React.ReactNode }) {\n const [breadcrumbs, setBreadcrumbs] = useState<BreadcrumbItem[]>([]);\n\n return (\n <BreadcrumbContext.Provider\n value={{\n breadcrumbs,\n addBreadcrumb: useCallback((breadcrumb: BreadcrumbItem) => setBreadcrumbs((prev) => [...prev, breadcrumb]), []),\n removeBreadcrumb: useCallback(\n (breadcrumb: BreadcrumbItem) => setBreadcrumbs((prev) => prev.filter((b) => b.url !== breadcrumb.url)),\n []\n ),\n }}\n >\n {children}\n </BreadcrumbContext.Provider>\n );\n}\n\nexport interface BreadcrumbProps {\n text: string;\n path: string;\n extraKeys?: string[];\n}\n\nexport function Breadcrumb({ text, path, extraKeys }: BreadcrumbProps): React.ReactNode {\n const { addBreadcrumb, removeBreadcrumb } = useContext(BreadcrumbContext);\n\n const buildUrl = useUrlBuilder();\n\n useEffect(() => {\n const breadcrumb = {\n text,\n url: buildUrl(path, extraKeys),\n };\n\n addBreadcrumb(breadcrumb);\n\n return () => {\n removeBreadcrumb(breadcrumb);\n };\n }, [text, path, extraKeys, addBreadcrumb, buildUrl, removeBreadcrumb]);\n\n return null;\n}\n\nfunction useUrlBuilder() {\n const queryParams = useQueryParams()[0];\n const variables = useVariables();\n const [_, timeRange] = useTimeRange();\n\n return useCallback(\n (urlBase: string, extraKeys: string[] | undefined) => {\n const params: UrlQueryMap = {};\n\n for (const v of variables) {\n if (v.urlSync && !v.state.skipUrlSync) {\n const state = v.urlSync.getUrlState();\n Object.assign(params, state);\n }\n }\n\n if (timeRange.urlSync) {\n const state = timeRange.urlSync.getUrlState();\n Object.assign(params, state);\n }\n\n if (extraKeys) {\n for (const extra of extraKeys) {\n if (queryParams[extra]) {\n params[extra] = queryParams[extra];\n }\n }\n }\n\n return urlUtil.renderUrl(urlBase, params);\n },\n [variables, queryParams, timeRange]\n );\n}\n\nfunction useQueryParams(): [UrlQueryMap, (values: UrlQueryMap, replace?: boolean) => void] {\n const { search } = useLocation();\n const queryParams = useMemo(() => locationSearchToObject(search || ''), [search]);\n const update = useCallback((values: UrlQueryMap, replace?: boolean) => locationService.partial(values, replace), []);\n return [queryParams, update];\n}\n","import { SceneVariables, VariableValueSingle, sceneGraph } from '@grafana/scenes';\nimport { useSceneContext } from './hooks';\n\nexport function useVariableValues<T = VariableValueSingle>(name: string): [T[] | undefined, boolean] {\n const scene = useSceneContext();\n const variable = sceneGraph.lookupVariable(name, scene);\n\n if (!variable) {\n return [undefined, false];\n }\n\n variable.useState();\n\n const set = variable.parent as SceneVariables;\n const isLoading = set.isVariableLoadingOrWaitingToUpdate(variable);\n let value = variable.getValue();\n\n if (value == null) {\n return [undefined, isLoading];\n }\n\n if (!Array.isArray(value)) {\n value = [value];\n }\n\n return [value as T[], isLoading];\n}\n","import { QueryVariable, SceneDataQuery, sceneGraph } from '@grafana/scenes';\nimport { useSceneContext } from './hooks';\nimport { useEffect } from 'react';\nimport { isEqual } from 'lodash';\n\ninterface QueryVariableOptions {\n name: string;\n datasource: string;\n query: string | SceneDataQuery;\n regex?: string;\n}\n\n/**\n * A custom hook that creates or updates a `QueryVariable` in the scene context.\n * \n * @param {QueryVariableOptions} options - Options for configuring the `QueryVariable`.\n * @returns {QueryVariable | null} The `QueryVariable` instance or `null`.\n * \n * @example\n * // Usage example\n * const variable = useQueryVariable({\n * name: \"myQueryVariable\",\n * datasource: \"gdev-testdata\",\n * query: \"*\",\n * regex: \".*someFilter.*\"\n * });\n * \n * // Returns a QueryVariable instance or null if not a valid QueryVariable\n * if (variable) {\n * console.log(\"Variable added to the scene:\", variable);\n * }\n */\nexport function useQueryVariable(options: QueryVariableOptions): QueryVariable | null {\n const scene = useSceneContext();\n let variable = sceneGraph.lookupVariable(options.name, scene);\n\n if (!variable) {\n variable = new QueryVariable({ name: options.name, datasource: { uid: options.datasource }, query: options.query, regex: options.regex });\n }\n\n if (!(variable instanceof QueryVariable)) {\n variable = null;\n }\n\n useEffect(() => {\n if (variable) {\n scene.addVariable(variable)\n }\n }, [variable, scene]);\n\n useEffect(() => {\n if (\n variable?.state.datasource?.uid !== options.datasource ||\n !isEqual(variable?.state.query, options.query) ||\n variable?.state.regex !== options.regex\n ) {\n variable?.setState({ datasource: { uid: options.datasource }, query: options.query, regex: options.regex });\n variable?.refreshOptions();\n }\n }, [options, variable]);\n\n return variable;\n}\n","import { MultiValueVariable, SceneVariables, VariableValueSingle, sceneGraph } from '@grafana/scenes';\nimport { useSceneContext } from './hooks';\n\nexport function useVariableValue<T = VariableValueSingle>(name: string): [T | undefined, boolean] {\n const scene = useSceneContext();\n const variable = sceneGraph.lookupVariable(name, scene);\n\n if (!variable || (variable instanceof MultiValueVariable && variable.state.isMulti === true)) {\n return [undefined, false];\n }\n\n variable.useState();\n\n const set = variable.parent as SceneVariables;\n const isLoading = set.isVariableLoadingOrWaitingToUpdate(variable);\n let value = variable.getValue();\n\n if (value == null) {\n return [undefined, isLoading];\n }\n\n return [value as T, isLoading];\n}\n","import React, { useEffect, useState } from 'react';\nimport { useSceneContext } from '../hooks/hooks';\nimport { AnnotationQuery } from '@grafana/data';\nimport { SceneDataLayerSet, dataLayers } from '@grafana/scenes';\nimport { SceneContextObject } from '../contexts/SceneContextObject';\nimport { writeSceneLog } from '../utils';\n\nexport interface AnnotationLayerSetProps {\n name: string;\n query: AnnotationQuery;\n children: React.ReactNode;\n}\n\nexport function AnnotationLayer({ name, query, children }: AnnotationLayerSetProps): React.ReactNode {\n const scene = useSceneContext();\n const [annotationAdded, setAnnotationAdded] = useState<boolean>();\n\n let annotation: dataLayers.AnnotationsDataLayer | undefined = findAnnotationLayer(scene, name);\n\n if (!annotation) {\n annotation = new dataLayers.AnnotationsDataLayer({ name, query });\n }\n\n useEffect(() => {\n const removeFn = addAnnotationLayer(scene, annotation);\n setAnnotationAdded(true);\n return removeFn;\n }, [scene, name, annotation]);\n\n useEffect(() => {\n // Handle prop changes\n }, [annotationAdded]);\n\n if (!annotationAdded) {\n return null;\n }\n\n return children;\n}\n\nfunction findAnnotationLayer<T>(scene: SceneContextObject, name: string): T | undefined {\n const annotations = scene.state.$data as SceneDataLayerSet;\n\n if (!annotations) {\n return;\n }\n\n return annotations.state.layers.find((anno) => anno.state.name === name) as T;\n}\n\nfunction addAnnotationLayer(scene: SceneContextObject, layer: dataLayers.AnnotationsDataLayer) {\n let set = scene.state.$data as SceneDataLayerSet;\n\n if (set) {\n set.setState({ layers: [...set.state.layers, layer] });\n } else {\n set = new SceneDataLayerSet({ layers: [layer] });\n scene.setState({ $data: set });\n }\n\n writeSceneLog('SceneContext', `Adding annotation data layer: ${layer.state.name} key: ${layer.state.key}`);\n\n return () => {\n set.setState({ layers: set.state.layers.filter((x) => x !== layer) });\n writeSceneLog('SceneContext', `Removing annotation data layer: ${layer.state.name} key: ${layer.state.key}`);\n };\n}\n","import React from 'react';\nimport { EmbeddedScene, EmbeddedSceneState, SceneComponentProps } from '@grafana/scenes';\nimport { SceneContext } from '../contexts/SceneContextProvider';\nimport { SceneContextObject } from '../contexts/SceneContextObject';\n\nexport class EmbeddedSceneWithContext extends EmbeddedScene {\n public constructor(state: EmbeddedSceneState) {\n super({ ...state, context: new SceneContextObject() });\n }\n\n public static Component = ({ model }: SceneComponentProps<EmbeddedSceneWithContext>) => {\n return (\n <SceneContext.Provider value={model.state.context as SceneContextObject}>\n <EmbeddedScene.Component model={model} />\n </SceneContext.Provider>\n );\n };\n}\n","import { useTheme2 } from '@grafana/ui';\nimport React, { CSSProperties } from 'react';\n\nexport interface Props {\n minWidth?: number;\n minHeight?: number;\n children: React.ReactNode;\n}\n\n/**\n * Simple css grid layout for visualizations\n */\nexport function VizGridLayout({ children, minWidth = 400, minHeight = 320 }: Props) {\n const theme = useTheme2();\n const style: CSSProperties = {\n display: 'grid',\n flexGrow: 1,\n gridTemplateColumns: `repeat(auto-fit, minmax(${minWidth}px, 1fr))`,\n gridAutoRows: `minmax(${minHeight}px, auto)`,\n columnGap: theme.spacing(1),\n rowGap: theme.spacing(1),\n };\n\n return <div style={style}>{children}</div>;\n}\n"],"names":["SceneObjectBase","__spreadProps","NewSceneObjectAddedEvent","SceneVariableSet","createContext","useContext","useState","useEffect","behaviors","SceneTimeRange","childContext","React","UrlSyncContextProvider","sceneGraph","Subscription","SceneVariableValueChangedEvent","useCallback","useId","SceneQueryRunner","isEqual","SceneDataTransformer","DataProviderProxy","TimeRangePickerUI","VariableValueSelectWrapper","usePrevious","VizPanelObject","getPanelOptionsWithDefaults","SceneDataNode","SceneRefreshPicker","__spreadValues","layer","CustomVariableObject","DataSourceVariableObject","QueryVariableObject","urlUtil","useLocation","useMemo","locationSearchToObject","locationService","QueryVariable","MultiValueVariable","dataLayers","SceneDataLayerSet","EmbeddedScene","useTheme2"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../src/utils.ts","../src/contexts/SceneContextObject.tsx","../src/contexts/SceneContextProvider.tsx","../src/hooks/hooks.ts","../src/caching/SceneObjectCache.ts","../src/hooks/useSceneObject.ts","../src/hooks/useQueryRunner.ts","../src/hooks/useDataTransformer.ts","../src/components/TimeRangePicker.tsx","../src/components/VariableControl.tsx","../src/components/VizPanel.tsx","../src/components/RefreshPicker.tsx","../src/components/DataLayerControl.tsx","../src/variables/CustomVariable.tsx","../src/variables/DataSourceVariable.tsx","../src/variables/QueryVariable.tsx","../src/contexts/BreadcrumbContext.tsx","../src/hooks/useVariableValues.ts","../src/hooks/useQueryVariable.ts","../src/hooks/useVariableValue.ts","../src/components/AnnotationLayer.tsx","../src/interoperability/EmbeddedSceneWithContext.tsx","../src/components/VizGridLayout.tsx"],"sourcesContent":["export function writeSceneLog(logger: string, message: string, ...rest: unknown[]) {\n let loggingEnabled = false;\n\n if (typeof window !== 'undefined') {\n loggingEnabled = localStorage.getItem('grafana.debug.scenes') === 'true';\n }\n\n if (loggingEnabled) {\n console.log(`${logger}: `, message, ...rest);\n }\n}\n","import {\n SceneObjectBase,\n SceneObject,\n SceneObjectState,\n SceneVariable,\n SceneVariableSet,\n NewSceneObjectAddedEvent,\n} from '@grafana/scenes';\nimport { writeSceneLog } from '../utils';\n\nexport interface SceneContextObjectState extends SceneObjectState {\n childContexts?: SceneContextObject[];\n children: SceneObject[];\n}\n\nexport class SceneContextObject extends SceneObjectBase<SceneContextObjectState> {\n public constructor(state?: Partial<SceneContextObjectState>) {\n super({\n ...state,\n children: state?.children ?? [],\n childContexts: state?.childContexts ?? [],\n });\n }\n\n public addToScene(obj: SceneObject) {\n this.publishEvent(new NewSceneObjectAddedEvent(obj), true);\n\n this.setState({ children: [...this.state.children, obj] });\n writeSceneLog('SceneContext', `Adding to scene: ${obj.constructor.name} key: ${obj.state.key}`);\n\n const deactivate = obj.activate();\n\n return () => {\n writeSceneLog('SceneContext', `Removing from scene: ${obj.constructor.name} key: ${obj.state.key}`);\n this.setState({ children: this.state.children.filter((x) => x !== obj) });\n\n deactivate();\n };\n }\n\n public findByKey<T>(key: string): T | undefined {\n return this.state.children.find((x) => x.state.key === key) as T;\n }\n\n public findVariable<T>(name: string): T | undefined {\n const variables = this.state.$variables as SceneVariableSet;\n if (!variables) {\n return;\n }\n\n return variables.getByName(name) as T;\n }\n\n public addVariable(variable: SceneVariable) {\n let set = this.state.$variables as SceneVariableSet;\n\n this.publishEvent(new NewSceneObjectAddedEvent(variable), true);\n\n if (set) {\n set.setState({ variables: [...set.state.variables, variable] });\n } else {\n set = new SceneVariableSet({ variables: [variable] });\n this.setState({ $variables: set });\n }\n\n writeSceneLog('SceneContext', `Adding variable: ${variable.constructor.name} key: ${variable.state.key}`);\n\n return () => {\n set.setState({ variables: set.state.variables.filter((x) => x !== variable) });\n writeSceneLog('SceneContext', `Removing variable: ${variable.constructor.name} key: ${variable.state.key}`);\n };\n }\n\n public addChildContext(ctx: SceneContextObject) {\n this.publishEvent(new NewSceneObjectAddedEvent(ctx), true);\n\n this.setState({ childContexts: [...(this.state.childContexts ?? []), ctx] });\n\n writeSceneLog('SceneContext', `Adding child context: ${ctx.constructor.name} key: ${ctx.state.key}`);\n }\n\n public removeChildContext(ctx: SceneContextObject) {\n this.setState({\n childContexts: this.state.childContexts?.filter((context) => ctx !== context),\n });\n\n writeSceneLog('SceneContext', `Remvoing child context: ${ctx.constructor.name} key: ${ctx.state.key}`);\n }\n}\n","import React, { createContext, useContext, useEffect, useState } from 'react';\nimport { SceneTimeRangeState, SceneTimeRange, behaviors, UrlSyncContextProvider } from '@grafana/scenes';\n\nimport { SceneContextObject, SceneContextObjectState } from './SceneContextObject';\n\nexport const SceneContext = createContext<SceneContextObject | null>(null);\n\nexport interface SceneContextProviderProps {\n /**\n * Only the initial time range, cannot be used to update time range\n **/\n timeRange?: Partial<SceneTimeRangeState>;\n /**\n * This makes it possbile to view running state of queries via\n * refresh picker and also cancel all queries in the scene.\n */\n withQueryController?: boolean;\n /**\n * Children\n */\n children: React.ReactNode;\n}\n\n/**\n * Wrapps the react children in a SceneContext\n */\nexport function SceneContextProvider({ children, timeRange, withQueryController }: SceneContextProviderProps) {\n const parentContext = useContext(SceneContext);\n const [childContext, setChildContext] = useState<SceneContextObject | undefined>();\n\n // Becasue timeRange is not part of useEffect dependencies\n const initialTimeRange = timeRange;\n\n useEffect(() => {\n const state: SceneContextObjectState = { children: [] };\n\n if (withQueryController) {\n state.$behaviors = [new behaviors.SceneQueryController()];\n }\n\n if (initialTimeRange) {\n state.$timeRange = new SceneTimeRange(initialTimeRange);\n }\n\n const childContext = new SceneContextObject(state);\n\n if (parentContext) {\n parentContext.addChildContext(childContext);\n }\n\n const deactivate = childContext.activate();\n setChildContext(childContext);\n\n return () => {\n deactivate();\n\n if (parentContext) {\n parentContext.removeChildContext(childContext);\n }\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [parentContext, withQueryController]);\n\n if (!childContext) {\n return null;\n }\n\n const innerProvider = <SceneContext.Provider value={childContext}>{children}</SceneContext.Provider>;\n\n if (parentContext) {\n return innerProvider;\n }\n\n // For root context we wrap the provider in a UrlSyncWrapper that handles the hook that updates state on location changes\n return (\n <UrlSyncContextProvider scene={childContext} updateUrlOnInit={true} createBrowserHistorySteps={true}>\n {innerProvider}\n </UrlSyncContextProvider>\n );\n}\n","import { useCallback, useContext, useEffect, useState } from 'react';\nimport { SceneContext } from '../contexts/SceneContextProvider';\nimport { TimeRange } from '@grafana/data';\nimport {\n SceneVariable,\n SceneVariableValueChangedEvent,\n VariableValue,\n sceneGraph,\n SceneTimeRangeLike,\n} from '@grafana/scenes';\nimport { Subscription } from 'rxjs';\n\nexport function useSceneContext() {\n const scene = useContext(SceneContext);\n if (!scene) {\n throw new Error('Cannot find a SceneContext');\n }\n\n return scene;\n}\n\nexport function useTimeRange(): [TimeRange, SceneTimeRangeLike] {\n const scene = useSceneContext();\n const sceneTimeRange = sceneGraph.getTimeRange(scene);\n const { value } = sceneTimeRange.useState();\n\n return [value, sceneTimeRange];\n}\n\n/**\n * Only returns the variables on the closest context level.\n * We could modify it to extract all variables from the full context tree.\n */\nexport function useVariables(): SceneVariable[] {\n const scene = useSceneContext();\n const variables = sceneGraph.getVariables(scene);\n return variables.useState().variables;\n}\n\nexport interface UseUpdateWhenSceneChangesOptions {\n /** Variable names */\n variables?: string[];\n timeRange?: boolean;\n}\n\nexport interface UseUpdateWhenSceneChangesReason {\n variableName?: string;\n variableValue?: VariableValue | undefined | null;\n timeRange?: TimeRange;\n}\n\n/**\n * A utility hook to re-render the calling react component when specified variables or time range changes\n */\nexport function useUpdateWhenSceneChanges({ timeRange, variables = [] }: UseUpdateWhenSceneChangesOptions) {\n const scene = useSceneContext();\n const [updateReason, setUpdateReason] = useState<UseUpdateWhenSceneChangesReason>();\n\n useEffect(() => {\n const subscriptions = new Subscription();\n\n if (variables && variables.length > 0) {\n for (const v of variables) {\n const variable = sceneGraph.lookupVariable(v, scene);\n if (variable) {\n subscriptions.add(\n variable.subscribeToEvent(SceneVariableValueChangedEvent, () => {\n setUpdateReason({ variableName: variable.state.name, variableValue: variable.getValue() });\n })\n );\n }\n }\n }\n\n if (timeRange) {\n const tr = sceneGraph.getTimeRange(scene);\n tr.subscribeToState((newState, oldState) => {\n if (newState.value !== oldState.value) {\n setUpdateReason({ timeRange: newState.value });\n }\n });\n }\n\n return () => subscriptions.unsubscribe();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [scene, timeRange, ...variables]);\n\n return updateReason;\n}\n\n/**\n * Mainly a utility hook to re-render the calling react component when specified variables or time range changes\n */\nexport function useVariableInterpolator(options: UseUpdateWhenSceneChangesOptions) {\n const scene = useSceneContext();\n\n useUpdateWhenSceneChanges(options);\n\n return useCallback(\n (str: string) => {\n return sceneGraph.interpolate(scene, str);\n },\n [scene]\n );\n}\n","import { SceneObject } from '@grafana/scenes';\nimport { isPlainObject } from 'lodash';\nimport { LRUCache } from 'lru-cache';\n\nexport type CacheKey = CacheKeyPart | CacheKeyPart[];\n\nexport type CacheKeyPart = string | number | object | boolean;\n\nexport type SceneObjectConstructor = { new (...args: never[]): SceneObject };\n\nexport class SceneObjectCache {\n #cache: LRUCache<string, SceneObject>;\n #objectRefIds = new WeakMap<any, number>();\n #objectRefIdCounter = 0;\n\n public constructor() {\n this.#cache = new LRUCache({\n max: 500,\n ttl: 1000 * 60 * 5,\n });\n }\n\n public add(keyHash: string, object: SceneObject) {\n this.#cache.set(keyHash, object);\n }\n\n public get<T>(keyHash: string): T | undefined {\n return this.#cache.get(keyHash) as T;\n }\n\n public getHashKey(key: CacheKey, type: SceneObjectConstructor): string {\n if (Array.isArray(key)) {\n return `${type.name}-${key.map((k) => this.getHashKeyElement(k)).join()}`;\n }\n\n return `${type.name}-${this.getHashKeyElement(key)}`;\n }\n\n public getByRefHashKey(obj: unknown) {\n let objectRefId = this.#objectRefIds.get(obj);\n if (objectRefId == null) {\n objectRefId = this.#objectRefIdCounter++;\n this.#objectRefIds.set(obj, objectRefId);\n }\n\n return objectRefId;\n }\n\n private getHashKeyElement<T>(key: CacheKey) {\n if (typeof key === 'string' || typeof key === 'boolean' || typeof key === 'number') {\n return key;\n }\n\n return getObjectHash(key);\n }\n}\n\nlet cache: SceneObjectCache | undefined;\n\nexport function getSceneObjectCache(): SceneObjectCache {\n if (cache) {\n return cache;\n }\n\n return (cache = new SceneObjectCache());\n}\n\n/**\n * Returns a unique hash key string for the given object reference.\n */\nexport function cacheByRef(value: unknown) {\n const cache = getSceneObjectCache();\n return cache.getByRefHashKey(value);\n}\n\nexport function getObjectHash(obj: unknown): string {\n return JSON.stringify(obj, (_, val) =>\n isPlainObject(val)\n ? Object.keys(val)\n .sort()\n .reduce((result, key) => {\n result[key] = val[key];\n return result;\n }, {} as any)\n : val\n );\n}\n","import { useEffect, useId } from 'react';\nimport { SceneObject, sceneGraph } from '@grafana/scenes';\nimport { useSceneContext } from './hooks';\nimport { CacheKey, SceneObjectConstructor, getSceneObjectCache } from '../caching/SceneObjectCache';\n\nexport interface UseSceneObjectProps<T extends SceneObject> {\n factory: (key: string) => T;\n cacheKey?: CacheKey;\n objectConstructor: SceneObjectConstructor;\n}\n\n/**\n * Helper hook that handles adding and removing the scene object from the scene object graph.\n * Also handles the lookup of the object from the cache if a cache key is provided.\n */\nexport function useSceneObject<T extends SceneObject>(options: UseSceneObjectProps<T>) {\n const scene = useSceneContext();\n const key = useId();\n const cache = getSceneObjectCache();\n let cacheKeyHash = options.cacheKey ? cache.getHashKey(options.cacheKey, options.objectConstructor) : undefined;\n\n let obj = scene.findByKey<T>(key);\n\n if (!obj && cacheKeyHash) {\n obj = cache.get<T>(cacheKeyHash);\n\n if (obj && obj.parent !== scene) {\n // Before clearing parent make sure the object is not already in the scene\n if (sceneGraph.findObject(scene, (sceneObj) => sceneObj === obj)) {\n console.error('A scene object cache key matched an object that is already in the scene');\n obj = undefined;\n // Setting this to undefined so that we later do not add/overwrite the object that is already in the scene\n cacheKeyHash = undefined;\n } else {\n obj.clearParent();\n }\n }\n }\n\n if (!obj) {\n obj = options.factory(key);\n if (cacheKeyHash) {\n cache.add(cacheKeyHash, obj);\n }\n }\n\n useEffect(() => scene.addToScene(obj), [obj, scene]);\n\n return obj;\n}\n","import { useEffect } from 'react';\nimport { SceneDataQuery, SceneQueryRunner } from '@grafana/scenes';\nimport { DataSourceRef } from '@grafana/schema';\nimport { isEqual } from 'lodash';\nimport { CacheKey } from '../caching/SceneObjectCache';\nimport { useSceneObject } from './useSceneObject';\n\nexport interface UseQueryOptions {\n queries: SceneDataQuery[];\n maxDataPoints?: number;\n datasource?: DataSourceRef;\n cacheKey?: CacheKey;\n liveStreaming?: boolean;\n maxDataPointsFromWidth?: boolean;\n}\n\n/**\n * Maintains the state of SceneQueryRunner in the scene\n *\n * @example // To access query results do\n * const query = useQueryRunner(...);\n * const { data } = query.useState();\n */\nexport function useQueryRunner(options: UseQueryOptions): SceneQueryRunner {\n const queryRunner = useSceneObject({\n factory: (key) =>\n new SceneQueryRunner({\n key: key,\n queries: options.queries,\n maxDataPoints: options.maxDataPoints,\n datasource: options.datasource,\n liveStreaming: options.liveStreaming,\n maxDataPointsFromWidth: options.maxDataPointsFromWidth,\n }),\n objectConstructor: SceneQueryRunner,\n cacheKey: options.cacheKey,\n });\n\n // Update queries when they change\n useEffect(() => {\n if (!isEqual(queryRunner.state.queries, options.queries)) {\n queryRunner.setState({ queries: options.queries });\n queryRunner.runQueries();\n }\n }, [queryRunner, options]);\n\n return queryRunner;\n}\n","import {\n CustomTransformerDefinition,\n DataProviderProxy,\n SceneDataProvider,\n SceneDataTransformer,\n} from '@grafana/scenes';\nimport { useSceneContext } from './hooks';\nimport { useEffect, useId } from 'react';\nimport { isEqual } from 'lodash';\nimport { DataTransformerConfig } from '@grafana/schema';\n\nexport interface UseDataTransformerOptions {\n transformations: Array<DataTransformerConfig | CustomTransformerDefinition>;\n data: SceneDataProvider;\n}\n\nexport function useDataTransformer(options: UseDataTransformerOptions) {\n const scene = useSceneContext();\n const key = useId();\n\n let dataTransformer = scene.findByKey<SceneDataTransformer>(key);\n\n if (!dataTransformer) {\n dataTransformer = new SceneDataTransformer({\n key: key,\n $data: new DataProviderProxy({ source: options.data.getRef() }),\n transformations: options.transformations,\n });\n }\n\n useEffect(() => scene.addToScene(dataTransformer), [dataTransformer, scene]);\n\n useEffect(() => {\n if (!isEqual(dataTransformer.state.transformations, options.transformations)) {\n dataTransformer.setState({ transformations: options.transformations });\n dataTransformer.reprocessTransformations();\n }\n }, [dataTransformer, options.transformations]);\n\n return dataTransformer;\n}\n","import { TimeRangePicker as TimeRangePickerUI } from '@grafana/ui';\nimport React from 'react';\nimport { useTimeRange } from '../hooks/hooks';\n\nexport interface Props {}\n\nexport function TimeRangePicker(props: Props) {\n const [value, sceneTimeRange] = useTimeRange();\n\n return (\n <TimeRangePickerUI\n isOnCanvas={true}\n value={value}\n onChange={sceneTimeRange.onTimeRangeChange}\n timeZone={sceneTimeRange.getTimeZone()}\n onMoveBackward={() => {}}\n onMoveForward={() => {}}\n onZoom={() => {}}\n onChangeTimeZone={() => {}}\n onChangeFiscalYearStartMonth={() => {}}\n />\n );\n}\n","import React from 'react';\nimport { ControlsLayout, sceneGraph, VariableValueSelectWrapper } from '@grafana/scenes';\nimport { useSceneContext } from '../hooks/hooks';\n\nexport interface Props {\n name: string;\n hideLabel?: boolean;\n layout?: ControlsLayout;\n}\n\nexport function VariableControl({ name, hideLabel, layout }: Props) {\n const scene = useSceneContext();\n const variable = sceneGraph.lookupVariable(name, scene);\n\n if (!variable) {\n return <div>Variable {name} not found</div>;\n }\n\n return (\n <VariableValueSelectWrapper key={variable.state.key} variable={variable} hideLabel={hideLabel} layout={layout} />\n );\n}\n","import React, { useEffect, useId } from 'react';\nimport {\n SceneDataProvider,\n VizPanel as VizPanelObject,\n VizPanelState,\n VizConfig,\n DataProviderProxy,\n SceneDataNode,\n} from '@grafana/scenes';\nimport { usePrevious } from 'react-use';\nimport { getPanelOptionsWithDefaults } from '@grafana/data';\nimport { writeSceneLog } from '../utils';\nimport { useSceneContext } from '../hooks/hooks';\n\nexport interface VizPanelProps {\n title: string;\n dataProvider?: SceneDataProvider;\n viz: VizConfig;\n headerActions?: React.ReactNode;\n}\n\nexport function VizPanel(props: VizPanelProps) {\n const { title, viz, dataProvider, headerActions } = props;\n const scene = useSceneContext();\n const key = useId();\n const prevProps = usePrevious(props);\n\n let panel = scene.findByKey<VizPanelObject>(key);\n\n if (!panel) {\n panel = new VizPanelObject({\n key: key,\n title: title,\n pluginId: viz.pluginId,\n pluginVersion: viz.pluginVersion,\n options: viz.options,\n fieldConfig: viz.fieldConfig,\n $data: getDataProviderForVizPanel(dataProvider),\n headerActions: headerActions,\n });\n }\n\n useEffect(() => scene.addToScene(panel), [panel, scene]);\n\n // Update options\n useEffect(() => {\n const stateUpdate: Partial<VizPanelState> = {};\n\n if (!prevProps) {\n return;\n }\n\n if (title !== prevProps.title) {\n stateUpdate.title = title;\n }\n\n if (headerActions !== prevProps.headerActions) {\n stateUpdate.headerActions = headerActions;\n }\n\n if (dataProvider !== prevProps.dataProvider) {\n stateUpdate.$data = getDataProviderForVizPanel(dataProvider);\n }\n\n if (viz !== prevProps.viz) {\n if (viz.pluginId === prevProps.viz.pluginId) {\n const plugin = panel.getPlugin();\n if (plugin) {\n const optionsWithDefaults = getPanelOptionsWithDefaults({\n plugin,\n currentOptions: viz.options,\n currentFieldConfig: viz.fieldConfig,\n isAfterPluginChange: false,\n });\n stateUpdate.options = optionsWithDefaults.options;\n stateUpdate.fieldConfig = optionsWithDefaults.fieldConfig;\n\n panel.clearFieldConfigCache();\n }\n }\n }\n\n if (Object.keys(stateUpdate).length > 0) {\n panel.setState(stateUpdate);\n writeSceneLog('VizPanel', 'Updating VizPanel state', stateUpdate);\n }\n }, [panel, title, headerActions, viz, dataProvider, prevProps]);\n\n return <panel.Component model={panel} />;\n}\n\n/**\n * Since the useQueryRunner attaches query runners to the scene context their parent is already set\n * This proxy is to work around that.\n * TODO: Figure out a better way to handle this'\n */\nfunction getDataProviderForVizPanel(data: SceneDataProvider | undefined): SceneDataProvider | undefined {\n if (data && !(data instanceof SceneDataNode)) {\n return new DataProviderProxy({ source: data.getRef() });\n }\n return data;\n}\n","import React, { useEffect, useId } from 'react';\nimport { useSceneContext } from '../hooks/hooks';\nimport { SceneRefreshPicker, SceneRefreshPickerState } from '@grafana/scenes';\nimport { usePrevious } from 'react-use';\n\nexport interface Props {\n refresh?: string;\n withText?: boolean;\n}\n\nexport function RefreshPicker(props: Props) {\n const scene = useSceneContext();\n const key = useId();\n const prevProps = usePrevious(props);\n\n let picker = scene.findByKey<SceneRefreshPicker>(key);\n\n if (!picker) {\n picker = new SceneRefreshPicker({\n key: key,\n ...props,\n });\n }\n\n useEffect(() => scene.addToScene(picker), [picker, scene]);\n\n // Update options\n useEffect(() => {\n const stateUpdate: Partial<SceneRefreshPickerState> = {};\n\n if (!prevProps) {\n return;\n }\n\n if (props.refresh !== prevProps.refresh) {\n stateUpdate.refresh = props.refresh;\n }\n\n if (props.withText !== prevProps.withText) {\n stateUpdate.withText = props.withText;\n }\n\n picker.setState(stateUpdate);\n }, [picker, props, prevProps]);\n\n return <picker.Component model={picker} />;\n}\n","import React from 'react';\nimport { SceneDataLayerProvider, SceneDataLayerSet, sceneGraph } from '@grafana/scenes';\nimport { useSceneContext } from '../hooks/hooks';\n\nexport interface Props {\n name: string;\n}\n\nexport function DataLayerControl({ name }: Props) {\n const scene = useSceneContext();\n const layerSets = sceneGraph.getDataLayers(scene);\n\n const layer = getLayer(layerSets, name);\n\n if (!layer) {\n return <div>Annotation {name} not found</div>;\n }\n\n return <layer.Component model={layer} />;\n}\n\nfunction getLayer(layers: SceneDataLayerProvider[], name: string): SceneDataLayerProvider | undefined {\n for (let i = 0; i < layers.length; i++) {\n const layer = (layers[i] as SceneDataLayerSet).state.layers.find((layer) => layer.state.name === name);\n\n if (layer) {\n return layer;\n }\n }\n\n return undefined;\n}\n","import React, { useEffect, useState } from 'react';\nimport { CustomVariable as CustomVariableObject } from '@grafana/scenes';\nimport { useSceneContext } from '../hooks/hooks';\nimport { VariableProps } from './types';\n\nexport interface CustomVariableProps extends VariableProps {\n query: string;\n isMulti?: boolean;\n includeAll?: boolean;\n children: React.ReactNode;\n}\n\nexport function CustomVariable({\n query,\n name,\n label,\n hide,\n initialValue,\n isMulti,\n includeAll,\n children,\n}: CustomVariableProps): React.ReactNode {\n const scene = useSceneContext();\n const [variableAdded, setVariableAdded] = useState<boolean>();\n\n let variable: CustomVariableObject | undefined = scene.findVariable(name);\n\n if (!variable) {\n variable = new CustomVariableObject({ name, label, query, value: initialValue, isMulti, includeAll, hide});\n }\n\n useEffect(() => {\n const removeFn = scene.addVariable(variable);\n setVariableAdded(true);\n return removeFn;\n }, [variable, scene, name]);\n\n useEffect(() => {\n variable?.setState({\n label,\n query,\n hide,\n isMulti,\n includeAll\n })\n }, [hide, includeAll, isMulti, label, query, variable]);\n\n // Need to block child rendering until the variable is added so that child components like RVariableSelect find the variable\n if (!variableAdded) {\n return null;\n }\n\n return children;\n}\n","import React, { useEffect, useState } from 'react';\nimport { DataSourceVariable as DataSourceVariableObject } from '@grafana/scenes';\nimport { useSceneContext } from '../hooks/hooks';\nimport { VariableRefresh, VariableSort } from '@grafana/schema';\nimport { VariableProps } from './types';\n\nexport interface DataSourceVariableProps extends VariableProps {\n pluginId: string;\n regex?: string;\n refresh?: VariableRefresh;\n sort?: VariableSort;\n isMulti?: boolean;\n includeAll?: boolean;\n children: React.ReactNode;\n}\n\nexport function DataSourceVariable({\n pluginId,\n regex,\n name,\n label,\n hide,\n initialValue,\n isMulti,\n includeAll,\n children,\n}: DataSourceVariableProps): React.ReactNode {\n const scene = useSceneContext();\n const [variableAdded, setVariableAdded] = useState<boolean>();\n\n let variable: DataSourceVariableObject | undefined = scene.findVariable(name);\n\n if (!variable) {\n variable = new DataSourceVariableObject({ \n pluginId,\n regex,\n name,\n label,\n value: initialValue, \n isMulti,\n hide, \n includeAll,\n });\n }\n\n useEffect(() => {\n const removeFn = scene.addVariable(variable);\n setVariableAdded(true);\n return removeFn;\n }, [variable, scene, name]);\n\n useEffect(() => {\n if (!variableAdded) {\n return;\n }\n\n if (\n variable.state.pluginId === pluginId &&\n variable.state.regex === regex &&\n variable.state.label === label &&\n variable.state.hide === hide &&\n variable.state.includeAll === includeAll\n ) {\n return;\n }\n\n variable.setState({\n pluginId,\n regex,\n label,\n hide, \n includeAll,\n })\n\n variable.refreshOptions();\n }, [hide, includeAll, label, pluginId, regex, variable, variableAdded])\n\n // Need to block child rendering until the variable is added so that child components like RVariableSelect find the variable\n if (!variableAdded) {\n return null;\n }\n\n return children;\n}\n","import React, { useEffect, useState } from 'react';\nimport { QueryVariable as QueryVariableObject, SceneDataQuery } from '@grafana/scenes';\nimport { useSceneContext } from '../hooks/hooks';\nimport { DataSourceRef, VariableRefresh, VariableSort } from '@grafana/schema';\nimport { VariableProps } from './types';\nimport { isEqual } from 'lodash';\n\nexport interface QueryVariableProps extends VariableProps {\n query: string | SceneDataQuery;\n datasource: DataSourceRef | null;\n regex?: string;\n refresh?: VariableRefresh;\n sort?: VariableSort;\n isMulti?: boolean;\n includeAll?: boolean;\n children: React.ReactNode;\n}\n\nexport function QueryVariable({\n query,\n name,\n datasource,\n label,\n hide,\n regex,\n refresh,\n sort,\n initialValue,\n isMulti,\n includeAll,\n children,\n}: QueryVariableProps): React.ReactNode {\n const scene = useSceneContext();\n const [variableAdded, setVariableAdded] = useState<boolean>();\n\n let variable: QueryVariableObject | undefined = scene.findVariable(name);\n\n if (!variable) {\n variable = new QueryVariableObject({ \n name,\n label,\n query,\n datasource, \n refresh, \n sort, \n regex, \n value: initialValue, \n isMulti,\n hide, \n includeAll,\n });\n }\n\n useEffect(() => {\n const removeFn = scene.addVariable(variable);\n setVariableAdded(true);\n return removeFn;\n }, [variable, scene, name]);\n\n useEffect(() => {\n if (!variableAdded) {\n return;\n }\n\n if (\n isEqual(variable.state.query, query) &&\n isEqual(variable.state.datasource, datasource) &&\n variable.state.regex === regex &&\n variable.state.label === label &&\n variable.state.hide === hide &&\n variable.state.includeAll === includeAll &&\n variable.state.refresh === refresh &&\n variable.state.sort === sort\n ) {\n return;\n }\n\n variable.setState({\n label,\n query,\n datasource, \n refresh, \n sort, \n regex, \n hide, \n includeAll,\n });\n\n variable.refreshOptions();\n }, [datasource, hide, includeAll, label, query, refresh, regex, sort, variable, variableAdded]);\n \n\n // Need to block child rendering until the variable is added so that child components like RVariableSelect find the variable\n if (!variableAdded) {\n return null;\n }\n\n return children;\n}\n","import { NavModelItem, UrlQueryMap, urlUtil } from '@grafana/data';\nimport { locationSearchToObject, locationService } from '@grafana/runtime';\nimport React, { createContext, useCallback, useContext, useEffect, useMemo, useState } from 'react';\nimport { useLocation } from 'react-router-dom';\nimport { useTimeRange, useVariables } from '../hooks/hooks';\n\n/**\n * Code and concepts copied from https://github.com/grafana/hackathon-2023-12-grafana-react/blob/main/src/grafana-react\n *\n * These contexts & components needs some more thought and naming considerations, just a quick proof of concept for now.\n */\n\ntype BreadcrumbItem = Pick<NavModelItem, 'text' | 'url'>;\n\nexport interface BreadcrumbContextValue {\n breadcrumbs: BreadcrumbItem[];\n addBreadcrumb(breadcrumb: BreadcrumbItem): void;\n removeBreadcrumb(breadcrumb: BreadcrumbItem): void;\n}\n\nexport const BreadcrumbContext = createContext<BreadcrumbContextValue>({\n breadcrumbs: [],\n addBreadcrumb: () => {},\n removeBreadcrumb: () => {},\n});\n\nexport function BreadcrumbProvider({ children }: { children: React.ReactNode }) {\n const [breadcrumbs, setBreadcrumbs] = useState<BreadcrumbItem[]>([]);\n\n return (\n <BreadcrumbContext.Provider\n value={{\n breadcrumbs,\n addBreadcrumb: useCallback((breadcrumb: BreadcrumbItem) => setBreadcrumbs((prev) => [...prev, breadcrumb]), []),\n removeBreadcrumb: useCallback(\n (breadcrumb: BreadcrumbItem) => setBreadcrumbs((prev) => prev.filter((b) => b.url !== breadcrumb.url)),\n []\n ),\n }}\n >\n {children}\n </BreadcrumbContext.Provider>\n );\n}\n\nexport interface BreadcrumbProps {\n text: string;\n path: string;\n extraKeys?: string[];\n}\n\nexport function Breadcrumb({ text, path, extraKeys }: BreadcrumbProps): React.ReactNode {\n const { addBreadcrumb, removeBreadcrumb } = useContext(BreadcrumbContext);\n\n const buildUrl = useUrlBuilder();\n\n useEffect(() => {\n const breadcrumb = {\n text,\n url: buildUrl(path, extraKeys),\n };\n\n addBreadcrumb(breadcrumb);\n\n return () => {\n removeBreadcrumb(breadcrumb);\n };\n }, [text, path, extraKeys, addBreadcrumb, buildUrl, removeBreadcrumb]);\n\n return null;\n}\n\nfunction useUrlBuilder() {\n const queryParams = useQueryParams()[0];\n const variables = useVariables();\n const [_, timeRange] = useTimeRange();\n\n return useCallback(\n (urlBase: string, extraKeys: string[] | undefined) => {\n const params: UrlQueryMap = {};\n\n for (const v of variables) {\n if (v.urlSync && !v.state.skipUrlSync) {\n const state = v.urlSync.getUrlState();\n Object.assign(params, state);\n }\n }\n\n if (timeRange.urlSync) {\n const state = timeRange.urlSync.getUrlState();\n Object.assign(params, state);\n }\n\n if (extraKeys) {\n for (const extra of extraKeys) {\n if (queryParams[extra]) {\n params[extra] = queryParams[extra];\n }\n }\n }\n\n return urlUtil.renderUrl(urlBase, params);\n },\n [variables, queryParams, timeRange]\n );\n}\n\nfunction useQueryParams(): [UrlQueryMap, (values: UrlQueryMap, replace?: boolean) => void] {\n const { search } = useLocation();\n const queryParams = useMemo(() => locationSearchToObject(search || ''), [search]);\n const update = useCallback((values: UrlQueryMap, replace?: boolean) => locationService.partial(values, replace), []);\n return [queryParams, update];\n}\n","import { SceneVariables, VariableValueSingle, sceneGraph } from '@grafana/scenes';\nimport { useSceneContext } from './hooks';\n\nexport function useVariableValues<T = VariableValueSingle>(name: string): [T[] | undefined, boolean] {\n const scene = useSceneContext();\n const variable = sceneGraph.lookupVariable(name, scene);\n\n if (!variable) {\n return [undefined, false];\n }\n\n variable.useState();\n\n const set = variable.parent as SceneVariables;\n const isLoading = set.isVariableLoadingOrWaitingToUpdate(variable);\n let value = variable.getValue();\n\n if (value == null) {\n return [undefined, isLoading];\n }\n\n if (!Array.isArray(value)) {\n value = [value];\n }\n\n return [value as T[], isLoading];\n}\n","import { QueryVariable, SceneDataQuery, sceneGraph } from '@grafana/scenes';\nimport { useSceneContext } from './hooks';\nimport { useEffect } from 'react';\nimport { isEqual } from 'lodash';\n\ninterface QueryVariableOptions {\n name: string;\n datasource: string;\n query: string | SceneDataQuery;\n regex?: string;\n}\n\n/**\n * A custom hook that creates or updates a `QueryVariable` in the scene context.\n * \n * @param {QueryVariableOptions} options - Options for configuring the `QueryVariable`.\n * @returns {QueryVariable | null} The `QueryVariable` instance or `null`.\n * \n * @example\n * // Usage example\n * const variable = useQueryVariable({\n * name: \"myQueryVariable\",\n * datasource: \"gdev-testdata\",\n * query: \"*\",\n * regex: \".*someFilter.*\"\n * });\n * \n * // Returns a QueryVariable instance or null if not a valid QueryVariable\n * if (variable) {\n * console.log(\"Variable added to the scene:\", variable);\n * }\n */\nexport function useQueryVariable(options: QueryVariableOptions): QueryVariable | null {\n const scene = useSceneContext();\n let variable = sceneGraph.lookupVariable(options.name, scene);\n\n if (!variable) {\n variable = new QueryVariable({ name: options.name, datasource: { uid: options.datasource }, query: options.query, regex: options.regex });\n }\n\n if (!(variable instanceof QueryVariable)) {\n variable = null;\n }\n\n useEffect(() => {\n if (variable) {\n scene.addVariable(variable)\n }\n }, [variable, scene]);\n\n useEffect(() => {\n if (\n variable?.state.datasource?.uid !== options.datasource ||\n !isEqual(variable?.state.query, options.query) ||\n variable?.state.regex !== options.regex\n ) {\n variable?.setState({ datasource: { uid: options.datasource }, query: options.query, regex: options.regex });\n variable?.refreshOptions();\n }\n }, [options, variable]);\n\n return variable;\n}\n","import { MultiValueVariable, SceneVariables, VariableValueSingle, sceneGraph } from '@grafana/scenes';\nimport { useSceneContext } from './hooks';\n\nexport function useVariableValue<T = VariableValueSingle>(name: string): [T | undefined, boolean] {\n const scene = useSceneContext();\n const variable = sceneGraph.lookupVariable(name, scene);\n\n if (!variable || (variable instanceof MultiValueVariable && variable.state.isMulti === true)) {\n return [undefined, false];\n }\n\n variable.useState();\n\n const set = variable.parent as SceneVariables;\n const isLoading = set.isVariableLoadingOrWaitingToUpdate(variable);\n let value = variable.getValue();\n\n if (value == null) {\n return [undefined, isLoading];\n }\n\n return [value as T, isLoading];\n}\n","import React, { useEffect, useState } from 'react';\nimport { useSceneContext } from '../hooks/hooks';\nimport { AnnotationQuery } from '@grafana/data';\nimport { SceneDataLayerSet, dataLayers } from '@grafana/scenes';\nimport { SceneContextObject } from '../contexts/SceneContextObject';\nimport { writeSceneLog } from '../utils';\n\nexport interface AnnotationLayerSetProps {\n name: string;\n query: AnnotationQuery;\n children: React.ReactNode;\n}\n\nexport function AnnotationLayer({ name, query, children }: AnnotationLayerSetProps): React.ReactNode {\n const scene = useSceneContext();\n const [annotationAdded, setAnnotationAdded] = useState<boolean>();\n\n let annotation: dataLayers.AnnotationsDataLayer | undefined = findAnnotationLayer(scene, name);\n\n if (!annotation) {\n annotation = new dataLayers.AnnotationsDataLayer({ name, query });\n }\n\n useEffect(() => {\n const removeFn = addAnnotationLayer(scene, annotation);\n setAnnotationAdded(true);\n return removeFn;\n }, [scene, name, annotation]);\n\n useEffect(() => {\n // Handle prop changes\n }, [annotationAdded]);\n\n if (!annotationAdded) {\n return null;\n }\n\n return children;\n}\n\nfunction findAnnotationLayer<T>(scene: SceneContextObject, name: string): T | undefined {\n const annotations = scene.state.$data as SceneDataLayerSet;\n\n if (!annotations) {\n return;\n }\n\n return annotations.state.layers.find((anno) => anno.state.name === name) as T;\n}\n\nfunction addAnnotationLayer(scene: SceneContextObject, layer: dataLayers.AnnotationsDataLayer) {\n let set = scene.state.$data as SceneDataLayerSet;\n\n if (set) {\n set.setState({ layers: [...set.state.layers, layer] });\n } else {\n set = new SceneDataLayerSet({ layers: [layer] });\n scene.setState({ $data: set });\n }\n\n writeSceneLog('SceneContext', `Adding annotation data layer: ${layer.state.name} key: ${layer.state.key}`);\n\n return () => {\n set.setState({ layers: set.state.layers.filter((x) => x !== layer) });\n writeSceneLog('SceneContext', `Removing annotation data layer: ${layer.state.name} key: ${layer.state.key}`);\n };\n}\n","import React from 'react';\nimport { EmbeddedScene, EmbeddedSceneState, SceneComponentProps } from '@grafana/scenes';\nimport { SceneContext } from '../contexts/SceneContextProvider';\nimport { SceneContextObject } from '../contexts/SceneContextObject';\n\nexport class EmbeddedSceneWithContext extends EmbeddedScene {\n public constructor(state: EmbeddedSceneState) {\n super({ ...state, context: new SceneContextObject() });\n }\n\n public static Component = ({ model }: SceneComponentProps<EmbeddedSceneWithContext>) => {\n return (\n <SceneContext.Provider value={model.state.context as SceneContextObject}>\n <EmbeddedScene.Component model={model} />\n </SceneContext.Provider>\n );\n };\n}\n","import { useTheme2 } from '@grafana/ui';\nimport React, { CSSProperties } from 'react';\n\nexport interface Props {\n minWidth?: number;\n minHeight?: number;\n children: React.ReactNode;\n}\n\n/**\n * Simple css grid layout for visualizations\n */\nexport function VizGridLayout({ children, minWidth = 400, minHeight = 320 }: Props) {\n const theme = useTheme2();\n const style: CSSProperties = {\n display: 'grid',\n flexGrow: 1,\n gridTemplateColumns: `repeat(auto-fit, minmax(${minWidth}px, 1fr))`,\n gridAutoRows: `minmax(${minHeight}px, auto)`,\n columnGap: theme.spacing(1),\n rowGap: theme.spacing(1),\n };\n\n return <div style={style}>{children}</div>;\n}\n"],"names":["SceneObjectBase","__spreadProps","NewSceneObjectAddedEvent","SceneVariableSet","createContext","useContext","useState","useEffect","behaviors","SceneTimeRange","childContext","React","UrlSyncContextProvider","sceneGraph","Subscription","SceneVariableValueChangedEvent","useCallback","LRUCache","isPlainObject","useId","SceneQueryRunner","isEqual","SceneDataTransformer","DataProviderProxy","TimeRangePickerUI","VariableValueSelectWrapper","usePrevious","VizPanelObject","getPanelOptionsWithDefaults","SceneDataNode","SceneRefreshPicker","__spreadValues","layer","CustomVariableObject","DataSourceVariableObject","QueryVariableObject","urlUtil","useLocation","useMemo","locationSearchToObject","locationService","QueryVariable","MultiValueVariable","dataLayers","SceneDataLayerSet","EmbeddedScene","useTheme2"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@grafana/scenes-react",
3
- "version": "5.23.1",
3
+ "version": "5.23.2--canary.959.11726132276.0",
4
4
  "description": "Grafana framework for building dynamic dashboards",
5
5
  "author": "Grafana Labs",
6
6
  "license": "AGPL-3.0-only",
@@ -38,7 +38,8 @@
38
38
  },
39
39
  "dependencies": {
40
40
  "@grafana/e2e-selectors": "^11.0.0",
41
- "@grafana/scenes": "5.23.1",
41
+ "@grafana/scenes": "5.23.2--canary.959.11726132276.0",
42
+ "lru-cache": "^10.2.2",
42
43
  "react-use": "17.4.0"
43
44
  },
44
45
  "peerDependencies": {
@@ -112,5 +113,5 @@
112
113
  "prettier --write"
113
114
  ]
114
115
  },
115
- "gitHead": "650ef547fac5de8821b59ed639f2587828dafe1d"
116
+ "gitHead": "e0dffea37119bf29a64a040c9bdbb2708ff6f3df"
116
117
  }