@grafana/scenes 6.5.1--canary.1077.13965250047.0 → 6.5.1--canary.1079.13967087962.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (275) hide show
  1. package/dist/esm/behaviors/ActWhenVariableChanged.js.map +1 -1
  2. package/dist/esm/behaviors/CursorSync.js +21 -3
  3. package/dist/esm/behaviors/CursorSync.js.map +1 -1
  4. package/dist/esm/behaviors/LiveNowTimer.js +2 -3
  5. package/dist/esm/behaviors/LiveNowTimer.js.map +1 -1
  6. package/dist/esm/behaviors/SceneQueryController.js +37 -7
  7. package/dist/esm/behaviors/SceneQueryController.js.map +1 -1
  8. package/dist/esm/behaviors/SceneRenderProfiler.js +17 -10
  9. package/dist/esm/behaviors/SceneRenderProfiler.js.map +1 -1
  10. package/dist/esm/components/EmbeddedScene.js +12 -1
  11. package/dist/esm/components/EmbeddedScene.js.map +1 -1
  12. package/dist/esm/components/NestedScene.js +30 -23
  13. package/dist/esm/components/NestedScene.js.map +1 -1
  14. package/dist/esm/components/SceneApp/SceneApp.js +11 -1
  15. package/dist/esm/components/SceneApp/SceneApp.js.map +1 -1
  16. package/dist/esm/components/SceneApp/SceneAppPage.js +47 -28
  17. package/dist/esm/components/SceneApp/SceneAppPage.js.map +1 -1
  18. package/dist/esm/components/SceneApp/SceneAppPageView.js +20 -14
  19. package/dist/esm/components/SceneApp/SceneAppPageView.js.map +1 -1
  20. package/dist/esm/components/SceneApp/utils.js +18 -2
  21. package/dist/esm/components/SceneApp/utils.js.map +1 -1
  22. package/dist/esm/components/SceneByFrameRepeater.js +3 -1
  23. package/dist/esm/components/SceneByFrameRepeater.js.map +1 -1
  24. package/dist/esm/components/SceneByVariableRepeater.js +3 -1
  25. package/dist/esm/components/SceneByVariableRepeater.js.map +1 -1
  26. package/dist/esm/components/SceneCanvasText.js +4 -1
  27. package/dist/esm/components/SceneCanvasText.js.map +1 -1
  28. package/dist/esm/components/SceneControlsSpacer.js +3 -1
  29. package/dist/esm/components/SceneControlsSpacer.js.map +1 -1
  30. package/dist/esm/components/SceneDebugger/DebugDetails.js +24 -11
  31. package/dist/esm/components/SceneDebugger/DebugDetails.js.map +1 -1
  32. package/dist/esm/components/SceneDebugger/DebugTreeNode.js +14 -2
  33. package/dist/esm/components/SceneDebugger/DebugTreeNode.js.map +1 -1
  34. package/dist/esm/components/SceneDebugger/SceneDebugger.js +29 -1
  35. package/dist/esm/components/SceneDebugger/SceneDebugger.js.map +1 -1
  36. package/dist/esm/components/SceneReactObject.js +17 -1
  37. package/dist/esm/components/SceneReactObject.js.map +1 -1
  38. package/dist/esm/components/SceneRefreshPicker.js +38 -23
  39. package/dist/esm/components/SceneRefreshPicker.js.map +1 -1
  40. package/dist/esm/components/SceneTimePicker.js +29 -27
  41. package/dist/esm/components/SceneTimePicker.js.map +1 -1
  42. package/dist/esm/components/SceneTimeRangeCompare.js +50 -36
  43. package/dist/esm/components/SceneTimeRangeCompare.js.map +1 -1
  44. package/dist/esm/components/SceneToolbarButton.js +14 -10
  45. package/dist/esm/components/SceneToolbarButton.js.map +1 -1
  46. package/dist/esm/components/VizPanel/VizPanel.js +29 -20
  47. package/dist/esm/components/VizPanel/VizPanel.js.map +1 -1
  48. package/dist/esm/components/VizPanel/VizPanelExploreButton.js +13 -17
  49. package/dist/esm/components/VizPanel/VizPanelExploreButton.js.map +1 -1
  50. package/dist/esm/components/VizPanel/VizPanelMenu.js +20 -18
  51. package/dist/esm/components/VizPanel/VizPanelMenu.js.map +1 -1
  52. package/dist/esm/components/VizPanel/VizPanelRenderer.js +122 -92
  53. package/dist/esm/components/VizPanel/VizPanelRenderer.js.map +1 -1
  54. package/dist/esm/components/VizPanel/VizPanelSeriesLimit.js +15 -7
  55. package/dist/esm/components/VizPanel/VizPanelSeriesLimit.js.map +1 -1
  56. package/dist/esm/components/VizPanel/colorSeriesConfigFactory.js +29 -15
  57. package/dist/esm/components/VizPanel/colorSeriesConfigFactory.js.map +1 -1
  58. package/dist/esm/components/VizPanel/registerRuntimePanelPlugin.js +21 -3
  59. package/dist/esm/components/VizPanel/registerRuntimePanelPlugin.js.map +1 -1
  60. package/dist/esm/components/VizPanel/seriesVisibilityConfigFactory.js +34 -22
  61. package/dist/esm/components/VizPanel/seriesVisibilityConfigFactory.js.map +1 -1
  62. package/dist/esm/components/layout/CSSGrid/SceneCSSGridLayout.js +40 -8
  63. package/dist/esm/components/layout/CSSGrid/SceneCSSGridLayout.js.map +1 -1
  64. package/dist/esm/components/layout/LazyLoader.js +35 -2
  65. package/dist/esm/components/layout/LazyLoader.js.map +1 -1
  66. package/dist/esm/components/layout/SceneFlexLayout.js +13 -3
  67. package/dist/esm/components/layout/SceneFlexLayout.js.map +1 -1
  68. package/dist/esm/components/layout/grid/SceneGridItem.js +3 -1
  69. package/dist/esm/components/layout/grid/SceneGridItem.js.map +1 -1
  70. package/dist/esm/components/layout/grid/SceneGridLayout.js +26 -26
  71. package/dist/esm/components/layout/grid/SceneGridLayout.js.map +1 -1
  72. package/dist/esm/components/layout/grid/SceneGridLayoutRenderer.js +104 -88
  73. package/dist/esm/components/layout/grid/SceneGridLayoutRenderer.js.map +1 -1
  74. package/dist/esm/components/layout/grid/SceneGridRow.js +48 -15
  75. package/dist/esm/components/layout/grid/SceneGridRow.js.map +1 -1
  76. package/dist/esm/components/layout/grid/constants.js.map +1 -1
  77. package/dist/esm/components/layout/grid/types.js.map +1 -1
  78. package/dist/esm/components/layout/grid/utils.js +21 -3
  79. package/dist/esm/components/layout/grid/utils.js.map +1 -1
  80. package/dist/esm/components/layout/split/SplitLayout.js.map +1 -1
  81. package/dist/esm/components/layout/split/SplitLayoutRenderer.js +14 -11
  82. package/dist/esm/components/layout/split/SplitLayoutRenderer.js.map +1 -1
  83. package/dist/esm/components/layout/split/Splitter.js +58 -60
  84. package/dist/esm/components/layout/split/Splitter.js.map +1 -1
  85. package/dist/esm/core/PanelBuilders/FieldConfigBuilder.js +23 -46
  86. package/dist/esm/core/PanelBuilders/FieldConfigBuilder.js.map +1 -1
  87. package/dist/esm/core/PanelBuilders/FieldConfigBuilders.js +8 -8
  88. package/dist/esm/core/PanelBuilders/FieldConfigBuilders.js.map +1 -1
  89. package/dist/esm/core/PanelBuilders/FieldConfigOverridesBuilder.js.map +1 -1
  90. package/dist/esm/core/PanelBuilders/PanelOptionsBuilder.js +0 -3
  91. package/dist/esm/core/PanelBuilders/PanelOptionsBuilder.js.map +1 -1
  92. package/dist/esm/core/PanelBuilders/PanelOptionsBuilders.js +28 -28
  93. package/dist/esm/core/PanelBuilders/PanelOptionsBuilders.js.map +1 -1
  94. package/dist/esm/core/PanelBuilders/StandardFieldConfigBuilders.js.map +1 -1
  95. package/dist/esm/core/PanelBuilders/VizConfigBuilder.js +0 -39
  96. package/dist/esm/core/PanelBuilders/VizConfigBuilder.js.map +1 -1
  97. package/dist/esm/core/PanelBuilders/VizConfigBuilders.js +32 -32
  98. package/dist/esm/core/PanelBuilders/VizConfigBuilders.js.map +1 -1
  99. package/dist/esm/core/PanelBuilders/VizPanelBuilder.js +21 -82
  100. package/dist/esm/core/PanelBuilders/VizPanelBuilder.js.map +1 -1
  101. package/dist/esm/core/PanelBuilders/index.js +32 -32
  102. package/dist/esm/core/PanelBuilders/index.js.map +1 -1
  103. package/dist/esm/core/SceneComponentWrapper.js +38 -4
  104. package/dist/esm/core/SceneComponentWrapper.js.map +1 -1
  105. package/dist/esm/core/SceneDataNode.js +19 -4
  106. package/dist/esm/core/SceneDataNode.js.map +1 -1
  107. package/dist/esm/core/SceneObjectBase.js +17 -55
  108. package/dist/esm/core/SceneObjectBase.js.map +1 -1
  109. package/dist/esm/core/SceneObjectRef.js +18 -7
  110. package/dist/esm/core/SceneObjectRef.js.map +1 -1
  111. package/dist/esm/core/SceneScopesBridge.js +0 -15
  112. package/dist/esm/core/SceneScopesBridge.js.map +1 -1
  113. package/dist/esm/core/SceneTimeRange.js +17 -9
  114. package/dist/esm/core/SceneTimeRange.js.map +1 -1
  115. package/dist/esm/core/SceneTimeRangeTransformerBase.js.map +1 -1
  116. package/dist/esm/core/SceneTimeZoneOverride.js +23 -7
  117. package/dist/esm/core/SceneTimeZoneOverride.js.map +1 -1
  118. package/dist/esm/core/events.js.map +1 -1
  119. package/dist/esm/core/sceneGraph/getQueryController.js.map +1 -1
  120. package/dist/esm/core/sceneGraph/getTimeRange.js.map +1 -1
  121. package/dist/esm/core/sceneGraph/index.js +1 -1
  122. package/dist/esm/core/sceneGraph/index.js.map +1 -1
  123. package/dist/esm/core/sceneGraph/sceneGraph.js.map +1 -1
  124. package/dist/esm/core/sceneGraph/utils.js +17 -1
  125. package/dist/esm/core/sceneGraph/utils.js.map +1 -1
  126. package/dist/esm/core/types.js.map +1 -1
  127. package/dist/esm/index.js +5 -6
  128. package/dist/esm/index.js.map +1 -1
  129. package/dist/esm/querying/DataLayersMerger.js.map +1 -1
  130. package/dist/esm/querying/DataProviderProxy.js.map +1 -1
  131. package/dist/esm/querying/ExtraQueryProvider.js.map +1 -1
  132. package/dist/esm/querying/RuntimeDataSource.js.map +1 -1
  133. package/dist/esm/querying/SceneDataLayerSet.js +24 -9
  134. package/dist/esm/querying/SceneDataLayerSet.js.map +1 -1
  135. package/dist/esm/querying/SceneDataTransformer.js +24 -11
  136. package/dist/esm/querying/SceneDataTransformer.js.map +1 -1
  137. package/dist/esm/querying/SceneQueryRunner.js +34 -45
  138. package/dist/esm/querying/SceneQueryRunner.js.map +1 -1
  139. package/dist/esm/querying/extraQueryProcessingOperator.js +21 -3
  140. package/dist/esm/querying/extraQueryProcessingOperator.js.map +1 -1
  141. package/dist/esm/querying/getEnrichedDataRequest.js.map +1 -1
  142. package/dist/esm/querying/layers/SceneDataLayerBase.js +19 -16
  143. package/dist/esm/querying/layers/SceneDataLayerBase.js.map +1 -1
  144. package/dist/esm/querying/layers/SceneDataLayerControls.js +21 -15
  145. package/dist/esm/querying/layers/SceneDataLayerControls.js.map +1 -1
  146. package/dist/esm/querying/layers/annotations/AnnotationsDataLayer.js +30 -12
  147. package/dist/esm/querying/layers/annotations/AnnotationsDataLayer.js.map +1 -1
  148. package/dist/esm/querying/layers/annotations/filterAnnotations.js +23 -6
  149. package/dist/esm/querying/layers/annotations/filterAnnotations.js.map +1 -1
  150. package/dist/esm/querying/layers/annotations/standardAnnotationQuery.js +29 -19
  151. package/dist/esm/querying/layers/annotations/standardAnnotationQuery.js.map +1 -1
  152. package/dist/esm/querying/layers/annotations/standardAnnotationsSupport.js +34 -14
  153. package/dist/esm/querying/layers/annotations/standardAnnotationsSupport.js.map +1 -1
  154. package/dist/esm/querying/layers/annotations/utils.js +17 -1
  155. package/dist/esm/querying/layers/annotations/utils.js.map +1 -1
  156. package/dist/esm/querying/registerQueryWithController.js.map +1 -1
  157. package/dist/esm/services/SceneObjectUrlSyncConfig.js.map +1 -1
  158. package/dist/esm/services/UniqueUrlKeyMapper.js.map +1 -1
  159. package/dist/esm/services/UrlSyncContextProvider.js.map +1 -1
  160. package/dist/esm/services/UrlSyncManager.js +19 -11
  161. package/dist/esm/services/UrlSyncManager.js.map +1 -1
  162. package/dist/esm/services/useUrlSync.js.map +1 -1
  163. package/dist/esm/services/utils.js.map +1 -1
  164. package/dist/esm/utils/ControlsLabel.js +47 -23
  165. package/dist/esm/utils/ControlsLabel.js.map +1 -1
  166. package/dist/esm/utils/LoadingIndicator.js +10 -11
  167. package/dist/esm/utils/LoadingIndicator.js.map +1 -1
  168. package/dist/esm/utils/SafeSerializableSceneObject.js +18 -7
  169. package/dist/esm/utils/SafeSerializableSceneObject.js.map +1 -1
  170. package/dist/esm/utils/compatibility/setWindowGrafanaSceneContext.js.map +1 -1
  171. package/dist/esm/utils/date.js.map +1 -1
  172. package/dist/esm/utils/evaluateTimeRange.js.map +1 -1
  173. package/dist/esm/utils/explore.js.map +1 -1
  174. package/dist/esm/utils/getCompareSeriesRefId.js.map +1 -1
  175. package/dist/esm/utils/getDataSource.js.map +1 -1
  176. package/dist/esm/utils/getMessageFromError.js.map +1 -1
  177. package/dist/esm/utils/metricTree.js.map +1 -1
  178. package/dist/esm/utils/parseUrlParam.js.map +1 -1
  179. package/dist/esm/utils/utils.js.map +1 -1
  180. package/dist/esm/utils/wrapInSafeSerializableSceneObject.js.map +1 -1
  181. package/dist/esm/utils/writeSceneLog.js.map +1 -1
  182. package/dist/esm/variables/VariableDependencyConfig.js +0 -9
  183. package/dist/esm/variables/VariableDependencyConfig.js.map +1 -1
  184. package/dist/esm/variables/VariableValueRecorder.js.map +1 -1
  185. package/dist/esm/variables/adhoc/AdHocFilterBuilder.js +12 -13
  186. package/dist/esm/variables/adhoc/AdHocFilterBuilder.js.map +1 -1
  187. package/dist/esm/variables/adhoc/AdHocFilterRenderer.js +142 -129
  188. package/dist/esm/variables/adhoc/AdHocFilterRenderer.js.map +1 -1
  189. package/dist/esm/variables/adhoc/AdHocFiltersCombobox/AdHocFilterPill.js +91 -84
  190. package/dist/esm/variables/adhoc/AdHocFiltersCombobox/AdHocFilterPill.js.map +1 -1
  191. package/dist/esm/variables/adhoc/AdHocFiltersCombobox/AdHocFiltersAlwaysWipCombobox.js +6 -1
  192. package/dist/esm/variables/adhoc/AdHocFiltersCombobox/AdHocFiltersAlwaysWipCombobox.js.map +1 -1
  193. package/dist/esm/variables/adhoc/AdHocFiltersCombobox/AdHocFiltersCombobox.js +194 -195
  194. package/dist/esm/variables/adhoc/AdHocFiltersCombobox/AdHocFiltersCombobox.js.map +1 -1
  195. package/dist/esm/variables/adhoc/AdHocFiltersCombobox/AdHocFiltersComboboxRenderer.js +28 -34
  196. package/dist/esm/variables/adhoc/AdHocFiltersCombobox/AdHocFiltersComboboxRenderer.js.map +1 -1
  197. package/dist/esm/variables/adhoc/AdHocFiltersCombobox/DropdownItem.js +65 -28
  198. package/dist/esm/variables/adhoc/AdHocFiltersCombobox/DropdownItem.js.map +1 -1
  199. package/dist/esm/variables/adhoc/AdHocFiltersCombobox/MultiValuePill.js +43 -29
  200. package/dist/esm/variables/adhoc/AdHocFiltersCombobox/MultiValuePill.js.map +1 -1
  201. package/dist/esm/variables/adhoc/AdHocFiltersCombobox/useFloatingInteractions.js +1 -2
  202. package/dist/esm/variables/adhoc/AdHocFiltersCombobox/useFloatingInteractions.js.map +1 -1
  203. package/dist/esm/variables/adhoc/AdHocFiltersCombobox/utils.js.map +1 -1
  204. package/dist/esm/variables/adhoc/AdHocFiltersVariable.js +63 -45
  205. package/dist/esm/variables/adhoc/AdHocFiltersVariable.js.map +1 -1
  206. package/dist/esm/variables/adhoc/AdHocFiltersVariableUrlSyncHandler.js.map +1 -1
  207. package/dist/esm/variables/adhoc/getAdHocFiltersFromScopes.js +0 -1
  208. package/dist/esm/variables/adhoc/getAdHocFiltersFromScopes.js.map +1 -1
  209. package/dist/esm/variables/adhoc/getAdhocOptionSearcher.js.map +1 -1
  210. package/dist/esm/variables/adhoc/patchGetAdhocFilters.js.map +1 -1
  211. package/dist/esm/variables/components/VariableValueControl.js +6 -9
  212. package/dist/esm/variables/components/VariableValueControl.js.map +1 -1
  213. package/dist/esm/variables/components/VariableValueInput.js +10 -13
  214. package/dist/esm/variables/components/VariableValueInput.js.map +1 -1
  215. package/dist/esm/variables/components/VariableValueSelect.js +115 -90
  216. package/dist/esm/variables/components/VariableValueSelect.js.map +1 -1
  217. package/dist/esm/variables/components/VariableValueSelectors.js +37 -20
  218. package/dist/esm/variables/components/VariableValueSelectors.js.map +1 -1
  219. package/dist/esm/variables/components/getOptionSearcher.js +1 -1
  220. package/dist/esm/variables/components/getOptionSearcher.js.map +1 -1
  221. package/dist/esm/variables/constants.js.map +1 -1
  222. package/dist/esm/variables/filter.js +1 -6
  223. package/dist/esm/variables/filter.js.map +1 -1
  224. package/dist/esm/variables/getEnrichedFiltersRequest.js.map +1 -1
  225. package/dist/esm/variables/groupby/GroupByVariable.js +112 -106
  226. package/dist/esm/variables/groupby/GroupByVariable.js.map +1 -1
  227. package/dist/esm/variables/groupby/GroupByVariableUrlSyncHandler.js.map +1 -1
  228. package/dist/esm/variables/groupby/findActiveGroupByVariablesByUid.js.map +1 -1
  229. package/dist/esm/variables/interpolation/ScopedVarsVariable.js.map +1 -1
  230. package/dist/esm/variables/interpolation/defaults.js.map +1 -1
  231. package/dist/esm/variables/interpolation/fieldAccessorCache.js.map +1 -1
  232. package/dist/esm/variables/interpolation/formatRegistry.js.map +1 -1
  233. package/dist/esm/variables/interpolation/sceneInterpolator.js.map +1 -1
  234. package/dist/esm/variables/lookupVariable.js.map +1 -1
  235. package/dist/esm/variables/macros/AllVariablesMacro.js.map +1 -1
  236. package/dist/esm/variables/macros/contextMacros.js.map +1 -1
  237. package/dist/esm/variables/macros/dataMacros.js.map +1 -1
  238. package/dist/esm/variables/macros/index.js.map +1 -1
  239. package/dist/esm/variables/macros/templateProxies.js +21 -4
  240. package/dist/esm/variables/macros/templateProxies.js.map +1 -1
  241. package/dist/esm/variables/macros/timeMacros.js.map +1 -1
  242. package/dist/esm/variables/macros/types.js.map +1 -1
  243. package/dist/esm/variables/macros/urlMacros.js.map +1 -1
  244. package/dist/esm/variables/sets/SceneVariableSet.js +0 -44
  245. package/dist/esm/variables/sets/SceneVariableSet.js.map +1 -1
  246. package/dist/esm/variables/types.js.map +1 -1
  247. package/dist/esm/variables/utils.js.map +1 -1
  248. package/dist/esm/variables/variants/ConstantVariable.js +23 -4
  249. package/dist/esm/variables/variants/ConstantVariable.js.map +1 -1
  250. package/dist/esm/variables/variants/CustomVariable.js +19 -4
  251. package/dist/esm/variables/variants/CustomVariable.js.map +1 -1
  252. package/dist/esm/variables/variants/DataSourceVariable.js +19 -4
  253. package/dist/esm/variables/variants/DataSourceVariable.js.map +1 -1
  254. package/dist/esm/variables/variants/IntervalVariable.js +29 -17
  255. package/dist/esm/variables/variants/IntervalVariable.js.map +1 -1
  256. package/dist/esm/variables/variants/LocalValueVariable.js +23 -8
  257. package/dist/esm/variables/variants/LocalValueVariable.js.map +1 -1
  258. package/dist/esm/variables/variants/MultiValueVariable.js +0 -16
  259. package/dist/esm/variables/variants/MultiValueVariable.js.map +1 -1
  260. package/dist/esm/variables/variants/TestVariable.js +19 -5
  261. package/dist/esm/variables/variants/TestVariable.js.map +1 -1
  262. package/dist/esm/variables/variants/TextBoxVariable.js +22 -5
  263. package/dist/esm/variables/variants/TextBoxVariable.js.map +1 -1
  264. package/dist/esm/variables/variants/guards.js.map +1 -1
  265. package/dist/esm/variables/variants/query/QueryVariable.js +20 -8
  266. package/dist/esm/variables/variants/query/QueryVariable.js.map +1 -1
  267. package/dist/esm/variables/variants/query/createQueryVariableRunner.js +23 -6
  268. package/dist/esm/variables/variants/query/createQueryVariableRunner.js.map +1 -1
  269. package/dist/esm/variables/variants/query/guards.js.map +1 -1
  270. package/dist/esm/variables/variants/query/toMetricFindValues.js.map +1 -1
  271. package/dist/esm/variables/variants/query/utils.js.map +1 -1
  272. package/dist/index.d.ts +6 -36
  273. package/dist/index.js +2800 -2038
  274. package/dist/index.js.map +1 -1
  275. package/package.json +9 -8
