@perses-dev/dashboards 0.20.0 → 0.21.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 (104) hide show
  1. package/dist/cjs/components/DashboardToolbar/DashboardToolbar.js +18 -5
  2. package/dist/cjs/components/DeletePanelDialog/DeletePanelDialog.js +2 -0
  3. package/dist/cjs/components/DeletePanelGroupDialog/DeletePanelGroupDialog.js +2 -0
  4. package/dist/cjs/components/DiscardChangesConfirmationDialog/DiscardChangesConfirmationDialog.js +74 -0
  5. package/dist/cjs/components/{UnsavedChangesConfirmationDialog → DiscardChangesConfirmationDialog}/index.js +1 -1
  6. package/dist/cjs/components/GridLayout/GridTitle.js +38 -22
  7. package/dist/cjs/components/Panel/PanelHeader.js +59 -26
  8. package/dist/cjs/components/PanelDrawer/PanelDrawer.js +29 -8
  9. package/dist/cjs/components/PanelDrawer/PanelEditorForm.js +11 -6
  10. package/dist/cjs/components/TimeRangeControls/TimeRangeControls.js +9 -2
  11. package/dist/cjs/components/Variables/Variable.js +5 -3
  12. package/dist/cjs/components/Variables/VariableEditor.js +115 -99
  13. package/dist/cjs/components/Variables/VariableEditorForm/VariableEditorForm.js +67 -56
  14. package/dist/cjs/components/Variables/VariableList.js +7 -20
  15. package/dist/cjs/components/Variables/variable-model.js +12 -1
  16. package/dist/cjs/components/index.js +1 -1
  17. package/dist/cjs/context/DashboardProvider/DashboardProvider.js +2 -0
  18. package/dist/cjs/context/DashboardProvider/dashboard-provider-api.js +10 -1
  19. package/dist/cjs/context/DashboardProvider/discard-changes-dialog-slice.js +33 -0
  20. package/dist/cjs/views/ViewDashboard/DashboardApp.js +14 -14
  21. package/dist/cjs/views/ViewDashboard/ViewDashboard.js +2 -1
  22. package/dist/components/DashboardToolbar/DashboardToolbar.d.ts +2 -0
  23. package/dist/components/DashboardToolbar/DashboardToolbar.d.ts.map +1 -1
  24. package/dist/components/DashboardToolbar/DashboardToolbar.js +19 -6
  25. package/dist/components/DashboardToolbar/DashboardToolbar.js.map +1 -1
  26. package/dist/components/DeletePanelDialog/DeletePanelDialog.js +2 -0
  27. package/dist/components/DeletePanelDialog/DeletePanelDialog.js.map +1 -1
  28. package/dist/components/DeletePanelGroupDialog/DeletePanelGroupDialog.d.ts.map +1 -1
  29. package/dist/components/DeletePanelGroupDialog/DeletePanelGroupDialog.js +2 -0
  30. package/dist/components/DeletePanelGroupDialog/DeletePanelGroupDialog.js.map +1 -1
  31. package/dist/components/DiscardChangesConfirmationDialog/DiscardChangesConfirmationDialog.d.ts +3 -0
  32. package/dist/components/DiscardChangesConfirmationDialog/DiscardChangesConfirmationDialog.d.ts.map +1 -0
  33. package/dist/components/DiscardChangesConfirmationDialog/DiscardChangesConfirmationDialog.js +63 -0
  34. package/dist/components/DiscardChangesConfirmationDialog/DiscardChangesConfirmationDialog.js.map +1 -0
  35. package/dist/components/DiscardChangesConfirmationDialog/index.d.ts +2 -0
  36. package/dist/components/DiscardChangesConfirmationDialog/index.d.ts.map +1 -0
  37. package/dist/components/{UnsavedChangesConfirmationDialog → DiscardChangesConfirmationDialog}/index.js +1 -1
  38. package/dist/components/{UnsavedChangesConfirmationDialog → DiscardChangesConfirmationDialog}/index.js.map +1 -1
  39. package/dist/components/GridLayout/GridTitle.d.ts.map +1 -1
  40. package/dist/components/GridLayout/GridTitle.js +38 -22
  41. package/dist/components/GridLayout/GridTitle.js.map +1 -1
  42. package/dist/components/Panel/PanelHeader.d.ts.map +1 -1
  43. package/dist/components/Panel/PanelHeader.js +61 -28
  44. package/dist/components/Panel/PanelHeader.js.map +1 -1
  45. package/dist/components/PanelDrawer/PanelDrawer.d.ts.map +1 -1
  46. package/dist/components/PanelDrawer/PanelDrawer.js +32 -11
  47. package/dist/components/PanelDrawer/PanelDrawer.js.map +1 -1
  48. package/dist/components/PanelDrawer/PanelEditorForm.d.ts +1 -1
  49. package/dist/components/PanelDrawer/PanelEditorForm.d.ts.map +1 -1
  50. package/dist/components/PanelDrawer/PanelEditorForm.js +12 -7
  51. package/dist/components/PanelDrawer/PanelEditorForm.js.map +1 -1
  52. package/dist/components/TimeRangeControls/TimeRangeControls.d.ts +5 -1
  53. package/dist/components/TimeRangeControls/TimeRangeControls.d.ts.map +1 -1
  54. package/dist/components/TimeRangeControls/TimeRangeControls.js +9 -2
  55. package/dist/components/TimeRangeControls/TimeRangeControls.js.map +1 -1
  56. package/dist/components/Variables/Variable.js +5 -3
  57. package/dist/components/Variables/Variable.js.map +1 -1
  58. package/dist/components/Variables/VariableEditor.d.ts.map +1 -1
  59. package/dist/components/Variables/VariableEditor.js +115 -99
  60. package/dist/components/Variables/VariableEditor.js.map +1 -1
  61. package/dist/components/Variables/VariableEditorForm/VariableEditorForm.d.ts.map +1 -1
  62. package/dist/components/Variables/VariableEditorForm/VariableEditorForm.js +68 -57
  63. package/dist/components/Variables/VariableEditorForm/VariableEditorForm.js.map +1 -1
  64. package/dist/components/Variables/VariableList.d.ts.map +1 -1
  65. package/dist/components/Variables/VariableList.js +7 -20
  66. package/dist/components/Variables/VariableList.js.map +1 -1
  67. package/dist/components/Variables/variable-model.d.ts +7 -0
  68. package/dist/components/Variables/variable-model.d.ts.map +1 -1
  69. package/dist/components/Variables/variable-model.js +10 -0
  70. package/dist/components/Variables/variable-model.js.map +1 -1
  71. package/dist/components/index.d.ts +1 -1
  72. package/dist/components/index.js +1 -1
  73. package/dist/components/index.js.map +1 -1
  74. package/dist/context/DashboardProvider/DashboardProvider.d.ts +2 -1
  75. package/dist/context/DashboardProvider/DashboardProvider.d.ts.map +1 -1
  76. package/dist/context/DashboardProvider/DashboardProvider.js +2 -0
  77. package/dist/context/DashboardProvider/DashboardProvider.js.map +1 -1
  78. package/dist/context/DashboardProvider/dashboard-provider-api.d.ts +5 -0
  79. package/dist/context/DashboardProvider/dashboard-provider-api.d.ts.map +1 -1
  80. package/dist/context/DashboardProvider/dashboard-provider-api.js +8 -0
  81. package/dist/context/DashboardProvider/dashboard-provider-api.js.map +1 -1
  82. package/dist/context/DashboardProvider/discard-changes-dialog-slice.d.ts +15 -0
  83. package/dist/context/DashboardProvider/discard-changes-dialog-slice.d.ts.map +1 -0
  84. package/dist/context/DashboardProvider/discard-changes-dialog-slice.js +27 -0
  85. package/dist/context/DashboardProvider/discard-changes-dialog-slice.js.map +1 -0
  86. package/dist/context/DashboardProvider/index.d.ts +1 -0
  87. package/dist/context/DashboardProvider/index.d.ts.map +1 -1
  88. package/dist/context/DashboardProvider/index.js.map +1 -1
  89. package/dist/views/ViewDashboard/DashboardApp.d.ts +1 -0
  90. package/dist/views/ViewDashboard/DashboardApp.d.ts.map +1 -1
  91. package/dist/views/ViewDashboard/DashboardApp.js +16 -16
  92. package/dist/views/ViewDashboard/DashboardApp.js.map +1 -1
  93. package/dist/views/ViewDashboard/ViewDashboard.d.ts +1 -0
  94. package/dist/views/ViewDashboard/ViewDashboard.d.ts.map +1 -1
  95. package/dist/views/ViewDashboard/ViewDashboard.js +2 -1
  96. package/dist/views/ViewDashboard/ViewDashboard.js.map +1 -1
  97. package/package.json +4 -4
  98. package/dist/cjs/components/UnsavedChangesConfirmationDialog/UnsavedChangesConfirmationDialog.js +0 -67
  99. package/dist/components/UnsavedChangesConfirmationDialog/UnsavedChangesConfirmationDialog.d.ts +0 -8
  100. package/dist/components/UnsavedChangesConfirmationDialog/UnsavedChangesConfirmationDialog.d.ts.map +0 -1
  101. package/dist/components/UnsavedChangesConfirmationDialog/UnsavedChangesConfirmationDialog.js +0 -56
  102. package/dist/components/UnsavedChangesConfirmationDialog/UnsavedChangesConfirmationDialog.js.map +0 -1
  103. package/dist/components/UnsavedChangesConfirmationDialog/index.d.ts +0 -2
  104. package/dist/components/UnsavedChangesConfirmationDialog/index.d.ts.map +0 -1
