@perses-dev/dashboards 0.43.0 → 0.44.0-rc0

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 (269) hide show
  1. package/dist/cjs/components/AddGroupButton/AddGroupButton.js +1 -1
  2. package/dist/cjs/components/AddPanelButton/AddPanelButton.js +2 -2
  3. package/dist/cjs/components/Dashboard/Dashboard.js +1 -1
  4. package/dist/cjs/components/DashboardToolbar/DashboardToolbar.js +3 -3
  5. package/dist/cjs/components/Datasources/DatasourceEditor.js +1 -1
  6. package/dist/cjs/components/Datasources/EditDatasourcesButton.js +3 -3
  7. package/dist/cjs/components/DeletePanelDialog/DeletePanelDialog.js +4 -4
  8. package/dist/cjs/components/DeletePanelGroupDialog/DeletePanelGroupDialog.js +1 -1
  9. package/dist/cjs/components/DiscardChangesConfirmationDialog/DiscardChangesConfirmationDialog.js +1 -1
  10. package/dist/cjs/components/DownloadButton/DownloadButton.js +2 -2
  11. package/dist/cjs/components/EditButton/EditButton.js +1 -1
  12. package/dist/cjs/components/EditJsonButton/EditJsonButton.js +2 -2
  13. package/dist/cjs/components/EditJsonDialog/EditJsonDialog.js +7 -7
  14. package/dist/cjs/components/EmptyDashboard/EmptyDashboard.js +3 -3
  15. package/dist/cjs/components/GridLayout/GridContainer.js +1 -1
  16. package/dist/cjs/components/GridLayout/GridItemContent.js +5 -5
  17. package/dist/cjs/components/GridLayout/GridLayout.js +4 -4
  18. package/dist/cjs/components/GridLayout/GridTitle.js +5 -5
  19. package/dist/cjs/components/Panel/Panel.js +3 -2
  20. package/dist/cjs/components/Panel/PanelContent.js +4 -3
  21. package/dist/cjs/components/Panel/PanelHeader.js +2 -2
  22. package/dist/cjs/components/PanelDrawer/PanelEditorForm.js +18 -15
  23. package/dist/cjs/components/PanelDrawer/PanelPreview.js +1 -1
  24. package/dist/cjs/components/PanelDrawer/usePanelEditor.js +2 -2
  25. package/dist/cjs/components/PanelGroupDialog/PanelGroupEditorForm.js +1 -1
  26. package/dist/cjs/components/QuerySummaryTable/QuerySummaryTable.js +2 -2
  27. package/dist/cjs/components/SaveChangesConfirmationDialog/SaveChangesConfirmationDialog.js +4 -4
  28. package/dist/cjs/components/SaveDashboardButton/SaveDashboardButton.js +7 -7
  29. package/dist/cjs/components/TimeRangeControls/TimeRangeControls.js +6 -6
  30. package/dist/cjs/components/ToolbarIconButton/ToolbarIconButton.js +1 -1
  31. package/dist/cjs/components/Variables/BuiltinVariableAccordions.js +7 -6
  32. package/dist/cjs/components/Variables/EditVariablesButton.js +2 -2
  33. package/dist/cjs/components/Variables/TemplateVariable.js +20 -11
  34. package/dist/cjs/components/Variables/VariableEditor.js +13 -14
  35. package/dist/cjs/components/Variables/VariableList.js +1 -1
  36. package/dist/cjs/constants/styles.js +4 -4
  37. package/dist/cjs/constants/user-interface-text.js +3 -3
  38. package/dist/cjs/context/DashboardProvider/DashboardProvider.js +10 -10
  39. package/dist/cjs/context/DashboardProvider/common.js +3 -3
  40. package/dist/cjs/context/DashboardProvider/dashboard-provider-api.js +40 -40
  41. package/dist/cjs/context/DashboardProvider/delete-panel-group-slice.js +1 -1
  42. package/dist/cjs/context/DashboardProvider/delete-panel-slice.js +3 -3
  43. package/dist/cjs/context/DashboardProvider/duplicate-panel-slice.js +1 -1
  44. package/dist/cjs/context/DashboardProvider/panel-editor-slice.js +4 -6
  45. package/dist/cjs/context/DashboardProvider/panel-group-slice.js +6 -6
  46. package/dist/cjs/context/DatasourceStoreProvider.js +8 -8
  47. package/dist/cjs/context/TemplateVariableProvider/TemplateVariableProvider.js +81 -77
  48. package/dist/cjs/context/TemplateVariableProvider/query-params.js +7 -7
  49. package/dist/cjs/context/TemplateVariableProvider/utils.js +3 -3
  50. package/dist/cjs/context/useDashboard.js +3 -3
  51. package/dist/cjs/test/dashboard-provider.js +3 -3
  52. package/dist/cjs/test/datasource-provider.js +4 -4
  53. package/dist/cjs/test/render.js +1 -1
  54. package/dist/cjs/utils/panelUtils.js +5 -5
  55. package/dist/cjs/utils/time.js +1 -1
  56. package/dist/cjs/views/ViewDashboard/DashboardApp.js +5 -5
  57. package/dist/cjs/views/ViewDashboard/ViewDashboard.js +3 -3
  58. package/dist/components/AddGroupButton/AddGroupButton.d.ts +1 -2
  59. package/dist/components/AddGroupButton/AddGroupButton.d.ts.map +1 -1
  60. package/dist/components/AddGroupButton/AddGroupButton.js +1 -1
  61. package/dist/components/AddGroupButton/AddGroupButton.js.map +1 -1
  62. package/dist/components/AddPanelButton/AddPanelButton.d.ts +1 -2
  63. package/dist/components/AddPanelButton/AddPanelButton.d.ts.map +1 -1
  64. package/dist/components/AddPanelButton/AddPanelButton.js +2 -2
  65. package/dist/components/AddPanelButton/AddPanelButton.js.map +1 -1
  66. package/dist/components/Dashboard/Dashboard.d.ts +2 -3
  67. package/dist/components/Dashboard/Dashboard.d.ts.map +1 -1
  68. package/dist/components/Dashboard/Dashboard.js +1 -1
  69. package/dist/components/Dashboard/Dashboard.js.map +1 -1
  70. package/dist/components/DashboardStickyToolbar/DashboardStickyToolbar.d.ts +1 -2
  71. package/dist/components/DashboardStickyToolbar/DashboardStickyToolbar.d.ts.map +1 -1
  72. package/dist/components/DashboardStickyToolbar/DashboardStickyToolbar.js.map +1 -1
  73. package/dist/components/DashboardToolbar/DashboardToolbar.d.ts +1 -1
  74. package/dist/components/DashboardToolbar/DashboardToolbar.d.ts.map +1 -1
  75. package/dist/components/DashboardToolbar/DashboardToolbar.js +3 -3
  76. package/dist/components/DashboardToolbar/DashboardToolbar.js.map +1 -1
  77. package/dist/components/Datasources/DatasourceEditor.d.ts +1 -2
  78. package/dist/components/Datasources/DatasourceEditor.d.ts.map +1 -1
  79. package/dist/components/Datasources/DatasourceEditor.js +1 -1
  80. package/dist/components/Datasources/DatasourceEditor.js.map +1 -1
  81. package/dist/components/Datasources/EditDatasourcesButton.d.ts +1 -2
  82. package/dist/components/Datasources/EditDatasourcesButton.d.ts.map +1 -1
  83. package/dist/components/Datasources/EditDatasourcesButton.js +3 -3
  84. package/dist/components/Datasources/EditDatasourcesButton.js.map +1 -1
  85. package/dist/components/DeletePanelDialog/DeletePanelDialog.d.ts +1 -2
  86. package/dist/components/DeletePanelDialog/DeletePanelDialog.d.ts.map +1 -1
  87. package/dist/components/DeletePanelDialog/DeletePanelDialog.js +4 -4
  88. package/dist/components/DeletePanelDialog/DeletePanelDialog.js.map +1 -1
  89. package/dist/components/DeletePanelGroupDialog/DeletePanelGroupDialog.d.ts +1 -2
  90. package/dist/components/DeletePanelGroupDialog/DeletePanelGroupDialog.d.ts.map +1 -1
  91. package/dist/components/DeletePanelGroupDialog/DeletePanelGroupDialog.js +1 -1
  92. package/dist/components/DeletePanelGroupDialog/DeletePanelGroupDialog.js.map +1 -1
  93. package/dist/components/DiscardChangesConfirmationDialog/DiscardChangesConfirmationDialog.d.ts +1 -2
  94. package/dist/components/DiscardChangesConfirmationDialog/DiscardChangesConfirmationDialog.d.ts.map +1 -1
  95. package/dist/components/DiscardChangesConfirmationDialog/DiscardChangesConfirmationDialog.js +1 -1
  96. package/dist/components/DiscardChangesConfirmationDialog/DiscardChangesConfirmationDialog.js.map +1 -1
  97. package/dist/components/DownloadButton/DownloadButton.d.ts +1 -2
  98. package/dist/components/DownloadButton/DownloadButton.d.ts.map +1 -1
  99. package/dist/components/DownloadButton/DownloadButton.js +2 -2
  100. package/dist/components/DownloadButton/DownloadButton.js.map +1 -1
  101. package/dist/components/EditButton/EditButton.d.ts +1 -2
  102. package/dist/components/EditButton/EditButton.d.ts.map +1 -1
  103. package/dist/components/EditButton/EditButton.js +1 -1
  104. package/dist/components/EditButton/EditButton.js.map +1 -1
  105. package/dist/components/EditJsonButton/EditJsonButton.d.ts +1 -2
  106. package/dist/components/EditJsonButton/EditJsonButton.d.ts.map +1 -1
  107. package/dist/components/EditJsonButton/EditJsonButton.js +2 -2
  108. package/dist/components/EditJsonButton/EditJsonButton.js.map +1 -1
  109. package/dist/components/EditJsonDialog/EditJsonDialog.d.ts +1 -2
  110. package/dist/components/EditJsonDialog/EditJsonDialog.d.ts.map +1 -1
  111. package/dist/components/EditJsonDialog/EditJsonDialog.js +7 -7
  112. package/dist/components/EditJsonDialog/EditJsonDialog.js.map +1 -1
  113. package/dist/components/EmptyDashboard/EmptyDashboard.d.ts +1 -1
  114. package/dist/components/EmptyDashboard/EmptyDashboard.d.ts.map +1 -1
  115. package/dist/components/EmptyDashboard/EmptyDashboard.js +3 -3
  116. package/dist/components/EmptyDashboard/EmptyDashboard.js.map +1 -1
  117. package/dist/components/GridLayout/GridContainer.d.ts +1 -1
  118. package/dist/components/GridLayout/GridContainer.d.ts.map +1 -1
  119. package/dist/components/GridLayout/GridContainer.js +1 -1
  120. package/dist/components/GridLayout/GridContainer.js.map +1 -1
  121. package/dist/components/GridLayout/GridItemContent.d.ts +1 -2
  122. package/dist/components/GridLayout/GridItemContent.d.ts.map +1 -1
  123. package/dist/components/GridLayout/GridItemContent.js +5 -5
  124. package/dist/components/GridLayout/GridItemContent.js.map +1 -1
  125. package/dist/components/GridLayout/GridLayout.d.ts +1 -2
  126. package/dist/components/GridLayout/GridLayout.d.ts.map +1 -1
  127. package/dist/components/GridLayout/GridLayout.js +4 -4
  128. package/dist/components/GridLayout/GridLayout.js.map +1 -1
  129. package/dist/components/GridLayout/GridTitle.d.ts +1 -2
  130. package/dist/components/GridLayout/GridTitle.d.ts.map +1 -1
  131. package/dist/components/GridLayout/GridTitle.js +5 -5
  132. package/dist/components/GridLayout/GridTitle.js.map +1 -1
  133. package/dist/components/Panel/Panel.d.ts +2 -2
  134. package/dist/components/Panel/Panel.d.ts.map +1 -1
  135. package/dist/components/Panel/Panel.js +3 -2
  136. package/dist/components/Panel/Panel.js.map +1 -1
  137. package/dist/components/Panel/PanelContent.d.ts +3 -3
  138. package/dist/components/Panel/PanelContent.d.ts.map +1 -1
  139. package/dist/components/Panel/PanelContent.js +4 -3
  140. package/dist/components/Panel/PanelContent.js.map +1 -1
  141. package/dist/components/Panel/PanelHeader.d.ts +2 -2
  142. package/dist/components/Panel/PanelHeader.d.ts.map +1 -1
  143. package/dist/components/Panel/PanelHeader.js +2 -2
  144. package/dist/components/Panel/PanelHeader.js.map +1 -1
  145. package/dist/components/PanelDrawer/PanelDrawer.d.ts +1 -2
  146. package/dist/components/PanelDrawer/PanelDrawer.d.ts.map +1 -1
  147. package/dist/components/PanelDrawer/PanelDrawer.js.map +1 -1
  148. package/dist/components/PanelDrawer/PanelEditorForm.d.ts +1 -2
  149. package/dist/components/PanelDrawer/PanelEditorForm.d.ts.map +1 -1
  150. package/dist/components/PanelDrawer/PanelEditorForm.js +18 -15
  151. package/dist/components/PanelDrawer/PanelEditorForm.js.map +1 -1
  152. package/dist/components/PanelDrawer/PanelPreview.d.ts +1 -2
  153. package/dist/components/PanelDrawer/PanelPreview.d.ts.map +1 -1
  154. package/dist/components/PanelDrawer/PanelPreview.js +1 -1
  155. package/dist/components/PanelDrawer/PanelPreview.js.map +1 -1
  156. package/dist/components/PanelDrawer/usePanelEditor.js +2 -2
  157. package/dist/components/PanelDrawer/usePanelEditor.js.map +1 -1
  158. package/dist/components/PanelGroupDialog/PanelGroupDialog.d.ts +1 -2
  159. package/dist/components/PanelGroupDialog/PanelGroupDialog.d.ts.map +1 -1
  160. package/dist/components/PanelGroupDialog/PanelGroupDialog.js.map +1 -1
  161. package/dist/components/PanelGroupDialog/PanelGroupEditorForm.d.ts +1 -2
  162. package/dist/components/PanelGroupDialog/PanelGroupEditorForm.d.ts.map +1 -1
  163. package/dist/components/PanelGroupDialog/PanelGroupEditorForm.js +1 -1
  164. package/dist/components/PanelGroupDialog/PanelGroupEditorForm.js.map +1 -1
  165. package/dist/components/QuerySummaryTable/QuerySummaryTable.d.ts +1 -2
  166. package/dist/components/QuerySummaryTable/QuerySummaryTable.d.ts.map +1 -1
  167. package/dist/components/QuerySummaryTable/QuerySummaryTable.js +2 -2
  168. package/dist/components/QuerySummaryTable/QuerySummaryTable.js.map +1 -1
  169. package/dist/components/SaveChangesConfirmationDialog/SaveChangesConfirmationDialog.d.ts +1 -2
  170. package/dist/components/SaveChangesConfirmationDialog/SaveChangesConfirmationDialog.d.ts.map +1 -1
  171. package/dist/components/SaveChangesConfirmationDialog/SaveChangesConfirmationDialog.js +4 -4
  172. package/dist/components/SaveChangesConfirmationDialog/SaveChangesConfirmationDialog.js.map +1 -1
  173. package/dist/components/SaveDashboardButton/SaveDashboardButton.d.ts +1 -2
  174. package/dist/components/SaveDashboardButton/SaveDashboardButton.d.ts.map +1 -1
  175. package/dist/components/SaveDashboardButton/SaveDashboardButton.js +7 -7
  176. package/dist/components/SaveDashboardButton/SaveDashboardButton.js.map +1 -1
  177. package/dist/components/TimeRangeControls/TimeRangeControls.d.ts +1 -2
  178. package/dist/components/TimeRangeControls/TimeRangeControls.d.ts.map +1 -1
  179. package/dist/components/TimeRangeControls/TimeRangeControls.js +3 -3
  180. package/dist/components/TimeRangeControls/TimeRangeControls.js.map +1 -1
  181. package/dist/components/ToolbarIconButton/ToolbarIconButton.d.ts +2 -2
  182. package/dist/components/ToolbarIconButton/ToolbarIconButton.d.ts.map +1 -1
  183. package/dist/components/ToolbarIconButton/ToolbarIconButton.js +1 -1
  184. package/dist/components/ToolbarIconButton/ToolbarIconButton.js.map +1 -1
  185. package/dist/components/Variables/BuiltinVariableAccordions.d.ts +2 -3
  186. package/dist/components/Variables/BuiltinVariableAccordions.d.ts.map +1 -1
  187. package/dist/components/Variables/BuiltinVariableAccordions.js +7 -6
  188. package/dist/components/Variables/BuiltinVariableAccordions.js.map +1 -1
  189. package/dist/components/Variables/EditVariablesButton.d.ts +1 -2
  190. package/dist/components/Variables/EditVariablesButton.d.ts.map +1 -1
  191. package/dist/components/Variables/EditVariablesButton.js +2 -2
  192. package/dist/components/Variables/EditVariablesButton.js.map +1 -1
  193. package/dist/components/Variables/TemplateVariable.d.ts +2 -3
  194. package/dist/components/Variables/TemplateVariable.d.ts.map +1 -1
  195. package/dist/components/Variables/TemplateVariable.js +20 -11
  196. package/dist/components/Variables/TemplateVariable.js.map +1 -1
  197. package/dist/components/Variables/VariableEditor.d.ts +2 -3
  198. package/dist/components/Variables/VariableEditor.d.ts.map +1 -1
  199. package/dist/components/Variables/VariableEditor.js +13 -14
  200. package/dist/components/Variables/VariableEditor.js.map +1 -1
  201. package/dist/components/Variables/VariableList.d.ts +2 -3
  202. package/dist/components/Variables/VariableList.d.ts.map +1 -1
  203. package/dist/components/Variables/VariableList.js +1 -1
  204. package/dist/components/Variables/VariableList.js.map +1 -1
  205. package/dist/context/DashboardProvider/DashboardProvider.d.ts +1 -1
  206. package/dist/context/DashboardProvider/DashboardProvider.d.ts.map +1 -1
  207. package/dist/context/DashboardProvider/DashboardProvider.js +7 -7
  208. package/dist/context/DashboardProvider/DashboardProvider.js.map +1 -1
  209. package/dist/context/DashboardProvider/common.d.ts +2 -2
  210. package/dist/context/DashboardProvider/common.d.ts.map +1 -1
  211. package/dist/context/DashboardProvider/common.js.map +1 -1
  212. package/dist/context/DashboardProvider/dashboard-provider-api.js +15 -15
  213. package/dist/context/DashboardProvider/dashboard-provider-api.js.map +1 -1
  214. package/dist/context/DashboardProvider/delete-panel-group-slice.js +1 -1
  215. package/dist/context/DashboardProvider/delete-panel-group-slice.js.map +1 -1
  216. package/dist/context/DashboardProvider/delete-panel-slice.js +3 -3
  217. package/dist/context/DashboardProvider/delete-panel-slice.js.map +1 -1
  218. package/dist/context/DashboardProvider/discard-changes-dialog-slice.js.map +1 -1
  219. package/dist/context/DashboardProvider/duplicate-panel-slice.js +1 -1
  220. package/dist/context/DashboardProvider/duplicate-panel-slice.js.map +1 -1
  221. package/dist/context/DashboardProvider/edit-json-dialog-slice.js.map +1 -1
  222. package/dist/context/DashboardProvider/panel-editor-slice.js +4 -6
  223. package/dist/context/DashboardProvider/panel-editor-slice.js.map +1 -1
  224. package/dist/context/DashboardProvider/panel-group-editor-slice.js.map +1 -1
  225. package/dist/context/DashboardProvider/panel-group-slice.d.ts +2 -2
  226. package/dist/context/DashboardProvider/panel-group-slice.d.ts.map +1 -1
  227. package/dist/context/DashboardProvider/panel-group-slice.js +2 -2
  228. package/dist/context/DashboardProvider/panel-group-slice.js.map +1 -1
  229. package/dist/context/DashboardProvider/save-changes-dialog-slice.js.map +1 -1
  230. package/dist/context/DatasourceStoreProvider.d.ts +3 -3
  231. package/dist/context/DatasourceStoreProvider.d.ts.map +1 -1
  232. package/dist/context/DatasourceStoreProvider.js +8 -8
  233. package/dist/context/DatasourceStoreProvider.js.map +1 -1
  234. package/dist/context/TemplateVariableProvider/TemplateVariableProvider.d.ts +6 -6
  235. package/dist/context/TemplateVariableProvider/TemplateVariableProvider.d.ts.map +1 -1
  236. package/dist/context/TemplateVariableProvider/TemplateVariableProvider.js +70 -66
  237. package/dist/context/TemplateVariableProvider/TemplateVariableProvider.js.map +1 -1
  238. package/dist/context/TemplateVariableProvider/hydrationUtils.d.ts.map +1 -1
  239. package/dist/context/TemplateVariableProvider/hydrationUtils.js.map +1 -1
  240. package/dist/context/TemplateVariableProvider/query-params.js.map +1 -1
  241. package/dist/context/TemplateVariableProvider/utils.js.map +1 -1
  242. package/dist/context/useDashboard.js +3 -3
  243. package/dist/context/useDashboard.js.map +1 -1
  244. package/dist/stories/decorators/WithDashboard.js.map +1 -1
  245. package/dist/stories/decorators/WithDatasourceStore.js.map +1 -1
  246. package/dist/stories/decorators/WithTemplateVariables.js.map +1 -1
  247. package/dist/test/dashboard-provider.js.map +1 -1
  248. package/dist/test/datasource-provider.js.map +1 -1
  249. package/dist/test/render.js +1 -1
  250. package/dist/test/render.js.map +1 -1
  251. package/dist/test/setup-tests.js.map +1 -1
  252. package/dist/utils/panelUtils.d.ts +1 -1
  253. package/dist/utils/panelUtils.d.ts.map +1 -1
  254. package/dist/utils/panelUtils.js +2 -2
  255. package/dist/utils/panelUtils.js.map +1 -1
  256. package/dist/utils/time.js +1 -1
  257. package/dist/utils/time.js.map +1 -1
  258. package/dist/validation/panel.d.ts +1 -1
  259. package/dist/validation/panel.d.ts.map +1 -1
  260. package/dist/validation/panel.js.map +1 -1
  261. package/dist/views/ViewDashboard/DashboardApp.d.ts +1 -1
  262. package/dist/views/ViewDashboard/DashboardApp.d.ts.map +1 -1
  263. package/dist/views/ViewDashboard/DashboardApp.js +5 -5
  264. package/dist/views/ViewDashboard/DashboardApp.js.map +1 -1
  265. package/dist/views/ViewDashboard/ViewDashboard.d.ts +1 -2
  266. package/dist/views/ViewDashboard/ViewDashboard.d.ts.map +1 -1
  267. package/dist/views/ViewDashboard/ViewDashboard.js +3 -3
  268. package/dist/views/ViewDashboard/ViewDashboard.js.map +1 -1
  269. package/package.json +6 -6
