@grafana/scenes-react 6.52.14 → 6.52.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,3 +1,15 @@
1
+ # v6.52.15 (Wed Feb 11 2026)
2
+
3
+ #### 🐛 Bug Fix
4
+
5
+ - ScenesReact: Add allValue to variables [#1254](https://github.com/grafana/scenes/pull/1254) ([@slaughtlaught](https://github.com/slaughtlaught))
6
+
7
+ #### Authors: 1
8
+
9
+ - Bogdan Tiet ([@slaughtlaught](https://github.com/slaughtlaught))
10
+
11
+ ---
12
+
1
13
  # v6.52.5 (Mon Jan 19 2026)
2
14
 
3
15
  #### 🐛 Bug Fix
@@ -11,6 +11,7 @@ function CustomVariable({
11
11
  isMulti,
12
12
  includeAll,
13
13
  skipUrlSync,
14
+ allValue,
14
15
  children
15
16
  }) {
16
17
  const scene = useSceneContext();
@@ -25,7 +26,8 @@ function CustomVariable({
25
26
  isMulti,
26
27
  includeAll,
27
28
  hide,
28
- skipUrlSync
29
+ skipUrlSync,
30
+ allValue
29
31
  });
30
32
  }
31
33
  useEffect(() => {
@@ -40,9 +42,10 @@ function CustomVariable({
40
42
  hide,
41
43
  isMulti,
42
44
  includeAll,
43
- skipUrlSync
45
+ skipUrlSync,
46
+ allValue
44
47
  });
45
- }, [skipUrlSync, hide, includeAll, isMulti, label, query, variable]);
48
+ }, [skipUrlSync, allValue, hide, includeAll, isMulti, label, query, variable]);
46
49
  if (!variableAdded) {
47
50
  return null;
48
51
  }
@@ -1 +1 @@
1
- {"version":3,"file":"CustomVariable.js","sources":["../../../src/variables/CustomVariable.tsx"],"sourcesContent":["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 skipUrlSync,\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({\n name,\n label,\n query,\n value: initialValue,\n isMulti,\n includeAll,\n hide,\n skipUrlSync,\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 variable?.setState({\n label,\n query,\n hide,\n isMulti,\n includeAll,\n skipUrlSync,\n });\n }, [skipUrlSync, 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"],"names":["CustomVariableObject"],"mappings":";;;;AAYO,SAAS,cAAe,CAAA;AAAA,EAC7B,KAAA;AAAA,EACA,IAAA;AAAA,EACA,KAAA;AAAA,EACA,IAAA;AAAA,EACA,YAAA;AAAA,EACA,OAAA;AAAA,EACA,UAAA;AAAA,EACA,WAAA;AAAA,EACA;AACF,CAAyC,EAAA;AACvC,EAAA,MAAM,QAAQ,eAAgB,EAAA;AAC9B,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAI,QAAkB,EAAA;AAE5D,EAAI,IAAA,QAAA,GAA6C,KAAM,CAAA,YAAA,CAAa,IAAI,CAAA;AAExE,EAAA,IAAI,CAAC,QAAU,EAAA;AACb,IAAA,QAAA,GAAW,IAAIA,gBAAqB,CAAA;AAAA,MAClC,IAAA;AAAA,MACA,KAAA;AAAA,MACA,KAAA;AAAA,MACA,KAAO,EAAA,YAAA;AAAA,MACP,OAAA;AAAA,MACA,UAAA;AAAA,MACA,IAAA;AAAA,MACA;AAAA,KACD,CAAA;AAAA;AAGH,EAAA,SAAA,CAAU,MAAM;AACd,IAAM,MAAA,QAAA,GAAW,KAAM,CAAA,WAAA,CAAY,QAAQ,CAAA;AAC3C,IAAA,gBAAA,CAAiB,IAAI,CAAA;AACrB,IAAO,OAAA,QAAA;AAAA,GACN,EAAA,CAAC,QAAU,EAAA,KAAA,EAAO,IAAI,CAAC,CAAA;AAE1B,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,QAAA,IAAA,IAAA,GAAA,MAAA,GAAA,QAAA,CAAU,QAAS,CAAA;AAAA,MACjB,KAAA;AAAA,MACA,KAAA;AAAA,MACA,IAAA;AAAA,MACA,OAAA;AAAA,MACA,UAAA;AAAA,MACA;AAAA,KACF,CAAA;AAAA,GACF,EAAG,CAAC,WAAa,EAAA,IAAA,EAAM,YAAY,OAAS,EAAA,KAAA,EAAO,KAAO,EAAA,QAAQ,CAAC,CAAA;AAGnE,EAAA,IAAI,CAAC,aAAe,EAAA;AAClB,IAAO,OAAA,IAAA;AAAA;AAGT,EAAO,OAAA,QAAA;AACT;;;;"}
1
+ {"version":3,"file":"CustomVariable.js","sources":["../../../src/variables/CustomVariable.tsx"],"sourcesContent":["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 skipUrlSync,\n allValue,\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({\n name,\n label,\n query,\n value: initialValue,\n isMulti,\n includeAll,\n hide,\n skipUrlSync,\n allValue,\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 variable?.setState({\n label,\n query,\n hide,\n isMulti,\n includeAll,\n skipUrlSync,\n allValue,\n });\n }, [skipUrlSync, allValue, 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"],"names":["CustomVariableObject"],"mappings":";;;;AAYO,SAAS,cAAe,CAAA;AAAA,EAC7B,KAAA;AAAA,EACA,IAAA;AAAA,EACA,KAAA;AAAA,EACA,IAAA;AAAA,EACA,YAAA;AAAA,EACA,OAAA;AAAA,EACA,UAAA;AAAA,EACA,WAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF,CAAyC,EAAA;AACvC,EAAA,MAAM,QAAQ,eAAgB,EAAA;AAC9B,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAI,QAAkB,EAAA;AAE5D,EAAI,IAAA,QAAA,GAA6C,KAAM,CAAA,YAAA,CAAa,IAAI,CAAA;AAExE,EAAA,IAAI,CAAC,QAAU,EAAA;AACb,IAAA,QAAA,GAAW,IAAIA,gBAAqB,CAAA;AAAA,MAClC,IAAA;AAAA,MACA,KAAA;AAAA,MACA,KAAA;AAAA,MACA,KAAO,EAAA,YAAA;AAAA,MACP,OAAA;AAAA,MACA,UAAA;AAAA,MACA,IAAA;AAAA,MACA,WAAA;AAAA,MACA;AAAA,KACD,CAAA;AAAA;AAGH,EAAA,SAAA,CAAU,MAAM;AACd,IAAM,MAAA,QAAA,GAAW,KAAM,CAAA,WAAA,CAAY,QAAQ,CAAA;AAC3C,IAAA,gBAAA,CAAiB,IAAI,CAAA;AACrB,IAAO,OAAA,QAAA;AAAA,GACN,EAAA,CAAC,QAAU,EAAA,KAAA,EAAO,IAAI,CAAC,CAAA;AAE1B,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,QAAA,IAAA,IAAA,GAAA,MAAA,GAAA,QAAA,CAAU,QAAS,CAAA;AAAA,MACjB,KAAA;AAAA,MACA,KAAA;AAAA,MACA,IAAA;AAAA,MACA,OAAA;AAAA,MACA,UAAA;AAAA,MACA,WAAA;AAAA,MACA;AAAA,KACF,CAAA;AAAA,GACF,EAAG,CAAC,WAAA,EAAa,QAAU,EAAA,IAAA,EAAM,YAAY,OAAS,EAAA,KAAA,EAAO,KAAO,EAAA,QAAQ,CAAC,CAAA;AAG7E,EAAA,IAAI,CAAC,aAAe,EAAA;AAClB,IAAO,OAAA,IAAA;AAAA;AAGT,EAAO,OAAA,QAAA;AACT;;;;"}
@@ -12,6 +12,7 @@ function DataSourceVariable({
12
12
  isMulti,
13
13
  includeAll,
14
14
  skipUrlSync,
15
+ allValue,
15
16
  children
16
17
  }) {
17
18
  const scene = useSceneContext();
@@ -27,7 +28,8 @@ function DataSourceVariable({
27
28
  isMulti,
28
29
  hide,
29
30
  includeAll,
30
- skipUrlSync
31
+ skipUrlSync,
32
+ allValue
31
33
  });
32
34
  }
33
35
  useEffect(() => {
@@ -39,7 +41,7 @@ function DataSourceVariable({
39
41
  if (!variableAdded) {
40
42
  return;
41
43
  }
42
- if (variable.state.pluginId === pluginId && variable.state.regex === regex && variable.state.label === label && variable.state.hide === hide && variable.state.includeAll === includeAll && variable.state.skipUrlSync === skipUrlSync) {
44
+ if (variable.state.pluginId === pluginId && variable.state.regex === regex && variable.state.label === label && variable.state.hide === hide && variable.state.includeAll === includeAll && variable.state.skipUrlSync === skipUrlSync && variable.state.allValue === allValue) {
43
45
  return;
44
46
  }
45
47
  variable.setState({
@@ -48,10 +50,11 @@ function DataSourceVariable({
48
50
  label,
49
51
  hide,
50
52
  includeAll,
51
- skipUrlSync
53
+ skipUrlSync,
54
+ allValue
52
55
  });
53
56
  variable.refreshOptions();
54
- }, [skipUrlSync, hide, includeAll, label, pluginId, regex, variable, variableAdded]);
57
+ }, [skipUrlSync, allValue, hide, includeAll, label, pluginId, regex, variable, variableAdded]);
55
58
  if (!variableAdded) {
56
59
  return null;
57
60
  }
@@ -1 +1 @@
1
- {"version":3,"file":"DataSourceVariable.js","sources":["../../../src/variables/DataSourceVariable.tsx"],"sourcesContent":["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 skipUrlSync,\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 skipUrlSync,\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 variable.state.skipUrlSync === skipUrlSync\n ) {\n return;\n }\n\n variable.setState({\n pluginId,\n regex,\n label,\n hide,\n includeAll,\n skipUrlSync,\n });\n\n variable.refreshOptions();\n }, [skipUrlSync, 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"],"names":["DataSourceVariableObject"],"mappings":";;;;AAgBO,SAAS,kBAAmB,CAAA;AAAA,EACjC,QAAA;AAAA,EACA,KAAA;AAAA,EACA,IAAA;AAAA,EACA,KAAA;AAAA,EACA,IAAA;AAAA,EACA,YAAA;AAAA,EACA,OAAA;AAAA,EACA,UAAA;AAAA,EACA,WAAA;AAAA,EACA;AACF,CAA6C,EAAA;AAC3C,EAAA,MAAM,QAAQ,eAAgB,EAAA;AAC9B,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAI,QAAkB,EAAA;AAE5D,EAAI,IAAA,QAAA,GAAiD,KAAM,CAAA,YAAA,CAAa,IAAI,CAAA;AAE5E,EAAA,IAAI,CAAC,QAAU,EAAA;AACb,IAAA,QAAA,GAAW,IAAIA,oBAAyB,CAAA;AAAA,MACtC,QAAA;AAAA,MACA,KAAA;AAAA,MACA,IAAA;AAAA,MACA,KAAA;AAAA,MACA,KAAO,EAAA,YAAA;AAAA,MACP,OAAA;AAAA,MACA,IAAA;AAAA,MACA,UAAA;AAAA,MACA;AAAA,KACD,CAAA;AAAA;AAGH,EAAA,SAAA,CAAU,MAAM;AACd,IAAM,MAAA,QAAA,GAAW,KAAM,CAAA,WAAA,CAAY,QAAQ,CAAA;AAC3C,IAAA,gBAAA,CAAiB,IAAI,CAAA;AACrB,IAAO,OAAA,QAAA;AAAA,GACN,EAAA,CAAC,QAAU,EAAA,KAAA,EAAO,IAAI,CAAC,CAAA;AAE1B,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,CAAC,aAAe,EAAA;AAClB,MAAA;AAAA;AAGF,IACE,IAAA,QAAA,CAAS,MAAM,QAAa,KAAA,QAAA,IAC5B,SAAS,KAAM,CAAA,KAAA,KAAU,KACzB,IAAA,QAAA,CAAS,KAAM,CAAA,KAAA,KAAU,SACzB,QAAS,CAAA,KAAA,CAAM,IAAS,KAAA,IAAA,IACxB,QAAS,CAAA,KAAA,CAAM,eAAe,UAC9B,IAAA,QAAA,CAAS,KAAM,CAAA,WAAA,KAAgB,WAC/B,EAAA;AACA,MAAA;AAAA;AAGF,IAAA,QAAA,CAAS,QAAS,CAAA;AAAA,MAChB,QAAA;AAAA,MACA,KAAA;AAAA,MACA,KAAA;AAAA,MACA,IAAA;AAAA,MACA,UAAA;AAAA,MACA;AAAA,KACD,CAAA;AAED,IAAA,QAAA,CAAS,cAAe,EAAA;AAAA,GAC1B,EAAG,CAAC,WAAA,EAAa,IAAM,EAAA,UAAA,EAAY,OAAO,QAAU,EAAA,KAAA,EAAO,QAAU,EAAA,aAAa,CAAC,CAAA;AAGnF,EAAA,IAAI,CAAC,aAAe,EAAA;AAClB,IAAO,OAAA,IAAA;AAAA;AAGT,EAAO,OAAA,QAAA;AACT;;;;"}
1
+ {"version":3,"file":"DataSourceVariable.js","sources":["../../../src/variables/DataSourceVariable.tsx"],"sourcesContent":["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 skipUrlSync,\n allValue,\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 skipUrlSync,\n allValue,\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 variable.state.skipUrlSync === skipUrlSync &&\n variable.state.allValue === allValue\n ) {\n return;\n }\n\n variable.setState({\n pluginId,\n regex,\n label,\n hide,\n includeAll,\n skipUrlSync,\n allValue,\n });\n\n variable.refreshOptions();\n }, [skipUrlSync, allValue, 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"],"names":["DataSourceVariableObject"],"mappings":";;;;AAgBO,SAAS,kBAAmB,CAAA;AAAA,EACjC,QAAA;AAAA,EACA,KAAA;AAAA,EACA,IAAA;AAAA,EACA,KAAA;AAAA,EACA,IAAA;AAAA,EACA,YAAA;AAAA,EACA,OAAA;AAAA,EACA,UAAA;AAAA,EACA,WAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF,CAA6C,EAAA;AAC3C,EAAA,MAAM,QAAQ,eAAgB,EAAA;AAC9B,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAI,QAAkB,EAAA;AAE5D,EAAI,IAAA,QAAA,GAAiD,KAAM,CAAA,YAAA,CAAa,IAAI,CAAA;AAE5E,EAAA,IAAI,CAAC,QAAU,EAAA;AACb,IAAA,QAAA,GAAW,IAAIA,oBAAyB,CAAA;AAAA,MACtC,QAAA;AAAA,MACA,KAAA;AAAA,MACA,IAAA;AAAA,MACA,KAAA;AAAA,MACA,KAAO,EAAA,YAAA;AAAA,MACP,OAAA;AAAA,MACA,IAAA;AAAA,MACA,UAAA;AAAA,MACA,WAAA;AAAA,MACA;AAAA,KACD,CAAA;AAAA;AAGH,EAAA,SAAA,CAAU,MAAM;AACd,IAAM,MAAA,QAAA,GAAW,KAAM,CAAA,WAAA,CAAY,QAAQ,CAAA;AAC3C,IAAA,gBAAA,CAAiB,IAAI,CAAA;AACrB,IAAO,OAAA,QAAA;AAAA,GACN,EAAA,CAAC,QAAU,EAAA,KAAA,EAAO,IAAI,CAAC,CAAA;AAE1B,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,CAAC,aAAe,EAAA;AAClB,MAAA;AAAA;AAGF,IACE,IAAA,QAAA,CAAS,KAAM,CAAA,QAAA,KAAa,QAC5B,IAAA,QAAA,CAAS,KAAM,CAAA,KAAA,KAAU,KACzB,IAAA,QAAA,CAAS,KAAM,CAAA,KAAA,KAAU,KACzB,IAAA,QAAA,CAAS,KAAM,CAAA,IAAA,KAAS,IACxB,IAAA,QAAA,CAAS,KAAM,CAAA,UAAA,KAAe,UAC9B,IAAA,QAAA,CAAS,KAAM,CAAA,WAAA,KAAgB,WAC/B,IAAA,QAAA,CAAS,KAAM,CAAA,QAAA,KAAa,QAC5B,EAAA;AACA,MAAA;AAAA;AAGF,IAAA,QAAA,CAAS,QAAS,CAAA;AAAA,MAChB,QAAA;AAAA,MACA,KAAA;AAAA,MACA,KAAA;AAAA,MACA,IAAA;AAAA,MACA,UAAA;AAAA,MACA,WAAA;AAAA,MACA;AAAA,KACD,CAAA;AAED,IAAA,QAAA,CAAS,cAAe,EAAA;AAAA,GAC1B,EAAG,CAAC,WAAA,EAAa,QAAU,EAAA,IAAA,EAAM,UAAY,EAAA,KAAA,EAAO,QAAU,EAAA,KAAA,EAAO,QAAU,EAAA,aAAa,CAAC,CAAA;AAG7F,EAAA,IAAI,CAAC,aAAe,EAAA;AAClB,IAAO,OAAA,IAAA;AAAA;AAGT,EAAO,OAAA,QAAA;AACT;;;;"}
@@ -16,6 +16,7 @@ function QueryVariable({
16
16
  isMulti,
17
17
  includeAll,
18
18
  skipUrlSync,
19
+ allValue,
19
20
  children
20
21
  }) {
21
22
  const scene = useSceneContext();
@@ -34,7 +35,8 @@ function QueryVariable({
34
35
  isMulti,
35
36
  hide,
36
37
  includeAll,
37
- skipUrlSync
38
+ skipUrlSync,
39
+ allValue
38
40
  });
39
41
  }
40
42
  useEffect(() => {
@@ -46,7 +48,7 @@ function QueryVariable({
46
48
  if (!variableAdded) {
47
49
  return;
48
50
  }
49
- if (isEqual(variable.state.query, query) && isEqual(variable.state.datasource, datasource) && variable.state.regex === regex && variable.state.label === label && variable.state.hide === hide && variable.state.includeAll === includeAll && variable.state.refresh === refresh && variable.state.sort === sort && variable.state.skipUrlSync === skipUrlSync) {
51
+ if (isEqual(variable.state.query, query) && isEqual(variable.state.datasource, datasource) && variable.state.regex === regex && variable.state.label === label && variable.state.hide === hide && variable.state.includeAll === includeAll && variable.state.refresh === refresh && variable.state.sort === sort && variable.state.skipUrlSync === skipUrlSync && variable.state.allValue === allValue) {
50
52
  return;
51
53
  }
52
54
  variable.setState({
@@ -58,10 +60,24 @@ function QueryVariable({
58
60
  regex,
59
61
  hide,
60
62
  includeAll,
61
- skipUrlSync
63
+ skipUrlSync,
64
+ allValue
62
65
  });
63
66
  variable.refreshOptions();
64
- }, [skipUrlSync, datasource, hide, includeAll, label, query, refresh, regex, sort, variable, variableAdded]);
67
+ }, [
68
+ skipUrlSync,
69
+ allValue,
70
+ datasource,
71
+ hide,
72
+ includeAll,
73
+ label,
74
+ query,
75
+ refresh,
76
+ regex,
77
+ sort,
78
+ variable,
79
+ variableAdded
80
+ ]);
65
81
  if (!variableAdded) {
66
82
  return null;
67
83
  }
@@ -1 +1 @@
1
- {"version":3,"file":"QueryVariable.js","sources":["../../../src/variables/QueryVariable.tsx"],"sourcesContent":["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 skipUrlSync,\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 skipUrlSync,\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 variable.state.skipUrlSync === skipUrlSync\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 skipUrlSync,\n });\n\n variable.refreshOptions();\n }, [skipUrlSync, datasource, hide, includeAll, label, query, refresh, regex, sort, 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"],"names":["QueryVariableObject"],"mappings":";;;;;AAkBO,SAAS,aAAc,CAAA;AAAA,EAC5B,KAAA;AAAA,EACA,IAAA;AAAA,EACA,UAAA;AAAA,EACA,KAAA;AAAA,EACA,IAAA;AAAA,EACA,KAAA;AAAA,EACA,OAAA;AAAA,EACA,IAAA;AAAA,EACA,YAAA;AAAA,EACA,OAAA;AAAA,EACA,UAAA;AAAA,EACA,WAAA;AAAA,EACA;AACF,CAAwC,EAAA;AACtC,EAAA,MAAM,QAAQ,eAAgB,EAAA;AAC9B,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAI,QAAkB,EAAA;AAE5D,EAAI,IAAA,QAAA,GAA4C,KAAM,CAAA,YAAA,CAAa,IAAI,CAAA;AAEvE,EAAA,IAAI,CAAC,QAAU,EAAA;AACb,IAAA,QAAA,GAAW,IAAIA,eAAoB,CAAA;AAAA,MACjC,IAAA;AAAA,MACA,KAAA;AAAA,MACA,KAAA;AAAA,MACA,UAAA;AAAA,MACA,OAAA;AAAA,MACA,IAAA;AAAA,MACA,KAAA;AAAA,MACA,KAAO,EAAA,YAAA;AAAA,MACP,OAAA;AAAA,MACA,IAAA;AAAA,MACA,UAAA;AAAA,MACA;AAAA,KACD,CAAA;AAAA;AAGH,EAAA,SAAA,CAAU,MAAM;AACd,IAAM,MAAA,QAAA,GAAW,KAAM,CAAA,WAAA,CAAY,QAAQ,CAAA;AAC3C,IAAA,gBAAA,CAAiB,IAAI,CAAA;AACrB,IAAO,OAAA,QAAA;AAAA,GACN,EAAA,CAAC,QAAU,EAAA,KAAA,EAAO,IAAI,CAAC,CAAA;AAE1B,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,CAAC,aAAe,EAAA;AAClB,MAAA;AAAA;AAGF,IAAA,IACE,QAAQ,QAAS,CAAA,KAAA,CAAM,KAAO,EAAA,KAAK,KACnC,OAAQ,CAAA,QAAA,CAAS,KAAM,CAAA,UAAA,EAAY,UAAU,CAC7C,IAAA,QAAA,CAAS,MAAM,KAAU,KAAA,KAAA,IACzB,SAAS,KAAM,CAAA,KAAA,KAAU,KACzB,IAAA,QAAA,CAAS,MAAM,IAAS,KAAA,IAAA,IACxB,SAAS,KAAM,CAAA,UAAA,KAAe,cAC9B,QAAS,CAAA,KAAA,CAAM,OAAY,KAAA,OAAA,IAC3B,SAAS,KAAM,CAAA,IAAA,KAAS,QACxB,QAAS,CAAA,KAAA,CAAM,gBAAgB,WAC/B,EAAA;AACA,MAAA;AAAA;AAGF,IAAA,QAAA,CAAS,QAAS,CAAA;AAAA,MAChB,KAAA;AAAA,MACA,KAAA;AAAA,MACA,UAAA;AAAA,MACA,OAAA;AAAA,MACA,IAAA;AAAA,MACA,KAAA;AAAA,MACA,IAAA;AAAA,MACA,UAAA;AAAA,MACA;AAAA,KACD,CAAA;AAED,IAAA,QAAA,CAAS,cAAe,EAAA;AAAA,GACvB,EAAA,CAAC,WAAa,EAAA,UAAA,EAAY,IAAM,EAAA,UAAA,EAAY,KAAO,EAAA,KAAA,EAAO,OAAS,EAAA,KAAA,EAAO,IAAM,EAAA,QAAA,EAAU,aAAa,CAAC,CAAA;AAG3G,EAAA,IAAI,CAAC,aAAe,EAAA;AAClB,IAAO,OAAA,IAAA;AAAA;AAGT,EAAO,OAAA,QAAA;AACT;;;;"}
1
+ {"version":3,"file":"QueryVariable.js","sources":["../../../src/variables/QueryVariable.tsx"],"sourcesContent":["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 skipUrlSync,\n allValue,\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 skipUrlSync,\n allValue,\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 variable.state.skipUrlSync === skipUrlSync &&\n variable.state.allValue === allValue\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 skipUrlSync,\n allValue,\n });\n\n variable.refreshOptions();\n }, [\n skipUrlSync,\n allValue,\n datasource,\n hide,\n includeAll,\n label,\n query,\n refresh,\n regex,\n sort,\n variable,\n 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"],"names":["QueryVariableObject"],"mappings":";;;;;AAkBO,SAAS,aAAc,CAAA;AAAA,EAC5B,KAAA;AAAA,EACA,IAAA;AAAA,EACA,UAAA;AAAA,EACA,KAAA;AAAA,EACA,IAAA;AAAA,EACA,KAAA;AAAA,EACA,OAAA;AAAA,EACA,IAAA;AAAA,EACA,YAAA;AAAA,EACA,OAAA;AAAA,EACA,UAAA;AAAA,EACA,WAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF,CAAwC,EAAA;AACtC,EAAA,MAAM,QAAQ,eAAgB,EAAA;AAC9B,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAI,QAAkB,EAAA;AAE5D,EAAI,IAAA,QAAA,GAA4C,KAAM,CAAA,YAAA,CAAa,IAAI,CAAA;AAEvE,EAAA,IAAI,CAAC,QAAU,EAAA;AACb,IAAA,QAAA,GAAW,IAAIA,eAAoB,CAAA;AAAA,MACjC,IAAA;AAAA,MACA,KAAA;AAAA,MACA,KAAA;AAAA,MACA,UAAA;AAAA,MACA,OAAA;AAAA,MACA,IAAA;AAAA,MACA,KAAA;AAAA,MACA,KAAO,EAAA,YAAA;AAAA,MACP,OAAA;AAAA,MACA,IAAA;AAAA,MACA,UAAA;AAAA,MACA,WAAA;AAAA,MACA;AAAA,KACD,CAAA;AAAA;AAGH,EAAA,SAAA,CAAU,MAAM;AACd,IAAM,MAAA,QAAA,GAAW,KAAM,CAAA,WAAA,CAAY,QAAQ,CAAA;AAC3C,IAAA,gBAAA,CAAiB,IAAI,CAAA;AACrB,IAAO,OAAA,QAAA;AAAA,GACN,EAAA,CAAC,QAAU,EAAA,KAAA,EAAO,IAAI,CAAC,CAAA;AAE1B,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,CAAC,aAAe,EAAA;AAClB,MAAA;AAAA;AAGF,IAAA,IACE,QAAQ,QAAS,CAAA,KAAA,CAAM,OAAO,KAAK,CAAA,IACnC,QAAQ,QAAS,CAAA,KAAA,CAAM,YAAY,UAAU,CAAA,IAC7C,SAAS,KAAM,CAAA,KAAA,KAAU,SACzB,QAAS,CAAA,KAAA,CAAM,UAAU,KACzB,IAAA,QAAA,CAAS,MAAM,IAAS,KAAA,IAAA,IACxB,SAAS,KAAM,CAAA,UAAA,KAAe,cAC9B,QAAS,CAAA,KAAA,CAAM,YAAY,OAC3B,IAAA,QAAA,CAAS,MAAM,IAAS,KAAA,IAAA,IACxB,SAAS,KAAM,CAAA,WAAA,KAAgB,eAC/B,QAAS,CAAA,KAAA,CAAM,aAAa,QAC5B,EAAA;AACA,MAAA;AAAA;AAGF,IAAA,QAAA,CAAS,QAAS,CAAA;AAAA,MAChB,KAAA;AAAA,MACA,KAAA;AAAA,MACA,UAAA;AAAA,MACA,OAAA;AAAA,MACA,IAAA;AAAA,MACA,KAAA;AAAA,MACA,IAAA;AAAA,MACA,UAAA;AAAA,MACA,WAAA;AAAA,MACA;AAAA,KACD,CAAA;AAED,IAAA,QAAA,CAAS,cAAe,EAAA;AAAA,GACvB,EAAA;AAAA,IACD,WAAA;AAAA,IACA,QAAA;AAAA,IACA,UAAA;AAAA,IACA,IAAA;AAAA,IACA,UAAA;AAAA,IACA,KAAA;AAAA,IACA,KAAA;AAAA,IACA,OAAA;AAAA,IACA,KAAA;AAAA,IACA,IAAA;AAAA,IACA,QAAA;AAAA,IACA;AAAA,GACD,CAAA;AAGD,EAAA,IAAI,CAAC,aAAe,EAAA;AAClB,IAAO,OAAA,IAAA;AAAA;AAGT,EAAO,OAAA,QAAA;AACT;;;;"}
package/dist/index.d.ts CHANGED
@@ -118,6 +118,7 @@ interface VariableProps {
118
118
  hide?: VariableHide;
119
119
  initialValue?: VariableValue;
120
120
  skipUrlSync?: boolean;
121
+ allValue?: string;
121
122
  }
122
123
 
123
124
  interface CustomVariableProps extends VariableProps {
@@ -126,7 +127,7 @@ interface CustomVariableProps extends VariableProps {
126
127
  includeAll?: boolean;
127
128
  children: React.ReactNode;
128
129
  }
129
- declare function CustomVariable({ query, name, label, hide, initialValue, isMulti, includeAll, skipUrlSync, children, }: CustomVariableProps): React.ReactNode;
130
+ declare function CustomVariable({ query, name, label, hide, initialValue, isMulti, includeAll, skipUrlSync, allValue, children, }: CustomVariableProps): React.ReactNode;
130
131
 
131
132
  interface DataSourceVariableProps extends VariableProps {
132
133
  pluginId: string;
@@ -137,7 +138,7 @@ interface DataSourceVariableProps extends VariableProps {
137
138
  includeAll?: boolean;
138
139
  children: React.ReactNode;
139
140
  }
140
- declare function DataSourceVariable({ pluginId, regex, name, label, hide, initialValue, isMulti, includeAll, skipUrlSync, children, }: DataSourceVariableProps): React.ReactNode;
141
+ declare function DataSourceVariable({ pluginId, regex, name, label, hide, initialValue, isMulti, includeAll, skipUrlSync, allValue, children, }: DataSourceVariableProps): React.ReactNode;
141
142
 
142
143
  interface QueryVariableProps extends VariableProps {
143
144
  query: string | SceneDataQuery;
@@ -149,7 +150,7 @@ interface QueryVariableProps extends VariableProps {
149
150
  includeAll?: boolean;
150
151
  children: React.ReactNode;
151
152
  }
152
- declare function QueryVariable({ query, name, datasource, label, hide, regex, refresh, sort, initialValue, isMulti, includeAll, skipUrlSync, children, }: QueryVariableProps): React.ReactNode;
153
+ declare function QueryVariable({ query, name, datasource, label, hide, regex, refresh, sort, initialValue, isMulti, includeAll, skipUrlSync, allValue, children, }: QueryVariableProps): React.ReactNode;
153
154
 
154
155
  /**
155
156
  * Code and concepts copied from https://github.com/grafana/hackathon-2023-12-grafana-react/blob/main/src/grafana-react
package/dist/index.js CHANGED
@@ -574,6 +574,7 @@ function CustomVariable({
574
574
  isMulti,
575
575
  includeAll,
576
576
  skipUrlSync,
577
+ allValue,
577
578
  children
578
579
  }) {
579
580
  const scene = useSceneContext();
@@ -588,7 +589,8 @@ function CustomVariable({
588
589
  isMulti,
589
590
  includeAll,
590
591
  hide,
591
- skipUrlSync
592
+ skipUrlSync,
593
+ allValue
592
594
  });
593
595
  }
594
596
  React.useEffect(() => {
@@ -603,9 +605,10 @@ function CustomVariable({
603
605
  hide,
604
606
  isMulti,
605
607
  includeAll,
606
- skipUrlSync
608
+ skipUrlSync,
609
+ allValue
607
610
  });
608
- }, [skipUrlSync, hide, includeAll, isMulti, label, query, variable]);
611
+ }, [skipUrlSync, allValue, hide, includeAll, isMulti, label, query, variable]);
609
612
  if (!variableAdded) {
610
613
  return null;
611
614
  }
@@ -622,6 +625,7 @@ function DataSourceVariable({
622
625
  isMulti,
623
626
  includeAll,
624
627
  skipUrlSync,
628
+ allValue,
625
629
  children
626
630
  }) {
627
631
  const scene = useSceneContext();
@@ -637,7 +641,8 @@ function DataSourceVariable({
637
641
  isMulti,
638
642
  hide,
639
643
  includeAll,
640
- skipUrlSync
644
+ skipUrlSync,
645
+ allValue
641
646
  });
642
647
  }
643
648
  React.useEffect(() => {
@@ -649,7 +654,7 @@ function DataSourceVariable({
649
654
  if (!variableAdded) {
650
655
  return;
651
656
  }
652
- if (variable.state.pluginId === pluginId && variable.state.regex === regex && variable.state.label === label && variable.state.hide === hide && variable.state.includeAll === includeAll && variable.state.skipUrlSync === skipUrlSync) {
657
+ if (variable.state.pluginId === pluginId && variable.state.regex === regex && variable.state.label === label && variable.state.hide === hide && variable.state.includeAll === includeAll && variable.state.skipUrlSync === skipUrlSync && variable.state.allValue === allValue) {
653
658
  return;
654
659
  }
655
660
  variable.setState({
@@ -658,10 +663,11 @@ function DataSourceVariable({
658
663
  label,
659
664
  hide,
660
665
  includeAll,
661
- skipUrlSync
666
+ skipUrlSync,
667
+ allValue
662
668
  });
663
669
  variable.refreshOptions();
664
- }, [skipUrlSync, hide, includeAll, label, pluginId, regex, variable, variableAdded]);
670
+ }, [skipUrlSync, allValue, hide, includeAll, label, pluginId, regex, variable, variableAdded]);
665
671
  if (!variableAdded) {
666
672
  return null;
667
673
  }
@@ -681,6 +687,7 @@ function QueryVariable({
681
687
  isMulti,
682
688
  includeAll,
683
689
  skipUrlSync,
690
+ allValue,
684
691
  children
685
692
  }) {
686
693
  const scene = useSceneContext();
@@ -699,7 +706,8 @@ function QueryVariable({
699
706
  isMulti,
700
707
  hide,
701
708
  includeAll,
702
- skipUrlSync
709
+ skipUrlSync,
710
+ allValue
703
711
  });
704
712
  }
705
713
  React.useEffect(() => {
@@ -711,7 +719,7 @@ function QueryVariable({
711
719
  if (!variableAdded) {
712
720
  return;
713
721
  }
714
- if (lodash.isEqual(variable.state.query, query) && lodash.isEqual(variable.state.datasource, datasource) && variable.state.regex === regex && variable.state.label === label && variable.state.hide === hide && variable.state.includeAll === includeAll && variable.state.refresh === refresh && variable.state.sort === sort && variable.state.skipUrlSync === skipUrlSync) {
722
+ if (lodash.isEqual(variable.state.query, query) && lodash.isEqual(variable.state.datasource, datasource) && variable.state.regex === regex && variable.state.label === label && variable.state.hide === hide && variable.state.includeAll === includeAll && variable.state.refresh === refresh && variable.state.sort === sort && variable.state.skipUrlSync === skipUrlSync && variable.state.allValue === allValue) {
715
723
  return;
716
724
  }
717
725
  variable.setState({
@@ -723,10 +731,24 @@ function QueryVariable({
723
731
  regex,
724
732
  hide,
725
733
  includeAll,
726
- skipUrlSync
734
+ skipUrlSync,
735
+ allValue
727
736
  });
728
737
  variable.refreshOptions();
729
- }, [skipUrlSync, datasource, hide, includeAll, label, query, refresh, regex, sort, variable, variableAdded]);
738
+ }, [
739
+ skipUrlSync,
740
+ allValue,
741
+ datasource,
742
+ hide,
743
+ includeAll,
744
+ label,
745
+ query,
746
+ refresh,
747
+ regex,
748
+ sort,
749
+ variable,
750
+ variableAdded
751
+ ]);
730
752
  if (!variableAdded) {
731
753
  return null;
732
754
  }
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/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 minInterval?: string;\n /**\n * Optional prefix for the requestId. When set, request IDs will be formatted as `{requestIdPrefix}{counter}`.\n * Useful for identifying requests from specific panels or components.\n */\n requestIdPrefix?: string;\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 minInterval: options.minInterval,\n requestIdPrefix: options.requestIdPrefix,\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 VizPanelMenu,\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 { PanelContext } from '@grafana/ui';\nimport { writeSceneLog } from '../utils';\nimport { useSceneContext } from '../hooks/hooks';\n\nexport interface VizPanelProps {\n title: string;\n description?: string;\n dataProvider?: SceneDataProvider;\n viz: VizConfig;\n displayMode?: 'default' | 'transparent';\n hoverHeader?: boolean;\n hoverHeaderOffset?: number;\n menu?: VizPanelMenu;\n titleItems?: React.ReactNode;\n seriesLimit?: number;\n seriesLimitShowAll?: boolean;\n headerActions?: React.ReactNode;\n extendPanelContext?: (vizPanel: VizPanelObject, context: PanelContext) => void;\n collapsible?: boolean;\n collapsed?: boolean;\n}\n\nexport function VizPanel(props: VizPanelProps) {\n const {\n title,\n description,\n viz,\n dataProvider,\n displayMode,\n hoverHeader,\n hoverHeaderOffset,\n headerActions,\n menu,\n titleItems,\n extendPanelContext,\n seriesLimit,\n seriesLimitShowAll,\n collapsible,\n collapsed,\n } = props;\n\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 pluginId: viz.pluginId,\n title: title,\n titleItems: titleItems,\n description: description,\n options: viz.options,\n fieldConfig: viz.fieldConfig,\n pluginVersion: viz.pluginVersion,\n $data: getDataProviderForVizPanel(dataProvider),\n displayMode: displayMode,\n hoverHeader: hoverHeader,\n hoverHeaderOffset: hoverHeaderOffset,\n headerActions: headerActions,\n menu: menu,\n extendPanelContext: extendPanelContext,\n collapsible: collapsible,\n collapsed: collapsed,\n seriesLimit: seriesLimit,\n seriesLimitShowAll: seriesLimitShowAll,\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 (description !== prevProps.description) {\n stateUpdate.description = description;\n }\n\n if (displayMode !== prevProps.displayMode) {\n stateUpdate.displayMode = displayMode;\n }\n\n if (hoverHeader !== prevProps.hoverHeader) {\n stateUpdate.hoverHeader = hoverHeader;\n }\n\n if (hoverHeaderOffset !== prevProps.hoverHeaderOffset) {\n stateUpdate.hoverHeaderOffset = hoverHeaderOffset;\n }\n\n if (menu !== prevProps.menu) {\n stateUpdate.menu = menu;\n }\n\n if (titleItems !== prevProps.titleItems) {\n stateUpdate.titleItems = titleItems;\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 (seriesLimit !== prevProps.seriesLimit) {\n stateUpdate.seriesLimit = seriesLimit;\n }\n\n if (seriesLimitShowAll !== prevProps.seriesLimitShowAll) {\n stateUpdate.seriesLimitShowAll = seriesLimitShowAll;\n }\n\n if (collapsible !== prevProps.collapsible) {\n stateUpdate.collapsible = collapsible;\n }\n\n if (collapsed !== prevProps.collapsed) {\n stateUpdate.collapsed = collapsed;\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 }, [\n panel,\n title,\n description,\n displayMode,\n hoverHeader,\n hoverHeaderOffset,\n headerActions,\n menu,\n titleItems,\n viz,\n dataProvider,\n seriesLimit,\n seriesLimitShowAll,\n collapsible,\n collapsed,\n prevProps,\n ]);\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, ControlsLabel } from '@grafana/scenes';\nimport { useSceneContext } from '../hooks/hooks';\nimport { useStyles2 } from '@grafana/ui';\nimport { css } from '@emotion/css';\nimport { LoadingState } from '@grafana/data';\n\nexport interface Props {\n name: string;\n}\n\nexport function DataLayerControl({ name }: Props) {\n const scene = useSceneContext();\n const styles = useStyles2(getStyles);\n const layerSets = sceneGraph.getDataLayers(scene);\n\n const layer = getLayer(layerSets, name);\n const isLoading = Boolean(layer && layer.state.data?.state === LoadingState.Loading);\n\n if (!layer) {\n return <div>Annotation {name} not found</div>;\n }\n\n return (\n <div className={styles.container}>\n <ControlsLabel\n htmlFor={`data-layer-${layer.state.key}`}\n isLoading={isLoading}\n onCancel={() => layer.cancelQuery?.()}\n label={layer.state.name}\n description={layer.state.description}\n error={layer.state.data?.errors?.[0].message}\n />\n <layer.Component model={layer} />\n </div>\n );\n}\n\nconst getStyles = () => ({\n container: css({\n display: 'flex',\n }),\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 skipUrlSync,\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({\n name,\n label,\n query,\n value: initialValue,\n isMulti,\n includeAll,\n hide,\n skipUrlSync,\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 variable?.setState({\n label,\n query,\n hide,\n isMulti,\n includeAll,\n skipUrlSync,\n });\n }, [skipUrlSync, 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 skipUrlSync,\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 skipUrlSync,\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 variable.state.skipUrlSync === skipUrlSync\n ) {\n return;\n }\n\n variable.setState({\n pluginId,\n regex,\n label,\n hide,\n includeAll,\n skipUrlSync,\n });\n\n variable.refreshOptions();\n }, [skipUrlSync, 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 skipUrlSync,\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 skipUrlSync,\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 variable.state.skipUrlSync === skipUrlSync\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 skipUrlSync,\n });\n\n variable.refreshOptions();\n }, [skipUrlSync, datasource, hide, includeAll, label, query, refresh, regex, sort, 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 { 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({\n name: options.name,\n datasource: { uid: options.datasource },\n query: options.query,\n regex: options.regex,\n });\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","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","useStyles2","LoadingState","ControlsLabel","_a","css","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 minInterval?: string;\n /**\n * Optional prefix for the requestId. When set, request IDs will be formatted as `{requestIdPrefix}{counter}`.\n * Useful for identifying requests from specific panels or components.\n */\n requestIdPrefix?: string;\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 minInterval: options.minInterval,\n requestIdPrefix: options.requestIdPrefix,\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 VizPanelMenu,\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 { PanelContext } from '@grafana/ui';\nimport { writeSceneLog } from '../utils';\nimport { useSceneContext } from '../hooks/hooks';\n\nexport interface VizPanelProps {\n title: string;\n description?: string;\n dataProvider?: SceneDataProvider;\n viz: VizConfig;\n displayMode?: 'default' | 'transparent';\n hoverHeader?: boolean;\n hoverHeaderOffset?: number;\n menu?: VizPanelMenu;\n titleItems?: React.ReactNode;\n seriesLimit?: number;\n seriesLimitShowAll?: boolean;\n headerActions?: React.ReactNode;\n extendPanelContext?: (vizPanel: VizPanelObject, context: PanelContext) => void;\n collapsible?: boolean;\n collapsed?: boolean;\n}\n\nexport function VizPanel(props: VizPanelProps) {\n const {\n title,\n description,\n viz,\n dataProvider,\n displayMode,\n hoverHeader,\n hoverHeaderOffset,\n headerActions,\n menu,\n titleItems,\n extendPanelContext,\n seriesLimit,\n seriesLimitShowAll,\n collapsible,\n collapsed,\n } = props;\n\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 pluginId: viz.pluginId,\n title: title,\n titleItems: titleItems,\n description: description,\n options: viz.options,\n fieldConfig: viz.fieldConfig,\n pluginVersion: viz.pluginVersion,\n $data: getDataProviderForVizPanel(dataProvider),\n displayMode: displayMode,\n hoverHeader: hoverHeader,\n hoverHeaderOffset: hoverHeaderOffset,\n headerActions: headerActions,\n menu: menu,\n extendPanelContext: extendPanelContext,\n collapsible: collapsible,\n collapsed: collapsed,\n seriesLimit: seriesLimit,\n seriesLimitShowAll: seriesLimitShowAll,\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 (description !== prevProps.description) {\n stateUpdate.description = description;\n }\n\n if (displayMode !== prevProps.displayMode) {\n stateUpdate.displayMode = displayMode;\n }\n\n if (hoverHeader !== prevProps.hoverHeader) {\n stateUpdate.hoverHeader = hoverHeader;\n }\n\n if (hoverHeaderOffset !== prevProps.hoverHeaderOffset) {\n stateUpdate.hoverHeaderOffset = hoverHeaderOffset;\n }\n\n if (menu !== prevProps.menu) {\n stateUpdate.menu = menu;\n }\n\n if (titleItems !== prevProps.titleItems) {\n stateUpdate.titleItems = titleItems;\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 (seriesLimit !== prevProps.seriesLimit) {\n stateUpdate.seriesLimit = seriesLimit;\n }\n\n if (seriesLimitShowAll !== prevProps.seriesLimitShowAll) {\n stateUpdate.seriesLimitShowAll = seriesLimitShowAll;\n }\n\n if (collapsible !== prevProps.collapsible) {\n stateUpdate.collapsible = collapsible;\n }\n\n if (collapsed !== prevProps.collapsed) {\n stateUpdate.collapsed = collapsed;\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 }, [\n panel,\n title,\n description,\n displayMode,\n hoverHeader,\n hoverHeaderOffset,\n headerActions,\n menu,\n titleItems,\n viz,\n dataProvider,\n seriesLimit,\n seriesLimitShowAll,\n collapsible,\n collapsed,\n prevProps,\n ]);\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, ControlsLabel } from '@grafana/scenes';\nimport { useSceneContext } from '../hooks/hooks';\nimport { useStyles2 } from '@grafana/ui';\nimport { css } from '@emotion/css';\nimport { LoadingState } from '@grafana/data';\n\nexport interface Props {\n name: string;\n}\n\nexport function DataLayerControl({ name }: Props) {\n const scene = useSceneContext();\n const styles = useStyles2(getStyles);\n const layerSets = sceneGraph.getDataLayers(scene);\n\n const layer = getLayer(layerSets, name);\n const isLoading = Boolean(layer && layer.state.data?.state === LoadingState.Loading);\n\n if (!layer) {\n return <div>Annotation {name} not found</div>;\n }\n\n return (\n <div className={styles.container}>\n <ControlsLabel\n htmlFor={`data-layer-${layer.state.key}`}\n isLoading={isLoading}\n onCancel={() => layer.cancelQuery?.()}\n label={layer.state.name}\n description={layer.state.description}\n error={layer.state.data?.errors?.[0].message}\n />\n <layer.Component model={layer} />\n </div>\n );\n}\n\nconst getStyles = () => ({\n container: css({\n display: 'flex',\n }),\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 skipUrlSync,\n allValue,\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({\n name,\n label,\n query,\n value: initialValue,\n isMulti,\n includeAll,\n hide,\n skipUrlSync,\n allValue,\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 variable?.setState({\n label,\n query,\n hide,\n isMulti,\n includeAll,\n skipUrlSync,\n allValue,\n });\n }, [skipUrlSync, allValue, 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 skipUrlSync,\n allValue,\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 skipUrlSync,\n allValue,\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 variable.state.skipUrlSync === skipUrlSync &&\n variable.state.allValue === allValue\n ) {\n return;\n }\n\n variable.setState({\n pluginId,\n regex,\n label,\n hide,\n includeAll,\n skipUrlSync,\n allValue,\n });\n\n variable.refreshOptions();\n }, [skipUrlSync, allValue, 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 skipUrlSync,\n allValue,\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 skipUrlSync,\n allValue,\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 variable.state.skipUrlSync === skipUrlSync &&\n variable.state.allValue === allValue\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 skipUrlSync,\n allValue,\n });\n\n variable.refreshOptions();\n }, [\n skipUrlSync,\n allValue,\n datasource,\n hide,\n includeAll,\n label,\n query,\n refresh,\n regex,\n sort,\n variable,\n 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({\n name: options.name,\n datasource: { uid: options.datasource },\n query: options.query,\n regex: options.regex,\n });\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","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","useStyles2","LoadingState","ControlsLabel","_a","css","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": "6.52.14",
3
+ "version": "6.52.15",
4
4
  "description": "Grafana framework for building dynamic dashboards",
5
5
  "author": "Grafana Labs",
6
6
  "license": "Apache-2.0",
@@ -37,7 +37,7 @@
37
37
  "url": "https://github.com/grafana/scenes/issues"
38
38
  },
39
39
  "dependencies": {
40
- "@grafana/scenes": "6.52.14",
40
+ "@grafana/scenes": "6.52.15",
41
41
  "lru-cache": "^10.2.2",
42
42
  "react-use": "^17.4.0"
43
43
  },
@@ -114,5 +114,5 @@
114
114
  "prettier --write"
115
115
  ]
116
116
  },
117
- "gitHead": "d7feb3684918da442e6f481f02110bb55ad1c0f2"
117
+ "gitHead": "3d97a6f9433b2be68dd6f5b6e66b7bc318cbe547"
118
118
  }