@@ -26,12 +26,18 @@ const _pencil = /*#__PURE__*/ _interopRequireDefault(require("mdi-material-ui/Pe
26
26
  const _trashCan = /*#__PURE__*/ _interopRequireDefault(require("mdi-material-ui/TrashCan"));
27
27
  const _arrowUp = /*#__PURE__*/ _interopRequireDefault(require("mdi-material-ui/ArrowUp"));
28
28
  const _arrowDown = /*#__PURE__*/ _interopRequireDefault(require("mdi-material-ui/ArrowDown"));
29
+ const _context = require("../../context");
29
30
  const _variableEditorForm = require("./VariableEditorForm");
31
+ const _variableModel = require("./variable-model");
30
32
  function _interopRequireDefault(obj) {
31
33
  return obj && obj.__esModule ? obj : {
32
34
  default: obj
33
35
  };
34
36
  }
37
+ function getVariableLabelByKind(kind) {
38
+ var ref;
39
+ return (ref = _variableModel.VARIABLE_TYPES.find((variableType)=>variableType.kind === kind)) === null || ref === void 0 ? void 0 : ref.label;
40
+ }
35
41
  function getValidation(variableDefinitions) {
36
42
  const errors = [];
37
43
  /** Variable names must be unique */ const variableNames = variableDefinitions.map((variableDefinition)=>variableDefinition.spec.name);
@@ -51,6 +57,23 @@ function VariableEditor(props) {
51
57
  variableDefinitions
52
58
  ]);
53
59
  const currentEditingVariableDefinition = typeof variableEditIdx === 'number' && variableDefinitions[variableEditIdx];
60
+ const { openDiscardChangesConfirmationDialog , closeDiscardChangesConfirmationDialog } = (0, _context.useDiscardChangesConfirmationDialog)();
61
+ const handleCancel = ()=>{
62
+ if (JSON.stringify(props.variableDefinitions) !== JSON.stringify(variableDefinitions)) {
63
+ openDiscardChangesConfirmationDialog({
64
+ onDiscardChanges: ()=>{
65
+ closeDiscardChangesConfirmationDialog();
66
+ props.onCancel();
67
+ },
68
+ onCancel: ()=>{
69
+ closeDiscardChangesConfirmationDialog();
70
+ },
71
+ description: 'You have unapplied changes. Are you sure you want to discard these changes? Changes cannot be recovered.'
72
+ });
73
+ } else {
74
+ props.onCancel();
75
+ }
76
+ };
54
77
  const removeVariable = (index)=>{
55
78
  setVariableDefinitions((draft)=>{
56
79
  draft.splice(index, 1);
@@ -66,6 +89,7 @@ function VariableEditor(props) {
66
89
  }
67
90
  });
68
91
  });
92
+ setVariableEditIdx(variableDefinitions.length);
69
93
  };