@@ -7,6 +7,22 @@ import { SceneObjectStateChangedEvent } from './events.js';
7
7
  import { cloneSceneObject } from './sceneGraph/utils.js';
8
8
  import { SceneObjectRef } from './SceneObjectRef.js';
9
9
 
10
+ var __defProp = Object.defineProperty;
11
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
12
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
13
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
14
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
15
+ var __spreadValues = (a, b) => {
16
+ for (var prop in b || (b = {}))
17
+ if (__hasOwnProp.call(b, prop))
18
+ __defNormalProp(a, prop, b[prop]);
19
+ if (__getOwnPropSymbols)
20
+ for (var prop of __getOwnPropSymbols(b)) {
21
+ if (__propIsEnum.call(b, prop))
22
+ __defNormalProp(a, prop, b[prop]);
23
+ }
24
+ return a;
25
+ };
10
26
  class SceneObjectBase {
11
27
  constructor(state) {
12
28
  this._isActive = false;
@@ -22,33 +38,24 @@ class SceneObjectBase {
22
38
  this._state = Object.freeze(state);
23
39
  this._setParent(this._state);
24
40
  }
25
- /** Current state */
26
41
  get state() {
27
42
  return this._state;
28
43
  }
29
- /** True if currently being active (ie displayed for visual objects) */
30
44
  get isActive() {
31
45
  return this._isActive;
32
46
  }
33
47
  get renderBeforeActivation() {
34
48
  return this._renderBeforeActivation;
35
49
  }
36
- /** Returns the parent, undefined for root object */
37
50
  get parent() {
38
51
  return this._parent;
39
52
  }
40
- /** Returns variable dependency config */
41
53
  get variableDependency() {
42
54
  return this._variableDependency;
43
55
  }
44
- /** Returns url sync config */
45
56
  get urlSync() {
46
57
  return this._urlSync;
47
58
  }
48
- /**
49
- * Used in render functions when rendering a SceneObject.
50
- * Wraps the component in an EditWrapper that handles edit mode
51
- */
52
59
  get Component() {
53
60
  return SceneComponentWrapper;
54
61
  }
@@ -64,16 +71,9 @@ class SceneObjectBase {
64
71
  child._parent = this;
65
72
  });
66
73
  }
67
- /**
68
- * Sometimes you want to move one instance to another parent.
69
- * This is a way to do that without getting the console warning.
70
- */
71
74
  clearParent() {
72
75
  this._parent = void 0;
73
76
  }
