@perses-dev/dashboards 0.37.2 → 0.39.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (118) hide show
  1. package/dist/cjs/components/Dashboard/Dashboard.js +3 -2
  2. package/dist/cjs/components/DiscardChangesConfirmationDialog/DiscardChangesConfirmationDialog.js +12 -52
  3. package/dist/cjs/components/GridLayout/GridItemContent.js +3 -1
  4. package/dist/cjs/components/GridLayout/GridLayout.js +1 -0
  5. package/dist/cjs/components/Panel/Panel.js +8 -3
  6. package/dist/cjs/components/Panel/PanelHeader.js +7 -3
  7. package/dist/cjs/components/SaveDashboardButton/SaveDashboardButton.js +3 -1
  8. package/dist/cjs/components/Variables/EditVariablesButton.js +2 -0
  9. package/dist/cjs/components/Variables/TemplateVariable.js +22 -18
  10. package/dist/cjs/components/Variables/VariableEditor.js +271 -99
  11. package/dist/cjs/components/Variables/VariableList.js +38 -18
  12. package/dist/cjs/components/Variables/index.js +0 -2
  13. package/dist/cjs/context/DatasourceStoreProvider.js +22 -18
  14. package/dist/cjs/context/TemplateVariableProvider/TemplateVariableProvider.js +71 -24
  15. package/dist/cjs/context/TemplateVariableProvider/hydrationUtils.js +55 -5
  16. package/dist/cjs/context/TemplateVariableProvider/utils.js +39 -7
  17. package/dist/cjs/test/render.js +1 -1
  18. package/dist/cjs/views/ViewDashboard/DashboardApp.js +7 -2
  19. package/dist/cjs/views/ViewDashboard/ViewDashboard.js +4 -3
  20. package/dist/components/Dashboard/Dashboard.d.ts +3 -1
  21. package/dist/components/Dashboard/Dashboard.d.ts.map +1 -1
  22. package/dist/components/Dashboard/Dashboard.js +3 -2
  23. package/dist/components/Dashboard/Dashboard.js.map +1 -1
  24. package/dist/components/DiscardChangesConfirmationDialog/DiscardChangesConfirmationDialog.d.ts +1 -1
  25. package/dist/components/DiscardChangesConfirmationDialog/DiscardChangesConfirmationDialog.d.ts.map +1 -1
  26. package/dist/components/DiscardChangesConfirmationDialog/DiscardChangesConfirmationDialog.js +11 -46
  27. package/dist/components/DiscardChangesConfirmationDialog/DiscardChangesConfirmationDialog.js.map +1 -1
  28. package/dist/components/GridLayout/GridItemContent.d.ts +2 -0
  29. package/dist/components/GridLayout/GridItemContent.d.ts.map +1 -1
  30. package/dist/components/GridLayout/GridItemContent.js +3 -1
  31. package/dist/components/GridLayout/GridItemContent.js.map +1 -1
  32. package/dist/components/GridLayout/GridLayout.d.ts +2 -0
  33. package/dist/components/GridLayout/GridLayout.d.ts.map +1 -1
  34. package/dist/components/GridLayout/GridLayout.js +1 -0
  35. package/dist/components/GridLayout/GridLayout.js.map +1 -1
  36. package/dist/components/Panel/Panel.d.ts +20 -0
  37. package/dist/components/Panel/Panel.d.ts.map +1 -1
  38. package/dist/components/Panel/Panel.js +8 -3
  39. package/dist/components/Panel/Panel.js.map +1 -1
  40. package/dist/components/Panel/PanelHeader.d.ts +2 -1
  41. package/dist/components/Panel/PanelHeader.d.ts.map +1 -1
  42. package/dist/components/Panel/PanelHeader.js +7 -3
  43. package/dist/components/Panel/PanelHeader.js.map +1 -1
  44. package/dist/components/PanelDrawer/PanelPreview.d.ts.map +1 -1
  45. package/dist/components/PanelDrawer/PanelPreview.js.map +1 -1
  46. package/dist/components/SaveDashboardButton/SaveDashboardButton.d.ts.map +1 -1
  47. package/dist/components/SaveDashboardButton/SaveDashboardButton.js +3 -1
  48. package/dist/components/SaveDashboardButton/SaveDashboardButton.js.map +1 -1
  49. package/dist/components/Variables/EditVariablesButton.d.ts.map +1 -1
  50. package/dist/components/Variables/EditVariablesButton.js +3 -1
  51. package/dist/components/Variables/EditVariablesButton.js.map +1 -1
  52. package/dist/components/Variables/TemplateVariable.d.ts +2 -1
  53. package/dist/components/Variables/TemplateVariable.d.ts.map +1 -1
  54. package/dist/components/Variables/TemplateVariable.js +21 -17
  55. package/dist/components/Variables/TemplateVariable.js.map +1 -1
  56. package/dist/components/Variables/VariableEditor.d.ts +7 -0
  57. package/dist/components/Variables/VariableEditor.d.ts.map +1 -1
  58. package/dist/components/Variables/VariableEditor.js +261 -95
  59. package/dist/components/Variables/VariableEditor.js.map +1 -1
  60. package/dist/components/Variables/VariableList.d.ts +5 -0
  61. package/dist/components/Variables/VariableList.d.ts.map +1 -1
  62. package/dist/components/Variables/VariableList.js +31 -17
  63. package/dist/components/Variables/VariableList.js.map +1 -1
  64. package/dist/components/Variables/index.d.ts +0 -2
  65. package/dist/components/Variables/index.d.ts.map +1 -1
  66. package/dist/components/Variables/index.js +0 -2
  67. package/dist/components/Variables/index.js.map +1 -1
  68. package/dist/context/DatasourceStoreProvider.d.ts +4 -3
  69. package/dist/context/DatasourceStoreProvider.d.ts.map +1 -1
  70. package/dist/context/DatasourceStoreProvider.js +22 -18
  71. package/dist/context/DatasourceStoreProvider.js.map +1 -1
  72. package/dist/context/TemplateVariableProvider/TemplateVariableProvider.d.ts +39 -10
  73. package/dist/context/TemplateVariableProvider/TemplateVariableProvider.d.ts.map +1 -1
  74. package/dist/context/TemplateVariableProvider/TemplateVariableProvider.js +76 -27
  75. package/dist/context/TemplateVariableProvider/TemplateVariableProvider.js.map +1 -1
  76. package/dist/context/TemplateVariableProvider/hydrationUtils.d.ts +9 -2
  77. package/dist/context/TemplateVariableProvider/hydrationUtils.d.ts.map +1 -1
  78. package/dist/context/TemplateVariableProvider/hydrationUtils.js +60 -5
  79. package/dist/context/TemplateVariableProvider/hydrationUtils.js.map +1 -1
  80. package/dist/context/TemplateVariableProvider/utils.d.ts +27 -2
  81. package/dist/context/TemplateVariableProvider/utils.d.ts.map +1 -1
  82. package/dist/context/TemplateVariableProvider/utils.js +46 -4
  83. package/dist/context/TemplateVariableProvider/utils.js.map +1 -1
  84. package/dist/test/render.js +2 -2
  85. package/dist/test/render.js.map +1 -1
  86. package/dist/views/ViewDashboard/DashboardApp.d.ts.map +1 -1
  87. package/dist/views/ViewDashboard/DashboardApp.js +9 -4
  88. package/dist/views/ViewDashboard/DashboardApp.js.map +1 -1
  89. package/dist/views/ViewDashboard/ViewDashboard.d.ts +2 -1
  90. package/dist/views/ViewDashboard/ViewDashboard.d.ts.map +1 -1
  91. package/dist/views/ViewDashboard/ViewDashboard.js +4 -3
  92. package/dist/views/ViewDashboard/ViewDashboard.js.map +1 -1
  93. package/package.json +6 -6
  94. package/dist/cjs/components/Variables/VariableEditorForm/VariableEditorForm.js +0 -399
  95. package/dist/cjs/components/Variables/VariableEditorForm/VariablePreview.js +0 -178
  96. package/dist/cjs/components/Variables/VariableEditorForm/index.js +0 -29
  97. package/dist/cjs/components/Variables/VariableEditorForm/variable-editor-form-model.js +0 -91
  98. package/dist/cjs/components/Variables/variable-model.js +0 -117
  99. package/dist/components/Variables/VariableEditorForm/VariableEditorForm.d.ts +0 -10
  100. package/dist/components/Variables/VariableEditorForm/VariableEditorForm.d.ts.map +0 -1
  101. package/dist/components/Variables/VariableEditorForm/VariableEditorForm.js +0 -354
  102. package/dist/components/Variables/VariableEditorForm/VariableEditorForm.js.map +0 -1
  103. package/dist/components/Variables/VariableEditorForm/VariablePreview.d.ts +0 -16
  104. package/dist/components/Variables/VariableEditorForm/VariablePreview.d.ts.map +0 -1
  105. package/dist/components/Variables/VariableEditorForm/VariablePreview.js +0 -122
  106. package/dist/components/Variables/VariableEditorForm/VariablePreview.js.map +0 -1
  107. package/dist/components/Variables/VariableEditorForm/index.d.ts +0 -3
  108. package/dist/components/Variables/VariableEditorForm/index.d.ts.map +0 -1
  109. package/dist/components/Variables/VariableEditorForm/index.js +0 -16
  110. package/dist/components/Variables/VariableEditorForm/index.js.map +0 -1
  111. package/dist/components/Variables/VariableEditorForm/variable-editor-form-model.d.ts +0 -23
  112. package/dist/components/Variables/VariableEditorForm/variable-editor-form-model.d.ts.map +0 -1
  113. package/dist/components/Variables/VariableEditorForm/variable-editor-form-model.js +0 -79
  114. package/dist/components/Variables/VariableEditorForm/variable-editor-form-model.js.map +0 -1
  115. package/dist/components/Variables/variable-model.d.ts +0 -16
  116. package/dist/components/Variables/variable-model.d.ts.map +0 -1
  117. package/dist/components/Variables/variable-model.js +0 -105
  118. package/dist/components/Variables/variable-model.js.map +0 -1