70
94
  const toggleVariableVisibility = (index, visible)=>{
71
95
  setVariableDefinitions((draft)=>{
@@ -103,6 +127,7 @@ function VariableEditor(props) {
103
127
  }
104
128
  });
105
129
  };
130
+ var ref;
106
131
  return /*#__PURE__*/ (0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
107
132
  children: [
108
133
  currentEditingVariableDefinition && /*#__PURE__*/ (0, _jsxRuntime.jsx)(_variableEditorForm.VariableEditForm, {
@@ -127,7 +152,7 @@ function VariableEditor(props) {
127
152
  children: [
128
153
  /*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.Typography, {
129
154
  variant: "h2",
130
- children: "Template Variables"
155
+ children: "Variables"
131
156
  }),
132
157
  /*#__PURE__*/ (0, _jsxRuntime.jsxs)(_material.Stack, {
133
158
  direction: "row",
@@ -145,126 +170,117 @@ function VariableEditor(props) {
145
170
  /*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.Button, {
146
171
  color: "secondary",
147
172
  variant: "outlined",
148
- onClick: ()=>{
149
- props.onCancel();
150
- },
173
+ onClick: handleCancel,
151
174
  children: "Cancel"
152
175
  })
153
176
  ]
154
177
  })
155
178
  ]
156
179
  }),
157
- /*#__PURE__*/ (0, _jsxRuntime.jsxs)(_material.Box, {
180
+ /*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.Box, {
158
181
  padding: 2,
159
182
  sx: {
160
183
  overflowY: 'scroll'
161
184
  },
162
- children: [
163
- /*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.Typography, {
164
- variant: "h3",
165
- mb: 2,
166
- children: "Variable List"
167
- }),
168
- /*#__PURE__*/ (0, _jsxRuntime.jsxs)(_material.Stack, {
169
- spacing: 2,
170
- children: [
171
- !validation.isValid && validation.errors.map((error)=>/*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.Alert, {
172
- severity: "error",
173
- children: error
174
- }, error)),
175
- /*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.TableContainer, {
176
- children: /*#__PURE__*/ (0, _jsxRuntime.jsxs)(_material.Table, {
177
- sx: {
178
- minWidth: 650
179
- },
180
- "aria-label": "simple table",
181
- children: [
182
- /*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.TableHead, {
183
- children: /*#__PURE__*/ (0, _jsxRuntime.jsxs)(_material.TableRow, {
185
+ children: /*#__PURE__*/ (0, _jsxRuntime.jsxs)(_material.Stack, {
186
+ spacing: 2,
187
+ children: [
188
+ !validation.isValid && validation.errors.map((error)=>/*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.Alert, {
189
+ severity: "error",
190
+ children: error
191
+ }, error)),
192
+ /*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.TableContainer, {
193
+ children: /*#__PURE__*/ (0, _jsxRuntime.jsxs)(_material.Table, {
194
+ sx: {
195
+ minWidth: 650
196
+ },
197
+ "aria-label": "simple table",
198
+ children: [
199
+ /*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.TableHead, {
200
+ children: /*#__PURE__*/ (0, _jsxRuntime.jsxs)(_material.TableRow, {
201
+ children: [
202
+ /*#__PURE__*/ (0, _jsxRuntime.jsx)(TableCell, {
203
+ children: "Visibility"
204
+ }),
205
+ /*#__PURE__*/ (0, _jsxRuntime.jsx)(TableCell, {
206
+ children: "Name"
207
+ }),
208
+ /*#__PURE__*/ (0, _jsxRuntime.jsx)(TableCell, {
209
+ children: "Type"
210
+ }),
211
+ /*#__PURE__*/ (0, _jsxRuntime.jsx)(TableCell, {
212
+ align: "right",
213
+ children: "Action"
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, {
184
222
  children: [
185
223
  /*#__PURE__*/ (0, _jsxRuntime.jsx)(TableCell, {
186
- children: "Visibility"
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
+ })
187
232
  }),
188
233
  /*#__PURE__*/ (0, _jsxRuntime.jsx)(TableCell, {
189
- children: "Variable Name"
234
+ component: "th",
235
+ scope: "row",
236
+ sx: {
237
+ fontWeight: 'bold'
238
+ },
239
+ children: v.spec.name
190
240
  }),
191
241
  /*#__PURE__*/ (0, _jsxRuntime.jsx)(TableCell, {
192
- children: "Variable Type"
242
+ children: (ref = getVariableLabelByKind(v.kind)) !== null && ref !== void 0 ? ref : v.kind
193
243
  }),
194
- /*#__PURE__*/ (0, _jsxRuntime.jsx)(TableCell, {
244
+ /*#__PURE__*/ (0, _jsxRuntime.jsxs)(TableCell, {
195
245
  align: "right",
196
- children: "Action"
246
+ 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, {})
251
+ }),
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, {})
256
+ }),
257
+ /*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.IconButton, {
258
+ onClick: ()=>setVariableEditIdx(idx),
259
+ children: /*#__PURE__*/ (0, _jsxRuntime.jsx)(_pencil.default, {})
260
+ }),
261
+ /*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.IconButton, {
262
+ onClick: ()=>removeVariable(idx),
263
+ children: /*#__PURE__*/ (0, _jsxRuntime.jsx)(_trashCan.default, {})
264
+ })
265
+ ]
197
266
  })
198
267
  ]
199
- })
200
- }),
201
- /*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.TableBody, {
202
- children: variableDefinitions.map((v, idx)=>{
203
- var ref;
204
- /*#__PURE__*/ return (0, _jsxRuntime.jsxs)(_material.TableRow, {
205
- children: [
206
- /*#__PURE__*/ (0, _jsxRuntime.jsx)(TableCell, {
207
- component: "th",
208
- scope: "row",
209
- children: /*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.Switch, {
210
- checked: ((ref = v.spec.display) === null || ref === void 0 ? void 0 : ref.hidden) !== true,
211
- onChange: (e)=>{
212
- toggleVariableVisibility(idx, e.target.checked);
213
- }
214
- })
215
- }),
216
- /*#__PURE__*/ (0, _jsxRuntime.jsx)(TableCell, {
217
- component: "th",
218
- scope: "row",
219
- sx: {
220
- fontWeight: 'bold'
221
- },
222
- children: v.spec.name
223
- }),
224
- /*#__PURE__*/ (0, _jsxRuntime.jsx)(TableCell, {
225
- children: v.kind
226
- }),
227
- /*#__PURE__*/ (0, _jsxRuntime.jsxs)(TableCell, {
228
- align: "right",
229
- children: [
230
- /*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.IconButton, {
231
- onClick: ()=>changeVariableOrder(idx, 'up'),
232
- disabled: idx === 0,
233
- children: /*#__PURE__*/ (0, _jsxRuntime.jsx)(_arrowUp.default, {})
234
- }),
235
- /*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.IconButton, {
236
- onClick: ()=>changeVariableOrder(idx, 'down'),
237
- disabled: idx === variableDefinitions.length - 1,
238
- children: /*#__PURE__*/ (0, _jsxRuntime.jsx)(_arrowDown.default, {})
239
- }),
240
- /*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.IconButton, {
241
- onClick: ()=>setVariableEditIdx(idx),
242
- children: /*#__PURE__*/ (0, _jsxRuntime.jsx)(_pencil.default, {})
243
- }),
244
- /*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.IconButton, {
245
- onClick: ()=>removeVariable(idx),
246
- children: /*#__PURE__*/ (0, _jsxRuntime.jsx)(_trashCan.default, {})
247
- })
248
- ]
249
- })
250
- ]
251
- }, v.spec.name);
252
- })
268
+ }, v.spec.name);
253
269
  })
254
- ]
255
- })
256
- }),
257
- /*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.Box, {
258
- display: "flex",
259
- children: /*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.Button, {
260
- onClick: addVariable,
261
- variant: "contained",
262
- children: "Add New Variable"
263
- })
270
+ })
271
+ ]
264
272
  })
265
- ]
266
- })
267
- ]
273
+ }),
274
+ /*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.Box, {
275
+ display: "flex",
276
+ children: /*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.Button, {
277
+ onClick: addVariable,
278
+ variant: "contained",
279
+ children: "Add New"
280
+ })
281
+ })
282
+ ]
283
+ })
268
284
  })
269
285
  ]
270
286
  })
@@ -25,6 +25,7 @@ const _useImmer = require("use-immer");
25
25
  const _pluginSystem = require("@perses-dev/plugin-system");
26
26
  const _components = require("@perses-dev/components");
27
27
  const _refresh = /*#__PURE__*/ _interopRequireDefault(require("mdi-material-ui/Refresh"));
28
+ const _clipboardOutline = /*#__PURE__*/ _interopRequireDefault(require("mdi-material-ui/ClipboardOutline"));
28
29
  const _variableModel = require("../variable-model");
29
30
  const _variableEditorFormModel = require("./variable-editor-form-model");
30
31
  function _interopRequireDefault(obj) {
@@ -71,10 +72,6 @@ function _interopRequireWildcard(obj, nodeInterop) {
71
72
  }
72
73
  return newObj;
73
74
  }
74
- const VARIABLE_TYPES = [
75
- 'ListVariable',
76
- 'TextVariable'
77
- ];
78
75
  const DEFAULT_MAX_PREVIEW_VALUES = 50;
79
76
  // TODO: Replace with proper validation library
80
77
  function getValidation(state) {
@@ -96,7 +93,7 @@ const SectionHeader = ({ children })=>/*#__PURE__*/ (0, _jsxRuntime.jsx)(_mater
96
93
  variant: "subtitle1",
97
94
  children: children
98
95
  });
99
- function VariableListPreview({ definition }) {
96
+ function VariableListPreview({ definition , onRefresh }) {
100
97
  const { data , isFetching , error } = (0, _variableModel.useListVariablePluginValues)(definition);
101
98
  const [maxValues, setMaxValues] = (0, _react.useState)(DEFAULT_MAX_PREVIEW_VALUES);
102
99
  const showAll = ()=>{
@@ -109,6 +106,40 @@ function VariableListPreview({ definition }) {
109
106
  const errorMessage = error === null || error === void 0 ? void 0 : error.message;
110
107
  return /*#__PURE__*/ (0, _jsxRuntime.jsxs)(_material.Box, {
111
108
  children: [
109
+ /*#__PURE__*/ (0, _jsxRuntime.jsxs)(_material.Stack, {
110
+ direction: 'row',
111
+ spacing: 1,
112
+ alignItems: "center",
113
+ children: [
114
+ /*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.Typography, {
115
+ variant: "caption",
116
+ children: "Preview Values"
117
+ }),
118
+ /*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.Tooltip, {
119
+ title: "Refresh Values",
120
+ placement: "right",
121
+ children: /*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.IconButton, {
122
+ onClick: onRefresh,
123
+ size: "small",
124
+ children: /*#__PURE__*/ (0, _jsxRuntime.jsx)(_refresh.default, {})
125
+ })
126
+ }),
127
+ /*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.Tooltip, {
128
+ title: "Copy Values to Clipboard",
129
+ placement: "right",
130
+ children: /*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.IconButton, {
131
+ onClick: async ()=>{
132
+ if (data === null || data === void 0 ? void 0 : data.length) {
133
+ await navigator.clipboard.writeText(data.map((d)=>d.label).join(','));
134
+ alert('Copied to clipboard!');
135
+ }
136
+ },
137
+ size: "small",
138
+ children: /*#__PURE__*/ (0, _jsxRuntime.jsx)(_clipboardOutline.default, {})
139
+ })
140
+ })
141
+ ]
142
+ }),
112
143
  errorMessage && /*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.Alert, {
113
144
  severity: "error",
114
145
  children: errorMessage
@@ -173,7 +204,7 @@ function VariableEditForm({ initialVariableDefinition , onChange , onCancel })
173
204
  children: [
174
205
  /*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.Typography, {
175
206
  variant: "h2",
176
- children: "Template Variables / Edit Variable"
207
+ children: "Edit Variable"
177
208
  }),
178
209
  /*#__PURE__*/ (0, _jsxRuntime.jsxs)(_material.Stack, {
179
210
  direction: "row",
@@ -208,11 +239,6 @@ function VariableEditForm({ initialVariableDefinition , onChange , onCancel })
208
239
  overflowY: 'scroll'
209
240
  },
210
241
  children: [
211
- /*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.Typography, {
212
- variant: "h3",
213
- mb: 2,
214
- children: "Edit Variable"
215
- }),
216
242
  /*#__PURE__*/ (0, _jsxRuntime.jsx)(SectionHeader, {
217
243
  children: "General"
218
244
  }),
@@ -258,10 +284,10 @@ function VariableEditForm({ initialVariableDefinition , onChange , onCancel })
258
284
  draft.kind = v.target.value;
259
285
  });