@@ -109,11 +109,11 @@ export function useTemplateVariableStore() {
109
109
  const store = useTemplateVariableStoreCtx();
110
110
  return useStore(store);
111
111
  }
112
- function PluginProvider({ children , builtinVariables }) {
112
+ function PluginProvider({ children, builtinVariables }) {
113
113
  const originalValues = useTemplateVariableValues();
114
114
  const definitions = useTemplateVariableDefinitions();
115
115
  const externalDefinitions = useTemplateExternalVariableDefinitions();
116
- const { absoluteTimeRange } = useTimeRange();
116
+ const { absoluteTimeRange } = useTimeRange();
117
117
  const values = useMemo(()=>{
118
118
  const contextValues = {};
119
119
  // This will loop through all the current variables values
@@ -142,74 +142,80 @@ function PluginProvider({ children , builtinVariables }) {
142
142
  definitions,
143
143
  externalDefinitions
144
144
  ]);
145
- const allBuiltinVariables = [
146
- {
147
- kind: 'BuiltinVariable',
148
- spec: {
149
- name: '__from',
150
- value: ()=>absoluteTimeRange.start.valueOf().toString(),
151
- source: 'Dashboard',
152
- display: {
145
+ const allBuiltinVariables = useMemo(()=>{
146
+ const result = [
147
+ {
148
+ kind: 'BuiltinVariable',
149
+ spec: {
153
150
  name: '__from',
154
- description: 'Start time of the current time range in unix millisecond epoch',
155
- hidden: true
151
+ value: ()=>absoluteTimeRange.start.valueOf().toString(),
152
+ source: 'Dashboard',
153
+ display: {
154
+ name: '__from',
155
+ description: 'Start time of the current time range in unix millisecond epoch',
156
+ hidden: true
157
+ }
156
158
  }
157
- }
158
- },
159
- {
160
- kind: 'BuiltinVariable',
161
- spec: {
162
- name: '__to',
163
- value: ()=>absoluteTimeRange.end.valueOf().toString(),
164
- source: 'Dashboard',
165
- display: {
159
+ },
160
+ {
161
+ kind: 'BuiltinVariable',
162
+ spec: {
166
163
  name: '__to',
167
- description: 'End time of the current time range in unix millisecond epoch',
168
- hidden: true
164
+ value: ()=>absoluteTimeRange.end.valueOf().toString(),
165
+ source: 'Dashboard',
166
+ display: {
167
+ name: '__to',
168
+ description: 'End time of the current time range in unix millisecond epoch',
169
+ hidden: true
170
+ }
169
171
  }
170
- }
171
- },
172
- {
173
- kind: 'BuiltinVariable',
174
- spec: {
175
- name: '__range',
176
- value: ()=>formatDuration(intervalToPrometheusDuration(absoluteTimeRange)),
177
- source: 'Dashboard',
178
- display: {
172
+ },
173
+ {
174
+ kind: 'BuiltinVariable',
175
+ spec: {
179
176
  name: '__range',
180
- description: 'The range for the current dashboard in human readable format',
181
- hidden: true
177
+ value: ()=>formatDuration(intervalToPrometheusDuration(absoluteTimeRange)),
178
+ source: 'Dashboard',
179
+ display: {
180
+ name: '__range',
181
+ description: 'The range for the current dashboard in human readable format',
182
+ hidden: true
183
+ }
182
184
  }
183
- }
184
- },
185
- {
186
- kind: 'BuiltinVariable',
187
- spec: {
188
- name: '__range_s',
189
- value: ()=>((absoluteTimeRange.end.valueOf() - absoluteTimeRange.start.valueOf()) / 1000).toString(),
190
- source: 'Dashboard',
191
- display: {
185
+ },
186
+ {
187
+ kind: 'BuiltinVariable',
188
+ spec: {
192
189
  name: '__range_s',
193
- description: 'The range for the current dashboard in second',
194
- hidden: true
190
+ value: ()=>((absoluteTimeRange.end.valueOf() - absoluteTimeRange.start.valueOf()) / 1000).toString(),
191
+ source: 'Dashboard',
192
+ display: {
193
+ name: '__range_s',
194
+ description: 'The range for the current dashboard in second',
195
+ hidden: true
196
+ }
195
197
  }
196
- }
197
- },
198
- {
199
- kind: 'BuiltinVariable',
200
- spec: {
201
- name: '__range_ms',
202
- value: ()=>(absoluteTimeRange.end.valueOf() - absoluteTimeRange.start.valueOf()).toString(),
203
- source: 'Dashboard',
204
- display: {
198
+ },
199
+ {
200
+ kind: 'BuiltinVariable',
201
+ spec: {
205
202
  name: '__range_ms',
206
- description: 'The range for the current dashboard in millisecond',
207
- hidden: true
203
+ value: ()=>(absoluteTimeRange.end.valueOf() - absoluteTimeRange.start.valueOf()).toString(),
204
+ source: 'Dashboard',
205
+ display: {
206
+ name: '__range_ms',
207
+ description: 'The range for the current dashboard in millisecond',
208
+ hidden: true
209
+ }
208
210
  }
209
211
  }
210
- }
211
- ];
212
- builtinVariables === null || builtinVariables === void 0 ? void 0 : builtinVariables.forEach((def)=>allBuiltinVariables.push(def));
212
+ ];
213
+ builtinVariables === null || builtinVariables === void 0 ? void 0 : builtinVariables.forEach((def)=>result.push(def));
214
+ return result;
215
+ }, [
216
+ absoluteTimeRange,
217
+ builtinVariables
218
+ ]);
213
219
  return /*#__PURE__*/ _jsx(BuiltinVariableContext.Provider, {
214
220
  value: {
215
221
  variables: allBuiltinVariables
@@ -222,10 +228,9 @@ function PluginProvider({ children , builtinVariables }) {
222
228
  })
223
229
  });
224
230
  }
225
- function createTemplateVariableSrvStore({ initialVariableDefinitions =[] , externalVariableDefinitions =[] , queryParams }) {
231
+ function createTemplateVariableSrvStore({ initialVariableDefinitions = [], externalVariableDefinitions = [], queryParams }) {
226
232
  const initialParams = getInitalValuesFromQueryParameters(queryParams ? queryParams[0] : {});
227
- const store = createStore()(devtools(immer((set, get)=>{
228
- return {
233
+ const store = createStore()(devtools(immer((set, get)=>({
229
234
  variableState: hydrateTemplateVariableStates(initialVariableDefinitions, initialParams, externalVariableDefinitions),
230
235
  variableDefinitions: initialVariableDefinitions,
231
236
  externalVariableDefinitions: externalVariableDefinitions,
@@ -327,11 +332,10 @@ function createTemplateVariableSrvStore({ initialVariableDefinitions =[] , exter
327
332
  getSavedVariablesStatus: ()=>{
328
333
  return checkSavedDefaultVariableStatus(get().variableDefinitions, get().variableState);
329
334
  }
330
- };
331
- })));
335
+ }))));
332
336
  return store;
333
337
  }
334
- export function TemplateVariableProvider({ children , initialVariableDefinitions =[] , externalVariableDefinitions =[] , builtinVariables =[] }) {
338
+ export function TemplateVariableProvider({ children, initialVariableDefinitions = [], externalVariableDefinitions = [], builtinVariables = [] }) {
335
339
  const [store] = useState(createTemplateVariableSrvStore({
336
340
  initialVariableDefinitions,
337
341
  externalVariableDefinitions
@@ -344,7 +348,7 @@ export function TemplateVariableProvider({ children , initialVariableDefinitions
344
348
  })
345
349
  });
346
350
  }
347
- export function TemplateVariableProviderWithQueryParams({ children , initialVariableDefinitions =[] , externalVariableDefinitions =[] , builtinVariables =[] }) {
351
+ export function TemplateVariableProviderWithQueryParams({ children, initialVariableDefinitions = [], externalVariableDefinitions = [], builtinVariables = [] }) {
348
352
  const allVariableDefs = mergeVariableDefinitions(initialVariableDefinitions, externalVariableDefinitions);
349
353
  const queryParams = useVariableQueryParams(allVariableDefs);
350
354
  const [store] = useState(createTemplateVariableSrvStore({
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/context/TemplateVariableProvider/TemplateVariableProvider.tsx"],"sourcesContent":["// Copyright 2023 The Perses Authors\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport { createContext, ReactNode, useContext, useMemo, useState } from 'react';\nimport { createStore, useStore } from 'zustand';\nimport { immer } from 'zustand/middleware/immer';\nimport { devtools } from 'zustand/middleware';\nimport produce from 'immer';\nimport {\n TemplateVariableContext,\n VariableStateMap,\n VariableState,\n VariableStoreStateMap,\n VariableOption,\n BuiltinVariableContext,\n useTimeRange,\n} from '@perses-dev/plugin-system';\nimport {\n DEFAULT_ALL_VALUE as ALL_VALUE,\n VariableName,\n VariableValue,\n VariableDefinition,\n formatDuration,\n intervalToPrometheusDuration,\n BuiltinVariableDefinition,\n} from '@perses-dev/core';\nimport { checkSavedDefaultVariableStatus, findVariableDefinitionByName, mergeVariableDefinitions } from './utils';\nimport { hydrateTemplateVariableStates } from './hydrationUtils';\nimport { getInitalValuesFromQueryParameters, getURLQueryParamName, useVariableQueryParams } from './query-params';\n\ntype TemplateVariableStore = {\n variableDefinitions: VariableDefinition[];\n externalVariableDefinitions: ExternalVariableDefinition[];\n variableState: VariableStoreStateMap;\n setVariableValue: (variableName: VariableName, value: VariableValue, source?: string) => void;\n setVariableOptions: (name: VariableName, options: VariableOption[], source?: string) => void;\n setVariableLoading: (name: VariableName, loading: boolean, source?: string) => void;\n setVariableDefinitions: (definitions: VariableDefinition[]) => void;\n setVariableDefaultValues: () => VariableDefinition[];\n getSavedVariablesStatus: () => { isSavedVariableModified: boolean; modifiedVariableNames: string[] };\n};\n\nconst TemplateVariableStoreContext = createContext<ReturnType<typeof createTemplateVariableSrvStore> | undefined>(\n undefined\n);\nexport function useTemplateVariableStoreCtx() {\n const context = useContext(TemplateVariableStoreContext);\n if (!context) {\n throw new Error('TemplateVariableStoreContext not initialized');\n }\n return context;\n}\n\nexport function useTemplateVariableValues(variableNames?: string[]) {\n const store = useTemplateVariableStoreCtx();\n return useStore(\n store,\n (s) => {\n const vars: VariableStateMap = {};\n\n // Collect values of local variables, from the variable state\n const names = variableNames ?? s.variableDefinitions.map((value) => value.spec.name);\n names.forEach((name) => {\n const varState = s.variableState.get({ name });\n if (!varState || varState.overridden) {\n return;\n }\n vars[name] = varState;\n });\n\n // Collect values of external variables, from the variable state\n s.externalVariableDefinitions.forEach((d) => {\n const source = d.source;\n d.definitions.forEach((value) => {\n const name = value.spec.name;\n const varState = s.variableState.get({ name, source });\n if (!varState || varState.overridden) {\n return;\n }\n vars[name] = varState;\n });\n });\n\n return vars;\n },\n (left, right) => {\n return JSON.stringify(left) === JSON.stringify(right);\n }\n );\n}\n\n/**\n * Get the state and definition of a variable from the Template variables context.\n * @param name name of the variable\n * @param source if given, it searches in the external variables\n */\nexport function useTemplateVariable(name: string, source?: string) {\n const store = useTemplateVariableStoreCtx();\n return useStore(store, (s) => {\n const state = s.variableState.get({ name, source });\n const definitions = source\n ? s.externalVariableDefinitions.find((v) => v.source === source)?.definitions\n : s.variableDefinitions;\n const definition = (definitions || []).find((v) => v.spec.name === name);\n\n return { state, definition };\n });\n}\n\nexport function useTemplateVariableActions() {\n const store = useTemplateVariableStoreCtx();\n return useStore(store, (s) => {\n return {\n setVariableValue: s.setVariableValue,\n setVariableLoading: s.setVariableLoading,\n setVariableOptions: s.setVariableOptions,\n setVariableDefinitions: s.setVariableDefinitions,\n setVariableDefaultValues: s.setVariableDefaultValues,\n getSavedVariablesStatus: s.getSavedVariablesStatus,\n };\n });\n}\n\nexport function useTemplateVariableDefinitions() {\n const store = useTemplateVariableStoreCtx();\n return useStore(store, (s) => s.variableDefinitions);\n}\n\nexport function useTemplateExternalVariableDefinitions() {\n const store = useTemplateVariableStoreCtx();\n return useStore(store, (s) => s.externalVariableDefinitions);\n}\n\nexport function useTemplateVariableStore() {\n const store = useTemplateVariableStoreCtx();\n return useStore(store);\n}\n\ninterface PluginProviderProps {\n children: ReactNode;\n builtinVariables?: BuiltinVariableDefinition[];\n}\n\nfunction PluginProvider({ children, builtinVariables }: PluginProviderProps) {\n const originalValues = useTemplateVariableValues();\n const definitions = useTemplateVariableDefinitions();\n const externalDefinitions = useTemplateExternalVariableDefinitions();\n const { absoluteTimeRange } = useTimeRange();\n\n const values = useMemo(() => {\n const contextValues: VariableStateMap = {};\n\n // This will loop through all the current variables values\n // and update any variables that have ALL_VALUE as their current value\n // to include all options.\n Object.keys(originalValues).forEach((name) => {\n const v = { ...originalValues[name] } as VariableState;\n\n if (v.value === ALL_VALUE) {\n const definition = findVariableDefinitionByName(name, definitions, externalDefinitions);\n // If the variable is a list variable and has a custom all value, then use that value instead\n if (definition?.kind === 'ListVariable' && definition.spec.customAllValue) {\n v.value = definition.spec.customAllValue;\n } else {\n v.value = v.options?.map((o: { value: string }) => o.value) ?? null;\n }\n }\n contextValues[name] = v;\n });\n return contextValues;\n }, [originalValues, definitions, externalDefinitions]);\n\n const allBuiltinVariables: BuiltinVariableDefinition[] = [\n {\n kind: 'BuiltinVariable',\n spec: {\n name: '__from',\n value: () => absoluteTimeRange.start.valueOf().toString(),\n source: 'Dashboard',\n display: {\n name: '__from',\n description: 'Start time of the current time range in unix millisecond epoch',\n hidden: true,\n },\n },\n },\n {\n kind: 'BuiltinVariable',\n spec: {\n name: '__to',\n value: () => absoluteTimeRange.end.valueOf().toString(),\n source: 'Dashboard',\n display: {\n name: '__to',\n description: 'End time of the current time range in unix millisecond epoch',\n hidden: true,\n },\n },\n },\n {\n kind: 'BuiltinVariable',\n spec: {\n name: '__range',\n value: () => formatDuration(intervalToPrometheusDuration(absoluteTimeRange)),\n source: 'Dashboard',\n display: {\n name: '__range',\n description: 'The range for the current dashboard in human readable format',\n hidden: true,\n },\n },\n },\n {\n kind: 'BuiltinVariable',\n spec: {\n name: '__range_s',\n value: () => ((absoluteTimeRange.end.valueOf() - absoluteTimeRange.start.valueOf()) / 1000).toString(),\n source: 'Dashboard',\n display: {\n name: '__range_s',\n description: 'The range for the current dashboard in second',\n hidden: true,\n },\n },\n },\n {\n kind: 'BuiltinVariable',\n spec: {\n name: '__range_ms',\n value: () => (absoluteTimeRange.end.valueOf() - absoluteTimeRange.start.valueOf()).toString(),\n source: 'Dashboard',\n display: {\n name: '__range_ms',\n description: 'The range for the current dashboard in millisecond',\n hidden: true,\n },\n },\n },\n ];\n builtinVariables?.forEach((def) => allBuiltinVariables.push(def));\n\n return (\n <BuiltinVariableContext.Provider value={{ variables: allBuiltinVariables }}>\n <TemplateVariableContext.Provider value={{ state: values }}>{children}</TemplateVariableContext.Provider>\n </BuiltinVariableContext.Provider>\n );\n}\n\ninterface TemplateVariableSrvArgs {\n initialVariableDefinitions?: VariableDefinition[];\n externalVariableDefinitions?: ExternalVariableDefinition[];\n queryParams?: ReturnType<typeof useVariableQueryParams>;\n}\n\nfunction createTemplateVariableSrvStore({\n initialVariableDefinitions = [],\n externalVariableDefinitions = [],\n queryParams,\n}: TemplateVariableSrvArgs) {\n const initialParams = getInitalValuesFromQueryParameters(queryParams ? queryParams[0] : {});\n const store = createStore<TemplateVariableStore>()(\n devtools(\n immer((set, get) => ({\n variableState: hydrateTemplateVariableStates(\n initialVariableDefinitions,\n initialParams,\n externalVariableDefinitions\n ),\n variableDefinitions: initialVariableDefinitions,\n externalVariableDefinitions: externalVariableDefinitions,\n setVariableDefinitions(definitions: VariableDefinition[]) {\n set(\n (state) => {\n state.variableDefinitions = definitions;\n state.variableState = hydrateTemplateVariableStates(\n definitions,\n initialParams,\n externalVariableDefinitions\n );\n },\n false,\n '[Variables] setVariableDefinitions' // Used for action name in Redux devtools\n );\n },\n setVariableOptions(name, options, source?: string) {\n set(\n (state) => {\n const varState = state.variableState.get({ name, source });\n if (!varState) {\n return;\n }\n varState.options = options;\n },\n false,\n '[Variables] setVariableOptions'\n );\n },\n setVariableLoading(name, loading, source?: string) {\n set(\n (state) => {\n const varState = state.variableState.get({ name, source });\n if (!varState) {\n return;\n }\n varState.loading = loading;\n },\n false,\n '[Variables] setVariableLoading'\n );\n },\n setVariableValue: (name, value, source?: string) =>\n set(\n (state) => {\n let val = value;\n const varState = state.variableState.get({ name, source });\n if (!varState) {\n return;\n }\n\n // Make sure there is only one all value\n if (Array.isArray(val) && val.includes(ALL_VALUE)) {\n if (val.at(-1) === ALL_VALUE) {\n val = ALL_VALUE;\n } else {\n val = val.filter((v) => v !== ALL_VALUE);\n }\n }\n if (queryParams) {\n const setQueryParams = queryParams[1];\n setQueryParams({ [getURLQueryParamName(name)]: val });\n }\n varState.value = val;\n },\n false,\n '[Variables] setVariableValue'\n ),\n setVariableDefaultValues: () => {\n const variableDefinitions = get().variableDefinitions;\n const variableState = get().variableState;\n const updatedVariables = produce(variableDefinitions, (draft) => {\n draft.forEach((variable, index) => {\n const name = variable.spec.name;\n if (variable.kind === 'ListVariable') {\n const currentVariable = variableState.get({ name });\n if (currentVariable?.value !== undefined) {\n draft[index] = {\n kind: 'ListVariable',\n spec: produce(variable.spec, (specDraft) => {\n specDraft.defaultValue = currentVariable.value;\n }),\n };\n }\n } else if (variable.kind === 'TextVariable') {\n const currentVariable = variableState.get({ name });\n const currentVariableValue = typeof currentVariable?.value === 'string' ? currentVariable.value : '';\n if (currentVariable?.value !== undefined) {\n draft[index] = {\n kind: 'TextVariable',\n spec: produce(variable.spec, (specDraft) => {\n specDraft.value = currentVariableValue;\n }),\n };\n }\n }\n });\n });\n set(\n (state) => {\n state.variableDefinitions = updatedVariables;\n },\n false,\n '[Variables] setVariableDefaultValues'\n );\n return updatedVariables;\n },\n getSavedVariablesStatus: () => {\n return checkSavedDefaultVariableStatus(get().variableDefinitions, get().variableState);\n },\n }))\n )\n );\n\n return store;\n}\n\nexport type ExternalVariableDefinition = {\n source: string;\n tooltip?: {\n title?: string;\n description?: string;\n };\n editLink?: string;\n definitions: VariableDefinition[];\n};\n\nexport interface TemplateVariableProviderProps {\n children: ReactNode;\n initialVariableDefinitions?: VariableDefinition[];\n /**\n * The external variables allow you to give to the provider some additional variables, not defined in the dashboard and static.\n * It means that you won´t be able to update them from the dashboard itself, but you will see them appear and will be able\n * to modify their runtime value as any other variable.\n * If one of the external variable has the same name as a local one, it will be marked as overridden.\n * You can define one list of variable definition by source and as many source as you want.\n * The order of the sources is important as first one will take precedence on the following ones, in case they have same names.\n */\n externalVariableDefinitions?: ExternalVariableDefinition[];\n builtinVariables?: BuiltinVariableDefinition[];\n}\n\nexport function TemplateVariableProvider({\n children,\n initialVariableDefinitions = [],\n externalVariableDefinitions = [],\n builtinVariables = [],\n}: TemplateVariableProviderProps) {\n const [store] = useState(createTemplateVariableSrvStore({ initialVariableDefinitions, externalVariableDefinitions }));\n\n return (\n <TemplateVariableStoreContext.Provider value={store}>\n <PluginProvider builtinVariables={builtinVariables}>{children}</PluginProvider>\n </TemplateVariableStoreContext.Provider>\n );\n}\n\nexport function TemplateVariableProviderWithQueryParams({\n children,\n initialVariableDefinitions = [],\n externalVariableDefinitions = [],\n builtinVariables = [],\n}: TemplateVariableProviderProps) {\n const allVariableDefs = mergeVariableDefinitions(initialVariableDefinitions, externalVariableDefinitions);\n const queryParams = useVariableQueryParams(allVariableDefs);\n const [store] = useState(\n createTemplateVariableSrvStore({ initialVariableDefinitions, externalVariableDefinitions, queryParams })\n );\n\n return (\n <TemplateVariableStoreContext.Provider value={store}>\n <PluginProvider builtinVariables={builtinVariables}>{children}</PluginProvider>\n </TemplateVariableStoreContext.Provider>\n );\n}\n"],"names":["createContext","useContext","useMemo","useState","createStore","useStore","immer","devtools","produce","TemplateVariableContext","BuiltinVariableContext","useTimeRange","DEFAULT_ALL_VALUE","ALL_VALUE","formatDuration","intervalToPrometheusDuration","checkSavedDefaultVariableStatus","findVariableDefinitionByName","mergeVariableDefinitions","hydrateTemplateVariableStates","getInitalValuesFromQueryParameters","getURLQueryParamName","useVariableQueryParams","TemplateVariableStoreContext","undefined","useTemplateVariableStoreCtx","context","Error","useTemplateVariableValues","variableNames","store","s","vars","names","variableDefinitions","map","value","spec","name","forEach","varState","variableState","get","overridden","externalVariableDefinitions","d","source","definitions","left","right","JSON","stringify","useTemplateVariable","state","find","v","definition","useTemplateVariableActions","setVariableValue","setVariableLoading","setVariableOptions","setVariableDefinitions","setVariableDefaultValues","getSavedVariablesStatus","useTemplateVariableDefinitions","useTemplateExternalVariableDefinitions","useTemplateVariableStore","PluginProvider","children","builtinVariables","originalValues","externalDefinitions","absoluteTimeRange","values","contextValues","Object","keys","kind","customAllValue","options","o","allBuiltinVariables","start","valueOf","toString","display","description","hidden","end","def","push","Provider","variables","createTemplateVariableSrvStore","initialVariableDefinitions","queryParams","initialParams","set","loading","val","Array","isArray","includes","at","filter","setQueryParams","updatedVariables","draft","variable","index","currentVariable","specDraft","defaultValue","currentVariableValue","TemplateVariableProvider","TemplateVariableProviderWithQueryParams","allVariableDefs"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/context/TemplateVariableProvider/TemplateVariableProvider.tsx"],"sourcesContent":["// Copyright 2023 The Perses Authors\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport { createContext, ReactNode, useContext, useMemo, useState } from 'react';\nimport { createStore, useStore } from 'zustand';\nimport { immer } from 'zustand/middleware/immer';\nimport { devtools } from 'zustand/middleware';\nimport produce from 'immer';\nimport {\n TemplateVariableContext,\n VariableStateMap,\n VariableState,\n VariableStoreStateMap,\n VariableOption,\n BuiltinVariableContext,\n useTimeRange,\n} from '@perses-dev/plugin-system';\nimport {\n DEFAULT_ALL_VALUE as ALL_VALUE,\n VariableName,\n VariableValue,\n VariableDefinition,\n formatDuration,\n intervalToPrometheusDuration,\n BuiltinVariableDefinition,\n} from '@perses-dev/core';\nimport { checkSavedDefaultVariableStatus, findVariableDefinitionByName, mergeVariableDefinitions } from './utils';\nimport { hydrateTemplateVariableStates } from './hydrationUtils';\nimport { getInitalValuesFromQueryParameters, getURLQueryParamName, useVariableQueryParams } from './query-params';\n\ntype TemplateVariableStore = {\n variableDefinitions: VariableDefinition[];\n externalVariableDefinitions: ExternalVariableDefinition[];\n variableState: VariableStoreStateMap;\n setVariableValue: (variableName: VariableName, value: VariableValue, source?: string) => void;\n setVariableOptions: (name: VariableName, options: VariableOption[], source?: string) => void;\n setVariableLoading: (name: VariableName, loading: boolean, source?: string) => void;\n setVariableDefinitions: (definitions: VariableDefinition[]) => void;\n setVariableDefaultValues: () => VariableDefinition[];\n getSavedVariablesStatus: () => { isSavedVariableModified: boolean; modifiedVariableNames: string[] };\n};\n\nconst TemplateVariableStoreContext = createContext<ReturnType<typeof createTemplateVariableSrvStore> | undefined>(\n undefined\n);\nexport function useTemplateVariableStoreCtx() {\n const context = useContext(TemplateVariableStoreContext);\n if (!context) {\n throw new Error('TemplateVariableStoreContext not initialized');\n }\n return context;\n}\n\nexport function useTemplateVariableValues(variableNames?: string[]) {\n const store = useTemplateVariableStoreCtx();\n return useStore(\n store,\n (s) => {\n const vars: VariableStateMap = {};\n\n // Collect values of local variables, from the variable state\n const names = variableNames ?? s.variableDefinitions.map((value) => value.spec.name);\n names.forEach((name) => {\n const varState = s.variableState.get({ name });\n if (!varState || varState.overridden) {\n return;\n }\n vars[name] = varState;\n });\n\n // Collect values of external variables, from the variable state\n s.externalVariableDefinitions.forEach((d) => {\n const source = d.source;\n d.definitions.forEach((value) => {\n const name = value.spec.name;\n const varState = s.variableState.get({ name, source });\n if (!varState || varState.overridden) {\n return;\n }\n vars[name] = varState;\n });\n });\n\n return vars;\n },\n (left, right) => {\n return JSON.stringify(left) === JSON.stringify(right);\n }\n );\n}\n\n/**\n * Get the state and definition of a variable from the Template variables context.\n * @param name name of the variable\n * @param source if given, it searches in the external variables\n */\nexport function useTemplateVariable(name: string, source?: string) {\n const store = useTemplateVariableStoreCtx();\n return useStore(store, (s) => {\n const state = s.variableState.get({ name, source });\n const definitions = source\n ? s.externalVariableDefinitions.find((v) => v.source === source)?.definitions\n : s.variableDefinitions;\n const definition = (definitions || []).find((v) => v.spec.name === name);\n\n return { state, definition };\n });\n}\n\nexport function useTemplateVariableActions() {\n const store = useTemplateVariableStoreCtx();\n return useStore(store, (s) => {\n return {\n setVariableValue: s.setVariableValue,\n setVariableLoading: s.setVariableLoading,\n setVariableOptions: s.setVariableOptions,\n setVariableDefinitions: s.setVariableDefinitions,\n setVariableDefaultValues: s.setVariableDefaultValues,\n getSavedVariablesStatus: s.getSavedVariablesStatus,\n };\n });\n}\n\nexport function useTemplateVariableDefinitions() {\n const store = useTemplateVariableStoreCtx();\n return useStore(store, (s) => s.variableDefinitions);\n}\n\nexport function useTemplateExternalVariableDefinitions() {\n const store = useTemplateVariableStoreCtx();\n return useStore(store, (s) => s.externalVariableDefinitions);\n}\n\nexport function useTemplateVariableStore() {\n const store = useTemplateVariableStoreCtx();\n return useStore(store);\n}\n\ninterface PluginProviderProps {\n children: ReactNode;\n builtinVariables?: BuiltinVariableDefinition[];\n}\n\nfunction PluginProvider({ children, builtinVariables }: PluginProviderProps) {\n const originalValues = useTemplateVariableValues();\n const definitions = useTemplateVariableDefinitions();\n const externalDefinitions = useTemplateExternalVariableDefinitions();\n const { absoluteTimeRange } = useTimeRange();\n\n const values = useMemo(() => {\n const contextValues: VariableStateMap = {};\n\n // This will loop through all the current variables values\n // and update any variables that have ALL_VALUE as their current value\n // to include all options.\n Object.keys(originalValues).forEach((name) => {\n const v = { ...originalValues[name] } as VariableState;\n\n if (v.value === ALL_VALUE) {\n const definition = findVariableDefinitionByName(name, definitions, externalDefinitions);\n // If the variable is a list variable and has a custom all value, then use that value instead\n if (definition?.kind === 'ListVariable' && definition.spec.customAllValue) {\n v.value = definition.spec.customAllValue;\n } else {\n v.value = v.options?.map((o: { value: string }) => o.value) ?? null;\n }\n }\n contextValues[name] = v;\n });\n return contextValues;\n }, [originalValues, definitions, externalDefinitions]);\n\n const allBuiltinVariables: BuiltinVariableDefinition[] = useMemo(() => {\n const result: BuiltinVariableDefinition[] = [\n {\n kind: 'BuiltinVariable',\n spec: {\n name: '__from',\n value: () => absoluteTimeRange.start.valueOf().toString(),\n source: 'Dashboard',\n display: {\n name: '__from',\n description: 'Start time of the current time range in unix millisecond epoch',\n hidden: true,\n },\n },\n },\n {\n kind: 'BuiltinVariable',\n spec: {\n name: '__to',\n value: () => absoluteTimeRange.end.valueOf().toString(),\n source: 'Dashboard',\n display: {\n name: '__to',\n description: 'End time of the current time range in unix millisecond epoch',\n hidden: true,\n },\n },\n },\n {\n kind: 'BuiltinVariable',\n spec: {\n name: '__range',\n value: () => formatDuration(intervalToPrometheusDuration(absoluteTimeRange)),\n source: 'Dashboard',\n display: {\n name: '__range',\n description: 'The range for the current dashboard in human readable format',\n hidden: true,\n },\n },\n },\n {\n kind: 'BuiltinVariable',\n spec: {\n name: '__range_s',\n value: () => ((absoluteTimeRange.end.valueOf() - absoluteTimeRange.start.valueOf()) / 1000).toString(),\n source: 'Dashboard',\n display: {\n name: '__range_s',\n description: 'The range for the current dashboard in second',\n hidden: true,\n },\n },\n },\n {\n kind: 'BuiltinVariable',\n spec: {\n name: '__range_ms',\n value: () => (absoluteTimeRange.end.valueOf() - absoluteTimeRange.start.valueOf()).toString(),\n source: 'Dashboard',\n display: {\n name: '__range_ms',\n description: 'The range for the current dashboard in millisecond',\n hidden: true,\n },\n },\n },\n ];\n builtinVariables?.forEach((def) => result.push(def));\n return result;\n }, [absoluteTimeRange, builtinVariables]);\n\n return (\n <BuiltinVariableContext.Provider value={{ variables: allBuiltinVariables }}>\n <TemplateVariableContext.Provider value={{ state: values }}>{children}</TemplateVariableContext.Provider>\n </BuiltinVariableContext.Provider>\n );\n}\n\ninterface TemplateVariableSrvArgs {\n initialVariableDefinitions?: VariableDefinition[];\n externalVariableDefinitions?: ExternalVariableDefinition[];\n queryParams?: ReturnType<typeof useVariableQueryParams>;\n}\n\nfunction createTemplateVariableSrvStore({\n initialVariableDefinitions = [],\n externalVariableDefinitions = [],\n queryParams,\n}: TemplateVariableSrvArgs) {\n const initialParams = getInitalValuesFromQueryParameters(queryParams ? queryParams[0] : {});\n const store = createStore<TemplateVariableStore>()(\n devtools(\n immer((set, get) => ({\n variableState: hydrateTemplateVariableStates(\n initialVariableDefinitions,\n initialParams,\n externalVariableDefinitions\n ),\n variableDefinitions: initialVariableDefinitions,\n externalVariableDefinitions: externalVariableDefinitions,\n setVariableDefinitions(definitions: VariableDefinition[]) {\n set(\n (state) => {\n state.variableDefinitions = definitions;\n state.variableState = hydrateTemplateVariableStates(\n definitions,\n initialParams,\n externalVariableDefinitions\n );\n },\n false,\n '[Variables] setVariableDefinitions' // Used for action name in Redux devtools\n );\n },\n setVariableOptions(name, options, source?: string) {\n set(\n (state) => {\n const varState = state.variableState.get({ name, source });\n if (!varState) {\n return;\n }\n varState.options = options;\n },\n false,\n '[Variables] setVariableOptions'\n );\n },\n setVariableLoading(name, loading, source?: string) {\n set(\n (state) => {\n const varState = state.variableState.get({ name, source });\n if (!varState) {\n return;\n }\n varState.loading = loading;\n },\n false,\n '[Variables] setVariableLoading'\n );\n },\n setVariableValue: (name, value, source?: string) =>\n set(\n (state) => {\n let val = value;\n const varState = state.variableState.get({ name, source });\n if (!varState) {\n return;\n }\n\n // Make sure there is only one all value\n if (Array.isArray(val) && val.includes(ALL_VALUE)) {\n if (val.at(-1) === ALL_VALUE) {\n val = ALL_VALUE;\n } else {\n val = val.filter((v) => v !== ALL_VALUE);\n }\n }\n if (queryParams) {\n const setQueryParams = queryParams[1];\n setQueryParams({ [getURLQueryParamName(name)]: val });\n }\n varState.value = val;\n },\n false,\n '[Variables] setVariableValue'\n ),\n setVariableDefaultValues: () => {\n const variableDefinitions = get().variableDefinitions;\n const variableState = get().variableState;\n const updatedVariables = produce(variableDefinitions, (draft) => {\n draft.forEach((variable, index) => {\n const name = variable.spec.name;\n if (variable.kind === 'ListVariable') {\n const currentVariable = variableState.get({ name });\n if (currentVariable?.value !== undefined) {\n draft[index] = {\n kind: 'ListVariable',\n spec: produce(variable.spec, (specDraft) => {\n specDraft.defaultValue = currentVariable.value;\n }),\n };\n }\n } else if (variable.kind === 'TextVariable') {\n const currentVariable = variableState.get({ name });\n const currentVariableValue = typeof currentVariable?.value === 'string' ? currentVariable.value : '';\n if (currentVariable?.value !== undefined) {\n draft[index] = {\n kind: 'TextVariable',\n spec: produce(variable.spec, (specDraft) => {\n specDraft.value = currentVariableValue;\n }),\n };\n }\n }\n });\n });\n set(\n (state) => {\n state.variableDefinitions = updatedVariables;\n },\n false,\n '[Variables] setVariableDefaultValues'\n );\n return updatedVariables;\n },\n getSavedVariablesStatus: () => {\n return checkSavedDefaultVariableStatus(get().variableDefinitions, get().variableState);\n },\n }))\n )\n );\n\n return store;\n}\n\nexport type ExternalVariableDefinition = {\n source: string;\n tooltip?: {\n title?: string;\n description?: string;\n };\n editLink?: string;\n definitions: VariableDefinition[];\n};\n\nexport interface TemplateVariableProviderProps {\n children: ReactNode;\n initialVariableDefinitions?: VariableDefinition[];\n /**\n * The external variables allow you to give to the provider some additional variables, not defined in the dashboard and static.\n * It means that you won´t be able to update them from the dashboard itself, but you will see them appear and will be able\n * to modify their runtime value as any other variable.\n * If one of the external variable has the same name as a local one, it will be marked as overridden.\n * You can define one list of variable definition by source and as many source as you want.\n * The order of the sources is important as first one will take precedence on the following ones, in case they have same names.\n */\n externalVariableDefinitions?: ExternalVariableDefinition[];\n builtinVariables?: BuiltinVariableDefinition[];\n}\n\nexport function TemplateVariableProvider({\n children,\n initialVariableDefinitions = [],\n externalVariableDefinitions = [],\n builtinVariables = [],\n}: TemplateVariableProviderProps) {\n const [store] = useState(createTemplateVariableSrvStore({ initialVariableDefinitions, externalVariableDefinitions }));\n\n return (\n <TemplateVariableStoreContext.Provider value={store}>\n <PluginProvider builtinVariables={builtinVariables}>{children}</PluginProvider>\n </TemplateVariableStoreContext.Provider>\n );\n}\n\nexport function TemplateVariableProviderWithQueryParams({\n children,\n initialVariableDefinitions = [],\n externalVariableDefinitions = [],\n builtinVariables = [],\n}: TemplateVariableProviderProps) {\n const allVariableDefs = mergeVariableDefinitions(initialVariableDefinitions, externalVariableDefinitions);\n const queryParams = useVariableQueryParams(allVariableDefs);\n const [store] = useState(\n createTemplateVariableSrvStore({ initialVariableDefinitions, externalVariableDefinitions, queryParams })\n );\n\n return (\n <TemplateVariableStoreContext.Provider value={store}>\n <PluginProvider builtinVariables={builtinVariables}>{children}</PluginProvider>\n </TemplateVariableStoreContext.Provider>\n );\n}\n"],"names":["createContext","useContext","useMemo","useState","createStore","useStore","immer","devtools","produce","TemplateVariableContext","BuiltinVariableContext","useTimeRange","DEFAULT_ALL_VALUE","ALL_VALUE","formatDuration","intervalToPrometheusDuration","checkSavedDefaultVariableStatus","findVariableDefinitionByName","mergeVariableDefinitions","hydrateTemplateVariableStates","getInitalValuesFromQueryParameters","getURLQueryParamName","useVariableQueryParams","TemplateVariableStoreContext","undefined","useTemplateVariableStoreCtx","context","Error","useTemplateVariableValues","variableNames","store","s","vars","names","variableDefinitions","map","value","spec","name","forEach","varState","variableState","get","overridden","externalVariableDefinitions","d","source","definitions","left","right","JSON","stringify","useTemplateVariable","state","find","v","definition","useTemplateVariableActions","setVariableValue","setVariableLoading","setVariableOptions","setVariableDefinitions","setVariableDefaultValues","getSavedVariablesStatus","useTemplateVariableDefinitions","useTemplateExternalVariableDefinitions","useTemplateVariableStore","PluginProvider","children","builtinVariables","originalValues","externalDefinitions","absoluteTimeRange","values","contextValues","Object","keys","kind","customAllValue","options","o","allBuiltinVariables","result","start","valueOf","toString","display","description","hidden","end","def","push","Provider","variables","createTemplateVariableSrvStore","initialVariableDefinitions","queryParams","initialParams","set","loading","val","Array","isArray","includes","at","filter","setQueryParams","updatedVariables","draft","variable","index","currentVariable","specDraft","defaultValue","currentVariableValue","TemplateVariableProvider","TemplateVariableProviderWithQueryParams","allVariableDefs"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"hydrationUtils.d.ts","sourceRoot":"","sources":["../../../src/context/TemplateVariableProvider/hydrationUtils.ts"],"names":[],"mappings":"AAaA,OAAO,EAAqB,aAAa,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACxF,OAAO,EAAE,qBAAqB,EAAiB,MAAM,2BAA2B,CAAC;AACjF,OAAO,EAAE,0BAA0B,EAAE,MAAM,wBAAwB,CAAC;AAyCpE;;;;;GAKG;AACH,wBAAgB,6BAA6B,CAC3C,gBAAgB,EAAE,kBAAkB,EAAE,EACtC,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,EAC5C,mBAAmB,GAAE,0BAA0B,EAAO,GACrD,qBAAqB,CA8DvB"}
1
+ {"version":3,"file":"hydrationUtils.d.ts","sourceRoot":"","sources":["../../../src/context/TemplateVariableProvider/hydrationUtils.ts"],"names":[],"mappings":"AAaA,OAAO,EAAqB,aAAa,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACxF,OAAO,EAAE,qBAAqB,EAAiB,MAAM,2BAA2B,CAAC;AACjF,OAAO,EAAE,0BAA0B,EAAE,MAAM,wBAAwB,CAAC;AAyCpE;;;;;GAKG;AACH,wBAAgB,6BAA6B,CAC3C,gBAAgB,EAAE,kBAAkB,EAAE,EACtC,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,EAC5C,mBAAmB,GAAE,0BAA0B,EAAO,GACrD,qBAAqB,CAoEvB"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/context/TemplateVariableProvider/hydrationUtils.ts"],"sourcesContent":["// Copyright 2023 The Perses Authors\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport { DEFAULT_ALL_VALUE, VariableValue, VariableDefinition } from '@perses-dev/core';\nimport { VariableStoreStateMap, VariableState } from '@perses-dev/plugin-system';\nimport { ExternalVariableDefinition } from '@perses-dev/dashboards';\n\n// TODO: move to TemplateVariableProvider/utils.ts\nfunction hydrateTemplateVariableState(variable: VariableDefinition, initialValue?: VariableValue): VariableState {\n const varState: VariableState = {\n value: null,\n loading: false,\n overriding: false,\n overridden: false,\n };\n switch (variable.kind) {\n case 'TextVariable':\n varState.value = initialValue ?? variable.spec.value;\n break;\n case 'ListVariable':\n varState.options = [];\n varState.value = initialValue ?? variable.spec.defaultValue ?? null;\n // TODO: smarter fallbacks for defaultValue when allowAllValue is true\n if (varState.options.length > 0 && !varState.value) {\n const firstOptionValue = varState.options[0]?.value ?? null;\n if (firstOptionValue !== null) {\n varState.value = variable.spec.allowMultiple ? [firstOptionValue] : firstOptionValue;\n }\n }\n\n // \"all\" variable handling assumes the value is not in an array. This is\n // handled properly during internal variable interactions, but it is possible\n // to end up in a buggy state if the variables are initialized with an \"all\"\n // value inside an array. When hydrating variables, normalize this to minimize\n // bugs.\n if (Array.isArray(varState.value) && varState.value.length === 1 && varState.value[0] === DEFAULT_ALL_VALUE) {\n varState.value = DEFAULT_ALL_VALUE;\n }\n\n break;\n default:\n break;\n }\n return varState;\n}\n\n/**\n * Build the local variable states according to the given definitions\n * @param localDefinitions local variable definitions. Dynamic part.\n * @param externalDefinitions external variables definitions. Static part.\n * @param initialValues values coming from query parameters\n */\nexport function hydrateTemplateVariableStates(\n localDefinitions: VariableDefinition[],\n initialValues: Record<string, VariableValue>,\n externalDefinitions: ExternalVariableDefinition[] = []\n): VariableStoreStateMap {\n const state: VariableStoreStateMap = new VariableStoreStateMap();\n\n // Collect the names used by local definitions\n let overridingNames: Record<string, boolean> = {};\n localDefinitions.forEach((v) => {\n overridingNames[v.spec.name] = true;\n }, {} as Record<string, boolean>);\n\n // Then populate the external variables state,\n // taking care of well flagging each name as used, so the overridden state can be filled accordingly.\n const overriddenNames: Record<string, boolean> = {};\n externalDefinitions.forEach((externalDef) => {\n const source = externalDef.source;\n externalDef.definitions.forEach((v) => {\n const name = v.spec.name;\n const param = initialValues[name];\n const initialValue = param ? param : null;\n state.set(\n { source, name },\n {\n ...hydrateTemplateVariableState(v, initialValue),\n overridden: !!overridingNames[name],\n }\n );\n\n overridingNames[name] = true;\n overriddenNames[v.spec.name] = true;\n });\n }, {} as Record<string, boolean>);\n\n // Then populate the local variables state,\n // taking care the overriding state is filled according to the names used in external variables.\n localDefinitions.forEach((v) => {\n const name = v.spec.name;\n const param = initialValues[name];\n const initialValue = param ? param : null;\n state.set(\n { name },\n {\n ...hydrateTemplateVariableState(v, initialValue),\n overriding: !!overriddenNames[name],\n }\n );\n });\n\n overridingNames = {};\n externalDefinitions\n .slice()\n .reverse()\n .forEach((externalDef) => {\n const source = externalDef.source;\n externalDef.definitions.forEach((v) => {\n const name = v.spec.name;\n const value = state.get({ source, name });\n if (value) {\n value.overriding = !!overridingNames[name];\n }\n overridingNames[name] = true;\n });\n });\n return state;\n}\n"],"names":["DEFAULT_ALL_VALUE","VariableStoreStateMap","hydrateTemplateVariableState","variable","initialValue","varState","value","loading","overriding","overridden","kind","spec","options","defaultValue","length","firstOptionValue","allowMultiple","Array","isArray","hydrateTemplateVariableStates","localDefinitions","initialValues","externalDefinitions","state","overridingNames","forEach","v","name","overriddenNames","externalDef","source","definitions","param","set","slice","reverse","get"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/context/TemplateVariableProvider/hydrationUtils.ts"],"sourcesContent":["// Copyright 2023 The Perses Authors\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport { DEFAULT_ALL_VALUE, VariableValue, VariableDefinition } from '@perses-dev/core';\nimport { VariableStoreStateMap, VariableState } from '@perses-dev/plugin-system';\nimport { ExternalVariableDefinition } from '@perses-dev/dashboards';\n\n// TODO: move to TemplateVariableProvider/utils.ts\nfunction hydrateTemplateVariableState(variable: VariableDefinition, initialValue?: VariableValue): VariableState {\n const varState: VariableState = {\n value: null,\n loading: false,\n overriding: false,\n overridden: false,\n };\n switch (variable.kind) {\n case 'TextVariable':\n varState.value = initialValue ?? variable.spec.value;\n break;\n case 'ListVariable':\n varState.options = [];\n varState.value = initialValue ?? variable.spec.defaultValue ?? null;\n // TODO: smarter fallbacks for defaultValue when allowAllValue is true\n if (varState.options.length > 0 && !varState.value) {\n const firstOptionValue = varState.options[0]?.value ?? null;\n if (firstOptionValue !== null) {\n varState.value = variable.spec.allowMultiple ? [firstOptionValue] : firstOptionValue;\n }\n }\n\n // \"all\" variable handling assumes the value is not in an array. This is\n // handled properly during internal variable interactions, but it is possible\n // to end up in a buggy state if the variables are initialized with an \"all\"\n // value inside an array. When hydrating variables, normalize this to minimize\n // bugs.\n if (Array.isArray(varState.value) && varState.value.length === 1 && varState.value[0] === DEFAULT_ALL_VALUE) {\n varState.value = DEFAULT_ALL_VALUE;\n }\n\n break;\n default:\n break;\n }\n return varState;\n}\n\n/**\n * Build the local variable states according to the given definitions\n * @param localDefinitions local variable definitions. Dynamic part.\n * @param externalDefinitions external variables definitions. Static part.\n * @param initialValues values coming from query parameters\n */\nexport function hydrateTemplateVariableStates(\n localDefinitions: VariableDefinition[],\n initialValues: Record<string, VariableValue>,\n externalDefinitions: ExternalVariableDefinition[] = []\n): VariableStoreStateMap {\n const state: VariableStoreStateMap = new VariableStoreStateMap();\n\n // Collect the names used by local definitions\n let overridingNames: Record<string, boolean> = {};\n localDefinitions.forEach(\n (v) => {\n overridingNames[v.spec.name] = true;\n },\n {} as Record<string, boolean>\n );\n\n // Then populate the external variables state,\n // taking care of well flagging each name as used, so the overridden state can be filled accordingly.\n const overriddenNames: Record<string, boolean> = {};\n externalDefinitions.forEach(\n (externalDef) => {\n const source = externalDef.source;\n externalDef.definitions.forEach((v) => {\n const name = v.spec.name;\n const param = initialValues[name];\n const initialValue = param ? param : null;\n state.set(\n { source, name },\n {\n ...hydrateTemplateVariableState(v, initialValue),\n overridden: !!overridingNames[name],\n }\n );\n\n overridingNames[name] = true;\n overriddenNames[v.spec.name] = true;\n });\n },\n {} as Record<string, boolean>\n );\n\n // Then populate the local variables state,\n // taking care the overriding state is filled according to the names used in external variables.\n localDefinitions.forEach((v) => {\n const name = v.spec.name;\n const param = initialValues[name];\n const initialValue = param ? param : null;\n state.set(\n { name },\n {\n ...hydrateTemplateVariableState(v, initialValue),\n overriding: !!overriddenNames[name],\n }\n );\n });\n\n overridingNames = {};\n externalDefinitions\n .slice()\n .reverse()\n .forEach((externalDef) => {\n const source = externalDef.source;\n externalDef.definitions.forEach((v) => {\n const name = v.spec.name;\n const value = state.get({ source, name });\n if (value) {\n value.overriding = !!overridingNames[name];\n }\n overridingNames[name] = true;\n });\n });\n return state;\n}\n"],"names":["DEFAULT_ALL_VALUE","VariableStoreStateMap","hydrateTemplateVariableState","variable","initialValue","varState","value","loading","overriding","overridden","kind","spec","options","defaultValue","length","firstOptionValue","allowMultiple","Array","isArray","hydrateTemplateVariableStates","localDefinitions","initialValues","externalDefinitions","state","overridingNames","forEach","v","name","overriddenNames","externalDef","source","definitions","param","set","slice","reverse","get"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/context/TemplateVariableProvider/query-params.ts"],"sourcesContent":["// Copyright 2023 The Perses Authors\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport { VariableValue, VariableDefinition } from '@perses-dev/core';\nimport { QueryParamConfig, useQueryParams } from 'use-query-params';\n\nconst variableQueryParameterPrefix = 'var-';\n\nexport function getURLQueryParamName(name: string) {\n return `${variableQueryParameterPrefix}${name}`;\n}\n\nexport function encodeVariableValue(value: VariableValue) {\n if (Array.isArray(value)) {\n return value.join(',');\n }\n return value;\n}\n\nexport function decodeVariableValue(value: string): VariableValue {\n if (!value) {\n return null;\n }\n const values = value.split(',');\n if (values.length === 1) {\n return values[0] as string;\n }\n return values;\n}\n\nconst VariableValueParam: QueryParamConfig<VariableValue> = {\n encode: encodeVariableValue,\n decode: (v) => {\n if (typeof v === 'string') {\n return decodeVariableValue(v);\n }\n return '';\n },\n};\n\nexport function useVariableQueryParams(defs: VariableDefinition[]) {\n const config: Record<string, typeof VariableValueParam> = {};\n defs.forEach((def) => {\n const name = getURLQueryParamName(def.spec.name);\n config[name] = VariableValueParam;\n });\n return useQueryParams(config, { updateType: 'replaceIn' });\n}\n\nexport function getInitalValuesFromQueryParameters(\n queryParamValues: Record<string, VariableValue>\n): Record<string, VariableValue> {\n const values: Record<string, VariableValue> = {};\n Object.keys(queryParamValues).forEach((key) => {\n const value = queryParamValues[key];\n if (!value) {\n return;\n }\n const name = key.replace(variableQueryParameterPrefix, '');\n values[name] = value;\n });\n return values;\n}\n"],"names":["useQueryParams","variableQueryParameterPrefix","getURLQueryParamName","name","encodeVariableValue","value","Array","isArray","join","decodeVariableValue","values","split","length","VariableValueParam","encode","decode","v","useVariableQueryParams","defs","config","forEach","def","spec","updateType","getInitalValuesFromQueryParameters","queryParamValues","Object","keys","key","replace"],"mappings":"AAAA,oCAAoC;AACpC,kEAAkE;AAClE,mEAAmE;AACnE,0CAA0C;AAC1C,EAAE;AACF,6CAA6C;AAC7C,EAAE;AACF,sEAAsE;AACtE,oEAAoE;AACpE,2EAA2E;AAC3E,sEAAsE;AACtE,iCAAiC;AAGjC,SAA2BA,cAAc,QAAQ,mBAAmB;AAEpE,MAAMC,+BAA+B;AAErC,OAAO,SAASC,qBAAqBC,IAAY;IAC/C,OAAO,CAAC,EAAEF,6BAA6B,EAAEE,KAAK,CAAC;AACjD;AAEA,OAAO,SAASC,oBAAoBC,KAAoB;IACtD,IAAIC,MAAMC,QAAQF,QAAQ;QACxB,OAAOA,MAAMG,KAAK;IACpB;IACA,OAAOH;AACT;AAEA,OAAO,SAASI,oBAAoBJ,KAAa;IAC/C,IAAI,CAACA,OAAO;QACV,OAAO;IACT;IACA,MAAMK,SAASL,MAAMM,MAAM;IAC3B,IAAID,OAAOE,WAAW,GAAG;QACvB,OAAOF,MAAM,CAAC,EAAE;IAClB;IACA,OAAOA;AACT;AAEA,MAAMG,qBAAsD;IAC1DC,QAAQV;IACRW,QAAQ,CAACC;QACP,IAAI,OAAOA,MAAM,UAAU;YACzB,OAAOP,oBAAoBO;QAC7B;QACA,OAAO;IACT;AACF;AAEA,OAAO,SAASC,uBAAuBC,IAA0B;IAC/D,MAAMC,SAAoD,CAAC;IAC3DD,KAAKE,QAAQ,CAACC;QACZ,MAAMlB,OAAOD,qBAAqBmB,IAAIC,KAAKnB;QAC3CgB,MAAM,CAAChB,KAAK,GAAGU;IACjB;IACA,OAAOb,eAAemB,QAAQ;QAAEI,YAAY;IAAY;AAC1D;AAEA,OAAO,SAASC,mCACdC,gBAA+C;IAE/C,MAAMf,SAAwC,CAAC;IAC/CgB,OAAOC,KAAKF,kBAAkBL,QAAQ,CAACQ;QACrC,MAAMvB,QAAQoB,gBAAgB,CAACG,IAAI;QACnC,IAAI,CAACvB,OAAO;YACV;QACF;QACA,MAAMF,OAAOyB,IAAIC,QAAQ5B,8BAA8B;QACvDS,MAAM,CAACP,KAAK,GAAGE;IACjB;IACA,OAAOK;AACT"}
1
+ {"version":3,"sources":["../../../src/context/TemplateVariableProvider/query-params.ts"],"sourcesContent":["// Copyright 2023 The Perses Authors\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport { VariableValue, VariableDefinition } from '@perses-dev/core';\nimport { QueryParamConfig, useQueryParams } from 'use-query-params';\n\nconst variableQueryParameterPrefix = 'var-';\n\nexport function getURLQueryParamName(name: string) {\n return `${variableQueryParameterPrefix}${name}`;\n}\n\nexport function encodeVariableValue(value: VariableValue) {\n if (Array.isArray(value)) {\n return value.join(',');\n }\n return value;\n}\n\nexport function decodeVariableValue(value: string): VariableValue {\n if (!value) {\n return null;\n }\n const values = value.split(',');\n if (values.length === 1) {\n return values[0] as string;\n }\n return values;\n}\n\nconst VariableValueParam: QueryParamConfig<VariableValue> = {\n encode: encodeVariableValue,\n decode: (v) => {\n if (typeof v === 'string') {\n return decodeVariableValue(v);\n }\n return '';\n },\n};\n\nexport function useVariableQueryParams(defs: VariableDefinition[]) {\n const config: Record<string, typeof VariableValueParam> = {};\n defs.forEach((def) => {\n const name = getURLQueryParamName(def.spec.name);\n config[name] = VariableValueParam;\n });\n return useQueryParams(config, { updateType: 'replaceIn' });\n}\n\nexport function getInitalValuesFromQueryParameters(\n queryParamValues: Record<string, VariableValue>\n): Record<string, VariableValue> {\n const values: Record<string, VariableValue> = {};\n Object.keys(queryParamValues).forEach((key) => {\n const value = queryParamValues[key];\n if (!value) {\n return;\n }\n const name = key.replace(variableQueryParameterPrefix, '');\n values[name] = value;\n });\n return values;\n}\n"],"names":["useQueryParams","variableQueryParameterPrefix","getURLQueryParamName","name","encodeVariableValue","value","Array","isArray","join","decodeVariableValue","values","split","length","VariableValueParam","encode","decode","v","useVariableQueryParams","defs","config","forEach","def","spec","updateType","getInitalValuesFromQueryParameters","queryParamValues","Object","keys","key","replace"],"mappings":"AAAA,oCAAoC;AACpC,kEAAkE;AAClE,mEAAmE;AACnE,0CAA0C;AAC1C,EAAE;AACF,6CAA6C;AAC7C,EAAE;AACF,sEAAsE;AACtE,oEAAoE;AACpE,2EAA2E;AAC3E,sEAAsE;AACtE,iCAAiC;AAGjC,SAA2BA,cAAc,QAAQ,mBAAmB;AAEpE,MAAMC,+BAA+B;AAErC,OAAO,SAASC,qBAAqBC,IAAY;IAC/C,OAAO,CAAC,EAAEF,6BAA6B,EAAEE,KAAK,CAAC;AACjD;AAEA,OAAO,SAASC,oBAAoBC,KAAoB;IACtD,IAAIC,MAAMC,OAAO,CAACF,QAAQ;QACxB,OAAOA,MAAMG,IAAI,CAAC;IACpB;IACA,OAAOH;AACT;AAEA,OAAO,SAASI,oBAAoBJ,KAAa;IAC/C,IAAI,CAACA,OAAO;QACV,OAAO;IACT;IACA,MAAMK,SAASL,MAAMM,KAAK,CAAC;IAC3B,IAAID,OAAOE,MAAM,KAAK,GAAG;QACvB,OAAOF,MAAM,CAAC,EAAE;IAClB;IACA,OAAOA;AACT;AAEA,MAAMG,qBAAsD;IAC1DC,QAAQV;IACRW,QAAQ,CAACC;QACP,IAAI,OAAOA,MAAM,UAAU;YACzB,OAAOP,oBAAoBO;QAC7B;QACA,OAAO;IACT;AACF;AAEA,OAAO,SAASC,uBAAuBC,IAA0B;IAC/D,MAAMC,SAAoD,CAAC;IAC3DD,KAAKE,OAAO,CAAC,CAACC;QACZ,MAAMlB,OAAOD,qBAAqBmB,IAAIC,IAAI,CAACnB,IAAI;QAC/CgB,MAAM,CAAChB,KAAK,GAAGU;IACjB;IACA,OAAOb,eAAemB,QAAQ;QAAEI,YAAY;IAAY;AAC1D;AAEA,OAAO,SAASC,mCACdC,gBAA+C;IAE/C,MAAMf,SAAwC,CAAC;IAC/CgB,OAAOC,IAAI,CAACF,kBAAkBL,OAAO,CAAC,CAACQ;QACrC,MAAMvB,QAAQoB,gBAAgB,CAACG,IAAI;QACnC,IAAI,CAACvB,OAAO;YACV;QACF;QACA,MAAMF,OAAOyB,IAAIC,OAAO,CAAC5B,8BAA8B;QACvDS,MAAM,CAACP,KAAK,GAAGE;IACjB;IACA,OAAOK;AACT"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/context/TemplateVariableProvider/utils.ts"],"sourcesContent":["// Copyright 2023 The Perses Authors\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport { VariableDefinition } from '@perses-dev/core';\nimport { VariableStoreStateMap } from '@perses-dev/plugin-system';\nimport { ExternalVariableDefinition } from '@perses-dev/dashboards';\n\n/*\n * Check whether saved variable definitions are out of date with current default list values in Zustand store\n */\nexport function checkSavedDefaultVariableStatus(definitions: VariableDefinition[], varState: VariableStoreStateMap) {\n let isSavedVariableModified = false;\n const modifiedVariableNames: string[] = [];\n for (const savedVariable of definitions) {\n const name = savedVariable.spec.name;\n if (savedVariable.kind === 'ListVariable') {\n const currentVariable = varState.get({ name });\n if (currentVariable?.value !== null && currentVariable?.value !== savedVariable.spec.defaultValue) {\n modifiedVariableNames.push(name);\n isSavedVariableModified = true;\n }\n } else if (savedVariable.kind === 'TextVariable') {\n const currentVariable = varState.get({ name });\n const currentVariableValue = typeof currentVariable?.value === 'string' ? currentVariable.value : '';\n if (savedVariable.spec.value !== currentVariableValue) {\n modifiedVariableNames.push(name);\n isSavedVariableModified = true;\n }\n }\n }\n return { isSavedVariableModified, modifiedVariableNames };\n}\n\n/**\n * Merge the different kind of variable definition into a list without any duplicates (same name).\n * Respects the order of priority explained in {@link forEachVariableDefinition}\n * @param locals\n * @param externals\n */\nexport function mergeVariableDefinitions(\n locals: VariableDefinition[],\n externals: ExternalVariableDefinition[]\n): VariableDefinition[] {\n const pushed: Record<string, boolean> = {};\n const result: VariableDefinition[] = [];\n\n // Append the value only if it's not already appended\n forEachVariableDefinition(locals, externals, (value: VariableDefinition, name: string) => {\n if (!pushed[name]) {\n result.push(value);\n pushed[name] = true;\n }\n });\n return result;\n}\n\n/**\n * Find a definition by its name.\n * Respects the order of priority explained in {@link forEachVariableDefinition}\n * @param name\n * @param localDefinitions\n * @param externalDefinitions\n */\nexport function findVariableDefinitionByName(\n name: string,\n localDefinitions: VariableDefinition[],\n externalDefinitions: ExternalVariableDefinition[]\n): VariableDefinition | undefined {\n return mergeVariableDefinitions(localDefinitions, externalDefinitions).find((d) => d.spec.name === name);\n}\n\n/**\n * Loop on local and external variable definitions, respecting the order of priority:\n * - local var defs override external var defs of same name\n * - each external var defs override the external var defs coming after.\n * @param locals\n * @param externals\n * @param callbackFn\n */\nexport function forEachVariableDefinition(\n locals: VariableDefinition[],\n externals: ExternalVariableDefinition[],\n callbackFn: (varDef: VariableDefinition, name: string, source?: string) => void\n) {\n locals.forEach((v) => callbackFn(v, v.spec.name));\n externals.forEach((ext) => ext.definitions.forEach((v) => callbackFn(v, v.spec.name, ext.source)));\n}\n"],"names":["checkSavedDefaultVariableStatus","definitions","varState","isSavedVariableModified","modifiedVariableNames","savedVariable","name","spec","kind","currentVariable","get","value","defaultValue","push","currentVariableValue","mergeVariableDefinitions","locals","externals","pushed","result","forEachVariableDefinition","findVariableDefinitionByName","localDefinitions","externalDefinitions","find","d","callbackFn","forEach","v","ext","source"],"mappings":"AAAA,oCAAoC;AACpC,kEAAkE;AAClE,mEAAmE;AACnE,0CAA0C;AAC1C,EAAE;AACF,6CAA6C;AAC7C,EAAE;AACF,sEAAsE;AACtE,oEAAoE;AACpE,2EAA2E;AAC3E,sEAAsE;AACtE,iCAAiC;AAMjC;;CAEC,GACD,OAAO,SAASA,gCAAgCC,WAAiC,EAAEC,QAA+B;IAChH,IAAIC,0BAA0B;IAC9B,MAAMC,wBAAkC,EAAE;IAC1C,KAAK,MAAMC,iBAAiBJ,YAAa;QACvC,MAAMK,OAAOD,cAAcE,KAAKD;QAChC,IAAID,cAAcG,SAAS,gBAAgB;YACzC,MAAMC,kBAAkBP,SAASQ,IAAI;gBAAEJ;YAAK;YAC5C,IAAIG,CAAAA,4BAAAA,6BAAAA,KAAAA,IAAAA,gBAAiBE,KAAI,MAAM,QAAQF,CAAAA,4BAAAA,6BAAAA,KAAAA,IAAAA,gBAAiBE,KAAI,MAAMN,cAAcE,KAAKK,cAAc;gBACjGR,sBAAsBS,KAAKP;gBAC3BH,0BAA0B;YAC5B;QACF,OAAO,IAAIE,cAAcG,SAAS,gBAAgB;YAChD,MAAMC,kBAAkBP,SAASQ,IAAI;gBAAEJ;YAAK;YAC5C,MAAMQ,uBAAuB,OAAOL,CAAAA,4BAAAA,6BAAAA,KAAAA,IAAAA,gBAAiBE,KAAI,MAAM,WAAWF,gBAAgBE,QAAQ;YAClG,IAAIN,cAAcE,KAAKI,UAAUG,sBAAsB;gBACrDV,sBAAsBS,KAAKP;gBAC3BH,0BAA0B;YAC5B;QACF;IACF;IACA,OAAO;QAAEA;QAAyBC;IAAsB;AAC1D;AAEA;;;;;CAKC,GACD,OAAO,SAASW,yBACdC,MAA4B,EAC5BC,SAAuC;IAEvC,MAAMC,SAAkC,CAAC;IACzC,MAAMC,SAA+B,EAAE;IAEvC,qDAAqD;IACrDC,0BAA0BJ,QAAQC,WAAW,CAACN,OAA2BL;QACvE,IAAI,CAACY,MAAM,CAACZ,KAAK,EAAE;YACjBa,OAAON,KAAKF;YACZO,MAAM,CAACZ,KAAK,GAAG;QACjB;IACF;IACA,OAAOa;AACT;AAEA;;;;;;CAMC,GACD,OAAO,SAASE,6BACdf,IAAY,EACZgB,gBAAsC,EACtCC,mBAAiD;IAEjD,OAAOR,yBAAyBO,kBAAkBC,qBAAqBC,KAAK,CAACC,IAAMA,EAAElB,KAAKD,SAASA;AACrG;AAEA;;;;;;;CAOC,GACD,OAAO,SAASc,0BACdJ,MAA4B,EAC5BC,SAAuC,EACvCS,UAA+E;IAE/EV,OAAOW,QAAQ,CAACC,IAAMF,WAAWE,GAAGA,EAAErB,KAAKD;IAC3CW,UAAUU,QAAQ,CAACE,MAAQA,IAAI5B,YAAY0B,QAAQ,CAACC,IAAMF,WAAWE,GAAGA,EAAErB,KAAKD,MAAMuB,IAAIC;AAC3F"}
1
+ {"version":3,"sources":["../../../src/context/TemplateVariableProvider/utils.ts"],"sourcesContent":["// Copyright 2023 The Perses Authors\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport { VariableDefinition } from '@perses-dev/core';\nimport { VariableStoreStateMap } from '@perses-dev/plugin-system';\nimport { ExternalVariableDefinition } from '@perses-dev/dashboards';\n\n/*\n * Check whether saved variable definitions are out of date with current default list values in Zustand store\n */\nexport function checkSavedDefaultVariableStatus(definitions: VariableDefinition[], varState: VariableStoreStateMap) {\n let isSavedVariableModified = false;\n const modifiedVariableNames: string[] = [];\n for (const savedVariable of definitions) {\n const name = savedVariable.spec.name;\n if (savedVariable.kind === 'ListVariable') {\n const currentVariable = varState.get({ name });\n if (currentVariable?.value !== null && currentVariable?.value !== savedVariable.spec.defaultValue) {\n modifiedVariableNames.push(name);\n isSavedVariableModified = true;\n }\n } else if (savedVariable.kind === 'TextVariable') {\n const currentVariable = varState.get({ name });\n const currentVariableValue = typeof currentVariable?.value === 'string' ? currentVariable.value : '';\n if (savedVariable.spec.value !== currentVariableValue) {\n modifiedVariableNames.push(name);\n isSavedVariableModified = true;\n }\n }\n }\n return { isSavedVariableModified, modifiedVariableNames };\n}\n\n/**\n * Merge the different kind of variable definition into a list without any duplicates (same name).\n * Respects the order of priority explained in {@link forEachVariableDefinition}\n * @param locals\n * @param externals\n */\nexport function mergeVariableDefinitions(\n locals: VariableDefinition[],\n externals: ExternalVariableDefinition[]\n): VariableDefinition[] {\n const pushed: Record<string, boolean> = {};\n const result: VariableDefinition[] = [];\n\n // Append the value only if it's not already appended\n forEachVariableDefinition(locals, externals, (value: VariableDefinition, name: string) => {\n if (!pushed[name]) {\n result.push(value);\n pushed[name] = true;\n }\n });\n return result;\n}\n\n/**\n * Find a definition by its name.\n * Respects the order of priority explained in {@link forEachVariableDefinition}\n * @param name\n * @param localDefinitions\n * @param externalDefinitions\n */\nexport function findVariableDefinitionByName(\n name: string,\n localDefinitions: VariableDefinition[],\n externalDefinitions: ExternalVariableDefinition[]\n): VariableDefinition | undefined {\n return mergeVariableDefinitions(localDefinitions, externalDefinitions).find((d) => d.spec.name === name);\n}\n\n/**\n * Loop on local and external variable definitions, respecting the order of priority:\n * - local var defs override external var defs of same name\n * - each external var defs override the external var defs coming after.\n * @param locals\n * @param externals\n * @param callbackFn\n */\nexport function forEachVariableDefinition(\n locals: VariableDefinition[],\n externals: ExternalVariableDefinition[],\n callbackFn: (varDef: VariableDefinition, name: string, source?: string) => void\n) {\n locals.forEach((v) => callbackFn(v, v.spec.name));\n externals.forEach((ext) => ext.definitions.forEach((v) => callbackFn(v, v.spec.name, ext.source)));\n}\n"],"names":["checkSavedDefaultVariableStatus","definitions","varState","isSavedVariableModified","modifiedVariableNames","savedVariable","name","spec","kind","currentVariable","get","value","defaultValue","push","currentVariableValue","mergeVariableDefinitions","locals","externals","pushed","result","forEachVariableDefinition","findVariableDefinitionByName","localDefinitions","externalDefinitions","find","d","callbackFn","forEach","v","ext","source"],"mappings":"AAAA,oCAAoC;AACpC,kEAAkE;AAClE,mEAAmE;AACnE,0CAA0C;AAC1C,EAAE;AACF,6CAA6C;AAC7C,EAAE;AACF,sEAAsE;AACtE,oEAAoE;AACpE,2EAA2E;AAC3E,sEAAsE;AACtE,iCAAiC;AAMjC;;CAEC,GACD,OAAO,SAASA,gCAAgCC,WAAiC,EAAEC,QAA+B;IAChH,IAAIC,0BAA0B;IAC9B,MAAMC,wBAAkC,EAAE;IAC1C,KAAK,MAAMC,iBAAiBJ,YAAa;QACvC,MAAMK,OAAOD,cAAcE,IAAI,CAACD,IAAI;QACpC,IAAID,cAAcG,IAAI,KAAK,gBAAgB;YACzC,MAAMC,kBAAkBP,SAASQ,GAAG,CAAC;gBAAEJ;YAAK;YAC5C,IAAIG,CAAAA,4BAAAA,sCAAAA,gBAAiBE,KAAK,MAAK,QAAQF,CAAAA,4BAAAA,sCAAAA,gBAAiBE,KAAK,MAAKN,cAAcE,IAAI,CAACK,YAAY,EAAE;gBACjGR,sBAAsBS,IAAI,CAACP;gBAC3BH,0BAA0B;YAC5B;QACF,OAAO,IAAIE,cAAcG,IAAI,KAAK,gBAAgB;YAChD,MAAMC,kBAAkBP,SAASQ,GAAG,CAAC;gBAAEJ;YAAK;YAC5C,MAAMQ,uBAAuB,QAAOL,4BAAAA,sCAAAA,gBAAiBE,KAAK,MAAK,WAAWF,gBAAgBE,KAAK,GAAG;YAClG,IAAIN,cAAcE,IAAI,CAACI,KAAK,KAAKG,sBAAsB;gBACrDV,sBAAsBS,IAAI,CAACP;gBAC3BH,0BAA0B;YAC5B;QACF;IACF;IACA,OAAO;QAAEA;QAAyBC;IAAsB;AAC1D;AAEA;;;;;CAKC,GACD,OAAO,SAASW,yBACdC,MAA4B,EAC5BC,SAAuC;IAEvC,MAAMC,SAAkC,CAAC;IACzC,MAAMC,SAA+B,EAAE;IAEvC,qDAAqD;IACrDC,0BAA0BJ,QAAQC,WAAW,CAACN,OAA2BL;QACvE,IAAI,CAACY,MAAM,CAACZ,KAAK,EAAE;YACjBa,OAAON,IAAI,CAACF;YACZO,MAAM,CAACZ,KAAK,GAAG;QACjB;IACF;IACA,OAAOa;AACT;AAEA;;;;;;CAMC,GACD,OAAO,SAASE,6BACdf,IAAY,EACZgB,gBAAsC,EACtCC,mBAAiD;IAEjD,OAAOR,yBAAyBO,kBAAkBC,qBAAqBC,IAAI,CAAC,CAACC,IAAMA,EAAElB,IAAI,CAACD,IAAI,KAAKA;AACrG;AAEA;;;;;;;CAOC,GACD,OAAO,SAASc,0BACdJ,MAA4B,EAC5BC,SAAuC,EACvCS,UAA+E;IAE/EV,OAAOW,OAAO,CAAC,CAACC,IAAMF,WAAWE,GAAGA,EAAErB,IAAI,CAACD,IAAI;IAC/CW,UAAUU,OAAO,CAAC,CAACE,MAAQA,IAAI5B,WAAW,CAAC0B,OAAO,CAAC,CAACC,IAAMF,WAAWE,GAAGA,EAAErB,IAAI,CAACD,IAAI,EAAEuB,IAAIC,MAAM;AACjG"}
@@ -14,7 +14,7 @@ import { createPanelRef } from '@perses-dev/core';
14
14
  import { useDashboardStore } from './DashboardProvider';
15
15
  import { useTemplateVariableActions, useTemplateVariableDefinitions } from './TemplateVariableProvider';
16
16
  export function useDashboard() {
17
- const { panels , panelGroups , panelGroupOrder , setDashboard: setDashboardResource , metadata , display , duration , refreshInterval , datasources } = useDashboardStore(({ panels , panelGroups , panelGroupOrder , setDashboard , metadata , display , duration , refreshInterval , datasources })=>({
17
+ const { panels, panelGroups, panelGroupOrder, setDashboard: setDashboardResource, metadata, display, duration, refreshInterval, datasources } = useDashboardStore(({ panels, panelGroups, panelGroupOrder, setDashboard, metadata, display, duration, refreshInterval, datasources })=>({
18
18
  panels,
19
19
  panelGroups,
20
20
  panelGroupOrder,
@@ -25,7 +25,7 @@ export function useDashboard() {
25
25
  refreshInterval,
26
26
  datasources
27
27
  }));
28
- const { setVariableDefinitions } = useTemplateVariableActions();
28
+ const { setVariableDefinitions } = useTemplateVariableActions();
29
29
  const variables = useTemplateVariableDefinitions();
30
30
  const layouts = convertPanelGroupsToLayouts(panelGroups, panelGroupOrder);
31
31
  const dashboard = {
@@ -57,7 +57,7 @@ function convertPanelGroupsToLayouts(panelGroups, panelGroupOrder) {
57
57
  if (group === undefined) {
58
58
  throw new Error('panel group not found');
59
59
  }
60
- const { title , isCollapsed , itemLayouts , itemPanelKeys } = group;
60
+ const { title, isCollapsed, itemLayouts, itemPanelKeys } = group;
61
61
  let display = undefined;
62
62
  if (title) {
63
63
  display = {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/context/useDashboard.tsx"],"sourcesContent":["// Copyright 2023 The Perses Authors\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport { createPanelRef, DashboardResource, GridDefinition } from '@perses-dev/core';\nimport { PanelGroupDefinition, PanelGroupId, useDashboardStore } from './DashboardProvider';\nimport { useTemplateVariableActions, useTemplateVariableDefinitions } from './TemplateVariableProvider';\n\nexport function useDashboard() {\n const {\n panels,\n panelGroups,\n panelGroupOrder,\n setDashboard: setDashboardResource,\n metadata,\n display,\n duration,\n refreshInterval,\n datasources,\n } = useDashboardStore(\n ({\n panels,\n panelGroups,\n panelGroupOrder,\n setDashboard,\n metadata,\n display,\n duration,\n refreshInterval,\n datasources,\n }) => ({\n panels,\n panelGroups,\n panelGroupOrder,\n setDashboard,\n metadata,\n display,\n duration,\n refreshInterval,\n datasources,\n })\n );\n const { setVariableDefinitions } = useTemplateVariableActions();\n const variables = useTemplateVariableDefinitions();\n const layouts = convertPanelGroupsToLayouts(panelGroups, panelGroupOrder);\n\n const dashboard: DashboardResource = {\n kind: 'Dashboard',\n metadata,\n spec: {\n display,\n panels,\n layouts,\n variables,\n duration,\n refreshInterval,\n datasources,\n },\n };\n\n const setDashboard = (dashboardResource: DashboardResource) => {\n setVariableDefinitions(dashboardResource.spec.variables);\n setDashboardResource(dashboardResource);\n };\n\n return {\n dashboard,\n setDashboard,\n };\n}\n\nfunction convertPanelGroupsToLayouts(\n panelGroups: Record<number, PanelGroupDefinition>,\n panelGroupOrder: PanelGroupId[]\n): GridDefinition[] {\n const layouts: GridDefinition[] = [];\n panelGroupOrder.map((groupOrderId) => {\n const group = panelGroups[groupOrderId];\n if (group === undefined) {\n throw new Error('panel group not found');\n }\n const { title, isCollapsed, itemLayouts, itemPanelKeys } = group;\n let display = undefined;\n if (title) {\n display = {\n title,\n collapse: {\n open: !isCollapsed,\n },\n };\n }\n const layout: GridDefinition = {\n kind: 'Grid',\n spec: {\n display,\n items: itemLayouts.map((layout) => {\n const panelKey = itemPanelKeys[layout.i];\n if (panelKey === undefined) {\n throw new Error(`Missing panel key of layout ${layout.i}`);\n }\n return {\n x: layout.x,\n y: layout.y,\n width: layout.w,\n height: layout.h,\n content: createPanelRef(panelKey),\n };\n }),\n },\n };\n layouts.push(layout);\n });\n\n return layouts;\n}\n"],"names":["createPanelRef","useDashboardStore","useTemplateVariableActions","useTemplateVariableDefinitions","useDashboard","panels","panelGroups","panelGroupOrder","setDashboard","setDashboardResource","metadata","display","duration","refreshInterval","datasources","setVariableDefinitions","variables","layouts","convertPanelGroupsToLayouts","dashboard","kind","spec","dashboardResource","map","groupOrderId","group","undefined","Error","title","isCollapsed","itemLayouts","itemPanelKeys","collapse","open","layout","items","panelKey","i","x","y","width","w","height","h","content","push"],"mappings":"AAAA,oCAAoC;AACpC,kEAAkE;AAClE,mEAAmE;AACnE,0CAA0C;AAC1C,EAAE;AACF,6CAA6C;AAC7C,EAAE;AACF,sEAAsE;AACtE,oEAAoE;AACpE,2EAA2E;AAC3E,sEAAsE;AACtE,iCAAiC;AAEjC,SAASA,cAAc,QAA2C,mBAAmB;AACrF,SAA6CC,iBAAiB,QAAQ,sBAAsB;AAC5F,SAASC,0BAA0B,EAAEC,8BAA8B,QAAQ,6BAA6B;AAExG,OAAO,SAASC;IACd,MAAM,EACJC,OAAM,EACNC,YAAW,EACXC,gBAAe,EACfC,cAAcC,qBAAoB,EAClCC,SAAQ,EACRC,QAAO,EACPC,SAAQ,EACRC,gBAAe,EACfC,YAAW,EACZ,GAAGb,kBACF,CAAC,EACCI,OAAM,EACNC,YAAW,EACXC,gBAAe,EACfC,aAAY,EACZE,SAAQ,EACRC,QAAO,EACPC,SAAQ,EACRC,gBAAe,EACfC,YAAW,EACZ,GAAM,CAAA;YACLT;YACAC;YACAC;YACAC;YACAE;YACAC;YACAC;YACAC;YACAC;QACF,CAAA;IAEF,MAAM,EAAEC,uBAAsB,EAAE,GAAGb;IACnC,MAAMc,YAAYb;IAClB,MAAMc,UAAUC,4BAA4BZ,aAAaC;IAEzD,MAAMY,YAA+B;QACnCC,MAAM;QACNV;QACAW,MAAM;YACJV;YACAN;YACAY;YACAD;YACAJ;YACAC;YACAC;QACF;IACF;IAEA,MAAMN,eAAe,CAACc;QACpBP,uBAAuBO,kBAAkBD,KAAKL;QAC9CP,qBAAqBa;IACvB;IAEA,OAAO;QACLH;QACAX;IACF;AACF;AAEA,SAASU,4BACPZ,WAAiD,EACjDC,eAA+B;IAE/B,MAAMU,UAA4B,EAAE;IACpCV,gBAAgBgB,IAAI,CAACC;QACnB,MAAMC,QAAQnB,WAAW,CAACkB,aAAa;QACvC,IAAIC,UAAUC,WAAW;YACvB,MAAM,IAAIC,MAAM;QAClB;QACA,MAAM,EAAEC,MAAK,EAAEC,YAAW,EAAEC,YAAW,EAAEC,cAAa,EAAE,GAAGN;QAC3D,IAAId,UAAUe;QACd,IAAIE,OAAO;YACTjB,UAAU;gBACRiB;gBACAI,UAAU;oBACRC,MAAM,CAACJ;gBACT;YACF;QACF;QACA,MAAMK,SAAyB;YAC7Bd,MAAM;YACNC,MAAM;gBACJV;gBACAwB,OAAOL,YAAYP,IAAI,CAACW;oBACtB,MAAME,WAAWL,aAAa,CAACG,OAAOG,EAAE;oBACxC,IAAID,aAAaV,WAAW;wBAC1B,MAAM,IAAIC,MAAM,CAAC,4BAA4B,EAAEO,OAAOG,EAAE,CAAC;oBAC3D;oBACA,OAAO;wBACLC,GAAGJ,OAAOI;wBACVC,GAAGL,OAAOK;wBACVC,OAAON,OAAOO;wBACdC,QAAQR,OAAOS;wBACfC,SAAS5C,eAAeoC;oBAC1B;gBACF;YACF;QACF;QACAnB,QAAQ4B,KAAKX;IACf;IAEA,OAAOjB;AACT"}
1
+ {"version":3,"sources":["../../src/context/useDashboard.tsx"],"sourcesContent":["// Copyright 2023 The Perses Authors\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport { createPanelRef, DashboardResource, GridDefinition } from '@perses-dev/core';\nimport { PanelGroupDefinition, PanelGroupId, useDashboardStore } from './DashboardProvider';\nimport { useTemplateVariableActions, useTemplateVariableDefinitions } from './TemplateVariableProvider';\n\nexport function useDashboard() {\n const {\n panels,\n panelGroups,\n panelGroupOrder,\n setDashboard: setDashboardResource,\n metadata,\n display,\n duration,\n refreshInterval,\n datasources,\n } = useDashboardStore(\n ({\n panels,\n panelGroups,\n panelGroupOrder,\n setDashboard,\n metadata,\n display,\n duration,\n refreshInterval,\n datasources,\n }) => ({\n panels,\n panelGroups,\n panelGroupOrder,\n setDashboard,\n metadata,\n display,\n duration,\n refreshInterval,\n datasources,\n })\n );\n const { setVariableDefinitions } = useTemplateVariableActions();\n const variables = useTemplateVariableDefinitions();\n const layouts = convertPanelGroupsToLayouts(panelGroups, panelGroupOrder);\n\n const dashboard: DashboardResource = {\n kind: 'Dashboard',\n metadata,\n spec: {\n display,\n panels,\n layouts,\n variables,\n duration,\n refreshInterval,\n datasources,\n },\n };\n\n const setDashboard = (dashboardResource: DashboardResource) => {\n setVariableDefinitions(dashboardResource.spec.variables);\n setDashboardResource(dashboardResource);\n };\n\n return {\n dashboard,\n setDashboard,\n };\n}\n\nfunction convertPanelGroupsToLayouts(\n panelGroups: Record<number, PanelGroupDefinition>,\n panelGroupOrder: PanelGroupId[]\n): GridDefinition[] {\n const layouts: GridDefinition[] = [];\n panelGroupOrder.map((groupOrderId) => {\n const group = panelGroups[groupOrderId];\n if (group === undefined) {\n throw new Error('panel group not found');\n }\n const { title, isCollapsed, itemLayouts, itemPanelKeys } = group;\n let display = undefined;\n if (title) {\n display = {\n title,\n collapse: {\n open: !isCollapsed,\n },\n };\n }\n const layout: GridDefinition = {\n kind: 'Grid',\n spec: {\n display,\n items: itemLayouts.map((layout) => {\n const panelKey = itemPanelKeys[layout.i];\n if (panelKey === undefined) {\n throw new Error(`Missing panel key of layout ${layout.i}`);\n }\n return {\n x: layout.x,\n y: layout.y,\n width: layout.w,\n height: layout.h,\n content: createPanelRef(panelKey),\n };\n }),\n },\n };\n layouts.push(layout);\n });\n\n return layouts;\n}\n"],"names":["createPanelRef","useDashboardStore","useTemplateVariableActions","useTemplateVariableDefinitions","useDashboard","panels","panelGroups","panelGroupOrder","setDashboard","setDashboardResource","metadata","display","duration","refreshInterval","datasources","setVariableDefinitions","variables","layouts","convertPanelGroupsToLayouts","dashboard","kind","spec","dashboardResource","map","groupOrderId","group","undefined","Error","title","isCollapsed","itemLayouts","itemPanelKeys","collapse","open","layout","items","panelKey","i","x","y","width","w","height","h","content","push"],"mappings":"AAAA,oCAAoC;AACpC,kEAAkE;AAClE,mEAAmE;AACnE,0CAA0C;AAC1C,EAAE;AACF,6CAA6C;AAC7C,EAAE;AACF,sEAAsE;AACtE,oEAAoE;AACpE,2EAA2E;AAC3E,sEAAsE;AACtE,iCAAiC;AAEjC,SAASA,cAAc,QAA2C,mBAAmB;AACrF,SAA6CC,iBAAiB,QAAQ,sBAAsB;AAC5F,SAASC,0BAA0B,EAAEC,8BAA8B,QAAQ,6BAA6B;AAExG,OAAO,SAASC;IACd,MAAM,EACJC,MAAM,EACNC,WAAW,EACXC,eAAe,EACfC,cAAcC,oBAAoB,EAClCC,QAAQ,EACRC,OAAO,EACPC,QAAQ,EACRC,eAAe,EACfC,WAAW,EACZ,GAAGb,kBACF,CAAC,EACCI,MAAM,EACNC,WAAW,EACXC,eAAe,EACfC,YAAY,EACZE,QAAQ,EACRC,OAAO,EACPC,QAAQ,EACRC,eAAe,EACfC,WAAW,EACZ,GAAM,CAAA;YACLT;YACAC;YACAC;YACAC;YACAE;YACAC;YACAC;YACAC;YACAC;QACF,CAAA;IAEF,MAAM,EAAEC,sBAAsB,EAAE,GAAGb;IACnC,MAAMc,YAAYb;IAClB,MAAMc,UAAUC,4BAA4BZ,aAAaC;IAEzD,MAAMY,YAA+B;QACnCC,MAAM;QACNV;QACAW,MAAM;YACJV;YACAN;YACAY;YACAD;YACAJ;YACAC;YACAC;QACF;IACF;IAEA,MAAMN,eAAe,CAACc;QACpBP,uBAAuBO,kBAAkBD,IAAI,CAACL,SAAS;QACvDP,qBAAqBa;IACvB;IAEA,OAAO;QACLH;QACAX;IACF;AACF;AAEA,SAASU,4BACPZ,WAAiD,EACjDC,eAA+B;IAE/B,MAAMU,UAA4B,EAAE;IACpCV,gBAAgBgB,GAAG,CAAC,CAACC;QACnB,MAAMC,QAAQnB,WAAW,CAACkB,aAAa;QACvC,IAAIC,UAAUC,WAAW;YACvB,MAAM,IAAIC,MAAM;QAClB;QACA,MAAM,EAAEC,KAAK,EAAEC,WAAW,EAAEC,WAAW,EAAEC,aAAa,EAAE,GAAGN;QAC3D,IAAId,UAAUe;QACd,IAAIE,OAAO;YACTjB,UAAU;gBACRiB;gBACAI,UAAU;oBACRC,MAAM,CAACJ;gBACT;YACF;QACF;QACA,MAAMK,SAAyB;YAC7Bd,MAAM;YACNC,MAAM;gBACJV;gBACAwB,OAAOL,YAAYP,GAAG,CAAC,CAACW;oBACtB,MAAME,WAAWL,aAAa,CAACG,OAAOG,CAAC,CAAC;oBACxC,IAAID,aAAaV,WAAW;wBAC1B,MAAM,IAAIC,MAAM,CAAC,4BAA4B,EAAEO,OAAOG,CAAC,CAAC,CAAC;oBAC3D;oBACA,OAAO;wBACLC,GAAGJ,OAAOI,CAAC;wBACXC,GAAGL,OAAOK,CAAC;wBACXC,OAAON,OAAOO,CAAC;wBACfC,QAAQR,OAAOS,CAAC;wBAChBC,SAAS5C,eAAeoC;oBAC1B;gBACF;YACF;QACF;QACAnB,QAAQ4B,IAAI,CAACX;IACf;IAEA,OAAOjB;AACT"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/stories/decorators/WithDashboard.tsx"],"sourcesContent":["// Copyright 2023 The Perses Authors\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport { StoryFn, StoryContext } from '@storybook/react';\nimport { DashboardProvider, DashboardProviderProps } from '@perses-dev/dashboards';\nimport { EMPTY_DASHBOARD_RESOURCE } from './constants';\n\ndeclare module '@storybook/react' {\n interface Parameters {\n withDashboard?: WithDashboardParameter;\n }\n}\n\nexport type WithDashboardParameter = {\n props: Partial<DashboardProviderProps>;\n};\n\n// Type guard because storybook types parameters as `any`\nfunction isWithDashboardParameter(parameter: unknown | WithDashboardParameter): parameter is WithDashboardParameter {\n return !!parameter && typeof parameter === 'object' && 'props' in parameter;\n}\n\nexport const WithDashboard = (Story: StoryFn, context: StoryContext<unknown>) => {\n const initParameter = context.parameters.withDashboard;\n const parameter = isWithDashboardParameter(initParameter) ? initParameter : undefined;\n const props = parameter?.props;\n\n return (\n <DashboardProvider initialState={{ dashboardResource: EMPTY_DASHBOARD_RESOURCE }} {...props}>\n <Story />\n </DashboardProvider>\n );\n};\n"],"names":["DashboardProvider","EMPTY_DASHBOARD_RESOURCE","isWithDashboardParameter","parameter","WithDashboard","Story","context","initParameter","parameters","withDashboard","undefined","props","initialState","dashboardResource"],"mappings":"AAAA,oCAAoC;AACpC,kEAAkE;AAClE,mEAAmE;AACnE,0CAA0C;AAC1C,EAAE;AACF,6CAA6C;AAC7C,EAAE;AACF,sEAAsE;AACtE,oEAAoE;AACpE,2EAA2E;AAC3E,sEAAsE;AACtE,iCAAiC;;AAGjC,SAASA,iBAAiB,QAAgC,yBAAyB;AACnF,SAASC,wBAAwB,QAAQ,cAAc;AAYvD,yDAAyD;AACzD,SAASC,yBAAyBC,SAA2C;IAC3E,OAAO,CAAC,CAACA,aAAa,OAAOA,cAAc,YAAY,WAAWA;AACpE;AAEA,OAAO,MAAMC,gBAAgB,CAACC,OAAgBC;IAC5C,MAAMC,gBAAgBD,QAAQE,WAAWC;IACzC,MAAMN,YAAYD,yBAAyBK,iBAAiBA,gBAAgBG;IAC5E,MAAMC,QAAQR,sBAAAA,uBAAAA,KAAAA,IAAAA,UAAWQ;IAEzB,qBACE,KAACX;QAAkBY,cAAc;YAAEC,mBAAmBZ;QAAyB;QAAI,GAAGU,KAAK;kBACzF,cAAA,KAACN;;AAGP,EAAE"}
1
+ {"version":3,"sources":["../../../src/stories/decorators/WithDashboard.tsx"],"sourcesContent":["// Copyright 2023 The Perses Authors\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport { StoryFn, StoryContext } from '@storybook/react';\nimport { DashboardProvider, DashboardProviderProps } from '@perses-dev/dashboards';\nimport { EMPTY_DASHBOARD_RESOURCE } from './constants';\n\ndeclare module '@storybook/react' {\n interface Parameters {\n withDashboard?: WithDashboardParameter;\n }\n}\n\nexport type WithDashboardParameter = {\n props: Partial<DashboardProviderProps>;\n};\n\n// Type guard because storybook types parameters as `any`\nfunction isWithDashboardParameter(parameter: unknown | WithDashboardParameter): parameter is WithDashboardParameter {\n return !!parameter && typeof parameter === 'object' && 'props' in parameter;\n}\n\nexport const WithDashboard = (Story: StoryFn, context: StoryContext<unknown>) => {\n const initParameter = context.parameters.withDashboard;\n const parameter = isWithDashboardParameter(initParameter) ? initParameter : undefined;\n const props = parameter?.props;\n\n return (\n <DashboardProvider initialState={{ dashboardResource: EMPTY_DASHBOARD_RESOURCE }} {...props}>\n <Story />\n </DashboardProvider>\n );\n};\n"],"names":["DashboardProvider","EMPTY_DASHBOARD_RESOURCE","isWithDashboardParameter","parameter","WithDashboard","Story","context","initParameter","parameters","withDashboard","undefined","props","initialState","dashboardResource"],"mappings":"AAAA,oCAAoC;AACpC,kEAAkE;AAClE,mEAAmE;AACnE,0CAA0C;AAC1C,EAAE;AACF,6CAA6C;AAC7C,EAAE;AACF,sEAAsE;AACtE,oEAAoE;AACpE,2EAA2E;AAC3E,sEAAsE;AACtE,iCAAiC;;AAGjC,SAASA,iBAAiB,QAAgC,yBAAyB;AACnF,SAASC,wBAAwB,QAAQ,cAAc;AAYvD,yDAAyD;AACzD,SAASC,yBAAyBC,SAA2C;IAC3E,OAAO,CAAC,CAACA,aAAa,OAAOA,cAAc,YAAY,WAAWA;AACpE;AAEA,OAAO,MAAMC,gBAAgB,CAACC,OAAgBC;IAC5C,MAAMC,gBAAgBD,QAAQE,UAAU,CAACC,aAAa;IACtD,MAAMN,YAAYD,yBAAyBK,iBAAiBA,gBAAgBG;IAC5E,MAAMC,QAAQR,sBAAAA,gCAAAA,UAAWQ,KAAK;IAE9B,qBACE,KAACX;QAAkBY,cAAc;YAAEC,mBAAmBZ;QAAyB;QAAI,GAAGU,KAAK;kBACzF,cAAA,KAACN;;AAGP,EAAE"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/stories/decorators/WithDatasourceStore.tsx"],"sourcesContent":["// Copyright 2023 The Perses Authors\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport { StoryFn, StoryContext } from '@storybook/react';\nimport { DatasourceStoreProvider, DatasourceStoreProviderProps } from '@perses-dev/dashboards';\nimport { defaultDatasourceProps } from '../../test';\n\ndeclare module '@storybook/react' {\n interface Parameters {\n withDatasourceStore?: WithDatasourceStoreParameter;\n }\n}\n\nexport type WithDatasourceStoreParameter = {\n props: Partial<DatasourceStoreProviderProps>;\n};\n\n// Type guard because storybook types parameters as `any`\nfunction isWithDatasourceStoreParameter(\n parameter: unknown | WithDatasourceStoreParameter\n): parameter is WithDatasourceStoreParameter {\n return !!parameter && typeof parameter === 'object' && 'props' in parameter;\n}\n\nexport const WithDatasourceStore = (Story: StoryFn, context: StoryContext<unknown>) => {\n const initParameter = context.parameters.withDatasourceStore;\n const parameter = isWithDatasourceStoreParameter(initParameter) ? initParameter : undefined;\n const props = parameter?.props;\n\n return (\n <DatasourceStoreProvider {...defaultDatasourceProps} {...props}>\n <Story />\n </DatasourceStoreProvider>\n );\n};\n"],"names":["DatasourceStoreProvider","defaultDatasourceProps","isWithDatasourceStoreParameter","parameter","WithDatasourceStore","Story","context","initParameter","parameters","withDatasourceStore","undefined","props"],"mappings":"AAAA,oCAAoC;AACpC,kEAAkE;AAClE,mEAAmE;AACnE,0CAA0C;AAC1C,EAAE;AACF,6CAA6C;AAC7C,EAAE;AACF,sEAAsE;AACtE,oEAAoE;AACpE,2EAA2E;AAC3E,sEAAsE;AACtE,iCAAiC;;AAGjC,SAASA,uBAAuB,QAAsC,yBAAyB;AAC/F,SAASC,sBAAsB,QAAQ,aAAa;AAYpD,yDAAyD;AACzD,SAASC,+BACPC,SAAiD;IAEjD,OAAO,CAAC,CAACA,aAAa,OAAOA,cAAc,YAAY,WAAWA;AACpE;AAEA,OAAO,MAAMC,sBAAsB,CAACC,OAAgBC;IAClD,MAAMC,gBAAgBD,QAAQE,WAAWC;IACzC,MAAMN,YAAYD,+BAA+BK,iBAAiBA,gBAAgBG;IAClF,MAAMC,QAAQR,sBAAAA,uBAAAA,KAAAA,IAAAA,UAAWQ;IAEzB,qBACE,KAACX;QAAyB,GAAGC,sBAAsB;QAAG,GAAGU,KAAK;kBAC5D,cAAA,KAACN;;AAGP,EAAE"}
1
+ {"version":3,"sources":["../../../src/stories/decorators/WithDatasourceStore.tsx"],"sourcesContent":["// Copyright 2023 The Perses Authors\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport { StoryFn, StoryContext } from '@storybook/react';\nimport { DatasourceStoreProvider, DatasourceStoreProviderProps } from '@perses-dev/dashboards';\nimport { defaultDatasourceProps } from '../../test';\n\ndeclare module '@storybook/react' {\n interface Parameters {\n withDatasourceStore?: WithDatasourceStoreParameter;\n }\n}\n\nexport type WithDatasourceStoreParameter = {\n props: Partial<DatasourceStoreProviderProps>;\n};\n\n// Type guard because storybook types parameters as `any`\nfunction isWithDatasourceStoreParameter(\n parameter: unknown | WithDatasourceStoreParameter\n): parameter is WithDatasourceStoreParameter {\n return !!parameter && typeof parameter === 'object' && 'props' in parameter;\n}\n\nexport const WithDatasourceStore = (Story: StoryFn, context: StoryContext<unknown>) => {\n const initParameter = context.parameters.withDatasourceStore;\n const parameter = isWithDatasourceStoreParameter(initParameter) ? initParameter : undefined;\n const props = parameter?.props;\n\n return (\n <DatasourceStoreProvider {...defaultDatasourceProps} {...props}>\n <Story />\n </DatasourceStoreProvider>\n );\n};\n"],"names":["DatasourceStoreProvider","defaultDatasourceProps","isWithDatasourceStoreParameter","parameter","WithDatasourceStore","Story","context","initParameter","parameters","withDatasourceStore","undefined","props"],"mappings":"AAAA,oCAAoC;AACpC,kEAAkE;AAClE,mEAAmE;AACnE,0CAA0C;AAC1C,EAAE;AACF,6CAA6C;AAC7C,EAAE;AACF,sEAAsE;AACtE,oEAAoE;AACpE,2EAA2E;AAC3E,sEAAsE;AACtE,iCAAiC;;AAGjC,SAASA,uBAAuB,QAAsC,yBAAyB;AAC/F,SAASC,sBAAsB,QAAQ,aAAa;AAYpD,yDAAyD;AACzD,SAASC,+BACPC,SAAiD;IAEjD,OAAO,CAAC,CAACA,aAAa,OAAOA,cAAc,YAAY,WAAWA;AACpE;AAEA,OAAO,MAAMC,sBAAsB,CAACC,OAAgBC;IAClD,MAAMC,gBAAgBD,QAAQE,UAAU,CAACC,mBAAmB;IAC5D,MAAMN,YAAYD,+BAA+BK,iBAAiBA,gBAAgBG;IAClF,MAAMC,QAAQR,sBAAAA,gCAAAA,UAAWQ,KAAK;IAE9B,qBACE,KAACX;QAAyB,GAAGC,sBAAsB;QAAG,GAAGU,KAAK;kBAC5D,cAAA,KAACN;;AAGP,EAAE"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/stories/decorators/WithTemplateVariables.tsx"],"sourcesContent":["// Copyright 2023 The Perses Authors\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport { StoryFn, StoryContext } from '@storybook/react';\nimport { TemplateVariableProvider, TemplateVariableProviderProps } from '@perses-dev/dashboards';\n\ndeclare module '@storybook/react' {\n interface Parameters {\n withTemplateVariables?: WithTemplateVariableParameter;\n }\n}\n\nexport type WithTemplateVariableParameter = {\n props: Partial<TemplateVariableProviderProps>;\n};\n\n// Type guard because storybook types parameters as `any`\nfunction isWithTemplateVariableParameter(\n parameter: unknown | WithTemplateVariableParameter\n): parameter is WithTemplateVariableParameter {\n return !!parameter && typeof parameter === 'object' && 'props' in parameter;\n}\n\nexport const WithTemplateVariables = (Story: StoryFn, context: StoryContext<unknown>) => {\n const initParameter = context.parameters.withTemplateVariables;\n const parameter = isWithTemplateVariableParameter(initParameter) ? initParameter : undefined;\n const props = parameter?.props;\n\n return (\n <TemplateVariableProvider {...props}>\n <Story />\n </TemplateVariableProvider>\n );\n};\n"],"names":["TemplateVariableProvider","isWithTemplateVariableParameter","parameter","WithTemplateVariables","Story","context","initParameter","parameters","withTemplateVariables","undefined","props"],"mappings":"AAAA,oCAAoC;AACpC,kEAAkE;AAClE,mEAAmE;AACnE,0CAA0C;AAC1C,EAAE;AACF,6CAA6C;AAC7C,EAAE;AACF,sEAAsE;AACtE,oEAAoE;AACpE,2EAA2E;AAC3E,sEAAsE;AACtE,iCAAiC;;AAGjC,SAASA,wBAAwB,QAAuC,yBAAyB;AAYjG,yDAAyD;AACzD,SAASC,gCACPC,SAAkD;IAElD,OAAO,CAAC,CAACA,aAAa,OAAOA,cAAc,YAAY,WAAWA;AACpE;AAEA,OAAO,MAAMC,wBAAwB,CAACC,OAAgBC;IACpD,MAAMC,gBAAgBD,QAAQE,WAAWC;IACzC,MAAMN,YAAYD,gCAAgCK,iBAAiBA,gBAAgBG;IACnF,MAAMC,QAAQR,sBAAAA,uBAAAA,KAAAA,IAAAA,UAAWQ;IAEzB,qBACE,KAACV;QAA0B,GAAGU,KAAK;kBACjC,cAAA,KAACN;;AAGP,EAAE"}
1
+ {"version":3,"sources":["../../../src/stories/decorators/WithTemplateVariables.tsx"],"sourcesContent":["// Copyright 2023 The Perses Authors\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport { StoryFn, StoryContext } from '@storybook/react';\nimport { TemplateVariableProvider, TemplateVariableProviderProps } from '@perses-dev/dashboards';\n\ndeclare module '@storybook/react' {\n interface Parameters {\n withTemplateVariables?: WithTemplateVariableParameter;\n }\n}\n\nexport type WithTemplateVariableParameter = {\n props: Partial<TemplateVariableProviderProps>;\n};\n\n// Type guard because storybook types parameters as `any`\nfunction isWithTemplateVariableParameter(\n parameter: unknown | WithTemplateVariableParameter\n): parameter is WithTemplateVariableParameter {\n return !!parameter && typeof parameter === 'object' && 'props' in parameter;\n}\n\nexport const WithTemplateVariables = (Story: StoryFn, context: StoryContext<unknown>) => {\n const initParameter = context.parameters.withTemplateVariables;\n const parameter = isWithTemplateVariableParameter(initParameter) ? initParameter : undefined;\n const props = parameter?.props;\n\n return (\n <TemplateVariableProvider {...props}>\n <Story />\n </TemplateVariableProvider>\n );\n};\n"],"names":["TemplateVariableProvider","isWithTemplateVariableParameter","parameter","WithTemplateVariables","Story","context","initParameter","parameters","withTemplateVariables","undefined","props"],"mappings":"AAAA,oCAAoC;AACpC,kEAAkE;AAClE,mEAAmE;AACnE,0CAA0C;AAC1C,EAAE;AACF,6CAA6C;AAC7C,EAAE;AACF,sEAAsE;AACtE,oEAAoE;AACpE,2EAA2E;AAC3E,sEAAsE;AACtE,iCAAiC;;AAGjC,SAASA,wBAAwB,QAAuC,yBAAyB;AAYjG,yDAAyD;AACzD,SAASC,gCACPC,SAAkD;IAElD,OAAO,CAAC,CAACA,aAAa,OAAOA,cAAc,YAAY,WAAWA;AACpE;AAEA,OAAO,MAAMC,wBAAwB,CAACC,OAAgBC;IACpD,MAAMC,gBAAgBD,QAAQE,UAAU,CAACC,qBAAqB;IAC9D,MAAMN,YAAYD,gCAAgCK,iBAAiBA,gBAAgBG;IACnF,MAAMC,QAAQR,sBAAAA,gCAAAA,UAAWQ,KAAK;IAE9B,qBACE,KAACV;QAA0B,GAAGU,KAAK;kBACjC,cAAA,KAACN;;AAGP,EAAE"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/test/dashboard-provider.tsx"],"sourcesContent":["// Copyright 2023 The Perses Authors\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport { DashboardResource } from '@perses-dev/core';\nimport { useContext } from 'react';\nimport { StoreApi } from 'zustand';\nimport { DashboardContext, DashboardStoreState } from '../context';\nimport testDashboard from './testDashboard';\n\n/**\n * Helper to get a test dashboard resource.\n */\nexport function getTestDashboard(): DashboardResource {\n // TODO: Should we be cloning this to create a new object each time?\n return testDashboard;\n}\n\n/**\n * Test helper to create a \"spy\" component that will capture the DashboardProvider's store, allowing you to inspect\n * its state in tests. Be sure to render the DashboardProviderSpy component that's returned in the component test\n * underneath the DashboardProvider.\n */\nexport function createDashboardProviderSpy() {\n const store: { value?: StoreApi<DashboardStoreState> } = {};\n\n // Spy component just captures the store value so it can be inspected in tests\n function DashboardProviderSpy() {\n const ctx = useContext(DashboardContext);\n store.value = ctx;\n return null;\n }\n\n return {\n DashboardProviderSpy,\n store,\n };\n}\n"],"names":["useContext","DashboardContext","testDashboard","getTestDashboard","createDashboardProviderSpy","store","DashboardProviderSpy","ctx","value"],"mappings":"AAAA,oCAAoC;AACpC,kEAAkE;AAClE,mEAAmE;AACnE,0CAA0C;AAC1C,EAAE;AACF,6CAA6C;AAC7C,EAAE;AACF,sEAAsE;AACtE,oEAAoE;AACpE,2EAA2E;AAC3E,sEAAsE;AACtE,iCAAiC;AAGjC,SAASA,UAAU,QAAQ,QAAQ;AAEnC,SAASC,gBAAgB,QAA6B,aAAa;AACnE,OAAOC,mBAAmB,kBAAkB;AAE5C;;CAEC,GACD,OAAO,SAASC;IACd,oEAAoE;IACpE,OAAOD;AACT;AAEA;;;;CAIC,GACD,OAAO,SAASE;IACd,MAAMC,QAAmD,CAAC;IAE1D,8EAA8E;IAC9E,SAASC;QACP,MAAMC,MAAMP,WAAWC;QACvBI,MAAMG,QAAQD;QACd,OAAO;IACT;IAEA,OAAO;QACLD;QACAD;IACF;AACF"}
1
+ {"version":3,"sources":["../../src/test/dashboard-provider.tsx"],"sourcesContent":["// Copyright 2023 The Perses Authors\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport { DashboardResource } from '@perses-dev/core';\nimport { useContext } from 'react';\nimport { StoreApi } from 'zustand';\nimport { DashboardContext, DashboardStoreState } from '../context';\nimport testDashboard from './testDashboard';\n\n/**\n * Helper to get a test dashboard resource.\n */\nexport function getTestDashboard(): DashboardResource {\n // TODO: Should we be cloning this to create a new object each time?\n return testDashboard;\n}\n\n/**\n * Test helper to create a \"spy\" component that will capture the DashboardProvider's store, allowing you to inspect\n * its state in tests. Be sure to render the DashboardProviderSpy component that's returned in the component test\n * underneath the DashboardProvider.\n */\nexport function createDashboardProviderSpy() {\n const store: { value?: StoreApi<DashboardStoreState> } = {};\n\n // Spy component just captures the store value so it can be inspected in tests\n function DashboardProviderSpy() {\n const ctx = useContext(DashboardContext);\n store.value = ctx;\n return null;\n }\n\n return {\n DashboardProviderSpy,\n store,\n };\n}\n"],"names":["useContext","DashboardContext","testDashboard","getTestDashboard","createDashboardProviderSpy","store","DashboardProviderSpy","ctx","value"],"mappings":"AAAA,oCAAoC;AACpC,kEAAkE;AAClE,mEAAmE;AACnE,0CAA0C;AAC1C,EAAE;AACF,6CAA6C;AAC7C,EAAE;AACF,sEAAsE;AACtE,oEAAoE;AACpE,2EAA2E;AAC3E,sEAAsE;AACtE,iCAAiC;AAGjC,SAASA,UAAU,QAAQ,QAAQ;AAEnC,SAASC,gBAAgB,QAA6B,aAAa;AACnE,OAAOC,mBAAmB,kBAAkB;AAE5C;;CAEC,GACD,OAAO,SAASC;IACd,oEAAoE;IACpE,OAAOD;AACT;AAEA;;;;CAIC,GACD,OAAO,SAASE;IACd,MAAMC,QAAmD,CAAC;IAE1D,8EAA8E;IAC9E,SAASC;QACP,MAAMC,MAAMP,WAAWC;QACvBI,MAAMG,KAAK,GAAGD;QACd,OAAO;IACT;IAEA,OAAO;QACLD;QACAD;IACF;AACF"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/test/datasource-provider.tsx"],"sourcesContent":["// Copyright 2023 The Perses Authors\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport { GlobalDatasource } from '@perses-dev/core';\nimport { DatasourceStoreProviderProps } from '../context';\nimport { getTestDashboard } from './dashboard-provider';\n\nexport const prometheusDemoUrl = 'https://prometheus.demo.do.prometheus.io';\nexport const prometheusDemo: GlobalDatasource = {\n kind: 'GlobalDatasource',\n metadata: {\n name: 'PrometheusDemo',\n createdAt: '0001-01-01T00:00:00Z',\n updatedAt: '0001-01-01T00:00:00Z',\n version: 0,\n },\n spec: {\n default: true,\n plugin: {\n kind: 'PrometheusDatasource',\n spec: { directUrl: prometheusDemoUrl },\n },\n },\n} as const;\n\n// This default currently defines the bare minimum to get a story working in\n// the `Dashboard` storybook with the Prometheus demo api. We'll likely want\n// to expand it to do more in the future.\nexport const defaultDatasourceProps: Pick<DatasourceStoreProviderProps, 'datasourceApi' | 'dashboardResource'> = {\n dashboardResource: getTestDashboard(),\n datasourceApi: {\n buildProxyUrl: () => '',\n getDatasource: () => {\n return Promise.resolve(undefined);\n },\n getGlobalDatasource: (selector) => {\n if (selector.kind === 'PrometheusDatasource') {\n return Promise.resolve(prometheusDemo);\n }\n\n return Promise.resolve(undefined);\n },\n listDatasources: () => {\n return Promise.resolve([]);\n },\n listGlobalDatasources: () => {\n return Promise.resolve([]);\n },\n },\n};\n"],"names":["getTestDashboard","prometheusDemoUrl","prometheusDemo","kind","metadata","name","createdAt","updatedAt","version","spec","default","plugin","directUrl","defaultDatasourceProps","dashboardResource","datasourceApi","buildProxyUrl","getDatasource","Promise","resolve","undefined","getGlobalDatasource","selector","listDatasources","listGlobalDatasources"],"mappings":"AAAA,oCAAoC;AACpC,kEAAkE;AAClE,mEAAmE;AACnE,0CAA0C;AAC1C,EAAE;AACF,6CAA6C;AAC7C,EAAE;AACF,sEAAsE;AACtE,oEAAoE;AACpE,2EAA2E;AAC3E,sEAAsE;AACtE,iCAAiC;AAIjC,SAASA,gBAAgB,QAAQ,uBAAuB;AAExD,OAAO,MAAMC,oBAAoB,2CAA2C;AAC5E,OAAO,MAAMC,iBAAmC;IAC9CC,MAAM;IACNC,UAAU;QACRC,MAAM;QACNC,WAAW;QACXC,WAAW;QACXC,SAAS;IACX;IACAC,MAAM;QACJC,SAAS;QACTC,QAAQ;YACNR,MAAM;YACNM,MAAM;gBAAEG,WAAWX;YAAkB;QACvC;IACF;AACF,EAAW;AAEX,4EAA4E;AAC5E,4EAA4E;AAC5E,yCAAyC;AACzC,OAAO,MAAMY,yBAAoG;IAC/GC,mBAAmBd;IACnBe,eAAe;QACbC,eAAe,IAAM;QACrBC,eAAe;YACb,OAAOC,QAAQC,QAAQC;QACzB;QACAC,qBAAqB,CAACC;YACpB,IAAIA,SAASnB,SAAS,wBAAwB;gBAC5C,OAAOe,QAAQC,QAAQjB;YACzB;YAEA,OAAOgB,QAAQC,QAAQC;QACzB;QACAG,iBAAiB;YACf,OAAOL,QAAQC,QAAQ,EAAE;QAC3B;QACAK,uBAAuB;YACrB,OAAON,QAAQC,QAAQ,EAAE;QAC3B;IACF;AACF,EAAE"}
1
+ {"version":3,"sources":["../../src/test/datasource-provider.tsx"],"sourcesContent":["// Copyright 2023 The Perses Authors\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nimport { GlobalDatasource } from '@perses-dev/core';\nimport { DatasourceStoreProviderProps } from '../context';\nimport { getTestDashboard } from './dashboard-provider';\n\nexport const prometheusDemoUrl = 'https://prometheus.demo.do.prometheus.io';\nexport const prometheusDemo: GlobalDatasource = {\n kind: 'GlobalDatasource',\n metadata: {\n name: 'PrometheusDemo',\n createdAt: '0001-01-01T00:00:00Z',\n updatedAt: '0001-01-01T00:00:00Z',\n version: 0,\n },\n spec: {\n default: true,\n plugin: {\n kind: 'PrometheusDatasource',\n spec: { directUrl: prometheusDemoUrl },\n },\n },\n} as const;\n\n// This default currently defines the bare minimum to get a story working in\n// the `Dashboard` storybook with the Prometheus demo api. We'll likely want\n// to expand it to do more in the future.\nexport const defaultDatasourceProps: Pick<DatasourceStoreProviderProps, 'datasourceApi' | 'dashboardResource'> = {\n dashboardResource: getTestDashboard(),\n datasourceApi: {\n buildProxyUrl: () => '',\n getDatasource: () => {\n return Promise.resolve(undefined);\n },\n getGlobalDatasource: (selector) => {\n if (selector.kind === 'PrometheusDatasource') {\n return Promise.resolve(prometheusDemo);\n }\n\n return Promise.resolve(undefined);\n },\n listDatasources: () => {\n return Promise.resolve([]);\n },\n listGlobalDatasources: () => {\n return Promise.resolve([]);\n },\n },\n};\n"],"names":["getTestDashboard","prometheusDemoUrl","prometheusDemo","kind","metadata","name","createdAt","updatedAt","version","spec","default","plugin","directUrl","defaultDatasourceProps","dashboardResource","datasourceApi","buildProxyUrl","getDatasource","Promise","resolve","undefined","getGlobalDatasource","selector","listDatasources","listGlobalDatasources"],"mappings":"AAAA,oCAAoC;AACpC,kEAAkE;AAClE,mEAAmE;AACnE,0CAA0C;AAC1C,EAAE;AACF,6CAA6C;AAC7C,EAAE;AACF,sEAAsE;AACtE,oEAAoE;AACpE,2EAA2E;AAC3E,sEAAsE;AACtE,iCAAiC;AAIjC,SAASA,gBAAgB,QAAQ,uBAAuB;AAExD,OAAO,MAAMC,oBAAoB,2CAA2C;AAC5E,OAAO,MAAMC,iBAAmC;IAC9CC,MAAM;IACNC,UAAU;QACRC,MAAM;QACNC,WAAW;QACXC,WAAW;QACXC,SAAS;IACX;IACAC,MAAM;QACJC,SAAS;QACTC,QAAQ;YACNR,MAAM;YACNM,MAAM;gBAAEG,WAAWX;YAAkB;QACvC;IACF;AACF,EAAW;AAEX,4EAA4E;AAC5E,4EAA4E;AAC5E,yCAAyC;AACzC,OAAO,MAAMY,yBAAoG;IAC/GC,mBAAmBd;IACnBe,eAAe;QACbC,eAAe,IAAM;QACrBC,eAAe;YACb,OAAOC,QAAQC,OAAO,CAACC;QACzB;QACAC,qBAAqB,CAACC;YACpB,IAAIA,SAASnB,IAAI,KAAK,wBAAwB;gBAC5C,OAAOe,QAAQC,OAAO,CAACjB;YACzB;YAEA,OAAOgB,QAAQC,OAAO,CAACC;QACzB;QACAG,iBAAiB;YACf,OAAOL,QAAQC,OAAO,CAAC,EAAE;QAC3B;QACAK,uBAAuB;YACrB,OAAON,QAAQC,OAAO,CAAC,EAAE;QAC3B;IACF;AACF,EAAE"}
@@ -26,7 +26,7 @@ import { MOCK_PLUGINS } from './plugin-registry';
26
26
  /*
27
27
  * Workaround for React router upgrade type errors.
28
28
  * More details: https://stackoverflow.com/a/69948457/17575201
29
- */ const CustomRouter = ({ history , children })=>{
29
+ */ const CustomRouter = ({ history, children })=>{
30
30
  const [state, setState] = useState({
31
31
  action: history.action,
32
32
  location: history.location