@@ -14,9 +14,15 @@
14
14
  Object.defineProperty(exports, "__esModule", {
15
15
  value: true
16
16
  });
17
- Object.defineProperty(exports, "VariableEditor", {
18
- enumerable: true,
19
- get: ()=>VariableEditor
17
+ function _export(target, all) {
18
+ for(var name in all)Object.defineProperty(target, name, {
19
+ enumerable: true,
20
+ get: all[name]
21
+ });
22
+ }
23
+ _export(exports, {
24
+ VariableEditor: ()=>VariableEditor,
25
+ VariableName: ()=>VariableName
20
26
  });
21
27
  const _jsxRuntime = require("react/jsx-runtime");
22
28
  const _react = require("react");
@@ -27,9 +33,10 @@ const _pencil = /*#__PURE__*/ _interopRequireDefault(require("mdi-material-ui/Pe
27
33
  const _trashCan = /*#__PURE__*/ _interopRequireDefault(require("mdi-material-ui/TrashCan"));
28
34
  const _arrowUp = /*#__PURE__*/ _interopRequireDefault(require("mdi-material-ui/ArrowUp"));
29
35
  const _arrowDown = /*#__PURE__*/ _interopRequireDefault(require("mdi-material-ui/ArrowDown"));
36
+ const _contentDuplicate = /*#__PURE__*/ _interopRequireDefault(require("mdi-material-ui/ContentDuplicate"));
37
+ const _pluginSystem = require("@perses-dev/plugin-system");
30
38
  const _context = require("../../context");
31
- const _variableEditorForm = require("./VariableEditorForm");
32
- const _variableModel = require("./variable-model");
39
+ const _hydrationUtils = require("../../context/TemplateVariableProvider/hydrationUtils");
33
40
  function _interopRequireDefault(obj) {
34
41
  return obj && obj.__esModule ? obj : {
35
42
  default: obj
@@ -37,7 +44,7 @@ function _interopRequireDefault(obj) {
37
44
  }
38
45
  function getVariableLabelByKind(kind) {
39
46
  var ref;
40
- return (ref = _variableModel.VARIABLE_TYPES.find((variableType)=>variableType.kind === kind)) === null || ref === void 0 ? void 0 : ref.label;
47
+ return (ref = _pluginSystem.VARIABLE_TYPES.find((variableType)=>variableType.kind === kind)) === null || ref === void 0 ? void 0 : ref.label;
41
48
  }
42
49
  function getValidation(variableDefinitions) {
43
50
  const errors = [];
@@ -54,9 +61,19 @@ function getValidation(variableDefinitions) {
54
61
  function VariableEditor(props) {
55
62
  const [variableDefinitions, setVariableDefinitions] = (0, _useImmer.useImmer)(props.variableDefinitions);
56
63
  const [variableEditIdx, setVariableEditIdx] = (0, _react.useState)(null);
64
+ const [variableFormAction, setVariableFormAction] = (0, _react.useState)('update');
65
+ const externalVariableDefinitions = props.externalVariableDefinitions;
57
66
  const validation = (0, _react.useMemo)(()=>getValidation(variableDefinitions), [
58
67
  variableDefinitions
59
68
  ]);
69
+ const [variableState] = (0, _react.useMemo)(()=>{
70
+ return [
71
+ (0, _hydrationUtils.hydrateTemplateVariableStates)(variableDefinitions, {}, externalVariableDefinitions)
72
+ ];
73
+ }, [
74
+ externalVariableDefinitions,
75
+ variableDefinitions
76
+ ]);
60
77
  const currentEditingVariableDefinition = typeof variableEditIdx === 'number' && variableDefinitions[variableEditIdx];
61
78
  const { openDiscardChangesConfirmationDialog , closeDiscardChangesConfirmationDialog } = (0, _context.useDiscardChangesConfirmationDialog)();
62
79
  const handleCancel = ()=>{
@@ -81,6 +98,7 @@ function VariableEditor(props) {
81
98
  });
82
99
  };
83
100
  const addVariable = ()=>{
101
+ setVariableFormAction('create');
84
102
  setVariableDefinitions((draft)=>{
85
103
  draft.push({
86
104
  kind: 'TextVariable',
@@ -92,6 +110,10 @@ function VariableEditor(props) {
92
110
  });
93
111
  setVariableEditIdx(variableDefinitions.length);
94
112
  };
113
+ const editVariable = (index)=>{
114
+ setVariableFormAction('update');
115
+ setVariableEditIdx(index);
116
+ };
95
117
  const toggleVariableVisibility = (index, visible)=>{
96
118
  setVariableDefinitions((draft)=>{
97
119
  const v = draft[index];
@@ -128,10 +150,15 @@ function VariableEditor(props) {
128
150
  }
129
151
  });
130
152
  };
131
- var ref;
153
+ const overrideVariable = (v)=>{
154
+ setVariableDefinitions((draft)=>{
155
+ draft.push(v);
156
+ });
157
+ };
158
+ var ref, ref1;
132
159
  return /*#__PURE__*/ (0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
133
160
  children: [
134
- currentEditingVariableDefinition && /*#__PURE__*/ (0, _jsxRuntime.jsx)(_variableEditorForm.VariableEditForm, {
161
+ currentEditingVariableDefinition && /*#__PURE__*/ (0, _jsxRuntime.jsx)(_pluginSystem.VariableEditForm, {
135
162
  initialVariableDefinition: currentEditingVariableDefinition,
136
163
  onChange: (definition)=>{
137
164
  setVariableDefinitions((draft)=>{
@@ -139,7 +166,13 @@ function VariableEditor(props) {
139
166
  setVariableEditIdx(null);
140
167
  });
141
168
  },
142
- onCancel: ()=>setVariableEditIdx(null)
169
+ onCancel: ()=>{
170
+ if (variableFormAction === 'create') {
171
+ removeVariable(variableEditIdx);
172
+ }
173
+ setVariableEditIdx(null);
174
+ },
175
+ action: variableFormAction
143
176
  }),
144
177
  !currentEditingVariableDefinition && /*#__PURE__*/ (0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
145
178
  children: [
@@ -153,7 +186,7 @@ function VariableEditor(props) {
153
186
  children: [
154
187
  /*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.Typography, {
155
188
  variant: "h2",
156
- children: "Variables"
189
+ children: "Dashboard Variables"
157
190
  }),
158
191
  /*#__PURE__*/ (0, _jsxRuntime.jsxs)(_material.Stack, {
159
192
  direction: "row",
@@ -178,113 +211,226 @@ function VariableEditor(props) {
178
211
  })
179
212
  ]
180
213
  }),
181
- /*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.Box, {
214
+ /*#__PURE__*/ (0, _jsxRuntime.jsxs)(_material.Box, {
182
215
  padding: 2,
183
216
  sx: {
184
217
  overflowY: 'scroll'
185
218
  },
186
- children: /*#__PURE__*/ (0, _jsxRuntime.jsxs)(_material.Stack, {
187
- spacing: 2,
188
- children: [
189
- !validation.isValid && validation.errors.map((error)=>/*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.Alert, {
190
- severity: "error",
191
- children: error
192
- }, error)),
193
- /*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.TableContainer, {
194
- children: /*#__PURE__*/ (0, _jsxRuntime.jsxs)(_material.Table, {
195
- sx: {
196
- minWidth: 650
197
- },
198
- "aria-label": "table of variables",
199
- children: [
200
- /*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.TableHead, {
201
- children: /*#__PURE__*/ (0, _jsxRuntime.jsxs)(_material.TableRow, {
202
- children: [
203
- /*#__PURE__*/ (0, _jsxRuntime.jsx)(TableCell, {
204
- children: "Visibility"
205
- }),
206
- /*#__PURE__*/ (0, _jsxRuntime.jsx)(TableCell, {
207
- children: "Name"
208
- }),
209
- /*#__PURE__*/ (0, _jsxRuntime.jsx)(TableCell, {
210
- children: "Type"
211
- }),
212
- /*#__PURE__*/ (0, _jsxRuntime.jsx)(TableCell, {
213
- align: "right"
214
- })
215
- ]
216
- })
217
- }),
218
- /*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.TableBody, {
219
- children: variableDefinitions.map((v, idx)=>{
220
- var ref1;
221
- /*#__PURE__*/ return (0, _jsxRuntime.jsxs)(_material.TableRow, {
219
+ children: [
220
+ /*#__PURE__*/ (0, _jsxRuntime.jsxs)(_material.Stack, {
221
+ spacing: 2,
222
+ children: [
223
+ !validation.isValid && validation.errors.map((error)=>/*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.Alert, {
224
+ severity: "error",
225
+ children: error
226
+ }, error)),
227
+ /*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.TableContainer, {
228
+ children: /*#__PURE__*/ (0, _jsxRuntime.jsxs)(_material.Table, {
229
+ sx: {
230
+ minWidth: 650
231
+ },
232
+ "aria-label": "table of variables",
233
+ children: [
234
+ /*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.TableHead, {
235
+ children: /*#__PURE__*/ (0, _jsxRuntime.jsxs)(_material.TableRow, {
222
236
  children: [
223
237
  /*#__PURE__*/ (0, _jsxRuntime.jsx)(TableCell, {
224
- component: "th",
225
- scope: "row",
226
- children: /*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.Switch, {
227
- checked: ((ref1 = v.spec.display) === null || ref1 === void 0 ? void 0 : ref1.hidden) !== true,
228
- onChange: (e)=>{
229
- toggleVariableVisibility(idx, e.target.checked);
230
- }
231
- })
238
+ children: "Visibility"
232
239
  }),
233
240
  /*#__PURE__*/ (0, _jsxRuntime.jsx)(TableCell, {
234
- component: "th",
235
- scope: "row",
236
- sx: {
237
- fontWeight: 'bold'
238
- },
239
- children: v.spec.name
241
+ children: "Name"
240
242
  }),
241
243
  /*#__PURE__*/ (0, _jsxRuntime.jsx)(TableCell, {
242
- children: (ref = getVariableLabelByKind(v.kind)) !== null && ref !== void 0 ? ref : v.kind
244
+ children: "Type"
243
245
  }),
244
- /*#__PURE__*/ (0, _jsxRuntime.jsxs)(TableCell, {
245
- align: "right",
246
+ /*#__PURE__*/ (0, _jsxRuntime.jsx)(TableCell, {
247
+ align: "right"
248
+ })
249
+ ]
250
+ })
251
+ }),
252
+ /*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.TableBody, {
253
+ children: variableDefinitions.map((v, idx)=>{
254
+ var ref1;
255
+ /*#__PURE__*/ return (0, _jsxRuntime.jsxs)(_material.TableRow, {
256
+ children: [
257
+ /*#__PURE__*/ (0, _jsxRuntime.jsx)(TableCell, {
258
+ component: "th",
259
+ scope: "row",
260
+ children: /*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.Switch, {
261
+ checked: ((ref1 = v.spec.display) === null || ref1 === void 0 ? void 0 : ref1.hidden) !== true,
262
+ onChange: (e)=>{
263
+ toggleVariableVisibility(idx, e.target.checked);
264
+ }
265
+ })
266
+ }),
267
+ /*#__PURE__*/ (0, _jsxRuntime.jsx)(TableCell, {
268
+ component: "th",
269
+ scope: "row",
270
+ sx: {
271
+ fontWeight: 'bold'
272
+ },
273
+ children: /*#__PURE__*/ (0, _jsxRuntime.jsx)(VariableName, {
274
+ name: v.spec.name,
275
+ state: variableState.get({
276
+ name: v.spec.name
277
+ })
278
+ })
279
+ }),
280
+ /*#__PURE__*/ (0, _jsxRuntime.jsx)(TableCell, {
281
+ children: (ref = getVariableLabelByKind(v.kind)) !== null && ref !== void 0 ? ref : v.kind
282
+ }),
283
+ /*#__PURE__*/ (0, _jsxRuntime.jsxs)(TableCell, {
284
+ align: "right",
285
+ children: [
286
+ /*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.IconButton, {
287
+ onClick: ()=>changeVariableOrder(idx, 'up'),
288
+ disabled: idx === 0,
289
+ children: /*#__PURE__*/ (0, _jsxRuntime.jsx)(_arrowUp.default, {})
290
+ }),
291
+ /*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.IconButton, {
292
+ onClick: ()=>changeVariableOrder(idx, 'down'),
293
+ disabled: idx === variableDefinitions.length - 1,
294
+ children: /*#__PURE__*/ (0, _jsxRuntime.jsx)(_arrowDown.default, {})
295
+ }),
296
+ /*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.IconButton, {
297
+ onClick: ()=>editVariable(idx),
298
+ children: /*#__PURE__*/ (0, _jsxRuntime.jsx)(_pencil.default, {})
299
+ }),
300
+ /*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.IconButton, {
301
+ onClick: ()=>removeVariable(idx),
302
+ children: /*#__PURE__*/ (0, _jsxRuntime.jsx)(_trashCan.default, {})
303
+ })
304
+ ]
305
+ })
306
+ ]
307
+ }, v.spec.name);
308
+ })
309
+ })
310
+ ]
311
+ })
312
+ }),
313
+ /*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.Box, {
314
+ display: "flex",
315
+ children: /*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.Button, {
316
+ variant: "contained",
317
+ startIcon: /*#__PURE__*/ (0, _jsxRuntime.jsx)(_plus.default, {}),
318
+ sx: {
319
+ marginLeft: 'auto'
320
+ },
321
+ onClick: addVariable,
322
+ children: "Add Variable"
323
+ })
324
+ })
325
+ ]
326
+ }),
327
+ externalVariableDefinitions.map((extVar)=>{
328
+ /*#__PURE__*/ return (0, _jsxRuntime.jsxs)(_material.Stack, {
329
+ children: [
330
+ /*#__PURE__*/ (0, _jsxRuntime.jsxs)(_material.Typography, {
331
+ variant: "h2",
332
+ children: [
333
+ (0, _material.capitalize)(extVar.source),
334
+ " Variables"
335
+ ]
336
+ }),
337
+ /*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.TableContainer, {
338
+ children: /*#__PURE__*/ (0, _jsxRuntime.jsxs)(_material.Table, {
339
+ sx: {
340
+ minWidth: 650
341
+ },
342
+ "aria-label": "table of variables",
343
+ children: [
344
+ /*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.TableHead, {
345
+ children: /*#__PURE__*/ (0, _jsxRuntime.jsxs)(_material.TableRow, {
346
+ children: [
347
+ /*#__PURE__*/ (0, _jsxRuntime.jsx)(TableCell, {
348
+ children: "Visibility"
349
+ }),
350
+ /*#__PURE__*/ (0, _jsxRuntime.jsx)(TableCell, {
351
+ children: "Name"
352
+ }),
353
+ /*#__PURE__*/ (0, _jsxRuntime.jsx)(TableCell, {
354
+ children: "Type"
355
+ }),
356
+ /*#__PURE__*/ (0, _jsxRuntime.jsx)(TableCell, {
357
+ align: "right"
358
+ })
359
+ ]
360
+ })
361
+ }),
362
+ /*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.TableBody, {
363
+ children: extVar.definitions.map((v)=>{
364
+ var ref;
365
+ /*#__PURE__*/ return (0, _jsxRuntime.jsxs)(_material.TableRow, {
246
366
  children: [
247
- /*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.IconButton, {
248
- onClick: ()=>changeVariableOrder(idx, 'up'),
249
- disabled: idx === 0,
250
- children: /*#__PURE__*/ (0, _jsxRuntime.jsx)(_arrowUp.default, {})
367
+ /*#__PURE__*/ (0, _jsxRuntime.jsx)(TableCell, {
368
+ component: "th",
369
+ scope: "row",
370
+ children: /*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.Switch, {
371
+ checked: ((ref = v.spec.display) === null || ref === void 0 ? void 0 : ref.hidden) !== true,
372
+ disabled: true
373
+ })
251
374
  }),
252
- /*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.IconButton, {
253
- onClick: ()=>changeVariableOrder(idx, 'down'),
254
- disabled: idx === variableDefinitions.length - 1,
255
- children: /*#__PURE__*/ (0, _jsxRuntime.jsx)(_arrowDown.default, {})
375
+ /*#__PURE__*/ (0, _jsxRuntime.jsx)(TableCell, {
376
+ component: "th",
377
+ scope: "row",
378
+ sx: {
379
+ fontWeight: 'bold'
380
+ },
381
+ children: /*#__PURE__*/ (0, _jsxRuntime.jsx)(VariableName, {
382
+ name: v.spec.name,
383
+ state: variableState.get({
384
+ name: v.spec.name,
385
+ source: extVar.source
386
+ })
387
+ })
256
388
  }),
257
- /*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.IconButton, {
258
- onClick: ()=>setVariableEditIdx(idx),
259
- children: /*#__PURE__*/ (0, _jsxRuntime.jsx)(_pencil.default, {})
389
+ /*#__PURE__*/ (0, _jsxRuntime.jsx)(TableCell, {
390
+ children: (ref1 = getVariableLabelByKind(v.kind)) !== null && ref1 !== void 0 ? ref1 : v.kind
260
391
  }),
261
- /*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.IconButton, {
262
- onClick: ()=>removeVariable(idx),
263
- children: /*#__PURE__*/ (0, _jsxRuntime.jsx)(_trashCan.default, {})
392
+ /*#__PURE__*/ (0, _jsxRuntime.jsxs)(TableCell, {
393
+ align: "right",
394
+ children: [
395
+ /*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.Tooltip, {
396
+ title: "Override",
397
+ children: /*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.IconButton, {
398
+ onClick: ()=>overrideVariable(v),
399
+ disabled: !!variableState.get({
400
+ name: v.spec.name
401
+ }),
402
+ children: /*#__PURE__*/ (0, _jsxRuntime.jsx)(_contentDuplicate.default, {})
403
+ })
404
+ }),
405
+ /*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.IconButton, {
406
+ disabled: true,
407
+ children: /*#__PURE__*/ (0, _jsxRuntime.jsx)(_arrowUp.default, {})
408
+ }),
409
+ /*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.IconButton, {
410
+ disabled: true,
411
+ children: /*#__PURE__*/ (0, _jsxRuntime.jsx)(_arrowDown.default, {})
412
+ }),
413
+ /*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.IconButton, {
414
+ disabled: true,
415
+ children: /*#__PURE__*/ (0, _jsxRuntime.jsx)(_pencil.default, {})
416
+ }),
417
+ /*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.IconButton, {
418
+ disabled: true,
419
+ children: /*#__PURE__*/ (0, _jsxRuntime.jsx)(_trashCan.default, {})
420
+ })
421
+ ]
264
422
  })
265
423
  ]
266
- })
267
- ]
268
- }, v.spec.name);
269
- })
424
+ }, v.spec.name);
425
+ })
426
+ })
427
+ ]
270
428
  })