260
286
  },
261
- children: VARIABLE_TYPES.map((v)=>/*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.MenuItem, {
262
- value: v,
263
- children: v
264
- }, v))
287
+ children: _variableModel.VARIABLE_TYPES.map((v)=>/*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.MenuItem, {
288
+ value: v.kind,
289
+ children: v.label
290
+ }, v.kind))
265
291
  })
266
292
  ]
267
293
  })
@@ -271,7 +297,7 @@ function VariableEditForm({ initialVariableDefinition , onChange , onCancel })
271
297
  xs: 6,
272
298
  children: /*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.TextField, {
273
299
  fullWidth: true,
274
- label: "Label",
300
+ label: "Display Label",
275
301
  value: state.title,
276
302
  onChange: (v)=>{
277
303
  setState((draft)=>{
@@ -335,18 +361,6 @@ function VariableEditForm({ initialVariableDefinition , onChange , onCancel })
335
361
  item: true,
336
362
  xs: 6,
337
363
  children: [
338
- /*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.TextField, {
339
- sx: {
340
- mb: 1
341
- },
342
- label: "Capturing Regexp",
343
- value: state.listVariableFields.capturing_regexp,
344
- onChange: (e)=>{
345
- setState((draft)=>{
346
- draft.listVariableFields.capturing_regexp = e.target.value;
347
- });
348
- }
349
- }),
350
364
  /*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.ClickAwayListener, {
351
365
  onClickAway: ()=>refreshPreview(),
352
366
  children: /*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.Box, {})
@@ -364,38 +378,35 @@ function VariableEditForm({ initialVariableDefinition , onChange , onCancel })
364
378
  })
365
379
  ]
366
380
  }),
367
- state.listVariableFields.plugin.kind && /*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.Grid, {
381
+ state.listVariableFields.plugin.kind && /*#__PURE__*/ (0, _jsxRuntime.jsxs)(_material.Grid, {
368
382
  item: true,
369
383
  xs: 12,
370
- children: /*#__PURE__*/ (0, _jsxRuntime.jsxs)(_components.ErrorBoundary, {
371
- FallbackComponent: ()=>/*#__PURE__*/ (0, _jsxRuntime.jsx)("div", {
372
- children: "Error previewing values"
373
- }),
374
- resetKeys: [
375
- previewSpec
376
- ],
377
- children: [
378
- /*#__PURE__*/ (0, _jsxRuntime.jsxs)(_material.Stack, {
379
- direction: 'row',
380
- spacing: 1,
381
- alignItems: "center",
382
- children: [
383
- /*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.Typography, {
384
- variant: "caption",
385
- children: "Preview Values"
386
- }),
387
- /*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.IconButton, {
388
- onClick: refreshPreview,
389
- size: "small",
390
- children: /*#__PURE__*/ (0, _jsxRuntime.jsx)(_refresh.default, {})
391
- })
392
- ]
393
- }),
394
- /*#__PURE__*/ (0, _jsxRuntime.jsx)(VariableListPreview, {
384
+ children: [
385
+ /*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.TextField, {
386
+ sx: {
387
+ mb: 1
388
+ },
389
+ label: "Capturing Regexp Filter",
390
+ value: state.listVariableFields.capturing_regexp,
391
+ onChange: (e)=>{
392
+ setState((draft)=>{
393
+ draft.listVariableFields.capturing_regexp = e.target.value;
394
+ });
395
+ }
396
+ }),
397
+ /*#__PURE__*/ (0, _jsxRuntime.jsx)(_components.ErrorBoundary, {
398
+ FallbackComponent: ()=>/*#__PURE__*/ (0, _jsxRuntime.jsx)("div", {
399
+ children: "Error previewing values"
400
+ }),
401
+ resetKeys: [
402
+ previewSpec
403
+ ],
404
+ children: /*#__PURE__*/ (0, _jsxRuntime.jsx)(VariableListPreview, {
405
+ onRefresh: refreshPreview,
395
406
  definition: previewSpec
396
407
  })
397
- ]
398
- })
408
+ })
409
+ ]
399
410
  })
400
411
  ]