74
- /**
75
- * Subscribe to the scene state subject
76
- **/
77
77
  subscribeToState(handler) {
78
78
  return this._events.subscribe(SceneObjectStateChangedEvent, (event) => {
79
79
  if (event.payload.changedObject === this) {
@@ -81,18 +81,12 @@ class SceneObjectBase {
81
81
  }
82
82
  });
83
83
  }
84
- /**
85
- * Subscribe to the scene event
86
- **/
87
84
  subscribeToEvent(eventType, handler) {
88
85
  return this._events.subscribe(eventType, handler);
89
86
  }
90
87
  setState(update) {
91
88
  const prevState = this._state;
92
- const newState = {
93
- ...this._state,
94
- ...update
95
- };
89
+ const newState = __spreadValues(__spreadValues({}, this._state), update);
96
90
  this._state = Object.freeze(newState);
97
91
  this._setParent(update);
98
92
  this._handleActivationOfChangedStateProps(prevState, newState);
@@ -106,10 +100,6 @@ class SceneObjectBase {
106
100
  true
107
101
  );
108
102
  }
109
- /**
110
- * This handles activation and deactivation of $data, $timeRange and $variables when they change
111
- * during the active phase of the scene object.
112
- */
113
103
  _handleActivationOfChangedStateProps(prevState, newState) {
114
104
  if (!this.isActive) {
115
105
  return;
@@ -159,9 +149,6 @@ class SceneObjectBase {
159
149
  }
160
150
  }
161
151
  }
162
- /*
163
- * Publish an event and optionally bubble it up the scene
164
- **/
165
152
  publishEvent(event, bubble) {
166
153
  this._events.publish(event);
167
154
  if (bubble && this.parent) {
@@ -205,11 +192,6 @@ class SceneObjectBase {
205
192
  }
206
193
  }
207
194
  }
208
- /**
209
- * This is primarily called from SceneComponentWrapper when the SceneObject's Component is mounted.
210
- * But in some scenarios this can also be called directly from another scene object. When called manually from another scene object
211
- * make sure to call the returned function when the source scene object is deactivated.
212
- */
213
195
  activate() {
214
196
  if (!this.isActive) {
215
197
  this._internalActivate();
@@ -228,10 +210,6 @@ class SceneObjectBase {
228
210
  }
229
211
  };
230
212
  }
231
- /**
232
- * Called by the SceneComponentWrapper when the react component is unmounted.
233
- * Don't override this, instead use addActivationHandler. The activation handler can return a deactivation handler.
234
- */
235
213
  _internalDeactivate() {
236
214
  this._isActive = false;
237
215
  for (let handler of this._deactivationHandlers.values()) {
@@ -242,37 +220,21 @@ class SceneObjectBase {
242
220
  this._subs.unsubscribe();
243
221
  this._subs = new Subscription();
244
222
  }
245
- /**
246
- * Utility hook to get and subscribe to state
247
- */
248
223
  useState() {
249
224
  return useSceneObjectState(this);
250
225
  }
251
- /** Force a re-render, should only be needed when variable values change */
252
226
  forceRender() {
253
227
  this.setState({});
254
228
  }
255
- /**
256
- * Will create new SceneObject with shallow-cloned state, but all state items of type SceneObject are deep cloned
257
- */
258
229
  clone(withState) {
259
230
  return cloneSceneObject(this, withState);
260
231
  }
261
- /**
262
- * Allows external code to register code that is executed on activate and deactivate. This allow you
263
- * to wire up scene objects that need to respond to state changes in other objects from the outside.
264
- **/
265
232
  addActivationHandler(handler) {
266
233
  this._activationHandlers.push(handler);
267
234
  }
268
- /**
269
- * Loop through state and call callback for each direct child scene object.
270
- * Checks 1 level deep properties and arrays. So a scene object hidden in a nested plain object will not be detected.
271
- */
272
235
  forEachChild(callback) {
273
236
  forEachChild(this.state, callback);
274
237
  }
275
- /** Returns a SceneObjectRef that will resolve to this object */
276
238
  getRef() {
277
239
  if (!this._ref) {
278
240
  this._ref = new SceneObjectRef(this);
@@ -1 +1 @@
1
- {"version":3,"file":"SceneObjectBase.js","sources":["../../../src/core/SceneObjectBase.tsx"],"sourcesContent":["import { useEffect, useState } from 'react';\nimport { Subscription, Unsubscribable } from 'rxjs';\nimport { v4 as uuidv4 } from 'uuid';\n\nimport { BusEvent, BusEventHandler, BusEventType, EventBus, EventBusSrv } from '@grafana/data';\nimport {\n SceneObject,\n SceneComponent,\n SceneObjectUrlSyncHandler,\n SceneStateChangedHandler,\n SceneActivationHandler,\n SceneDeactivationHandler,\n CancelActivationHandler,\n SceneObjectState,\n UseStateHookOptions,\n SceneStatelessBehavior,\n} from './types';\n\nimport { SceneComponentWrapper } from './SceneComponentWrapper';\nimport { SceneObjectStateChangedEvent } from './events';\nimport { cloneSceneObject } from './sceneGraph/utils';\nimport { SceneVariableDependencyConfigLike } from '../variables/types';\nimport { SceneObjectRef } from './SceneObjectRef';\n\nexport abstract class SceneObjectBase<TState extends SceneObjectState = SceneObjectState>\n implements SceneObject<TState>\n{\n private _isActive = false;\n private _state: TState;\n private _activationHandlers: SceneActivationHandler[] = [];\n private _deactivationHandlers = new Map<object, SceneDeactivationHandler>();\n private _ref?: SceneObjectRef<this>;\n\n protected _events?: EventBus;\n protected _parent?: SceneObject;\n protected _subs = new Subscription();\n protected _refCount = 0;\n protected _renderBeforeActivation = false;\n\n protected _variableDependency: SceneVariableDependencyConfigLike | undefined;\n protected _urlSync: SceneObjectUrlSyncHandler | undefined;\n\n public constructor(state: TState) {\n if (!state.key) {\n state.key = uuidv4();\n }\n\n this._events = new EventBusSrv();\n\n this._state = Object.freeze(state);\n this._setParent(this._state);\n }\n\n /** Current state */\n public get state(): TState {\n return this._state;\n }\n\n /** True if currently being active (ie displayed for visual objects) */\n public get isActive(): boolean {\n return this._isActive;\n }\n\n public get renderBeforeActivation(): boolean {\n return this._renderBeforeActivation;\n }\n\n /** Returns the parent, undefined for root object */\n public get parent(): SceneObject | undefined {\n return this._parent;\n }\n\n /** Returns variable dependency config */\n public get variableDependency(): SceneVariableDependencyConfigLike | undefined {\n return this._variableDependency;\n }\n\n /** Returns url sync config */\n public get urlSync(): SceneObjectUrlSyncHandler | undefined {\n return this._urlSync;\n }\n\n /**\n * Used in render functions when rendering a SceneObject.\n * Wraps the component in an EditWrapper that handles edit mode\n */\n public get Component(): SceneComponent<this> {\n return SceneComponentWrapper as SceneComponent<this>;\n }\n\n private _setParent(state: Partial<TState>) {\n forEachChild(state, (child) => {\n // If we already have a parent and it's not this, then we likely have a bug\n if (child._parent && child._parent !== this) {\n console.warn(\n 'SceneObject already has a parent set that is different from the new parent. You cannot share the same SceneObject instance in multiple scenes or in multiple different places of the same scene graph. Use SceneObject.clone() to duplicate a SceneObject or store a state key reference and use sceneGraph.findObject to locate it.',\n child,\n this\n );\n }\n child._parent = this;\n });\n }\n\n /**\n * Sometimes you want to move one instance to another parent.\n * This is a way to do that without getting the console warning.\n */\n public clearParent() {\n this._parent = undefined;\n }\n\n /**\n * Subscribe to the scene state subject\n **/\n public subscribeToState(handler: SceneStateChangedHandler<TState>): Unsubscribable {\n return this._events!.subscribe(SceneObjectStateChangedEvent, (event) => {\n if (event.payload.changedObject === this) {\n handler(event.payload.newState as TState, event.payload.prevState as TState);\n }\n });\n }\n\n /**\n * Subscribe to the scene event\n **/\n public subscribeToEvent<T extends BusEvent>(eventType: BusEventType<T>, handler: BusEventHandler<T>): Unsubscribable {\n return this._events!.subscribe(eventType, handler);\n }\n\n public setState(update: Partial<TState>) {\n const prevState = this._state;\n const newState: TState = {\n ...this._state,\n ...update,\n };\n\n this._state = Object.freeze(newState);\n this._setParent(update);\n\n // Handles cases when $data, $timeRange, or $variables are changed\n this._handleActivationOfChangedStateProps(prevState, newState);\n\n // Bubble state change event. This is event is subscribed to by UrlSyncManager and UndoManager\n this.publishEvent(\n new SceneObjectStateChangedEvent({\n prevState,\n newState,\n partialUpdate: update,\n changedObject: this,\n }),\n true\n );\n }\n\n /**\n * This handles activation and deactivation of $data, $timeRange and $variables when they change\n * during the active phase of the scene object.\n */\n private _handleActivationOfChangedStateProps(prevState: TState, newState: TState) {\n if (!this.isActive) {\n return;\n }\n\n if (prevState.$behaviors !== newState.$behaviors) {\n this._handleChangedBehaviors(prevState.$behaviors, newState.$behaviors);\n }\n\n if (prevState.$data !== newState.$data) {\n this._handleChangedStateActivation(prevState.$data, newState.$data);\n }\n\n if (prevState.$variables !== newState.$variables) {\n this._handleChangedStateActivation(prevState.$variables, newState.$variables);\n }\n\n if (prevState.$timeRange !== newState.$timeRange) {\n this._handleChangedStateActivation(prevState.$timeRange, newState.$timeRange);\n }\n }\n\n private _handleChangedStateActivation(oldValue: SceneObject | undefined, newValue: SceneObject | undefined) {\n if (oldValue) {\n const deactivationHandler = this._deactivationHandlers.get(oldValue);\n if (deactivationHandler) {\n deactivationHandler();\n this._deactivationHandlers.delete(oldValue);\n }\n }\n\n if (newValue) {\n this._deactivationHandlers.set(newValue, newValue.activate());\n }\n }\n\n private _handleChangedBehaviors(\n oldValue: Array<SceneObject | SceneStatelessBehavior> | undefined,\n newValue: Array<SceneObject | SceneStatelessBehavior> | undefined\n ) {\n // Handle removed behaviors\n if (oldValue) {\n for (const oldBehavior of oldValue) {\n if (!newValue || !newValue.includes(oldBehavior)) {\n const deactivationHandler = this._deactivationHandlers.get(oldBehavior);\n if (deactivationHandler) {\n deactivationHandler();\n this._deactivationHandlers.delete(oldBehavior);\n }\n }\n }\n }\n\n // Handle new behaviors\n if (newValue) {\n for (const newBehavior of newValue) {\n if (!oldValue || !oldValue.includes(newBehavior)) {\n this._activateBehavior(newBehavior);\n }\n }\n }\n }\n\n /*\n * Publish an event and optionally bubble it up the scene\n **/\n public publishEvent(event: BusEvent, bubble?: boolean) {\n this._events!.publish(event);\n\n if (bubble && this.parent) {\n this.parent.publishEvent(event, bubble);\n }\n }\n\n public getRoot(): SceneObject {\n return !this._parent ? this : this._parent.getRoot();\n }\n\n private _internalActivate() {\n this._isActive = true;\n\n const { $data, $variables, $timeRange, $behaviors } = this.state;\n\n this._activationHandlers.forEach((handler) => {\n const result = handler();\n if (result) {\n this._deactivationHandlers.set(result, result);\n }\n });\n\n if ($timeRange && !$timeRange.isActive) {\n this._deactivationHandlers.set($timeRange, $timeRange.activate());\n }\n\n if ($variables && !$variables.isActive) {\n this._deactivationHandlers.set($variables, $variables.activate());\n }\n\n if ($data && !$data.isActive) {\n this._deactivationHandlers.set($data, $data.activate());\n }\n\n if ($behaviors) {\n for (const behavior of $behaviors) {\n this._activateBehavior(behavior);\n }\n }\n }\n\n private _activateBehavior(behavior: SceneObject | SceneStatelessBehavior): SceneDeactivationHandler | void {\n if (behavior instanceof SceneObjectBase) {\n this._deactivationHandlers.set(behavior, behavior.activate());\n } else if (typeof behavior === 'function') {\n const deactivate = behavior(this);\n if (deactivate) {\n this._deactivationHandlers.set(behavior, deactivate);\n }\n }\n }\n\n /**\n * This is primarily called from SceneComponentWrapper when the SceneObject's Component is mounted.\n * But in some scenarios this can also be called directly from another scene object. When called manually from another scene object\n * make sure to call the returned function when the source scene object is deactivated.\n */\n public activate(): CancelActivationHandler {\n if (!this.isActive) {\n this._internalActivate();\n }\n\n this._refCount++;\n\n let called = false;\n\n return () => {\n this._refCount--;\n\n if (called) {\n const msg = `SceneObject cancelation handler returned by activate() called a second time`;\n throw new Error(msg);\n }\n\n called = true;\n\n if (this._refCount === 0) {\n this._internalDeactivate();\n }\n };\n }\n\n /**\n * Called by the SceneComponentWrapper when the react component is unmounted.\n * Don't override this, instead use addActivationHandler. The activation handler can return a deactivation handler.\n */\n private _internalDeactivate(): void {\n this._isActive = false;\n\n for (let handler of this._deactivationHandlers.values()) {\n handler();\n }\n\n this._deactivationHandlers.clear();\n\n // Clear subscriptions and listeners\n this._events!.removeAllListeners();\n this._subs.unsubscribe();\n this._subs = new Subscription();\n }\n\n /**\n * Utility hook to get and subscribe to state\n */\n public useState(): TState {\n // eslint-disable-next-line react-hooks/rules-of-hooks\n return useSceneObjectState(this);\n }\n\n /** Force a re-render, should only be needed when variable values change */\n public forceRender(): void {\n this.setState({});\n }\n\n /**\n * Will create new SceneObject with shallow-cloned state, but all state items of type SceneObject are deep cloned\n */\n public clone(withState?: Partial<TState>): this {\n return cloneSceneObject(this, withState);\n }\n\n /**\n * Allows external code to register code that is executed on activate and deactivate. This allow you\n * to wire up scene objects that need to respond to state changes in other objects from the outside.\n **/\n public addActivationHandler(handler: SceneActivationHandler) {\n this._activationHandlers.push(handler);\n }\n\n /**\n * Loop through state and call callback for each direct child scene object.\n * Checks 1 level deep properties and arrays. So a scene object hidden in a nested plain object will not be detected.\n */\n public forEachChild(callback: (child: SceneObjectBase) => void) {\n forEachChild(this.state, callback);\n }\n\n /** Returns a SceneObjectRef that will resolve to this object */\n public getRef(): SceneObjectRef<this> {\n if (!this._ref) {\n this._ref = new SceneObjectRef(this);\n }\n\n return this._ref;\n }\n\n public toJSON() {\n return {\n type: Object.getPrototypeOf(this).constructor.name,\n isActive: this.isActive,\n state: this.state,\n };\n }\n}\n\n/**\n * This hook is always returning model.state instead of a useState that remembers the last state emitted on the subject\n * The reason for this is so that if the model instance change this function will always return the latest state.\n */\nexport function useSceneObjectState<TState extends SceneObjectState>(\n model: SceneObject<TState>,\n options?: UseStateHookOptions\n): TState {\n const [_, setState] = useState<TState>(model.state);\n const stateAtFirstRender = model.state;\n const shouldActivateOrKeepAlive = options?.shouldActivateOrKeepAlive ?? false;\n\n useEffect(() => {\n let unactivate: CancelActivationHandler | undefined;\n\n if (shouldActivateOrKeepAlive) {\n unactivate = model.activate();\n }\n\n const s = model.subscribeToState((state) => {\n setState(state);\n });\n\n // Re-render component if the state changed between first render and useEffect (mount)\n if (model.state !== stateAtFirstRender) {\n setState(model.state);\n }\n\n return () => {\n s.unsubscribe();\n\n if (unactivate) {\n unactivate();\n }\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [model, shouldActivateOrKeepAlive]);\n\n return model.state;\n}\n\nfunction forEachChild<T extends object>(state: T, callback: (child: SceneObjectBase) => void) {\n for (const propValue of Object.values(state)) {\n if (propValue instanceof SceneObjectBase) {\n callback(propValue);\n }\n\n if (Array.isArray(propValue)) {\n for (const child of propValue) {\n if (child instanceof SceneObjectBase) {\n callback(child);\n }\n }\n }\n }\n}\n"],"names":["uuidv4"],"mappings":"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"}
1
+ {"version":3,"file":"SceneObjectBase.js","sources":["../../../src/core/SceneObjectBase.tsx"],"sourcesContent":["import { useEffect, useState } from 'react';\nimport { Subscription, Unsubscribable } from 'rxjs';\nimport { v4 as uuidv4 } from 'uuid';\n\nimport { BusEvent, BusEventHandler, BusEventType, EventBus, EventBusSrv } from '@grafana/data';\nimport {\n SceneObject,\n SceneComponent,\n SceneObjectUrlSyncHandler,\n SceneStateChangedHandler,\n SceneActivationHandler,\n SceneDeactivationHandler,\n CancelActivationHandler,\n SceneObjectState,\n UseStateHookOptions,\n SceneStatelessBehavior,\n} from './types';\n\nimport { SceneComponentWrapper } from './SceneComponentWrapper';\nimport { SceneObjectStateChangedEvent } from './events';\nimport { cloneSceneObject } from './sceneGraph/utils';\nimport { SceneVariableDependencyConfigLike } from '../variables/types';\nimport { SceneObjectRef } from './SceneObjectRef';\n\nexport abstract class SceneObjectBase<TState extends SceneObjectState = SceneObjectState>\n implements SceneObject<TState>\n{\n private _isActive = false;\n private _state: TState;\n private _activationHandlers: SceneActivationHandler[] = [];\n private _deactivationHandlers = new Map<object, SceneDeactivationHandler>();\n private _ref?: SceneObjectRef<this>;\n\n protected _events?: EventBus;\n protected _parent?: SceneObject;\n protected _subs = new Subscription();\n protected _refCount = 0;\n protected _renderBeforeActivation = false;\n\n protected _variableDependency: SceneVariableDependencyConfigLike | undefined;\n protected _urlSync: SceneObjectUrlSyncHandler | undefined;\n\n public constructor(state: TState) {\n if (!state.key) {\n state.key = uuidv4();\n }\n\n this._events = new EventBusSrv();\n\n this._state = Object.freeze(state);\n this._setParent(this._state);\n }\n\n /** Current state */\n public get state(): TState {\n return this._state;\n }\n\n /** True if currently being active (ie displayed for visual objects) */\n public get isActive(): boolean {\n return this._isActive;\n }\n\n public get renderBeforeActivation(): boolean {\n return this._renderBeforeActivation;\n }\n\n /** Returns the parent, undefined for root object */\n public get parent(): SceneObject | undefined {\n return this._parent;\n }\n\n /** Returns variable dependency config */\n public get variableDependency(): SceneVariableDependencyConfigLike | undefined {\n return this._variableDependency;\n }\n\n /** Returns url sync config */\n public get urlSync(): SceneObjectUrlSyncHandler | undefined {\n return this._urlSync;\n }\n\n /**\n * Used in render functions when rendering a SceneObject.\n * Wraps the component in an EditWrapper that handles edit mode\n */\n public get Component(): SceneComponent<this> {\n return SceneComponentWrapper as SceneComponent<this>;\n }\n\n private _setParent(state: Partial<TState>) {\n forEachChild(state, (child) => {\n // If we already have a parent and it's not this, then we likely have a bug\n if (child._parent && child._parent !== this) {\n console.warn(\n 'SceneObject already has a parent set that is different from the new parent. You cannot share the same SceneObject instance in multiple scenes or in multiple different places of the same scene graph. Use SceneObject.clone() to duplicate a SceneObject or store a state key reference and use sceneGraph.findObject to locate it.',\n child,\n this\n );\n }\n child._parent = this;\n });\n }\n\n /**\n * Sometimes you want to move one instance to another parent.\n * This is a way to do that without getting the console warning.\n */\n public clearParent() {\n this._parent = undefined;\n }\n\n /**\n * Subscribe to the scene state subject\n **/\n public subscribeToState(handler: SceneStateChangedHandler<TState>): Unsubscribable {\n return this._events!.subscribe(SceneObjectStateChangedEvent, (event) => {\n if (event.payload.changedObject === this) {\n handler(event.payload.newState as TState, event.payload.prevState as TState);\n }\n });\n }\n\n /**\n * Subscribe to the scene event\n **/\n public subscribeToEvent<T extends BusEvent>(eventType: BusEventType<T>, handler: BusEventHandler<T>): Unsubscribable {\n return this._events!.subscribe(eventType, handler);\n }\n\n public setState(update: Partial<TState>) {\n const prevState = this._state;\n const newState: TState = {\n ...this._state,\n ...update,\n };\n\n this._state = Object.freeze(newState);\n this._setParent(update);\n\n // Handles cases when $data, $timeRange, or $variables are changed\n this._handleActivationOfChangedStateProps(prevState, newState);\n\n // Bubble state change event. This is event is subscribed to by UrlSyncManager and UndoManager\n this.publishEvent(\n new SceneObjectStateChangedEvent({\n prevState,\n newState,\n partialUpdate: update,\n changedObject: this,\n }),\n true\n );\n }\n\n /**\n * This handles activation and deactivation of $data, $timeRange and $variables when they change\n * during the active phase of the scene object.\n */\n private _handleActivationOfChangedStateProps(prevState: TState, newState: TState) {\n if (!this.isActive) {\n return;\n }\n\n if (prevState.$behaviors !== newState.$behaviors) {\n this._handleChangedBehaviors(prevState.$behaviors, newState.$behaviors);\n }\n\n if (prevState.$data !== newState.$data) {\n this._handleChangedStateActivation(prevState.$data, newState.$data);\n }\n\n if (prevState.$variables !== newState.$variables) {\n this._handleChangedStateActivation(prevState.$variables, newState.$variables);\n }\n\n if (prevState.$timeRange !== newState.$timeRange) {\n this._handleChangedStateActivation(prevState.$timeRange, newState.$timeRange);\n }\n }\n\n private _handleChangedStateActivation(oldValue: SceneObject | undefined, newValue: SceneObject | undefined) {\n if (oldValue) {\n const deactivationHandler = this._deactivationHandlers.get(oldValue);\n if (deactivationHandler) {\n deactivationHandler();\n this._deactivationHandlers.delete(oldValue);\n }\n }\n\n if (newValue) {\n this._deactivationHandlers.set(newValue, newValue.activate());\n }\n }\n\n private _handleChangedBehaviors(\n oldValue: Array<SceneObject | SceneStatelessBehavior> | undefined,\n newValue: Array<SceneObject | SceneStatelessBehavior> | undefined\n ) {\n // Handle removed behaviors\n if (oldValue) {\n for (const oldBehavior of oldValue) {\n if (!newValue || !newValue.includes(oldBehavior)) {\n const deactivationHandler = this._deactivationHandlers.get(oldBehavior);\n if (deactivationHandler) {\n deactivationHandler();\n this._deactivationHandlers.delete(oldBehavior);\n }\n }\n }\n }\n\n // Handle new behaviors\n if (newValue) {\n for (const newBehavior of newValue) {\n if (!oldValue || !oldValue.includes(newBehavior)) {\n this._activateBehavior(newBehavior);\n }\n }\n }\n }\n\n /*\n * Publish an event and optionally bubble it up the scene\n **/\n public publishEvent(event: BusEvent, bubble?: boolean) {\n this._events!.publish(event);\n\n if (bubble && this.parent) {\n this.parent.publishEvent(event, bubble);\n }\n }\n\n public getRoot(): SceneObject {\n return !this._parent ? this : this._parent.getRoot();\n }\n\n private _internalActivate() {\n this._isActive = true;\n\n const { $data, $variables, $timeRange, $behaviors } = this.state;\n\n this._activationHandlers.forEach((handler) => {\n const result = handler();\n if (result) {\n this._deactivationHandlers.set(result, result);\n }\n });\n\n if ($timeRange && !$timeRange.isActive) {\n this._deactivationHandlers.set($timeRange, $timeRange.activate());\n }\n\n if ($variables && !$variables.isActive) {\n this._deactivationHandlers.set($variables, $variables.activate());\n }\n\n if ($data && !$data.isActive) {\n this._deactivationHandlers.set($data, $data.activate());\n }\n\n if ($behaviors) {\n for (const behavior of $behaviors) {\n this._activateBehavior(behavior);\n }\n }\n }\n\n private _activateBehavior(behavior: SceneObject | SceneStatelessBehavior): SceneDeactivationHandler | void {\n if (behavior instanceof SceneObjectBase) {\n this._deactivationHandlers.set(behavior, behavior.activate());\n } else if (typeof behavior === 'function') {\n const deactivate = behavior(this);\n if (deactivate) {\n this._deactivationHandlers.set(behavior, deactivate);\n }\n }\n }\n\n /**\n * This is primarily called from SceneComponentWrapper when the SceneObject's Component is mounted.\n * But in some scenarios this can also be called directly from another scene object. When called manually from another scene object\n * make sure to call the returned function when the source scene object is deactivated.\n */\n public activate(): CancelActivationHandler {\n if (!this.isActive) {\n this._internalActivate();\n }\n\n this._refCount++;\n\n let called = false;\n\n return () => {\n this._refCount--;\n\n if (called) {\n const msg = `SceneObject cancelation handler returned by activate() called a second time`;\n throw new Error(msg);\n }\n\n called = true;\n\n if (this._refCount === 0) {\n this._internalDeactivate();\n }\n };\n }\n\n /**\n * Called by the SceneComponentWrapper when the react component is unmounted.\n * Don't override this, instead use addActivationHandler. The activation handler can return a deactivation handler.\n */\n private _internalDeactivate(): void {\n this._isActive = false;\n\n for (let handler of this._deactivationHandlers.values()) {\n handler();\n }\n\n this._deactivationHandlers.clear();\n\n // Clear subscriptions and listeners\n this._events!.removeAllListeners();\n this._subs.unsubscribe();\n this._subs = new Subscription();\n }\n\n /**\n * Utility hook to get and subscribe to state\n */\n public useState(): TState {\n // eslint-disable-next-line react-hooks/rules-of-hooks\n return useSceneObjectState(this);\n }\n\n /** Force a re-render, should only be needed when variable values change */\n public forceRender(): void {\n this.setState({});\n }\n\n /**\n * Will create new SceneObject with shallow-cloned state, but all state items of type SceneObject are deep cloned\n */\n public clone(withState?: Partial<TState>): this {\n return cloneSceneObject(this, withState);\n }\n\n /**\n * Allows external code to register code that is executed on activate and deactivate. This allow you\n * to wire up scene objects that need to respond to state changes in other objects from the outside.\n **/\n public addActivationHandler(handler: SceneActivationHandler) {\n this._activationHandlers.push(handler);\n }\n\n /**\n * Loop through state and call callback for each direct child scene object.\n * Checks 1 level deep properties and arrays. So a scene object hidden in a nested plain object will not be detected.\n */\n public forEachChild(callback: (child: SceneObjectBase) => void) {\n forEachChild(this.state, callback);\n }\n\n /** Returns a SceneObjectRef that will resolve to this object */\n public getRef(): SceneObjectRef<this> {\n if (!this._ref) {\n this._ref = new SceneObjectRef(this);\n }\n\n return this._ref;\n }\n\n public toJSON() {\n return {\n type: Object.getPrototypeOf(this).constructor.name,\n isActive: this.isActive,\n state: this.state,\n };\n }\n}\n\n/**\n * This hook is always returning model.state instead of a useState that remembers the last state emitted on the subject\n * The reason for this is so that if the model instance change this function will always return the latest state.\n */\nexport function useSceneObjectState<TState extends SceneObjectState>(\n model: SceneObject<TState>,\n options?: UseStateHookOptions\n): TState {\n const [_, setState] = useState<TState>(model.state);\n const stateAtFirstRender = model.state;\n const shouldActivateOrKeepAlive = options?.shouldActivateOrKeepAlive ?? false;\n\n useEffect(() => {\n let unactivate: CancelActivationHandler | undefined;\n\n if (shouldActivateOrKeepAlive) {\n unactivate = model.activate();\n }\n\n const s = model.subscribeToState((state) => {\n setState(state);\n });\n\n // Re-render component if the state changed between first render and useEffect (mount)\n if (model.state !== stateAtFirstRender) {\n setState(model.state);\n }\n\n return () => {\n s.unsubscribe();\n\n if (unactivate) {\n unactivate();\n }\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [model, shouldActivateOrKeepAlive]);\n\n return model.state;\n}\n\nfunction forEachChild<T extends object>(state: T, callback: (child: SceneObjectBase) => void) {\n for (const propValue of Object.values(state)) {\n if (propValue instanceof SceneObjectBase) {\n callback(propValue);\n }\n\n if (Array.isArray(propValue)) {\n for (const child of propValue) {\n if (child instanceof SceneObjectBase) {\n callback(child);\n }\n }\n }\n }\n}\n"],"names":["uuidv4"],"mappings":"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"}
@@ -1,14 +1,25 @@
1
- var __typeError = (msg) => {
2
- throw TypeError(msg);
1
+ var __accessCheck = (obj, member, msg) => {
2
+ if (!member.has(obj))
3
+ throw TypeError("Cannot " + msg);
4
+ };
5
+ var __privateGet = (obj, member, getter) => {
6
+ __accessCheck(obj, member, "read from private field");
7
+ return getter ? getter.call(obj) : member.get(obj);
8
+ };
9
+ var __privateAdd = (obj, member, value) => {
10
+ if (member.has(obj))
11
+ throw TypeError("Cannot add the same private member more than once");
12
+ member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
13
+ };
14
+ var __privateSet = (obj, member, value, setter) => {
15
+ __accessCheck(obj, member, "write to private field");
16
+ setter ? setter.call(obj, value) : member.set(obj, value);
17
+ return value;
3
18
  };
4
- var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg);
5
- var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
6
- var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
7
- var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), member.set(obj, value), value);
8
19
  var _ref;
9
20
  class SceneObjectRef {
10
21
  constructor(ref) {
11
- __privateAdd(this, _ref);
22
+ __privateAdd(this, _ref, void 0);
12
23
  __privateSet(this, _ref, ref);
13
24
  }
14
25
  resolve() {
@@ -1 +1 @@
1
- {"version":3,"file":"SceneObjectRef.js","sources":["../../../src/core/SceneObjectRef.ts"],"sourcesContent":["export class SceneObjectRef<T> {\n #ref: T;\n\n public constructor(ref: T) {\n this.#ref = ref;\n }\n\n public resolve(): T {\n return this.#ref;\n }\n}\n"],"names":[],"mappings":";;;;;;;AAAA,IAAA,IAAA;AAAO,MAAM,cAAkB,CAAA;AAAA,EAGtB,YAAY,GAAQ,EAAA;AAF3B,IAAA,YAAA,CAAA,IAAA,EAAA,IAAA,CAAA;AAGE,IAAA,YAAA,CAAA,IAAA,EAAK,IAAO,EAAA,GAAA,CAAA;AAAA;AACd,EAEO,OAAa,GAAA;AAClB,IAAA,OAAO,YAAK,CAAA,IAAA,EAAA,IAAA,CAAA;AAAA;AAEhB;AATE,IAAA,GAAA,IAAA,OAAA,EAAA;;;;"}
1
+ {"version":3,"file":"SceneObjectRef.js","sources":["../../../src/core/SceneObjectRef.ts"],"sourcesContent":["export class SceneObjectRef<T> {\n #ref: T;\n\n public constructor(ref: T) {\n this.#ref = ref;\n }\n\n public resolve(): T {\n return this.#ref;\n }\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;AAAA,IAAA,IAAA,CAAA;AAAO,MAAM,cAAkB,CAAA;AAAA,EAGtB,YAAY,GAAQ,EAAA;AAF3B,IAAA,YAAA,CAAA,IAAA,EAAA,IAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AAGE,IAAA,YAAA,CAAA,IAAA,EAAK,IAAO,EAAA,GAAA,CAAA,CAAA;AAAA,GACd;AAAA,EAEO,OAAa,GAAA;AAClB,IAAA,OAAO,YAAK,CAAA,IAAA,EAAA,IAAA,CAAA,CAAA;AAAA,GACd;AACF,CAAA;AATE,IAAA,GAAA,IAAA,OAAA,EAAA;;;;"}
@@ -11,7 +11,6 @@ class SceneScopesBridge extends SceneObjectBase {
11
11
  this._urlSync = new SceneObjectUrlSyncConfig(this, { keys: ["scopes"] });
12
12
  this._renderBeforeActivation = true;
13
13
  this._contextSubject = new BehaviorSubject(void 0);
14
- // Needed to maintain scopes values received from URL until the context is available
15
14
  this._pendingScopes = null;
16
15
  }
17
16
  getUrlState() {
@@ -34,10 +33,6 @@ class SceneScopesBridge extends SceneObjectBase {
34
33
  var _a, _b;
35
34
  return (_b = (_a = this.context) == null ? void 0 : _a.state.value) != null ? _b : [];
36
35
  }
37
- /**
38
- * Emits values of the selected scopes array. It emits the current value and the previous value if there is a change.
39
- * @param cb
40
- */
41
36
  subscribeToValue(cb) {
42
37
  return this.contextObservable.pipe(
43
38
  map((context) => {
@@ -77,16 +72,6 @@ class SceneScopesBridge extends SceneObjectBase {
77
72
  var _a;
78
73
  (_a = this.context) == null ? void 0 : _a.setReadOnly(readOnly);
79
74
  }
80
- /**
81
- * This method is used to keep the context up to date with the scopes context received from React
82
- *
83
- * Its rationale is:
84
- * - When a new context is available, check if we have pending scopes passed from the URL
85
- * - If we have pending scopes, ask the new context to load them
86
- * - The loading should happen in a setTimeout to allow the existing context to pass its values to the URL sync handler
87
- * - If a new context is received, propagate it as a new value in the behavior subject
88
- * - If a new value is received, force a re-render to trigger the URL sync handler
89
- */
90
75
  updateContext(newContext) {
91
76
  var _a, _b;
92
77
  if (this._pendingScopes && newContext) {
@@ -1 +1 @@
1
- {"version":3,"file":"SceneScopesBridge.js","sources":["../../../src/core/SceneScopesBridge.ts"],"sourcesContent":["import { isEqual } from 'lodash';\nimport { useEffect } from 'react';\nimport { BehaviorSubject, filter, map, Observable, pairwise, Unsubscribable } from 'rxjs';\n\nimport { Scope } from '@grafana/data';\nimport { ScopesContextValue, useScopes } from '@grafana/runtime';\n\nimport { SceneObjectBase } from './SceneObjectBase';\nimport { SceneComponentProps, SceneObjectUrlValues, SceneObjectWithUrlSync } from './types';\nimport { SceneObjectUrlSyncConfig } from '../services/SceneObjectUrlSyncConfig';\n\nexport class SceneScopesBridge extends SceneObjectBase implements SceneObjectWithUrlSync {\n static Component = SceneScopesBridgeRenderer;\n\n protected _urlSync = new SceneObjectUrlSyncConfig(this, { keys: ['scopes'] });\n\n protected _renderBeforeActivation = true;\n\n private _contextSubject = new BehaviorSubject<ScopesContextValue | undefined>(undefined);\n\n // Needed to maintain scopes values received from URL until the context is available\n private _pendingScopes: string[] | null = null;\n\n public getUrlState(): SceneObjectUrlValues {\n return {\n scopes: this._pendingScopes ?? (this.context?.state.value ?? []).map((scope: Scope) => scope.metadata.name),\n };\n }\n\n public updateFromUrl(values: SceneObjectUrlValues) {\n let scopes = values['scopes'] ?? [];\n scopes = (Array.isArray(scopes) ? scopes : [scopes]).map(String);\n\n if (!this.context) {\n this._pendingScopes = scopes;\n return;\n }\n\n this.context?.changeScopes(scopes);\n }\n\n public getValue(): Scope[] {\n return this.context?.state.value ?? [];\n }\n\n /**\n * Emits values of the selected scopes array. It emits the current value and the previous value if there is a change.\n * @param cb\n */\n public subscribeToValue(cb: (newScopes: Scope[], prevScopes: Scope[]) => void): Unsubscribable {\n return this.contextObservable\n .pipe(\n map((context) => context?.state.value ?? []),\n pairwise(),\n filter(([prevScopes, newScopes]) => !isEqual(prevScopes, newScopes))\n )\n .subscribe(([prevScopes, newScopes]) => {\n cb(newScopes, prevScopes);\n });\n }\n\n public isLoading(): boolean {\n return this.context?.state.loading ?? false;\n }\n\n public subscribeToLoading(cb: (loading: boolean) => void): Unsubscribable {\n return this.contextObservable\n .pipe(\n filter((context) => !!context),\n pairwise(),\n map(\n ([prevContext, newContext]) =>\n [prevContext?.state.loading ?? false, newContext?.state.loading ?? false] as [boolean, boolean]\n ),\n filter(([prevLoading, newLoading]) => prevLoading !== newLoading)\n )\n .subscribe(([_prevLoading, newLoading]) => {\n cb(newLoading);\n });\n }\n\n public setEnabled(enabled: boolean) {\n this.context?.setEnabled(enabled);\n }\n\n public setReadOnly(readOnly: boolean) {\n this.context?.setReadOnly(readOnly);\n }\n\n /**\n * This method is used to keep the context up to date with the scopes context received from React\n *\n * Its rationale is:\n * - When a new context is available, check if we have pending scopes passed from the URL\n * - If we have pending scopes, ask the new context to load them\n * - The loading should happen in a setTimeout to allow the existing context to pass its values to the URL sync handler\n * - If a new context is received, propagate it as a new value in the behavior subject\n * - If a new value is received, force a re-render to trigger the URL sync handler\n */\n public updateContext(newContext: ScopesContextValue | undefined) {\n if (this._pendingScopes && newContext) {\n /**\n * The setTimeout here is needed to avoid a potential race condition in the URL sync handler\n * One way to test this is:\n * - navigate to a dashboard and select some scopes\n * - navigate to a suggested dashboard and change the selected scopes\n * - observe the URL not containing any scopes\n */\n setTimeout(() => {\n newContext?.changeScopes(this._pendingScopes!);\n this._pendingScopes = null;\n });\n\n /**\n * If we return here and don't allow the context to be propagated, scopes will never get activated when\n * navigating from a page without scopes to a page that has scopes.\n *\n * This is happening because the app will try to call `enable` on the context, but the context would not be available yet\n */\n }\n\n if (this.context !== newContext || this.context?.state !== newContext?.state) {\n // Checking if we should trigger a re-render before pushing new value for the context\n // Doing it here because otherwise the check would not be valid (this.context would be newContext due to the value push)\n const shouldUpdate = this.context?.state.value !== newContext?.state.value;\n\n this._contextSubject.next(newContext);\n\n /**\n * Whenever we got a new set of scopes, we force a re-render in order to trigger the URL sync handler\n * Without this, the URL would never be updated when the scopes change\n * TODO: This is a workaround and should be removed once we have a better way to handle this (aka trigger URL sync handler on demand)\n */\n if (shouldUpdate) {\n this.forceRender();\n }\n }\n }\n\n private get context(): ScopesContextValue | undefined {\n return this._contextSubject.getValue();\n }\n\n private get contextObservable(): Observable<ScopesContextValue | undefined> {\n return this._contextSubject.asObservable();\n }\n}\n\nfunction SceneScopesBridgeRenderer({ model }: SceneComponentProps<SceneScopesBridge>) {\n const context = useScopes();\n\n useEffect(() => {\n model.updateContext(context);\n }, [context, model]);\n\n return null;\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SceneScopesBridge.js","sources":["../../../src/core/SceneScopesBridge.ts"],"sourcesContent":["import { isEqual } from 'lodash';\nimport { useEffect } from 'react';\nimport { BehaviorSubject, filter, map, Observable, pairwise, Unsubscribable } from 'rxjs';\n\nimport { Scope } from '@grafana/data';\nimport { ScopesContextValue, useScopes } from '@grafana/runtime';\n\nimport { SceneObjectBase } from './SceneObjectBase';\nimport { SceneComponentProps, SceneObjectUrlValues, SceneObjectWithUrlSync } from './types';\nimport { SceneObjectUrlSyncConfig } from '../services/SceneObjectUrlSyncConfig';\n\nexport class SceneScopesBridge extends SceneObjectBase implements SceneObjectWithUrlSync {\n static Component = SceneScopesBridgeRenderer;\n\n protected _urlSync = new SceneObjectUrlSyncConfig(this, { keys: ['scopes'] });\n\n protected _renderBeforeActivation = true;\n\n private _contextSubject = new BehaviorSubject<ScopesContextValue | undefined>(undefined);\n\n // Needed to maintain scopes values received from URL until the context is available\n private _pendingScopes: string[] | null = null;\n\n public getUrlState(): SceneObjectUrlValues {\n return {\n scopes: this._pendingScopes ?? (this.context?.state.value ?? []).map((scope: Scope) => scope.metadata.name),\n };\n }\n\n public updateFromUrl(values: SceneObjectUrlValues) {\n let scopes = values['scopes'] ?? [];\n scopes = (Array.isArray(scopes) ? scopes : [scopes]).map(String);\n\n if (!this.context) {\n this._pendingScopes = scopes;\n return;\n }\n\n this.context?.changeScopes(scopes);\n }\n\n public getValue(): Scope[] {\n return this.context?.state.value ?? [];\n }\n\n /**\n * Emits values of the selected scopes array. It emits the current value and the previous value if there is a change.\n * @param cb\n */\n public subscribeToValue(cb: (newScopes: Scope[], prevScopes: Scope[]) => void): Unsubscribable {\n return this.contextObservable\n .pipe(\n map((context) => context?.state.value ?? []),\n pairwise(),\n filter(([prevScopes, newScopes]) => !isEqual(prevScopes, newScopes))\n )\n .subscribe(([prevScopes, newScopes]) => {\n cb(newScopes, prevScopes);\n });\n }\n\n public isLoading(): boolean {\n return this.context?.state.loading ?? false;\n }\n\n public subscribeToLoading(cb: (loading: boolean) => void): Unsubscribable {\n return this.contextObservable\n .pipe(\n filter((context) => !!context),\n pairwise(),\n map(\n ([prevContext, newContext]) =>\n [prevContext?.state.loading ?? false, newContext?.state.loading ?? false] as [boolean, boolean]\n ),\n filter(([prevLoading, newLoading]) => prevLoading !== newLoading)\n )\n .subscribe(([_prevLoading, newLoading]) => {\n cb(newLoading);\n });\n }\n\n public setEnabled(enabled: boolean) {\n this.context?.setEnabled(enabled);\n }\n\n public setReadOnly(readOnly: boolean) {\n this.context?.setReadOnly(readOnly);\n }\n\n /**\n * This method is used to keep the context up to date with the scopes context received from React\n *\n * Its rationale is:\n * - When a new context is available, check if we have pending scopes passed from the URL\n * - If we have pending scopes, ask the new context to load them\n * - The loading should happen in a setTimeout to allow the existing context to pass its values to the URL sync handler\n * - If a new context is received, propagate it as a new value in the behavior subject\n * - If a new value is received, force a re-render to trigger the URL sync handler\n */\n public updateContext(newContext: ScopesContextValue | undefined) {\n if (this._pendingScopes && newContext) {\n /**\n * The setTimeout here is needed to avoid a potential race condition in the URL sync handler\n * One way to test this is:\n * - navigate to a dashboard and select some scopes\n * - navigate to a suggested dashboard and change the selected scopes\n * - observe the URL not containing any scopes\n */\n setTimeout(() => {\n newContext?.changeScopes(this._pendingScopes!);\n this._pendingScopes = null;\n });\n\n /**\n * If we return here and don't allow the context to be propagated, scopes will never get activated when\n * navigating from a page without scopes to a page that has scopes.\n *\n * This is happening because the app will try to call `enable` on the context, but the context would not be available yet\n */\n }\n\n if (this.context !== newContext || this.context?.state !== newContext?.state) {\n // Checking if we should trigger a re-render before pushing new value for the context\n // Doing it here because otherwise the check would not be valid (this.context would be newContext due to the value push)\n const shouldUpdate = this.context?.state.value !== newContext?.state.value;\n\n this._contextSubject.next(newContext);\n\n /**\n * Whenever we got a new set of scopes, we force a re-render in order to trigger the URL sync handler\n * Without this, the URL would never be updated when the scopes change\n * TODO: This is a workaround and should be removed once we have a better way to handle this (aka trigger URL sync handler on demand)\n */\n if (shouldUpdate) {\n this.forceRender();\n }\n }\n }\n\n private get context(): ScopesContextValue | undefined {\n return this._contextSubject.getValue();\n }\n\n private get contextObservable(): Observable<ScopesContextValue | undefined> {\n return this._contextSubject.asObservable();\n }\n}\n\nfunction SceneScopesBridgeRenderer({ model }: SceneComponentProps<SceneScopesBridge>) {\n const context = useScopes();\n\n useEffect(() => {\n model.updateContext(context);\n }, [context, model]);\n\n return null;\n}\n"],"names":[],"mappings":"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"}
@@ -8,6 +8,22 @@ import { RefreshEvent, config, locationService } from '@grafana/runtime';
8
8
  import { isValid } from '../utils/date.js';
9
9
  import { getQueryController } from './sceneGraph/getQueryController.js';
10
10
 
11
+ var __defProp = Object.defineProperty;
12
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
13
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
14
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
15
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
16
+ var __spreadValues = (a, b) => {
17
+ for (var prop in b || (b = {}))
18
+ if (__hasOwnProp.call(b, prop))
19
+ __defNormalProp(a, prop, b[prop]);
20
+ if (__getOwnPropSymbols)
21
+ for (var prop of __getOwnPropSymbols(b)) {
22
+ if (__propIsEnum.call(b, prop))
23
+ __defNormalProp(a, prop, b[prop]);
24
+ }
25
+ return a;
26
+ };
11
27
  class SceneTimeRange extends SceneObjectBase {
12
28
  constructor(state = {}) {
13
29
  var _a;
@@ -23,7 +39,7 @@ class SceneTimeRange extends SceneObjectBase {
23
39
  state.weekStart
24
40
  );
25
41
  const refreshOnActivate = (_a = state.refreshOnActivate) != null ? _a : { percent: 10 };
26
- super({ from, to, timeZone, value, refreshOnActivate, ...state });
42
+ super(__spreadValues({ from, to, timeZone, value, refreshOnActivate }, state));
27
43
  this._urlSync = new SceneObjectUrlSyncConfig(this, { keys: ["from", "to", "timezone", "time", "time.window"] });
28
44
  this.onTimeRangeChange = (timeRange) => {
29
45
  const update = {};
@@ -99,9 +115,6 @@ class SceneTimeRange extends SceneObjectBase {
99
115
  this.refreshRange(ms);
100
116
  }
101
117
  }
102
- /**
103
- * Will traverse up the scene graph to find the closest SceneTimeRangeLike with time zone set
104
- */
105
118
  getTimeZoneSource() {
106
119
  if (!this.parent || !this.parent.parent) {
107
120
  return this;
@@ -117,11 +130,6 @@ class SceneTimeRange extends SceneObjectBase {
117
130
  }
118
131
  return source;
119
132
  }
120
- /**
121
- * Refreshes time range if it is older than the invalidation interval
122
- * @param refreshAfterMs invalidation interval (milliseconds)
123
- * @private
124
- */
125
133
  refreshRange(refreshAfterMs) {
126
134
  var _a;
127
135
  const value = evaluateTimeRange(
@@ -1 +1 @@
1
- {"version":3,"file":"SceneTimeRange.js","sources":["../../../src/core/SceneTimeRange.tsx"],"sourcesContent":["import { getTimeZone, rangeUtil, setWeekStart, TimeRange, toUtc } from '@grafana/data';\nimport { TimeZone } from '@grafana/schema';\n\nimport { SceneObjectUrlSyncConfig } from '../services/SceneObjectUrlSyncConfig';\n\nimport { SceneObjectBase } from './SceneObjectBase';\nimport { SceneTimeRangeLike, SceneTimeRangeState, SceneObjectUrlValues } from './types';\nimport { getClosest } from './sceneGraph/utils';\nimport { parseUrlParam } from '../utils/parseUrlParam';\nimport { evaluateTimeRange } from '../utils/evaluateTimeRange';\nimport { config, locationService, RefreshEvent } from '@grafana/runtime';\nimport { isValid } from '../utils/date';\nimport { getQueryController } from './sceneGraph/getQueryController';\n\nexport class SceneTimeRange extends SceneObjectBase<SceneTimeRangeState> implements SceneTimeRangeLike {\n protected _urlSync = new SceneObjectUrlSyncConfig(this, { keys: ['from', 'to', 'timezone', 'time', 'time.window'] });\n\n public constructor(state: Partial<SceneTimeRangeState> = {}) {\n const from = state.from && isValid(state.from) ? state.from : 'now-6h';\n const to = state.to && isValid(state.to) ? state.to : 'now';\n const timeZone = state.timeZone;\n const value = evaluateTimeRange(\n from,\n to,\n timeZone || getTimeZone(),\n state.fiscalYearStartMonth,\n state.UNSAFE_nowDelay,\n state.weekStart\n );\n const refreshOnActivate = state.refreshOnActivate ?? { percent: 10 };\n super({ from, to, timeZone, value, refreshOnActivate, ...state });\n\n this.addActivationHandler(this._onActivate.bind(this));\n }\n\n private _onActivate() {\n // When SceneTimeRange has no time zone provided, find closest source of time zone and subscribe to it\n if (!this.state.timeZone) {\n const timeZoneSource = this.getTimeZoneSource();\n if (timeZoneSource !== this) {\n this._subs.add(\n timeZoneSource.subscribeToState((n, p) => {\n if (n.timeZone !== undefined && n.timeZone !== p.timeZone) {\n this.refreshRange(0);\n }\n })\n );\n }\n }\n\n if (rangeUtil.isRelativeTimeRange(this.state.value.raw)) {\n this.refreshIfStale();\n }\n\n return () => {\n if (this.state.weekStart) {\n setWeekStart(config.bootData.user.weekStart);\n }\n };\n }\n\n private refreshIfStale() {\n let ms;\n if (this.state?.refreshOnActivate?.percent !== undefined) {\n ms = this.calculatePercentOfInterval(this.state.refreshOnActivate.percent);\n }\n if (this.state?.refreshOnActivate?.afterMs !== undefined) {\n ms = Math.min(this.state.refreshOnActivate.afterMs, ms ?? Infinity);\n }\n if (ms !== undefined) {\n this.refreshRange(ms);\n }\n }\n\n /**\n * Will traverse up the scene graph to find the closest SceneTimeRangeLike with time zone set\n */\n private getTimeZoneSource() {\n if (!this.parent || !this.parent.parent) {\n return this;\n }\n // Find the closest source of time zone\n const source = getClosest<SceneTimeRangeLike>(this.parent.parent, (o) => {\n if (o.state.$timeRange && o.state.$timeRange.state.timeZone) {\n return o.state.$timeRange;\n }\n return undefined;\n });\n\n if (!source) {\n return this;\n }\n\n return source;\n }\n\n /**\n * Refreshes time range if it is older than the invalidation interval\n * @param refreshAfterMs invalidation interval (milliseconds)\n * @private\n */\n private refreshRange(refreshAfterMs: number) {\n const value = evaluateTimeRange(\n this.state.from,\n this.state.to,\n this.state.timeZone ?? getTimeZone(),\n this.state.fiscalYearStartMonth,\n this.state.UNSAFE_nowDelay,\n this.state.weekStart\n );\n\n const diff = value.to.diff(this.state.value.to, 'milliseconds');\n if (diff >= refreshAfterMs) {\n this.setState({ value });\n }\n }\n\n private calculatePercentOfInterval(percent: number): number {\n const intervalMs = this.state.value.to.diff(this.state.value.from, 'milliseconds');\n return Math.ceil(intervalMs / percent);\n }\n\n public getTimeZone(): TimeZone {\n // Return local time zone if provided\n if (this.state.timeZone) {\n return this.state.timeZone;\n }\n\n // Resolve higher level time zone source\n const timeZoneSource = this.getTimeZoneSource();\n if (timeZoneSource !== this) {\n return timeZoneSource.state.timeZone!;\n }\n\n // Return default time zone\n return getTimeZone();\n }\n\n public onTimeRangeChange = (timeRange: TimeRange) => {\n const update: Partial<SceneTimeRangeState> = {};\n\n if (typeof timeRange.raw.from === 'string') {\n update.from = timeRange.raw.from;\n } else {\n update.from = timeRange.raw.from.toISOString();\n }\n\n if (typeof timeRange.raw.to === 'string') {\n update.to = timeRange.raw.to;\n } else {\n update.to = timeRange.raw.to.toISOString();\n }\n\n update.value = evaluateTimeRange(\n update.from,\n update.to,\n this.getTimeZone(),\n this.state.fiscalYearStartMonth,\n this.state.UNSAFE_nowDelay,\n this.state.weekStart\n );\n\n // Only update if time range actually changed\n if (update.from !== this.state.from || update.to !== this.state.to) {\n const queryController = getQueryController(this);\n queryController?.startProfile('SceneTimeRange');\n this._urlSync.performBrowserHistoryAction(() => {\n this.setState(update);\n });\n }\n };\n\n public onTimeZoneChange = (timeZone: TimeZone) => {\n this._urlSync.performBrowserHistoryAction(() => {\n this.setState({ timeZone });\n });\n };\n\n public onRefresh = () => {\n this.refreshRange(0);\n this.publishEvent(new RefreshEvent(), true);\n };\n\n public getUrlState() {\n const params = locationService.getSearchObject();\n const urlValues: SceneObjectUrlValues = { from: this.state.from, to: this.state.to, timezone: this.getTimeZone() };\n\n // Clear time and time.window once they are converted to from and to\n if (params.time && params['time.window']) {\n urlValues.time = null;\n urlValues['time.window'] = null;\n }\n\n return urlValues;\n }\n\n public updateFromUrl(values: SceneObjectUrlValues) {\n const update: Partial<SceneTimeRangeState> = {};\n\n let from = parseUrlParam(values.from);\n let to = parseUrlParam(values.to);\n\n if (values.time && values['time.window']) {\n const time = Array.isArray(values.time) ? values.time[0] : values.time;\n const timeWindow = Array.isArray(values['time.window']) ? values['time.window'][0] : values['time.window'];\n const timeRange = getTimeWindow(time, timeWindow);\n if (timeRange.from && isValid(timeRange.from)) {\n from = timeRange.from;\n }\n\n if (timeRange.to && isValid(timeRange.to)) {\n to = timeRange.to;\n }\n }\n\n if (from && isValid(from)) {\n update.from = from;\n }\n\n if (to && isValid(to)) {\n update.to = to;\n }\n\n if (typeof values.timezone === 'string') {\n update.timeZone = values.timezone !== '' ? values.timezone : undefined;\n }\n\n if (Object.keys(update).length === 0) {\n return;\n }\n\n update.value = evaluateTimeRange(\n update.from ?? this.state.from,\n update.to ?? this.state.to,\n update.timeZone ?? this.getTimeZone(),\n this.state.fiscalYearStartMonth,\n this.state.UNSAFE_nowDelay,\n this.state.weekStart\n );\n\n return this.setState(update);\n }\n}\n\n/**\n * Calculates the duration of the time range from time-time.window/2 to time+time.window/2. Both be specified in ms. For example ?time=1500000000000&time.window=10000 results in a 10-second time range from 1499999995000 to 1500000005000`.\n * @param time - time in ms\n * @param timeWindow - time window in ms or interval string\n */\nfunction getTimeWindow(time: string, timeWindow: string) {\n // Parse the time, assuming it could be an ISO string or a number in milliseconds\n const valueTime = isNaN(Date.parse(time)) ? parseInt(time, 10) : Date.parse(time);\n\n let timeWindowMs;\n\n if (timeWindow.match(/^\\d+$/) && parseInt(timeWindow, 10)) {\n // when time window is specified in ms\n timeWindowMs = parseInt(timeWindow, 10);\n } else {\n timeWindowMs = rangeUtil.intervalToMs(timeWindow);\n }\n\n return {\n from: toUtc(valueTime - timeWindowMs / 2).toISOString(),\n to: toUtc(valueTime + timeWindowMs / 2).toISOString(),\n };\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SceneTimeRange.js","sources":["../../../src/core/SceneTimeRange.tsx"],"sourcesContent":["import { getTimeZone, rangeUtil, setWeekStart, TimeRange, toUtc } from '@grafana/data';\nimport { TimeZone } from '@grafana/schema';\n\nimport { SceneObjectUrlSyncConfig } from '../services/SceneObjectUrlSyncConfig';\n\nimport { SceneObjectBase } from './SceneObjectBase';\nimport { SceneTimeRangeLike, SceneTimeRangeState, SceneObjectUrlValues } from './types';\nimport { getClosest } from './sceneGraph/utils';\nimport { parseUrlParam } from '../utils/parseUrlParam';\nimport { evaluateTimeRange } from '../utils/evaluateTimeRange';\nimport { config, locationService, RefreshEvent } from '@grafana/runtime';\nimport { isValid } from '../utils/date';\nimport { getQueryController } from './sceneGraph/getQueryController';\n\nexport class SceneTimeRange extends SceneObjectBase<SceneTimeRangeState> implements SceneTimeRangeLike {\n protected _urlSync = new SceneObjectUrlSyncConfig(this, { keys: ['from', 'to', 'timezone', 'time', 'time.window'] });\n\n public constructor(state: Partial<SceneTimeRangeState> = {}) {\n const from = state.from && isValid(state.from) ? state.from : 'now-6h';\n const to = state.to && isValid(state.to) ? state.to : 'now';\n const timeZone = state.timeZone;\n const value = evaluateTimeRange(\n from,\n to,\n timeZone || getTimeZone(),\n state.fiscalYearStartMonth,\n state.UNSAFE_nowDelay,\n state.weekStart\n );\n const refreshOnActivate = state.refreshOnActivate ?? { percent: 10 };\n super({ from, to, timeZone, value, refreshOnActivate, ...state });\n\n this.addActivationHandler(this._onActivate.bind(this));\n }\n\n private _onActivate() {\n // When SceneTimeRange has no time zone provided, find closest source of time zone and subscribe to it\n if (!this.state.timeZone) {\n const timeZoneSource = this.getTimeZoneSource();\n if (timeZoneSource !== this) {\n this._subs.add(\n timeZoneSource.subscribeToState((n, p) => {\n if (n.timeZone !== undefined && n.timeZone !== p.timeZone) {\n this.refreshRange(0);\n }\n })\n );\n }\n }\n\n if (rangeUtil.isRelativeTimeRange(this.state.value.raw)) {\n this.refreshIfStale();\n }\n\n return () => {\n if (this.state.weekStart) {\n setWeekStart(config.bootData.user.weekStart);\n }\n };\n }\n\n private refreshIfStale() {\n let ms;\n if (this.state?.refreshOnActivate?.percent !== undefined) {\n ms = this.calculatePercentOfInterval(this.state.refreshOnActivate.percent);\n }\n if (this.state?.refreshOnActivate?.afterMs !== undefined) {\n ms = Math.min(this.state.refreshOnActivate.afterMs, ms ?? Infinity);\n }\n if (ms !== undefined) {\n this.refreshRange(ms);\n }\n }\n\n /**\n * Will traverse up the scene graph to find the closest SceneTimeRangeLike with time zone set\n */\n private getTimeZoneSource() {\n if (!this.parent || !this.parent.parent) {\n return this;\n }\n // Find the closest source of time zone\n const source = getClosest<SceneTimeRangeLike>(this.parent.parent, (o) => {\n if (o.state.$timeRange && o.state.$timeRange.state.timeZone) {\n return o.state.$timeRange;\n }\n return undefined;\n });\n\n if (!source) {\n return this;\n }\n\n return source;\n }\n\n /**\n * Refreshes time range if it is older than the invalidation interval\n * @param refreshAfterMs invalidation interval (milliseconds)\n * @private\n */\n private refreshRange(refreshAfterMs: number) {\n const value = evaluateTimeRange(\n this.state.from,\n this.state.to,\n this.state.timeZone ?? getTimeZone(),\n this.state.fiscalYearStartMonth,\n this.state.UNSAFE_nowDelay,\n this.state.weekStart\n );\n\n const diff = value.to.diff(this.state.value.to, 'milliseconds');\n if (diff >= refreshAfterMs) {\n this.setState({ value });\n }\n }\n\n private calculatePercentOfInterval(percent: number): number {\n const intervalMs = this.state.value.to.diff(this.state.value.from, 'milliseconds');\n return Math.ceil(intervalMs / percent);\n }\n\n public getTimeZone(): TimeZone {\n // Return local time zone if provided\n if (this.state.timeZone) {\n return this.state.timeZone;\n }\n\n // Resolve higher level time zone source\n const timeZoneSource = this.getTimeZoneSource();\n if (timeZoneSource !== this) {\n return timeZoneSource.state.timeZone!;\n }\n\n // Return default time zone\n return getTimeZone();\n }\n\n public onTimeRangeChange = (timeRange: TimeRange) => {\n const update: Partial<SceneTimeRangeState> = {};\n\n if (typeof timeRange.raw.from === 'string') {\n update.from = timeRange.raw.from;\n } else {\n update.from = timeRange.raw.from.toISOString();\n }\n\n if (typeof timeRange.raw.to === 'string') {\n update.to = timeRange.raw.to;\n } else {\n update.to = timeRange.raw.to.toISOString();\n }\n\n update.value = evaluateTimeRange(\n update.from,\n update.to,\n this.getTimeZone(),\n this.state.fiscalYearStartMonth,\n this.state.UNSAFE_nowDelay,\n this.state.weekStart\n );\n\n // Only update if time range actually changed\n if (update.from !== this.state.from || update.to !== this.state.to) {\n const queryController = getQueryController(this);\n queryController?.startProfile('SceneTimeRange');\n this._urlSync.performBrowserHistoryAction(() => {\n this.setState(update);\n });\n }\n };\n\n public onTimeZoneChange = (timeZone: TimeZone) => {\n this._urlSync.performBrowserHistoryAction(() => {\n this.setState({ timeZone });\n });\n };\n\n public onRefresh = () => {\n this.refreshRange(0);\n this.publishEvent(new RefreshEvent(), true);\n };\n\n public getUrlState() {\n const params = locationService.getSearchObject();\n const urlValues: SceneObjectUrlValues = { from: this.state.from, to: this.state.to, timezone: this.getTimeZone() };\n\n // Clear time and time.window once they are converted to from and to\n if (params.time && params['time.window']) {\n urlValues.time = null;\n urlValues['time.window'] = null;\n }\n\n return urlValues;\n }\n\n public updateFromUrl(values: SceneObjectUrlValues) {\n const update: Partial<SceneTimeRangeState> = {};\n\n let from = parseUrlParam(values.from);\n let to = parseUrlParam(values.to);\n\n if (values.time && values['time.window']) {\n const time = Array.isArray(values.time) ? values.time[0] : values.time;\n const timeWindow = Array.isArray(values['time.window']) ? values['time.window'][0] : values['time.window'];\n const timeRange = getTimeWindow(time, timeWindow);\n if (timeRange.from && isValid(timeRange.from)) {\n from = timeRange.from;\n }\n\n if (timeRange.to && isValid(timeRange.to)) {\n to = timeRange.to;\n }\n }\n\n if (from && isValid(from)) {\n update.from = from;\n }\n\n if (to && isValid(to)) {\n update.to = to;\n }\n\n if (typeof values.timezone === 'string') {\n update.timeZone = values.timezone !== '' ? values.timezone : undefined;\n }\n\n if (Object.keys(update).length === 0) {\n return;\n }\n\n update.value = evaluateTimeRange(\n update.from ?? this.state.from,\n update.to ?? this.state.to,\n update.timeZone ?? this.getTimeZone(),\n this.state.fiscalYearStartMonth,\n this.state.UNSAFE_nowDelay,\n this.state.weekStart\n );\n\n return this.setState(update);\n }\n}\n\n/**\n * Calculates the duration of the time range from time-time.window/2 to time+time.window/2. Both be specified in ms. For example ?time=1500000000000&time.window=10000 results in a 10-second time range from 1499999995000 to 1500000005000`.\n * @param time - time in ms\n * @param timeWindow - time window in ms or interval string\n */\nfunction getTimeWindow(time: string, timeWindow: string) {\n // Parse the time, assuming it could be an ISO string or a number in milliseconds\n const valueTime = isNaN(Date.parse(time)) ? parseInt(time, 10) : Date.parse(time);\n\n let timeWindowMs;\n\n if (timeWindow.match(/^\\d+$/) && parseInt(timeWindow, 10)) {\n // when time window is specified in ms\n timeWindowMs = parseInt(timeWindow, 10);\n } else {\n timeWindowMs = rangeUtil.intervalToMs(timeWindow);\n }\n\n return {\n from: toUtc(valueTime - timeWindowMs / 2).toISOString(),\n to: toUtc(valueTime + timeWindowMs / 2).toISOString(),\n };\n}\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"SceneTimeRangeTransformerBase.js","sources":["../../../src/core/SceneTimeRangeTransformerBase.tsx"],"sourcesContent":["import { TimeRange } from '@grafana/data';\nimport { TimeZone } from '@grafana/schema';\nimport { sceneGraph } from './sceneGraph';\nimport { SceneObjectBase } from './SceneObjectBase';\nimport { SceneTimeRangeLike, SceneTimeRangeState } from './types';\n\n/**\n * @internal\n * Used by SceneTimeZoneOverride and main repo PanelTimeRange.\n * Not recommened to be used by plugins directly.\n */\nexport abstract class SceneTimeRangeTransformerBase<T extends SceneTimeRangeState>\n extends SceneObjectBase<T>\n implements SceneTimeRangeLike\n{\n public constructor(state: T) {\n super(state);\n\n this.addActivationHandler(this._activationHandler);\n }\n\n protected getAncestorTimeRange() {\n if (!this.parent || !this.parent.parent) {\n throw new Error(typeof this + ' must be used within $timeRange scope');\n }\n\n return sceneGraph.getTimeRange(this.parent.parent);\n }\n\n private _activationHandler = () => {\n const ancestorTimeRange = this.getAncestorTimeRange();\n\n this.ancestorTimeRangeChanged(ancestorTimeRange.state);\n\n this._subs.add(ancestorTimeRange.subscribeToState((s) => this.ancestorTimeRangeChanged(s)));\n };\n\n protected abstract ancestorTimeRangeChanged(timeRange: SceneTimeRangeState): void;\n\n public getTimeZone(): TimeZone {\n return this.getAncestorTimeRange().getTimeZone();\n }\n\n public onTimeRangeChange(timeRange: TimeRange): void {\n this.getAncestorTimeRange().onTimeRangeChange(timeRange);\n }\n\n public onTimeZoneChange(timeZone: string): void {\n this.getAncestorTimeRange().onTimeZoneChange(timeZone);\n }\n\n public onRefresh(): void {\n this.getAncestorTimeRange().onRefresh();\n }\n}\n"],"names":[],"mappings":";;;AAWO,MAAe,sCACZ,eAEV,CAAA;AAAA,EACS,YAAY,KAAU,EAAA;AAC3B,IAAA,KAAA,CAAM,KAAK,CAAA;AAab,IAAA,IAAA,CAAQ,qBAAqB,MAAM;AACjC,MAAM,MAAA,iBAAA,GAAoB,KAAK,oBAAqB,EAAA;AAEpD,MAAK,IAAA,CAAA,wBAAA,CAAyB,kBAAkB,KAAK,CAAA;AAErD,MAAK,IAAA,CAAA,KAAA,CAAM,GAAI,CAAA,iBAAA,CAAkB,gBAAiB,CAAA,CAAC,MAAM,IAAK,CAAA,wBAAA,CAAyB,CAAC,CAAC,CAAC,CAAA;AAAA,KAC5F;AAjBE,IAAK,IAAA,CAAA,oBAAA,CAAqB,KAAK,kBAAkB,CAAA;AAAA;AACnD,EAEU,oBAAuB,GAAA;AAC/B,IAAA,IAAI,CAAC,IAAK,CAAA,MAAA,IAAU,CAAC,IAAA,CAAK,OAAO,MAAQ,EAAA;AACvC,MAAA,MAAM,IAAI,KAAA,CAAM,OAAO,IAAA,GAAO,uCAAuC,CAAA;AAAA;AAGvE,IAAA,OAAO,UAAW,CAAA,YAAA,CAAa,IAAK,CAAA,MAAA,CAAO,MAAM,CAAA;AAAA;AACnD,EAYO,WAAwB,GAAA;AAC7B,IAAO,OAAA,IAAA,CAAK,oBAAqB,EAAA,CAAE,WAAY,EAAA;AAAA;AACjD,EAEO,kBAAkB,SAA4B,EAAA;AACnD,IAAK,IAAA,CAAA,oBAAA,EAAuB,CAAA,iBAAA,CAAkB,SAAS,CAAA;AAAA;AACzD,EAEO,iBAAiB,QAAwB,EAAA;AAC9C,IAAK,IAAA,CAAA,oBAAA,EAAuB,CAAA,gBAAA,CAAiB,QAAQ,CAAA;AAAA;AACvD,EAEO,SAAkB,GAAA;AACvB,IAAK,IAAA,CAAA,oBAAA,GAAuB,SAAU,EAAA;AAAA;AAE1C;;;;"}
1
+ {"version":3,"file":"SceneTimeRangeTransformerBase.js","sources":["../../../src/core/SceneTimeRangeTransformerBase.tsx"],"sourcesContent":["import { TimeRange } from '@grafana/data';\nimport { TimeZone } from '@grafana/schema';\nimport { sceneGraph } from './sceneGraph';\nimport { SceneObjectBase } from './SceneObjectBase';\nimport { SceneTimeRangeLike, SceneTimeRangeState } from './types';\n\n/**\n * @internal\n * Used by SceneTimeZoneOverride and main repo PanelTimeRange.\n * Not recommened to be used by plugins directly.\n */\nexport abstract class SceneTimeRangeTransformerBase<T extends SceneTimeRangeState>\n extends SceneObjectBase<T>\n implements SceneTimeRangeLike\n{\n public constructor(state: T) {\n super(state);\n\n this.addActivationHandler(this._activationHandler);\n }\n\n protected getAncestorTimeRange() {\n if (!this.parent || !this.parent.parent) {\n throw new Error(typeof this + ' must be used within $timeRange scope');\n }\n\n return sceneGraph.getTimeRange(this.parent.parent);\n }\n\n private _activationHandler = () => {\n const ancestorTimeRange = this.getAncestorTimeRange();\n\n this.ancestorTimeRangeChanged(ancestorTimeRange.state);\n\n this._subs.add(ancestorTimeRange.subscribeToState((s) => this.ancestorTimeRangeChanged(s)));\n };\n\n protected abstract ancestorTimeRangeChanged(timeRange: SceneTimeRangeState): void;\n\n public getTimeZone(): TimeZone {\n return this.getAncestorTimeRange().getTimeZone();\n }\n\n public onTimeRangeChange(timeRange: TimeRange): void {\n this.getAncestorTimeRange().onTimeRangeChange(timeRange);\n }\n\n public onTimeZoneChange(timeZone: string): void {\n this.getAncestorTimeRange().onTimeZoneChange(timeZone);\n }\n\n public onRefresh(): void {\n this.getAncestorTimeRange().onRefresh();\n }\n}\n"],"names":[],"mappings":";;;AAWO,MAAe,sCACZ,eAEV,CAAA;AAAA,EACS,YAAY,KAAU,EAAA;AAC3B,IAAA,KAAA,CAAM,KAAK,CAAA,CAAA;AAab,IAAA,IAAA,CAAQ,qBAAqB,MAAM;AACjC,MAAM,MAAA,iBAAA,GAAoB,KAAK,oBAAqB,EAAA,CAAA;AAEpD,MAAK,IAAA,CAAA,wBAAA,CAAyB,kBAAkB,KAAK,CAAA,CAAA;AAErD,MAAK,IAAA,CAAA,KAAA,CAAM,GAAI,CAAA,iBAAA,CAAkB,gBAAiB,CAAA,CAAC,MAAM,IAAK,CAAA,wBAAA,CAAyB,CAAC,CAAC,CAAC,CAAA,CAAA;AAAA,KAC5F,CAAA;AAjBE,IAAK,IAAA,CAAA,oBAAA,CAAqB,KAAK,kBAAkB,CAAA,CAAA;AAAA,GACnD;AAAA,EAEU,oBAAuB,GAAA;AAC/B,IAAA,IAAI,CAAC,IAAK,CAAA,MAAA,IAAU,CAAC,IAAA,CAAK,OAAO,MAAQ,EAAA;AACvC,MAAA,MAAM,IAAI,KAAA,CAAM,OAAO,IAAA,GAAO,uCAAuC,CAAA,CAAA;AAAA,KACvE;AAEA,IAAA,OAAO,UAAW,CAAA,YAAA,CAAa,IAAK,CAAA,MAAA,CAAO,MAAM,CAAA,CAAA;AAAA,GACnD;AAAA,EAYO,WAAwB,GAAA;AAC7B,IAAO,OAAA,IAAA,CAAK,oBAAqB,EAAA,CAAE,WAAY,EAAA,CAAA;AAAA,GACjD;AAAA,EAEO,kBAAkB,SAA4B,EAAA;AACnD,IAAK,IAAA,CAAA,oBAAA,EAAuB,CAAA,iBAAA,CAAkB,SAAS,CAAA,CAAA;AAAA,GACzD;AAAA,EAEO,iBAAiB,QAAwB,EAAA;AAC9C,IAAK,IAAA,CAAA,oBAAA,EAAuB,CAAA,gBAAA,CAAiB,QAAQ,CAAA,CAAA;AAAA,GACvD;AAAA,EAEO,SAAkB,GAAA;AACvB,IAAK,IAAA,CAAA,oBAAA,GAAuB,SAAU,EAAA,CAAA;AAAA,GACxC;AACF;;;;"}
@@ -2,20 +2,36 @@ import { SceneTimeRangeTransformerBase } from './SceneTimeRangeTransformerBase.j
2
2
  import { getDefaultTimeRange } from '@grafana/data';
3
3
  import { evaluateTimeRange } from '../utils/evaluateTimeRange.js';
4
4
 
5
+ var __defProp = Object.defineProperty;
6
+ var __defProps = Object.defineProperties;
7
+ var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
8
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
9
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
10
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
11
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
12
+ var __spreadValues = (a, b) => {
13
+ for (var prop in b || (b = {}))
14
+ if (__hasOwnProp.call(b, prop))
15
+ __defNormalProp(a, prop, b[prop]);
16
+ if (__getOwnPropSymbols)
17
+ for (var prop of __getOwnPropSymbols(b)) {
18
+ if (__propIsEnum.call(b, prop))
19
+ __defNormalProp(a, prop, b[prop]);
20
+ }
21
+ return a;
22
+ };
23
+ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
5
24
  class SceneTimeZoneOverride extends SceneTimeRangeTransformerBase {
6
25
  constructor(state) {
7
- super({
8
- ...state,
26
+ super(__spreadProps(__spreadValues({}, state), {
9
27
  timeZone: state.timeZone,
10
- // We set a default time range here. It will be overwritten on activation based on ancestor time range.
11
28
  from: "now-6h",
12
29
  to: "now",
13
30
  value: getDefaultTimeRange()
14
- });
31
+ }));
15
32
  }
16
33
  ancestorTimeRangeChanged(timeRange) {
17
- this.setState({
18
- ...timeRange,
34
+ this.setState(__spreadProps(__spreadValues({}, timeRange), {
19
35
  timeZone: this.state.timeZone,
20
36
  value: evaluateTimeRange(
21
37
  timeRange.from,
@@ -25,7 +41,7 @@ class SceneTimeZoneOverride extends SceneTimeRangeTransformerBase {
25
41
  timeRange.UNSAFE_nowDelay,
26
42
  timeRange.weekStart
27
43
  )
28
- });
44
+ }));
29
45
  }
30
46
  getTimeZone() {
31
47
  return this.state.timeZone;
@@ -1 +1 @@
1
- {"version":3,"file":"SceneTimeZoneOverride.js","sources":["../../../src/core/SceneTimeZoneOverride.tsx"],"sourcesContent":["import { TimeZone } from '@grafana/schema';\nimport { SceneTimeRangeLike, SceneTimeRangeState } from './types';\nimport { SceneTimeRangeTransformerBase } from './SceneTimeRangeTransformerBase';\nimport { getDefaultTimeRange } from '@grafana/data';\nimport { evaluateTimeRange } from '../utils/evaluateTimeRange';\n\ninterface SceneTimeZoneOverrideState extends SceneTimeRangeState {\n timeZone: TimeZone;\n}\n\nexport class SceneTimeZoneOverride\n extends SceneTimeRangeTransformerBase<SceneTimeZoneOverrideState>\n implements SceneTimeRangeLike\n{\n public constructor(state: Omit<SceneTimeZoneOverrideState, 'from' | 'to' | 'value'>) {\n super({\n ...state,\n timeZone: state.timeZone,\n // We set a default time range here. It will be overwritten on activation based on ancestor time range.\n from: 'now-6h',\n to: 'now',\n value: getDefaultTimeRange(),\n });\n }\n\n protected ancestorTimeRangeChanged(timeRange: SceneTimeRangeState): void {\n this.setState({\n ...timeRange,\n timeZone: this.state.timeZone,\n value: evaluateTimeRange(\n timeRange.from,\n timeRange.to,\n this.state.timeZone,\n timeRange.fiscalYearStartMonth,\n timeRange.UNSAFE_nowDelay,\n timeRange.weekStart\n ),\n });\n }\n\n public getTimeZone(): TimeZone {\n return this.state.timeZone;\n }\n\n public onTimeZoneChange(timeZone: string): void {\n const parentTimeRange = this.getAncestorTimeRange();\n\n this.setState({\n timeZone,\n value: evaluateTimeRange(\n parentTimeRange.state.from,\n parentTimeRange.state.to,\n timeZone,\n parentTimeRange.state.fiscalYearStartMonth,\n parentTimeRange.state.UNSAFE_nowDelay,\n parentTimeRange.state.weekStart\n ),\n });\n }\n}\n"],"names":[],"mappings":";;;;AAUO,MAAM,8BACH,6BAEV,CAAA;AAAA,EACS,YAAY,KAAkE,EAAA;AACnF,IAAM,KAAA,CAAA;AAAA,MACJ,GAAG,KAAA;AAAA,MACH,UAAU,KAAM,CAAA,QAAA;AAAA;AAAA,MAEhB,IAAM,EAAA,QAAA;AAAA,MACN,EAAI,EAAA,KAAA;AAAA,MACJ,OAAO,mBAAoB;AAAA,KAC5B,CAAA;AAAA;AACH,EAEU,yBAAyB,SAAsC,EAAA;AACvE,IAAA,IAAA,CAAK,QAAS,CAAA;AAAA,MACZ,GAAG,SAAA;AAAA,MACH,QAAA,EAAU,KAAK,KAAM,CAAA,QAAA;AAAA,MACrB,KAAO,EAAA,iBAAA;AAAA,QACL,SAAU,CAAA,IAAA;AAAA,QACV,SAAU,CAAA,EAAA;AAAA,QACV,KAAK,KAAM,CAAA,QAAA;AAAA,QACX,SAAU,CAAA,oBAAA;AAAA,QACV,SAAU,CAAA,eAAA;AAAA,QACV,SAAU,CAAA;AAAA;AACZ,KACD,CAAA;AAAA;AACH,EAEO,WAAwB,GAAA;AAC7B,IAAA,OAAO,KAAK,KAAM,CAAA,QAAA;AAAA;AACpB,EAEO,iBAAiB,QAAwB,EAAA;AAC9C,IAAM,MAAA,eAAA,GAAkB,KAAK,oBAAqB,EAAA;AAElD,IAAA,IAAA,CAAK,QAAS,CAAA;AAAA,MACZ,QAAA;AAAA,MACA,KAAO,EAAA,iBAAA;AAAA,QACL,gBAAgB,KAAM,CAAA,IAAA;AAAA,QACtB,gBAAgB,KAAM,CAAA,EAAA;AAAA,QACtB,QAAA;AAAA,QACA,gBAAgB,KAAM,CAAA,oBAAA;AAAA,QACtB,gBAAgB,KAAM,CAAA,eAAA;AAAA,QACtB,gBAAgB,KAAM,CAAA;AAAA;AACxB,KACD,CAAA;AAAA;AAEL;;;;"}
1
+ {"version":3,"file":"SceneTimeZoneOverride.js","sources":["../../../src/core/SceneTimeZoneOverride.tsx"],"sourcesContent":["import { TimeZone } from '@grafana/schema';\nimport { SceneTimeRangeLike, SceneTimeRangeState } from './types';\nimport { SceneTimeRangeTransformerBase } from './SceneTimeRangeTransformerBase';\nimport { getDefaultTimeRange } from '@grafana/data';\nimport { evaluateTimeRange } from '../utils/evaluateTimeRange';\n\ninterface SceneTimeZoneOverrideState extends SceneTimeRangeState {\n timeZone: TimeZone;\n}\n\nexport class SceneTimeZoneOverride\n extends SceneTimeRangeTransformerBase<SceneTimeZoneOverrideState>\n implements SceneTimeRangeLike\n{\n public constructor(state: Omit<SceneTimeZoneOverrideState, 'from' | 'to' | 'value'>) {\n super({\n ...state,\n timeZone: state.timeZone,\n // We set a default time range here. It will be overwritten on activation based on ancestor time range.\n from: 'now-6h',\n to: 'now',\n value: getDefaultTimeRange(),\n });\n }\n\n protected ancestorTimeRangeChanged(timeRange: SceneTimeRangeState): void {\n this.setState({\n ...timeRange,\n timeZone: this.state.timeZone,\n value: evaluateTimeRange(\n timeRange.from,\n timeRange.to,\n this.state.timeZone,\n timeRange.fiscalYearStartMonth,\n timeRange.UNSAFE_nowDelay,\n timeRange.weekStart\n ),\n });\n }\n\n public getTimeZone(): TimeZone {\n return this.state.timeZone;\n }\n\n public onTimeZoneChange(timeZone: string): void {\n const parentTimeRange = this.getAncestorTimeRange();\n\n this.setState({\n timeZone,\n value: evaluateTimeRange(\n parentTimeRange.state.from,\n parentTimeRange.state.to,\n timeZone,\n parentTimeRange.state.fiscalYearStartMonth,\n parentTimeRange.state.UNSAFE_nowDelay,\n parentTimeRange.state.weekStart\n ),\n });\n }\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAUO,MAAM,8BACH,6BAEV,CAAA;AAAA,EACS,YAAY,KAAkE,EAAA;AACnF,IAAA,KAAA,CAAM,iCACD,KADC,CAAA,EAAA;AAAA,MAEJ,UAAU,KAAM,CAAA,QAAA;AAAA,MAEhB,IAAM,EAAA,QAAA;AAAA,MACN,EAAI,EAAA,KAAA;AAAA,MACJ,OAAO,mBAAoB,EAAA;AAAA,KAC5B,CAAA,CAAA,CAAA;AAAA,GACH;AAAA,EAEU,yBAAyB,SAAsC,EAAA;AACvE,IAAK,IAAA,CAAA,QAAA,CAAS,iCACT,SADS,CAAA,EAAA;AAAA,MAEZ,QAAA,EAAU,KAAK,KAAM,CAAA,QAAA;AAAA,MACrB,KAAO,EAAA,iBAAA;AAAA,QACL,SAAU,CAAA,IAAA;AAAA,QACV,SAAU,CAAA,EAAA;AAAA,QACV,KAAK,KAAM,CAAA,QAAA;AAAA,QACX,SAAU,CAAA,oBAAA;AAAA,QACV,SAAU,CAAA,eAAA;AAAA,QACV,SAAU,CAAA,SAAA;AAAA,OACZ;AAAA,KACD,CAAA,CAAA,CAAA;AAAA,GACH;AAAA,EAEO,WAAwB,GAAA;AAC7B,IAAA,OAAO,KAAK,KAAM,CAAA,QAAA,CAAA;AAAA,GACpB;AAAA,EAEO,iBAAiB,QAAwB,EAAA;AAC9C,IAAM,MAAA,eAAA,GAAkB,KAAK,oBAAqB,EAAA,CAAA;AAElD,IAAA,IAAA,CAAK,QAAS,CAAA;AAAA,MACZ,QAAA;AAAA,MACA,KAAO,EAAA,iBAAA;AAAA,QACL,gBAAgB,KAAM,CAAA,IAAA;AAAA,QACtB,gBAAgB,KAAM,CAAA,EAAA;AAAA,QACtB,QAAA;AAAA,QACA,gBAAgB,KAAM,CAAA,oBAAA;AAAA,QACtB,gBAAgB,KAAM,CAAA,eAAA;AAAA,QACtB,gBAAgB,KAAM,CAAA,SAAA;AAAA,OACxB;AAAA,KACD,CAAA,CAAA;AAAA,GACH;AACF;;;;"}