271
- ]
272
- })
273
- }),
274
- /*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.Box, {
275
- display: "flex",
276
- children: /*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.Button, {
277
- variant: "contained",
278
- startIcon: /*#__PURE__*/ (0, _jsxRuntime.jsx)(_plus.default, {}),
279
- sx: {
280
- marginLeft: 'auto'
281
- },
282
- onClick: addVariable,
283
- children: "Add Variable"
284
- })
285
- })
286
- ]
287
- })
429
+ })
430
+ ]
431
+ }, extVar.source);
432
+ })
433
+ ]
288
434
  })
289
435
  ]
290
436
  })
@@ -294,3 +440,29 @@ function VariableEditor(props) {
294
440
  const TableCell = (0, _material.styled)(_material.TableCell)(({ theme })=>({
295
441
  borderBottom: `solid 1px ${theme.palette.divider}`
296
442
  }));
443
+ function VariableName(props) {
444
+ const { name , state } = props;
445
+ return /*#__PURE__*/ (0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
446
+ children: [
447
+ !(state === null || state === void 0 ? void 0 : state.overridden) && `${name} `,
448
+ !(state === null || state === void 0 ? void 0 : state.overridden) && (state === null || state === void 0 ? void 0 : state.overriding) && /*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.Box, {
449
+ fontWeight: "normal",
450
+ color: (theme)=>theme.palette.primary.main,
451
+ children: "(overriding)"
452
+ }),
453
+ (state === null || state === void 0 ? void 0 : state.overridden) && /*#__PURE__*/ (0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
454
+ children: [
455
+ /*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.Box, {
456
+ color: (theme)=>theme.palette.grey[500],
457
+ children: name
458
+ }),
459
+ /*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.Box, {
460
+ fontWeight: "normal",
461
+ color: (theme)=>theme.palette.grey[500],
462
+ children: "(overridden)"
463
+ })
464
+ ]
465
+ })
466
+ ]
467
+ });
468
+ }
@@ -14,9 +14,15 @@
14
14
  Object.defineProperty(exports, "__esModule", {
15
15
  value: true
16
16
  });
17
- Object.defineProperty(exports, "TemplateVariableList", {
18
- enumerable: true,
19
- get: ()=>TemplateVariableList
17
+ function _export(target, all) {
18
+ for(var name in all)Object.defineProperty(target, name, {
19
+ enumerable: true,
20
+ get: all[name]
21
+ });
22
+ }
23
+ _export(exports, {
24
+ TemplateVariableList: ()=>TemplateVariableList,
25
+ TemplateVariableListItem: ()=>TemplateVariableListItem
20
26
  });
21
27
  const _jsxRuntime = require("react/jsx-runtime");
22
28
  const _material = require("@mui/material");
@@ -26,20 +32,34 @@ const VARIABLE_INPUT_MIN_WIDTH = '120px';
26
32
  const VARIABLE_INPUT_MAX_WIDTH = '240px';
27
33
  function TemplateVariableList() {
28
34
  const variableDefinitions = (0, _context.useTemplateVariableDefinitions)();
29
- return /*#__PURE__*/ (0, _jsxRuntime.jsx)(_jsxRuntime.Fragment, {
30
- children: variableDefinitions.map((v)=>{
31
- var ref;
32
- /*#__PURE__*/ return (0, _jsxRuntime.jsx)(_material.Box, {
33
- display: ((ref = v.spec.display) === null || ref === void 0 ? void 0 : ref.hidden) ? 'none' : undefined,
34
- minWidth: VARIABLE_INPUT_MIN_WIDTH,
35
- maxWidth: VARIABLE_INPUT_MAX_WIDTH,
36
- marginBottom: 1,
37
- marginRight: 1,
38
- "data-testid": "template-variable",
39
- children: /*#__PURE__*/ (0, _jsxRuntime.jsx)(_templateVariable.TemplateVariable, {
40
- name: v.spec.name
41
- }, v.spec.name)
42
- }, v.spec.name);
43
- })
35
+ const externalVariableDefinitions = (0, _context.useTemplateExternalVariableDefinitions)();
36
+ return /*#__PURE__*/ (0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
37
+ children: [
38
+ externalVariableDefinitions.slice().reverse() // We reverse to have the most prioritized on top
39
+ .map((def)=>def.definitions.map((v)=>/*#__PURE__*/ (0, _jsxRuntime.jsx)(TemplateVariableListItem, {
40
+ spec: v.spec,
41
+ source: def.source
42
+ }, v.spec.name + def.source))),
43
+ variableDefinitions.map((v)=>/*#__PURE__*/ (0, _jsxRuntime.jsx)(TemplateVariableListItem, {
44
+ spec: v.spec
45
+ }, v.spec.name))
46
+ ]
44
47
  });
45
48
  }
49
+ function TemplateVariableListItem({ spec , source }) {
50
+ var ref, ref1;
51
+ const ctx = (0, _context.useTemplateVariable)(spec.name, source);
52
+ var ref2, ref3;
53
+ return /*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.Box, {
54
+ display: ((ref = ctx.state) === null || ref === void 0 ? void 0 : ref.overridden) || ((ref1 = spec.display) === null || ref1 === void 0 ? void 0 : ref1.hidden) ? 'none' : undefined,
55
+ minWidth: VARIABLE_INPUT_MIN_WIDTH,
56
+ maxWidth: VARIABLE_INPUT_MAX_WIDTH,
57
+ marginBottom: 1,
58
+ marginRight: 1,
59
+ "data-testid": "template-variable",
60
+ children: /*#__PURE__*/ (0, _jsxRuntime.jsx)(_templateVariable.TemplateVariable, {
61
+ name: spec.name,
62
+ source: source
63
+ }, (ref2 = spec.name + source) !== null && ref2 !== void 0 ? ref2 : '')
64
+ }, (ref3 = spec.name + source) !== null && ref3 !== void 0 ? ref3 : '');
65
+ }
@@ -17,9 +17,7 @@ Object.defineProperty(exports, "__esModule", {
17
17
  _exportStar(require("./EditVariablesButton"), exports);
18
18
  _exportStar(require("./TemplateVariable"), exports);
19
19
  _exportStar(require("./VariableEditor"), exports);
20
- _exportStar(require("./VariableEditorForm"), exports);
21
20
  _exportStar(require("./VariableList"), exports);
22
- _exportStar(require("./variable-model"), exports);
23
21
  function _exportStar(from, to) {
24
22
  Object.keys(from).forEach(function(k) {
25
23
  if (k !== "default" && !Object.prototype.hasOwnProperty.call(to, k)) Object.defineProperty(to, k, {
@@ -23,26 +23,30 @@ const _react = require("react");
23
23
  const _core = require("@perses-dev/core");
24
24
  const _pluginSystem = require("@perses-dev/plugin-system");
25
25
  function DatasourceStoreProvider(props) {
26
- const { dashboardResource , datasourceApi , onCreate , children } = props;
27
- const { project } = dashboardResource.metadata;
26
+ const { dashboardResource , projectName , datasourceApi , onCreate , children } = props;
27
+ const project = projectName !== null && projectName !== void 0 ? projectName : dashboardResource === null || dashboardResource === void 0 ? void 0 : dashboardResource.metadata.project;
28
28
  const { getPlugin , listPluginMetadata } = (0, _pluginSystem.usePluginRegistry)();
29
29
  const findDatasource = (0, _core.useEvent)(async (selector)=>{
30
30
  // Try to find it in dashboard spec
31
- const { datasources } = dashboardResource.spec;
32
- const dashboardDatasource = findDashboardDatasource(datasources, selector);
33
- if (dashboardDatasource !== undefined) {
34
- return {
35
- spec: dashboardDatasource,
36
- proxyUrl: undefined
37
- };
31
+ if (dashboardResource) {
32
+ const { datasources } = dashboardResource.spec;
33
+ const dashboardDatasource = findDashboardDatasource(datasources, selector);
34
+ if (dashboardDatasource !== undefined) {
35
+ return {
36
+ spec: dashboardDatasource,
37
+ proxyUrl: undefined
38
+ };
39
+ }
38
40
  }
39
- // Try to find it at the project level as a Datasource resource
40
- const datasource = await datasourceApi.getDatasource(project, selector);
41
- if (datasource !== undefined) {
42
- return {
43
- spec: datasource.resource.spec,
44
- proxyUrl: datasource.proxyUrl
45
- };
41
+ if (project) {
42
+ // Try to find it at the project level as a Datasource resource
43
+ const datasource = await datasourceApi.getDatasource(project, selector);
44
+ if (datasource !== undefined) {
45
+ return {
46
+ spec: datasource.resource.spec,
47
+ proxyUrl: datasource.proxyUrl
48
+ };
49
+ }
46
50
  }
47
51
  // Try to find it at the global level as a GlobalDatasource resource
48
52
  const globalDatasource = await datasourceApi.getGlobalDatasource(selector);
@@ -84,7 +88,7 @@ function DatasourceStoreProvider(props) {
84
88
  const listDatasourceMetadata = (0, _core.useEvent)(async (datasourcePluginKind)=>{
85
89
  const [pluginMetadata, datasources, globalDatasources] = await Promise.all([
86
90
  listPluginMetadata('Datasource'),
87
- datasourceApi.listDatasources(project, datasourcePluginKind),
91
+ project ? datasourceApi.listDatasources(project, datasourcePluginKind) : [],
88
92
  datasourceApi.listGlobalDatasources(datasourcePluginKind)
89
93
  ]);
90
94
  // Find the metadata for the plugin type they asked for so we can use it for the name of the default datasource
@@ -95,7 +99,7 @@ function DatasourceStoreProvider(props) {
95
99
  // Get helper for de-duping results properly
96
100
  const { results , addResult } = buildListDatasourceMetadataResults(datasourcePluginMetadata.display.name);
97
101
  // Start with dashboard datasources that have highest precedence
98
- if (dashboardResource.spec.datasources !== undefined) {
102
+ if (dashboardResource === null || dashboardResource === void 0 ? void 0 : dashboardResource.spec.datasources) {
99
103
  for(const selectorName in dashboardResource.spec.datasources){
100
104
  const spec = dashboardResource.spec.datasources[selectorName];
101
105
  if (spec === undefined || spec.plugin.kind !== datasourcePluginKind) continue;