401
412
  }),
@@ -21,7 +21,6 @@ Object.defineProperty(exports, "TemplateVariableList", {
21
21
  const _jsxRuntime = require("react/jsx-runtime");
22
22
  const _react = /*#__PURE__*/ _interopRequireWildcard(require("react"));
23
23
  const _material = require("@mui/material");
24
- const _eye = /*#__PURE__*/ _interopRequireDefault(require("mdi-material-ui/Eye"));
25
24
  const _pencil = /*#__PURE__*/ _interopRequireDefault(require("mdi-material-ui/Pencil"));
26
25
  const _pinOutline = /*#__PURE__*/ _interopRequireDefault(require("mdi-material-ui/PinOutline"));
27
26
  const _pinOffOutline = /*#__PURE__*/ _interopRequireDefault(require("mdi-material-ui/PinOffOutline"));
@@ -78,8 +77,6 @@ function TemplateVariableList(props) {
78
77
  const [isPin, setIsPin] = (0, _react.useState)(props.initialVariableIsSticky);
79
78
  const variableDefinitions = (0, _context.useTemplateVariableDefinitions)();
80
79
  const { isEditMode } = (0, _context.useEditMode)();
81
- const [showVariablesInEditMode, setShowVariablesInEditMode] = (0, _react.useState)(true);
82
- const showVariables = isEditMode ? showVariablesInEditMode : true;
83
80
  const { setVariableDefinitions } = (0, _context.useTemplateVariableActions)();
84
81
  const scrollTrigger = (0, _material.useScrollTrigger)({
85
82
  disableHysteresis: true
@@ -107,23 +104,13 @@ function TemplateVariableList(props) {
107
104
  }
108
105
  })
109
106
  }),
110
- isEditMode && /*#__PURE__*/ (0, _jsxRuntime.jsxs)(_material.Box, {
107
+ isEditMode && /*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.Box, {
111
108
  pb: 2,
112
- children: [
113
- /*#__PURE__*/ (0, _jsxRuntime.jsxs)(_material.Button, {
114
- onClick: ()=>setShowVariablesInEditMode(!showVariablesInEditMode),
115
- startIcon: /*#__PURE__*/ (0, _jsxRuntime.jsx)(_eye.default, {}),
116
- children: [
117
- showVariablesInEditMode ? 'Hide' : 'Show',
118
- " Variables"
119
- ]
120
- }),
121
- /*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.Button, {
122
- onClick: ()=>setIsEditing(true),
123
- startIcon: /*#__PURE__*/ (0, _jsxRuntime.jsx)(_pencil.default, {}),
124
- children: "Edit Variables"
125
- })
126
- ]
109
+ children: /*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.Button, {
110
+ onClick: ()=>setIsEditing(true),
111
+ startIcon: /*#__PURE__*/ (0, _jsxRuntime.jsx)(_pencil.default, {}),
112
+ children: "Edit Variables"
113
+ })
127
114
  }),
128
115
  /*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.AppBar, {
129
116
  color: 'inherit',
@@ -141,7 +128,7 @@ function TemplateVariableList(props) {
141
128
  /*#__PURE__*/ (0, _jsxRuntime.jsx)(_material.Stack, {
142
129
  direction: "row",
143
130
  spacing: 1,
144
- children: showVariables && variableDefinitions.map((v)=>{
131
+ children: variableDefinitions.map((v)=>{
145
132
  var ref;
146
133
  /*#__PURE__*/ return (0, _jsxRuntime.jsx)(_material.Box, {
147
134
  display: ((ref = v.spec.display) === null || ref === void 0 ? void 0 : ref.hidden) ? 'none' : undefined,
@@ -23,7 +23,8 @@ function _export(target, all) {
23
23
  _export(exports, {
24
24
  filterVariableList: ()=>filterVariableList,
25
25
  useListVariablePluginValues: ()=>useListVariablePluginValues,
26
- getVariableValuesKey: ()=>getVariableValuesKey
26
+ getVariableValuesKey: ()=>getVariableValuesKey,
27
+ VARIABLE_TYPES: ()=>VARIABLE_TYPES
27
28
  });
28
29
  const _pluginSystem = require("@perses-dev/plugin-system");
29
30
  const _reactQuery = require("@tanstack/react-query");
@@ -104,3 +105,13 @@ function useListVariablePluginValues(definition) {
104
105
  function getVariableValuesKey(v) {
105
106
  return Object.values(v).map((v)=>JSON.stringify(v.value)).join(',');
106
107
  }
108
+ const VARIABLE_TYPES = [
109
+ {
110
+ label: 'List',
111
+ kind: 'ListVariable'
112
+ },
113
+ {
114
+ label: 'Text',
115
+ kind: 'TextVariable'
116
+ }
117
+ ];
@@ -24,7 +24,7 @@ _exportStar(require("./Panel"), exports);
24
24
  _exportStar(require("./PanelDrawer"), exports);
25
25
  _exportStar(require("./PanelGroupDialog"), exports);
26
26
  _exportStar(require("./TimeRangeControls"), exports);
27
- _exportStar(require("./UnsavedChangesConfirmationDialog"), exports);
27
+ _exportStar(require("./DiscardChangesConfirmationDialog"), exports);
28
28
  _exportStar(require("./Variables"), exports);
29
29
  function _exportStar(from, to) {
30
30
  Object.keys(from).forEach(function(k) {
@@ -37,6 +37,7 @@ const _panelEditorSlice = require("./panel-editor-slice");
37
37
  const _panelSlice = require("./panel-slice");
38
38
  const _deletePanelGroupSlice = require("./delete-panel-group-slice");
39
39
  const _deletePanelSlice = require("./delete-panel-slice");
40
+ const _discardChangesDialogSlice = require("./discard-changes-dialog-slice");
40
41
  function _interopRequireDefault(obj) {
41
42
  return obj && obj.__esModule ? obj : {
42
43
  default: obj
@@ -72,6 +73,7 @@ function initStore(props) {
72
73
  ...(0, _deletePanelGroupSlice.createDeletePanelGroupSlice)(...args),
73
74
  ...(0, _panelEditorSlice.createPanelEditorSlice)()(...args),
74
75
  ...(0, _deletePanelSlice.createDeletePanelSlice)()(...args),
76
+ ...(0, _discardChangesDialogSlice.createDiscardChangesDialogSlice)(...args),
75
77
  metadata,
76
78
  defaultTimeRange: {
77
79
  pastDuration: duration
@@ -33,7 +33,8 @@ _export(exports, {
33
33
  usePanelActions: ()=>usePanelActions,
34
34
  usePanelEditor: ()=>usePanelEditor,
35
35
  useDeletePanelDialog: ()=>useDeletePanelDialog,
36
- useDefaultTimeRange: ()=>useDefaultTimeRange
36
+ useDefaultTimeRange: ()=>useDefaultTimeRange,
37
+ useDiscardChangesConfirmationDialog: ()=>useDiscardChangesConfirmationDialog
37
38
  });
38
39
  const _react = require("react");
39
40
  const _dashboardProvider = require("./DashboardProvider");
@@ -189,3 +190,11 @@ const selectDefaultTimeRange = (state)=>state.defaultTimeRange;
189
190
  function useDefaultTimeRange() {
190
191
  return (0, _dashboardProvider.useDashboardStore)(selectDefaultTimeRange);
191
192
  }
193
+ const selectDiscardChangesConfirmationDialog = ({ discardChangesConfirmationDialog , openDiscardChangesConfirmationDialog , closeDiscardChangesConfirmationDialog })=>({
194
+ discardChangesConfirmationDialog,
195
+ openDiscardChangesConfirmationDialog,
196
+ closeDiscardChangesConfirmationDialog
197
+ });
198
+ function useDiscardChangesConfirmationDialog() {
199
+ return (0, _dashboardProvider.useDashboardStore)(selectDiscardChangesConfirmationDialog);
200
+ }