@perses-dev/plugin-system 0.39.0 → 0.40.1

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 (253) hide show
  1. package/dist/cjs/components/CalculationSelector/CalculationSelector.js +6 -4
  2. package/dist/cjs/components/CalculationSelector/index.js +10 -8
  3. package/dist/cjs/components/DatasourceEditorForm/DatasourceEditorForm.js +381 -0
  4. package/dist/cjs/components/DatasourceEditorForm/index.js +30 -0
  5. package/dist/cjs/components/DatasourceSelect.js +119 -21
  6. package/dist/cjs/components/LegendOptionsEditor/LegendOptionsEditor.js +18 -16
  7. package/dist/cjs/components/LegendOptionsEditor/index.js +10 -8
  8. package/dist/cjs/components/OptionsEditorRadios/OptionsEditorRadios.js +23 -28
  9. package/dist/cjs/components/OptionsEditorRadios/index.js +10 -8
  10. package/dist/cjs/components/OptionsEditorTabPanel/OptionsEditorTabPanel.js +6 -4
  11. package/dist/cjs/components/OptionsEditorTabPanel/index.js +10 -8
  12. package/dist/cjs/components/OptionsEditorTabs/OptionsEditorTabs.js +10 -8
  13. package/dist/cjs/components/OptionsEditorTabs/index.js +10 -8
  14. package/dist/cjs/components/PanelSpecEditor/PanelSpecEditor.js +13 -11
  15. package/dist/cjs/components/PanelSpecEditor/index.js +10 -8
  16. package/dist/cjs/components/PluginEditor/PluginEditor.js +24 -31
  17. package/dist/cjs/components/PluginEditor/index.js +11 -9
  18. package/dist/cjs/components/PluginEditor/plugin-editor-api.js +5 -3
  19. package/dist/cjs/components/PluginKindSelect/PluginKindSelect.js +23 -12
  20. package/dist/cjs/components/PluginKindSelect/index.js +10 -8
  21. package/dist/cjs/components/PluginRegistry/PluginRegistry.js +11 -9
  22. package/dist/cjs/components/PluginRegistry/index.js +10 -8
  23. package/dist/cjs/components/PluginRegistry/plugin-indexes.js +6 -2
  24. package/dist/cjs/components/PluginSpecEditor/PluginSpecEditor.js +6 -4
  25. package/dist/cjs/components/PluginSpecEditor/index.js +10 -8
  26. package/dist/cjs/components/TimeSeriesQueryEditor/TimeSeriesQueryEditor.js +15 -13
  27. package/dist/cjs/components/TimeSeriesQueryEditor/TimeSeriesQueryInput.js +21 -19
  28. package/dist/cjs/components/TimeSeriesQueryEditor/index.js +10 -8
  29. package/dist/cjs/components/Variables/VariableEditorForm/VariableEditorForm.js +257 -166
  30. package/dist/cjs/components/Variables/VariableEditorForm/VariablePreview.js +32 -28
  31. package/dist/cjs/components/Variables/VariableEditorForm/index.js +11 -9
  32. package/dist/cjs/components/Variables/VariableEditorForm/variable-editor-form-model.js +28 -32
  33. package/dist/cjs/components/Variables/index.js +11 -9
  34. package/dist/cjs/components/Variables/variable-model.js +17 -9
  35. package/dist/cjs/components/index.js +22 -19
  36. package/dist/cjs/constants/index.js +10 -8
  37. package/dist/cjs/constants/user-interface-text.js +3 -1
  38. package/dist/cjs/index.js +16 -13
  39. package/dist/cjs/model/index.js +17 -15
  40. package/dist/cjs/model/legend.js +32 -20
  41. package/dist/cjs/model/panels.js +2 -2
  42. package/dist/cjs/model/plugin-base.js +2 -2
  43. package/dist/cjs/model/plugin-loading.js +3 -1
  44. package/dist/cjs/runtime/DataQueriesProvider/DataQueriesProvider.js +19 -11
  45. package/dist/cjs/runtime/DataQueriesProvider/index.js +11 -9
  46. package/dist/cjs/runtime/DataQueriesProvider/model.js +12 -8
  47. package/dist/cjs/runtime/TimeRangeProvider/TimeRangeProvider.js +19 -11
  48. package/dist/cjs/runtime/TimeRangeProvider/index.js +11 -9
  49. package/dist/cjs/runtime/TimeRangeProvider/query-params.js +36 -18
  50. package/dist/cjs/runtime/builtin-variables.js +81 -0
  51. package/dist/cjs/runtime/datasources.js +29 -11
  52. package/dist/cjs/runtime/index.js +16 -13
  53. package/dist/cjs/runtime/plugin-registry.js +41 -11
  54. package/dist/cjs/runtime/template-variables.js +42 -12
  55. package/dist/cjs/runtime/time-series-queries.js +39 -27
  56. package/dist/cjs/stories/shared-utils/decorators/WithDataQueries.js +7 -5
  57. package/dist/cjs/stories/shared-utils/decorators/WithPluginRegistry.js +16 -14
  58. package/dist/cjs/stories/shared-utils/decorators/WithPluginSystemBuiltinVariables.js +42 -0
  59. package/dist/cjs/stories/shared-utils/decorators/WithPluginSystemDatasourceStore.js +19 -13
  60. package/dist/cjs/stories/shared-utils/decorators/WithPluginSystemTemplateVariables.js +6 -4
  61. package/dist/cjs/stories/shared-utils/decorators/WithTimeRange.js +7 -5
  62. package/dist/cjs/stories/shared-utils/decorators/index.js +15 -12
  63. package/dist/cjs/stories/shared-utils/index.js +10 -8
  64. package/dist/cjs/test/index.js +11 -9
  65. package/dist/cjs/test/mock-data.js +3 -1
  66. package/dist/cjs/test/render.js +13 -11
  67. package/dist/cjs/test/test-plugins/bert/index.js +14 -10
  68. package/dist/cjs/test/test-plugins/ernie/index.js +13 -9
  69. package/dist/cjs/test/test-plugins/index.js +11 -9
  70. package/dist/cjs/test-utils/index.js +10 -8
  71. package/dist/cjs/test-utils/mock-plugin-registry.js +8 -4
  72. package/dist/cjs/utils/action.js +43 -0
  73. package/dist/cjs/utils/index.js +11 -8
  74. package/dist/cjs/utils/variables.js +26 -8
  75. package/dist/cjs/validation/datasource.js +30 -0
  76. package/dist/cjs/validation/index.js +32 -0
  77. package/dist/cjs/validation/resource.js +24 -0
  78. package/dist/cjs/validation/variable.js +29 -0
  79. package/dist/components/CalculationSelector/CalculationSelector.js.map +1 -1
  80. package/dist/components/CalculationSelector/index.js.map +1 -1
  81. package/dist/components/DatasourceEditorForm/DatasourceEditorForm.d.ts +15 -0
  82. package/dist/components/DatasourceEditorForm/DatasourceEditorForm.d.ts.map +1 -0
  83. package/dist/components/DatasourceEditorForm/DatasourceEditorForm.js +334 -0
  84. package/dist/components/DatasourceEditorForm/DatasourceEditorForm.js.map +1 -0
  85. package/dist/components/DatasourceEditorForm/index.d.ts +2 -0
  86. package/dist/components/DatasourceEditorForm/index.d.ts.map +1 -0
  87. package/dist/components/DatasourceEditorForm/index.js +15 -0
  88. package/dist/components/DatasourceEditorForm/index.js.map +1 -0
  89. package/dist/components/DatasourceSelect.d.ts +5 -0
  90. package/dist/components/DatasourceSelect.d.ts.map +1 -1
  91. package/dist/components/DatasourceSelect.js +102 -19
  92. package/dist/components/DatasourceSelect.js.map +1 -1
  93. package/dist/components/LegendOptionsEditor/LegendOptionsEditor.js +2 -2
  94. package/dist/components/LegendOptionsEditor/LegendOptionsEditor.js.map +1 -1
  95. package/dist/components/LegendOptionsEditor/index.js.map +1 -1
  96. package/dist/components/OptionsEditorRadios/OptionsEditorRadios.d.ts +2 -2
  97. package/dist/components/OptionsEditorRadios/OptionsEditorRadios.d.ts.map +1 -1
  98. package/dist/components/OptionsEditorRadios/OptionsEditorRadios.js +16 -23
  99. package/dist/components/OptionsEditorRadios/OptionsEditorRadios.js.map +1 -1
  100. package/dist/components/OptionsEditorRadios/index.js.map +1 -1
  101. package/dist/components/OptionsEditorTabPanel/OptionsEditorTabPanel.js.map +1 -1
  102. package/dist/components/OptionsEditorTabPanel/index.js.map +1 -1
  103. package/dist/components/OptionsEditorTabs/OptionsEditorTabs.js.map +1 -1
  104. package/dist/components/OptionsEditorTabs/index.js.map +1 -1
  105. package/dist/components/PanelSpecEditor/PanelSpecEditor.js +2 -2
  106. package/dist/components/PanelSpecEditor/PanelSpecEditor.js.map +1 -1
  107. package/dist/components/PanelSpecEditor/index.js.map +1 -1
  108. package/dist/components/PluginEditor/PluginEditor.js +15 -24
  109. package/dist/components/PluginEditor/PluginEditor.js.map +1 -1
  110. package/dist/components/PluginEditor/index.js.map +1 -1
  111. package/dist/components/PluginEditor/plugin-editor-api.d.ts +1 -1
  112. package/dist/components/PluginEditor/plugin-editor-api.js +2 -2
  113. package/dist/components/PluginEditor/plugin-editor-api.js.map +1 -1
  114. package/dist/components/PluginKindSelect/PluginKindSelect.d.ts +3 -3
  115. package/dist/components/PluginKindSelect/PluginKindSelect.d.ts.map +1 -1
  116. package/dist/components/PluginKindSelect/PluginKindSelect.js +21 -12
  117. package/dist/components/PluginKindSelect/PluginKindSelect.js.map +1 -1
  118. package/dist/components/PluginKindSelect/index.js.map +1 -1
  119. package/dist/components/PluginRegistry/PluginRegistry.js +3 -3
  120. package/dist/components/PluginRegistry/PluginRegistry.js.map +1 -1
  121. package/dist/components/PluginRegistry/index.js.map +1 -1
  122. package/dist/components/PluginRegistry/plugin-indexes.js.map +1 -1
  123. package/dist/components/PluginSpecEditor/PluginSpecEditor.js.map +1 -1
  124. package/dist/components/PluginSpecEditor/index.js.map +1 -1
  125. package/dist/components/TimeSeriesQueryEditor/TimeSeriesQueryEditor.js +4 -4
  126. package/dist/components/TimeSeriesQueryEditor/TimeSeriesQueryEditor.js.map +1 -1
  127. package/dist/components/TimeSeriesQueryEditor/TimeSeriesQueryInput.js +1 -1
  128. package/dist/components/TimeSeriesQueryEditor/TimeSeriesQueryInput.js.map +1 -1
  129. package/dist/components/TimeSeriesQueryEditor/index.js.map +1 -1
  130. package/dist/components/Variables/VariableEditorForm/VariableEditorForm.d.ts +10 -7
  131. package/dist/components/Variables/VariableEditorForm/VariableEditorForm.d.ts.map +1 -1
  132. package/dist/components/Variables/VariableEditorForm/VariableEditorForm.js +201 -112
  133. package/dist/components/Variables/VariableEditorForm/VariableEditorForm.js.map +1 -1
  134. package/dist/components/Variables/VariableEditorForm/VariablePreview.js.map +1 -1
  135. package/dist/components/Variables/VariableEditorForm/index.js.map +1 -1
  136. package/dist/components/Variables/VariableEditorForm/variable-editor-form-model.d.ts +5 -4
  137. package/dist/components/Variables/VariableEditorForm/variable-editor-form-model.d.ts.map +1 -1
  138. package/dist/components/Variables/VariableEditorForm/variable-editor-form-model.js +22 -30
  139. package/dist/components/Variables/VariableEditorForm/variable-editor-form-model.js.map +1 -1
  140. package/dist/components/Variables/index.js.map +1 -1
  141. package/dist/components/Variables/variable-model.js +3 -3
  142. package/dist/components/Variables/variable-model.js.map +1 -1
  143. package/dist/components/index.d.ts +1 -0
  144. package/dist/components/index.d.ts.map +1 -1
  145. package/dist/components/index.js +1 -0
  146. package/dist/components/index.js.map +1 -1
  147. package/dist/constants/index.js.map +1 -1
  148. package/dist/constants/user-interface-text.js.map +1 -1
  149. package/dist/index.d.ts +1 -0
  150. package/dist/index.d.ts.map +1 -1
  151. package/dist/index.js +1 -0
  152. package/dist/index.js.map +1 -1
  153. package/dist/model/datasource.d.ts +2 -1
  154. package/dist/model/datasource.d.ts.map +1 -1
  155. package/dist/model/datasource.js.map +1 -1
  156. package/dist/model/index.js.map +1 -1
  157. package/dist/model/legend.d.ts +1 -1
  158. package/dist/model/legend.d.ts.map +1 -1
  159. package/dist/model/legend.js +14 -14
  160. package/dist/model/legend.js.map +1 -1
  161. package/dist/model/panels.js.map +1 -1
  162. package/dist/model/plugin-base.js.map +1 -1
  163. package/dist/model/plugin-loading.js.map +1 -1
  164. package/dist/runtime/DataQueriesProvider/DataQueriesProvider.js +4 -4
  165. package/dist/runtime/DataQueriesProvider/DataQueriesProvider.js.map +1 -1
  166. package/dist/runtime/DataQueriesProvider/index.js.map +1 -1
  167. package/dist/runtime/DataQueriesProvider/model.d.ts +3 -2
  168. package/dist/runtime/DataQueriesProvider/model.d.ts.map +1 -1
  169. package/dist/runtime/DataQueriesProvider/model.js +4 -4
  170. package/dist/runtime/DataQueriesProvider/model.js.map +1 -1
  171. package/dist/runtime/TimeRangeProvider/TimeRangeProvider.js.map +1 -1
  172. package/dist/runtime/TimeRangeProvider/index.js.map +1 -1
  173. package/dist/runtime/TimeRangeProvider/query-params.js +1 -1
  174. package/dist/runtime/TimeRangeProvider/query-params.js.map +1 -1
  175. package/dist/runtime/builtin-variables.d.ts +11 -0
  176. package/dist/runtime/builtin-variables.d.ts.map +1 -0
  177. package/dist/runtime/builtin-variables.js +59 -0
  178. package/dist/runtime/builtin-variables.js.map +1 -0
  179. package/dist/runtime/datasources.d.ts +14 -6
  180. package/dist/runtime/datasources.d.ts.map +1 -1
  181. package/dist/runtime/datasources.js +13 -6
  182. package/dist/runtime/datasources.js.map +1 -1
  183. package/dist/runtime/index.d.ts +1 -0
  184. package/dist/runtime/index.d.ts.map +1 -1
  185. package/dist/runtime/index.js +1 -0
  186. package/dist/runtime/index.js.map +1 -1
  187. package/dist/runtime/plugin-registry.d.ts +2 -0
  188. package/dist/runtime/plugin-registry.d.ts.map +1 -1
  189. package/dist/runtime/plugin-registry.js +19 -2
  190. package/dist/runtime/plugin-registry.js.map +1 -1
  191. package/dist/runtime/template-variables.d.ts +2 -1
  192. package/dist/runtime/template-variables.d.ts.map +1 -1
  193. package/dist/runtime/template-variables.js +27 -8
  194. package/dist/runtime/template-variables.js.map +1 -1
  195. package/dist/runtime/time-series-queries.d.ts +3 -3
  196. package/dist/runtime/time-series-queries.d.ts.map +1 -1
  197. package/dist/runtime/time-series-queries.js +14 -12
  198. package/dist/runtime/time-series-queries.js.map +1 -1
  199. package/dist/stories/shared-utils/decorators/WithDataQueries.js.map +1 -1
  200. package/dist/stories/shared-utils/decorators/WithPluginRegistry.js.map +1 -1
  201. package/dist/stories/shared-utils/decorators/WithPluginSystemBuiltinVariables.d.ts +13 -0
  202. package/dist/stories/shared-utils/decorators/WithPluginSystemBuiltinVariables.d.ts.map +1 -0
  203. package/dist/stories/shared-utils/decorators/WithPluginSystemBuiltinVariables.js +39 -0
  204. package/dist/stories/shared-utils/decorators/WithPluginSystemBuiltinVariables.js.map +1 -0
  205. package/dist/stories/shared-utils/decorators/WithPluginSystemDatasourceStore.d.ts.map +1 -1
  206. package/dist/stories/shared-utils/decorators/WithPluginSystemDatasourceStore.js +11 -7
  207. package/dist/stories/shared-utils/decorators/WithPluginSystemDatasourceStore.js.map +1 -1
  208. package/dist/stories/shared-utils/decorators/WithPluginSystemTemplateVariables.js.map +1 -1
  209. package/dist/stories/shared-utils/decorators/WithTimeRange.js.map +1 -1
  210. package/dist/stories/shared-utils/decorators/index.d.ts +1 -0
  211. package/dist/stories/shared-utils/decorators/index.d.ts.map +1 -1
  212. package/dist/stories/shared-utils/decorators/index.js +1 -0
  213. package/dist/stories/shared-utils/decorators/index.js.map +1 -1
  214. package/dist/stories/shared-utils/index.js.map +1 -1
  215. package/dist/test/index.js.map +1 -1
  216. package/dist/test/mock-data.js.map +1 -1
  217. package/dist/test/render.js +2 -2
  218. package/dist/test/render.js.map +1 -1
  219. package/dist/test/setup-tests.js.map +1 -1
  220. package/dist/test/test-plugins/bert/index.js.map +1 -1
  221. package/dist/test/test-plugins/ernie/index.js.map +1 -1
  222. package/dist/test/test-plugins/index.js.map +1 -1
  223. package/dist/test-utils/index.js.map +1 -1
  224. package/dist/test-utils/mock-plugin-registry.js +2 -2
  225. package/dist/test-utils/mock-plugin-registry.js.map +1 -1
  226. package/dist/utils/action.d.ts +4 -0
  227. package/dist/utils/action.d.ts.map +1 -0
  228. package/dist/utils/action.js +27 -0
  229. package/dist/utils/action.js.map +1 -0
  230. package/dist/utils/index.d.ts +1 -0
  231. package/dist/utils/index.d.ts.map +1 -1
  232. package/dist/utils/index.js +1 -0
  233. package/dist/utils/index.js.map +1 -1
  234. package/dist/utils/variables.d.ts.map +1 -1
  235. package/dist/utils/variables.js +17 -5
  236. package/dist/utils/variables.js.map +1 -1
  237. package/dist/validation/datasource.d.ts +19 -0
  238. package/dist/validation/datasource.d.ts.map +1 -0
  239. package/dist/validation/datasource.js +22 -0
  240. package/dist/validation/datasource.js.map +1 -0
  241. package/dist/validation/index.d.ts +4 -0
  242. package/dist/validation/index.d.ts.map +1 -0
  243. package/dist/validation/index.js +17 -0
  244. package/dist/validation/index.js.map +1 -0
  245. package/dist/validation/resource.d.ts +3 -0
  246. package/dist/validation/resource.d.ts.map +1 -0
  247. package/dist/validation/resource.js +16 -0
  248. package/dist/validation/resource.js.map +1 -0
  249. package/dist/validation/variable.d.ts +19 -0
  250. package/dist/validation/variable.d.ts.map +1 -0
  251. package/dist/validation/variable.js +21 -0
  252. package/dist/validation/variable.js.map +1 -0
  253. package/package.json +8 -6
@@ -12,42 +12,29 @@
12
12
  // limitations under the License.
13
13
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
14
14
  import React, { useCallback, useMemo, useState } from 'react';
15
- import { Box, Typography, Switch, TextField, Grid, FormControl, FormControlLabel, InputLabel, MenuItem, Button, Stack, ClickAwayListener, Divider, Select, capitalize } from '@mui/material';
15
+ import { Box, Typography, Switch, TextField, Grid, FormControlLabel, MenuItem, Button, Stack, ClickAwayListener, Divider } from '@mui/material';
16
16
  import { useImmer } from 'use-immer';
17
17
  import { DiscardChangesConfirmationDialog, ErrorBoundary } from '@perses-dev/components';
18
+ import { Controller, FormProvider, useForm } from 'react-hook-form';
19
+ import { zodResolver } from '@hookform/resolvers/zod';
20
+ import { getSubmitText, getTitleAction } from '../../../utils';
18
21
  import { VARIABLE_TYPES } from '../variable-model';
19
22
  import { PluginEditor } from '../../PluginEditor';
23
+ import { variableEditValidationSchema } from '../../../validation';
20
24
  import { VariableListPreview, VariablePreview } from './VariablePreview';
21
25
  import { getVariableDefinitionFromState, getInitialState } from './variable-editor-form-model';
22
- // TODO: Replace with proper validation library
23
- function getValidation(state) {
24
- /** Name validation */ let name = null;
25
- if (!state.name) {
26
- name = 'Name is required';
27
- }
28
- // name can only contain alphanumeric characters and underscores and no spaces
29
- if (state.name && !/^[a-zA-Z0-9_-]+$/.test(state.name)) {
30
- name = 'Name can only contain alphanumeric characters, underscores, and dashes';
31
- }
32
- return {
33
- name,
34
- isValid: !name
35
- };
36
- }
37
26
  function FallbackPreview() {
38
27
  return /*#__PURE__*/ _jsx("div", {
39
28
  children: "Error previewing values"
40
29
  });
41
30
  }
42
- export function VariableEditForm(props) {
43
- const { initialVariableDefinition , onChange , onCancel , action ='update' } = props;
31
+ export function VariableEditorForm(props) {
32
+ const { initialVariableDefinition , initialAction , isDraft , isReadonly , onSave , onClose , onDelete } = props;
44
33
  const initialState = getInitialState(initialVariableDefinition);
45
34
  const [state, setState] = useImmer(initialState);
46
- const validation = useMemo(()=>getValidation(state), [
47
- state
48
- ]);
49
- const [isDiscardDialogStateOpened, setDiscardDialogStateOpened] = useState(false);
35
+ const [isDiscardDialogOpened, setDiscardDialogOpened] = useState(false);
50
36
  const [previewKey, setPreviewKey] = useState(0);
37
+ const [action, setAction] = useState(initialAction);
51
38
  const refreshPreview = ()=>{
52
39
  setPreviewKey((prev)=>prev + 1);
53
40
  };
@@ -60,32 +47,35 @@ export function VariableEditForm(props) {
60
47
  }, [
61
48
  previewKey
62
49
  ]);
63
- const title = useMemo(()=>{
64
- if (action === 'read') return 'View Variable';
65
- if (action === 'create') return 'Create Variable';
66
- if (action === 'update') return 'Edit Variable';
67
- return '';
68
- }, [
69
- action
70
- ]);
50
+ const titleAction = getTitleAction(action, isDraft);
51
+ const submitText = getSubmitText(action, isDraft);
52
+ const form = useForm({
53
+ resolver: zodResolver(variableEditValidationSchema),
54
+ mode: 'onBlur',
55
+ defaultValues: state
56
+ });
57
+ const processForm = ()=>{
58
+ onSave(getVariableDefinitionFromState(state));
59
+ };
71
60
  // When user click on cancel, several possibilities:
72
61
  // - create action: ask for discard approval
73
62
  // - update action: ask for discard approval if changed
74
63
  // - read action: don´t ask for discard approval
75
64
  const handleCancel = useCallback(()=>{
76
- if (action === 'create' || action === 'update' && JSON.stringify(initialState) !== JSON.stringify(state)) {
77
- setDiscardDialogStateOpened(true);
65
+ if (JSON.stringify(initialState) !== JSON.stringify(state)) {
66
+ setDiscardDialogOpened(true);
78
67
  } else {
79
- onCancel();
68
+ onClose();
80
69
  }
81
70
  }, [
82
71
  state,
83
72
  initialState,
84
- action,
85
- setDiscardDialogStateOpened,
86
- onCancel
73
+ setDiscardDialogOpened,
74
+ onClose
87
75
  ]);
88
- return /*#__PURE__*/ _jsxs(_Fragment, {
76
+ var _state_textVariableFields_constant;
77
+ return /*#__PURE__*/ _jsxs(FormProvider, {
78
+ ...form,
89
79
  children: [
90
80
  /*#__PURE__*/ _jsxs(Box, {
91
81
  sx: {
@@ -95,32 +85,69 @@ export function VariableEditForm(props) {
95
85
  borderBottom: (theme)=>`1px solid ${theme.palette.divider}`
96
86
  },
97
87
  children: [
98
- /*#__PURE__*/ _jsx(Typography, {
88
+ /*#__PURE__*/ _jsxs(Typography, {
99
89
  variant: "h2",
100
- children: title
90
+ children: [
91
+ titleAction,
92
+ " Variable"
93
+ ]
101
94
  }),
102
- /*#__PURE__*/ _jsxs(Stack, {
95
+ /*#__PURE__*/ _jsx(Stack, {
103
96
  direction: "row",
104
97
  spacing: 1,
105
98
  sx: {
106
99
  marginLeft: 'auto'
107
100
  },
108
- children: [
109
- action !== 'read' && /*#__PURE__*/ _jsx(Button, {
110
- disabled: !validation.isValid,
111
- variant: "contained",
112
- onClick: ()=>{
113
- onChange(getVariableDefinitionFromState(state));
114
- },
115
- children: capitalize(action)
116
- }),
117
- /*#__PURE__*/ _jsx(Button, {
118
- color: "secondary",
119
- variant: "outlined",
120
- onClick: handleCancel,
121
- children: action === 'read' ? 'Close' : 'Cancel'
122
- })
123
- ]
101
+ children: action === 'read' ? /*#__PURE__*/ _jsxs(_Fragment, {
102
+ children: [
103
+ /*#__PURE__*/ _jsx(Button, {
104
+ disabled: isReadonly,
105
+ variant: "contained",
106
+ onClick: ()=>setAction('update'),
107
+ children: "Edit"
108
+ }),
109
+ /*#__PURE__*/ _jsx(Button, {
110
+ color: "error",
111
+ disabled: isReadonly,
112
+ variant: "outlined",
113
+ onClick: onDelete,
114
+ children: "Delete"
115
+ }),
116
+ /*#__PURE__*/ _jsx(Divider, {
117
+ orientation: "vertical",
118
+ flexItem: true,
119
+ sx: (theme)=>({
120
+ borderColor: theme.palette.grey['500'],
121
+ '&.MuiDivider-root': {
122
+ marginLeft: 2,
123
+ marginRight: 1
124
+ }
125
+ })
126
+ }),
127
+ /*#__PURE__*/ _jsx(Button, {
128
+ color: "secondary",
129
+ variant: "outlined",
130
+ onClick: onClose,
131
+ children: "Close"
132
+ })
133
+ ]
134
+ }) : /*#__PURE__*/ _jsxs(_Fragment, {
135
+ children: [
136
+ /*#__PURE__*/ _jsx(Button, {
137
+ type: "submit",
138
+ variant: "contained",
139
+ disabled: !form.formState.isValid,
140
+ onClick: form.handleSubmit(processForm),
141
+ children: submitText
142
+ }),
143
+ /*#__PURE__*/ _jsx(Button, {
144
+ color: "secondary",
145
+ variant: "outlined",
146
+ onClick: handleCancel,
147
+ children: "Cancel"
148
+ })
149
+ ]
150
+ })
124
151
  })
125
152
  ]
126
153
  }),
@@ -138,19 +165,30 @@ export function VariableEditForm(props) {
138
165
  /*#__PURE__*/ _jsx(Grid, {
139
166
  item: true,
140
167
  xs: 8,
141
- children: /*#__PURE__*/ _jsx(TextField, {
142
- required: true,
143
- error: !!validation.name,
144
- fullWidth: true,
145
- label: "Name",
146
- value: state.name,
147
- helperText: validation.name,
148
- InputProps: {
149
- readOnly: action === 'update' || action === 'read'
150
- },
151
- onChange: (v)=>{
152
- setState((draft)=>{
153
- draft.name = v.target.value;
168
+ children: /*#__PURE__*/ _jsx(Controller, {
169
+ name: "name",
170
+ render: ({ field , fieldState })=>{
171
+ var _fieldState_error;
172
+ /*#__PURE__*/ return _jsx(TextField, {
173
+ ...field,
174
+ required: true,
175
+ fullWidth: true,
176
+ label: "Name",
177
+ InputLabelProps: {
178
+ shrink: action === 'read' ? true : undefined
179
+ },
180
+ InputProps: {
181
+ disabled: action === 'update',
182
+ readOnly: action === 'read'
183
+ },
184
+ error: !!fieldState.error,
185
+ helperText: (_fieldState_error = fieldState.error) === null || _fieldState_error === void 0 ? void 0 : _fieldState_error.message,
186
+ onChange: (event)=>{
187
+ field.onChange(event);
188
+ setState((draft)=>{
189
+ draft.name = event.target.value;
190
+ });
191
+ }
154
192
  });
155
193
  }
156
194
  })
@@ -158,16 +196,28 @@ export function VariableEditForm(props) {
158
196
  /*#__PURE__*/ _jsx(Grid, {
159
197
  item: true,
160
198
  xs: 4,
161
- children: /*#__PURE__*/ _jsx(TextField, {
162
- fullWidth: true,
163
- label: "Display Label",
164
- value: state.title || '',
165
- InputProps: {
166
- readOnly: action === 'read'
167
- },
168
- onChange: (v)=>{
169
- setState((draft)=>{
170
- draft.title = v.target.value;
199
+ children: /*#__PURE__*/ _jsx(Controller, {
200
+ name: "title",
201
+ render: ({ field , fieldState })=>{
202
+ var _fieldState_error;
203
+ /*#__PURE__*/ return _jsx(TextField, {
204
+ ...field,
205
+ fullWidth: true,
206
+ label: "Display Label",
207
+ InputLabelProps: {
208
+ shrink: action === 'read' ? true : undefined
209
+ },
210
+ InputProps: {
211
+ readOnly: action === 'read'
212
+ },
213
+ error: !!fieldState.error,
214
+ helperText: (_fieldState_error = fieldState.error) === null || _fieldState_error === void 0 ? void 0 : _fieldState_error.message,
215
+ onChange: (event)=>{
216
+ field.onChange(event);
217
+ setState((draft)=>{
218
+ draft.title = event.target.value;
219
+ });
220
+ }
171
221
  });
172
222
  }
173
223
  })
@@ -175,16 +225,28 @@ export function VariableEditForm(props) {
175
225
  /*#__PURE__*/ _jsx(Grid, {
176
226
  item: true,
177
227
  xs: 8,
178
- children: /*#__PURE__*/ _jsx(TextField, {
179
- fullWidth: true,
180
- label: "Description",
181
- value: state.description,
182
- InputProps: {
183
- readOnly: action === 'read'
184
- },
185
- onChange: (v)=>{
186
- setState((draft)=>{
187
- draft.description = v.target.value;
228
+ children: /*#__PURE__*/ _jsx(Controller, {
229
+ name: "description",
230
+ render: ({ field , fieldState })=>{
231
+ var _fieldState_error;
232
+ /*#__PURE__*/ return _jsx(TextField, {
233
+ ...field,
234
+ fullWidth: true,
235
+ label: "Description",
236
+ InputLabelProps: {
237
+ shrink: action === 'read' ? true : undefined
238
+ },
239
+ InputProps: {
240
+ readOnly: action === 'read'
241
+ },
242
+ error: !!fieldState.error,
243
+ helperText: (_fieldState_error = fieldState.error) === null || _fieldState_error === void 0 ? void 0 : _fieldState_error.message,
244
+ onChange: (event)=>{
245
+ field.onChange(event);
246
+ setState((draft)=>{
247
+ draft.description = event.target.value;
248
+ });
249
+ }
188
250
  });
189
251
  }
190
252
  })
@@ -192,30 +254,35 @@ export function VariableEditForm(props) {
192
254
  /*#__PURE__*/ _jsx(Grid, {
193
255
  item: true,
194
256
  xs: 4,
195
- children: /*#__PURE__*/ _jsxs(FormControl, {
196
- fullWidth: true,
197
- children: [
198
- /*#__PURE__*/ _jsx(InputLabel, {
199
- id: "variable-type-select-label",
200
- children: "Type"
201
- }),
202
- /*#__PURE__*/ _jsx(Select, {
203
- labelId: "variable-type-select-label",
204
- id: "variable-type-select",
257
+ children: /*#__PURE__*/ _jsx(Controller, {
258
+ name: "kind",
259
+ render: ({ field , fieldState })=>{
260
+ var _fieldState_error;
261
+ /*#__PURE__*/ return _jsx(TextField, {
262
+ select: true,
263
+ ...field,
264
+ fullWidth: true,
205
265
  label: "Type",
206
- value: state.kind,
207
- readOnly: action === 'read',
208
- onChange: (v)=>{
266
+ InputLabelProps: {
267
+ shrink: action === 'read' ? true : undefined
268
+ },
269
+ InputProps: {
270
+ readOnly: action === 'read'
271
+ },
272
+ error: !!fieldState.error,
273
+ helperText: (_fieldState_error = fieldState.error) === null || _fieldState_error === void 0 ? void 0 : _fieldState_error.message,
274
+ onChange: (event)=>{
275
+ field.onChange(event);
209
276
  setState((draft)=>{
210
- draft.kind = v.target.value;
277
+ draft.kind = event.target.value;
211
278
  });
212
279
  },
213
280
  children: VARIABLE_TYPES.map((v)=>/*#__PURE__*/ _jsx(MenuItem, {
214
281
  value: v.kind,
215
282
  children: v.label
216
283
  }, v.kind))
217
- })
218
- ]
284
+ });
285
+ }
219
286
  })
220
287
  })
221
288
  ]
@@ -241,6 +308,9 @@ export function VariableEditForm(props) {
241
308
  /*#__PURE__*/ _jsx(TextField, {
242
309
  label: "Value",
243
310
  value: state.textVariableFields.value,
311
+ InputLabelProps: {
312
+ shrink: action === 'read' ? true : undefined
313
+ },
244
314
  InputProps: {
245
315
  readOnly: action === 'read'
246
316
  },
@@ -249,6 +319,19 @@ export function VariableEditForm(props) {
249
319
  draft.textVariableFields.value = v.target.value;
250
320
  });
251
321
  }
322
+ }),
323
+ /*#__PURE__*/ _jsx(FormControlLabel, {
324
+ control: /*#__PURE__*/ _jsx(Switch, {
325
+ checked: (_state_textVariableFields_constant = state.textVariableFields.constant) !== null && _state_textVariableFields_constant !== void 0 ? _state_textVariableFields_constant : false,
326
+ readOnly: action === 'read',
327
+ onChange: (e)=>{
328
+ if (action === 'read') return; // ReadOnly prop is not blocking user interaction...
329
+ setState((draft)=>{
330
+ draft.textVariableFields.constant = e.target.checked;
331
+ });
332
+ }
333
+ }),
334
+ label: "Constant"
252
335
  })
253
336
  ]
254
337
  })
@@ -302,7 +385,10 @@ export function VariableEditForm(props) {
302
385
  /*#__PURE__*/ _jsx(Stack, {
303
386
  children: /*#__PURE__*/ _jsx(TextField, {
304
387
  label: "Capturing Regexp Filter",
305
- value: state.listVariableFields.capturing_regexp || '',
388
+ value: state.listVariableFields.capturingRegexp || '',
389
+ InputLabelProps: {
390
+ shrink: action === 'read' ? true : undefined
391
+ },
306
392
  InputProps: {
307
393
  readOnly: action === 'read'
308
394
  },
@@ -310,9 +396,9 @@ export function VariableEditForm(props) {
310
396
  setState((draft)=>{
311
397
  if (e.target.value) {
312
398
  // TODO: do a better fix, if empty string => it should skip the filter
313
- draft.listVariableFields.capturing_regexp = e.target.value;
399
+ draft.listVariableFields.capturingRegexp = e.target.value;
314
400
  } else {
315
- draft.listVariableFields.capturing_regexp = undefined;
401
+ draft.listVariableFields.capturingRegexp = undefined;
316
402
  }
317
403
  });
318
404
  },
@@ -374,6 +460,9 @@ export function VariableEditForm(props) {
374
460
  state.listVariableFields.allowAll && /*#__PURE__*/ _jsx(TextField, {
375
461
  label: "Custom All Value",
376
462
  value: state.listVariableFields.customAllValue,
463
+ InputLabelProps: {
464
+ shrink: action === 'read' ? true : undefined
465
+ },
377
466
  InputProps: {
378
467
  readOnly: action === 'read'
379
468
  },
@@ -398,13 +487,13 @@ export function VariableEditForm(props) {
398
487
  }),
399
488
  /*#__PURE__*/ _jsx(DiscardChangesConfirmationDialog, {
400
489
  description: "Are you sure you want to discard these changes? Changes cannot be recovered.",
401
- isOpen: isDiscardDialogStateOpened,
490
+ isOpen: isDiscardDialogOpened,
402
491
  onCancel: ()=>{
403
- setDiscardDialogStateOpened(false);
492
+ setDiscardDialogOpened(false);
404
493
  },
405
494
  onDiscardChanges: ()=>{
406
- setDiscardDialogStateOpened(false);
407
- onCancel();
495
+ setDiscardDialogOpened(false);
496
+ onClose();
408
497
  }
409
498
  })
410
499
  ]
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/Variables/VariableEditorForm/VariableEditorForm.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 React, { useCallback, useMemo, useState } from 'react';\nimport {\n Box,\n Typography,\n Switch,\n TextField,\n Grid,\n FormControl,\n FormControlLabel,\n InputLabel,\n MenuItem,\n Button,\n Stack,\n ClickAwayListener,\n Divider,\n Select,\n capitalize,\n} from '@mui/material';\nimport { useImmer } from 'use-immer';\nimport { VariableDefinition, ListVariableDefinition } from '@perses-dev/core';\nimport { DiscardChangesConfirmationDialog, ErrorBoundary } from '@perses-dev/components';\nimport { VARIABLE_TYPES } from '../variable-model';\nimport { PluginEditor } from '../../PluginEditor';\nimport { VariableListPreview, VariablePreview } from './VariablePreview';\nimport { VariableEditorState, getVariableDefinitionFromState, getInitialState } from './variable-editor-form-model';\n\n// TODO: Replace with proper validation library\nfunction getValidation(state: ReturnType<typeof getInitialState>) {\n /** Name validation */\n let name = null;\n if (!state.name) {\n name = 'Name is required';\n }\n // name can only contain alphanumeric characters and underscores and no spaces\n if (state.name && !/^[a-zA-Z0-9_-]+$/.test(state.name)) {\n name = 'Name can only contain alphanumeric characters, underscores, and dashes';\n }\n\n return {\n name,\n isValid: !name,\n };\n}\n\nfunction FallbackPreview() {\n return <div>Error previewing values</div>;\n}\n\nexport type Action = 'create' | 'read' | 'update';\n\ninterface VariableEditFormProps {\n initialVariableDefinition: VariableDefinition;\n onChange: (def: VariableDefinition) => void;\n onCancel: () => void;\n action?: Action;\n}\n\nexport function VariableEditForm(props: VariableEditFormProps) {\n const { initialVariableDefinition, onChange, onCancel, action = 'update' } = props;\n const initialState = getInitialState(initialVariableDefinition);\n const [state, setState] = useImmer(initialState);\n const validation = useMemo(() => getValidation(state), [state]);\n const [isDiscardDialogStateOpened, setDiscardDialogStateOpened] = useState<boolean>(false);\n const [previewKey, setPreviewKey] = useState(0);\n\n const refreshPreview = () => {\n setPreviewKey((prev) => prev + 1);\n };\n\n /** We use the `previewKey` that we increment to know when to explicitly update the\n * spec that will be used for preview. The reason why we do this is to avoid\n * having to re-fetch the values when the user is still editing the spec.\n */\n const previewSpec = useMemo(() => {\n return getVariableDefinitionFromState(state) as ListVariableDefinition;\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [previewKey]);\n\n const title = useMemo(() => {\n if (action === 'read') return 'View Variable';\n if (action === 'create') return 'Create Variable';\n if (action === 'update') return 'Edit Variable';\n return '';\n }, [action]);\n\n // When user click on cancel, several possibilities:\n // - create action: ask for discard approval\n // - update action: ask for discard approval if changed\n // - read action: don´t ask for discard approval\n const handleCancel = useCallback(() => {\n if (action === 'create' || (action === 'update' && JSON.stringify(initialState) !== JSON.stringify(state))) {\n setDiscardDialogStateOpened(true);\n } else {\n onCancel();\n }\n }, [state, initialState, action, setDiscardDialogStateOpened, onCancel]);\n\n return (\n <>\n <Box\n sx={{\n display: 'flex',\n alignItems: 'center',\n padding: (theme) => theme.spacing(1, 2),\n borderBottom: (theme) => `1px solid ${theme.palette.divider}`,\n }}\n >\n <Typography variant=\"h2\">{title}</Typography>\n <Stack direction=\"row\" spacing={1} sx={{ marginLeft: 'auto' }}>\n {action !== 'read' && (\n <Button\n disabled={!validation.isValid}\n variant=\"contained\"\n onClick={() => {\n onChange(getVariableDefinitionFromState(state));\n }}\n >\n {capitalize(action)}\n </Button>\n )}\n <Button color=\"secondary\" variant=\"outlined\" onClick={handleCancel}>\n {action === 'read' ? 'Close' : 'Cancel'}\n </Button>\n </Stack>\n </Box>\n <Box padding={2} sx={{ overflowY: 'scroll' }}>\n <Grid container spacing={2} mb={2}>\n <Grid item xs={8}>\n <TextField\n required\n error={!!validation.name}\n fullWidth\n label=\"Name\"\n value={state.name}\n helperText={validation.name}\n InputProps={{\n readOnly: action === 'update' || action === 'read',\n }}\n onChange={(v) => {\n setState((draft) => {\n draft.name = v.target.value;\n });\n }}\n />\n </Grid>\n <Grid item xs={4}>\n <TextField\n fullWidth\n label=\"Display Label\"\n value={state.title || ''}\n InputProps={{\n readOnly: action === 'read',\n }}\n onChange={(v) => {\n setState((draft) => {\n draft.title = v.target.value;\n });\n }}\n />\n </Grid>\n <Grid item xs={8}>\n <TextField\n fullWidth\n label=\"Description\"\n value={state.description}\n InputProps={{\n readOnly: action === 'read',\n }}\n onChange={(v) => {\n setState((draft) => {\n draft.description = v.target.value;\n });\n }}\n />\n </Grid>\n <Grid item xs={4}>\n <FormControl fullWidth>\n <InputLabel id=\"variable-type-select-label\">Type</InputLabel>\n <Select\n labelId=\"variable-type-select-label\"\n id=\"variable-type-select\"\n label=\"Type\"\n value={state.kind}\n readOnly={action === 'read'}\n onChange={(v) => {\n setState((draft) => {\n draft.kind = v.target.value as VariableEditorState['kind'];\n });\n }}\n >\n {VARIABLE_TYPES.map((v) => (\n <MenuItem key={v.kind} value={v.kind}>\n {v.label}\n </MenuItem>\n ))}\n </Select>\n </FormControl>\n </Grid>\n </Grid>\n\n <Divider />\n\n {state.kind === 'TextVariable' && (\n <>\n <Typography py={1} variant=\"subtitle1\">\n Text Options\n </Typography>\n <Stack spacing={2}>\n <Box>\n <VariablePreview values={[state.textVariableFields.value]} />\n </Box>\n <TextField\n label=\"Value\"\n value={state.textVariableFields.value}\n InputProps={{\n readOnly: action === 'read',\n }}\n onChange={(v) => {\n setState((draft) => {\n draft.textVariableFields.value = v.target.value;\n });\n }}\n />\n </Stack>\n </>\n )}\n\n {state.kind === 'ListVariable' && (\n <>\n <Typography py={1} variant=\"subtitle1\">\n List Options\n </Typography>\n <Stack spacing={2} mb={2}>\n {state.listVariableFields.plugin.kind ? (\n <Box>\n <ErrorBoundary FallbackComponent={FallbackPreview} resetKeys={[previewSpec]}>\n <VariableListPreview definition={previewSpec} onRefresh={refreshPreview} />\n </ErrorBoundary>\n </Box>\n ) : (\n <VariablePreview isLoading={true} />\n )}\n\n <Stack>\n {/** Hack?: Cool technique to refresh the preview to simulate onBlur event */}\n <ClickAwayListener onClickAway={() => refreshPreview()}>\n <Box />\n </ClickAwayListener>\n {/** */}\n <PluginEditor\n width=\"100%\"\n pluginType=\"Variable\"\n pluginKindLabel=\"Source\"\n value={state.listVariableFields.plugin}\n isReadonly={action === 'read'}\n onChange={(val) => {\n setState((draft) => {\n draft.listVariableFields.plugin = val;\n });\n }}\n />\n </Stack>\n\n <Stack>\n <TextField\n label=\"Capturing Regexp Filter\"\n value={state.listVariableFields.capturing_regexp || ''}\n InputProps={{\n readOnly: action === 'read',\n }}\n onChange={(e) => {\n setState((draft) => {\n if (e.target.value) {\n // TODO: do a better fix, if empty string => it should skip the filter\n draft.listVariableFields.capturing_regexp = e.target.value;\n } else {\n draft.listVariableFields.capturing_regexp = undefined;\n }\n });\n }}\n helperText=\"Optional, if you want to filter on captured result.\"\n />\n </Stack>\n </Stack>\n\n <Divider />\n\n <Typography py={1} variant=\"subtitle1\">\n Dropdown Options\n </Typography>\n <Stack spacing=\"2\">\n <Stack>\n <FormControlLabel\n control={\n <Switch\n checked={state.listVariableFields.allowMultiple}\n readOnly={action === 'read'}\n onChange={(e) => {\n if (action === 'read') return; // ReadOnly prop is not blocking user interaction...\n setState((draft) => {\n draft.listVariableFields.allowMultiple = e.target.checked;\n });\n }}\n />\n }\n label=\"Allow Multiple Values\"\n />\n <Typography variant=\"caption\">Enables multiple values to be selected at the same time</Typography>\n </Stack>\n <Stack>\n <FormControlLabel\n control={\n <Switch\n checked={state.listVariableFields.allowAll}\n readOnly={action === 'read'}\n onChange={(e) => {\n if (action === 'read') return; // ReadOnly prop is not blocking user interaction...\n setState((draft) => {\n draft.listVariableFields.allowAll = e.target.checked;\n });\n }}\n />\n }\n label=\"Allow All option\"\n />\n <Typography mb={1} variant=\"caption\">\n Enables an option to include all variable values\n </Typography>\n {state.listVariableFields.allowAll && (\n <TextField\n label=\"Custom All Value\"\n value={state.listVariableFields.customAllValue}\n InputProps={{\n readOnly: action === 'read',\n }}\n onChange={(e) => {\n setState((draft) => {\n if (e.target.value) {\n draft.listVariableFields.customAllValue = e.target.value;\n } else {\n draft.listVariableFields.customAllValue = undefined;\n }\n });\n }}\n helperText=\"When All is selected, this value will be used\"\n />\n )}\n </Stack>\n </Stack>\n </>\n )}\n </Box>\n <DiscardChangesConfirmationDialog\n description=\"Are you sure you want to discard these changes? Changes cannot be recovered.\"\n isOpen={isDiscardDialogStateOpened}\n onCancel={() => {\n setDiscardDialogStateOpened(false);\n }}\n onDiscardChanges={() => {\n setDiscardDialogStateOpened(false);\n onCancel();\n }}\n />\n </>\n );\n}\n"],"names":["React","useCallback","useMemo","useState","Box","Typography","Switch","TextField","Grid","FormControl","FormControlLabel","InputLabel","MenuItem","Button","Stack","ClickAwayListener","Divider","Select","capitalize","useImmer","DiscardChangesConfirmationDialog","ErrorBoundary","VARIABLE_TYPES","PluginEditor","VariableListPreview","VariablePreview","getVariableDefinitionFromState","getInitialState","getValidation","state","name","test","isValid","FallbackPreview","div","VariableEditForm","props","initialVariableDefinition","onChange","onCancel","action","initialState","setState","validation","isDiscardDialogStateOpened","setDiscardDialogStateOpened","previewKey","setPreviewKey","refreshPreview","prev","previewSpec","title","handleCancel","JSON","stringify","sx","display","alignItems","padding","theme","spacing","borderBottom","palette","divider","variant","direction","marginLeft","disabled","onClick","color","overflowY","container","mb","item","xs","required","error","fullWidth","label","value","helperText","InputProps","readOnly","v","draft","target","description","id","labelId","kind","map","py","values","textVariableFields","listVariableFields","plugin","FallbackComponent","resetKeys","definition","onRefresh","isLoading","onClickAway","width","pluginType","pluginKindLabel","isReadonly","val","capturing_regexp","e","undefined","control","checked","allowMultiple","allowAll","customAllValue","isOpen","onDiscardChanges"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../src/components/Variables/VariableEditorForm/VariableEditorForm.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 React, { DispatchWithoutAction, useCallback, useMemo, useState } from 'react';\nimport {\n Box,\n Typography,\n Switch,\n TextField,\n Grid,\n FormControlLabel,\n MenuItem,\n Button,\n Stack,\n ClickAwayListener,\n Divider,\n} from '@mui/material';\nimport { useImmer } from 'use-immer';\nimport { VariableDefinition, ListVariableDefinition } from '@perses-dev/core';\nimport { DiscardChangesConfirmationDialog, ErrorBoundary } from '@perses-dev/components';\nimport { Controller, FormProvider, SubmitHandler, useForm } from 'react-hook-form';\nimport { zodResolver } from '@hookform/resolvers/zod';\nimport { Action, getSubmitText, getTitleAction } from '../../../utils';\nimport { VARIABLE_TYPES } from '../variable-model';\nimport { PluginEditor } from '../../PluginEditor';\nimport { variableEditValidationSchema, VariableEditValidationType } from '../../../validation';\nimport { VariableListPreview, VariablePreview } from './VariablePreview';\nimport { VariableEditorState, getVariableDefinitionFromState, getInitialState } from './variable-editor-form-model';\n\nfunction FallbackPreview() {\n return <div>Error previewing values</div>;\n}\n\ninterface VariableEditorFormProps {\n initialVariableDefinition: VariableDefinition;\n initialAction: Action;\n isDraft: boolean;\n isReadonly?: boolean;\n onSave: (def: VariableDefinition) => void;\n onClose: () => void;\n onDelete?: DispatchWithoutAction;\n}\n\nexport function VariableEditorForm(props: VariableEditorFormProps) {\n const { initialVariableDefinition, initialAction, isDraft, isReadonly, onSave, onClose, onDelete } = props;\n\n const initialState = getInitialState(initialVariableDefinition);\n const [state, setState] = useImmer(initialState);\n const [isDiscardDialogOpened, setDiscardDialogOpened] = useState<boolean>(false);\n const [previewKey, setPreviewKey] = useState(0);\n const [action, setAction] = useState(initialAction);\n\n const refreshPreview = () => {\n setPreviewKey((prev) => prev + 1);\n };\n\n /** We use the `previewKey` that we increment to know when to explicitly update the\n * spec that will be used for preview. The reason why we do this is to avoid\n * having to re-fetch the values when the user is still editing the spec.\n */\n const previewSpec = useMemo(() => {\n return getVariableDefinitionFromState(state) as ListVariableDefinition;\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [previewKey]);\n\n const titleAction = getTitleAction(action, isDraft);\n const submitText = getSubmitText(action, isDraft);\n\n const form = useForm<VariableEditValidationType>({\n resolver: zodResolver(variableEditValidationSchema),\n mode: 'onBlur',\n defaultValues: state,\n });\n\n const processForm: SubmitHandler<VariableEditValidationType> = () => {\n onSave(getVariableDefinitionFromState(state));\n };\n\n // When user click on cancel, several possibilities:\n // - create action: ask for discard approval\n // - update action: ask for discard approval if changed\n // - read action: don´t ask for discard approval\n const handleCancel = useCallback(() => {\n if (JSON.stringify(initialState) !== JSON.stringify(state)) {\n setDiscardDialogOpened(true);\n } else {\n onClose();\n }\n }, [state, initialState, setDiscardDialogOpened, onClose]);\n\n return (\n <FormProvider {...form}>\n <Box\n sx={{\n display: 'flex',\n alignItems: 'center',\n padding: (theme) => theme.spacing(1, 2),\n borderBottom: (theme) => `1px solid ${theme.palette.divider}`,\n }}\n >\n <Typography variant=\"h2\">{titleAction} Variable</Typography>\n <Stack direction=\"row\" spacing={1} sx={{ marginLeft: 'auto' }}>\n {action === 'read' ? (\n <>\n <Button disabled={isReadonly} variant=\"contained\" onClick={() => setAction('update')}>\n Edit\n </Button>\n <Button color=\"error\" disabled={isReadonly} variant=\"outlined\" onClick={onDelete}>\n Delete\n </Button>\n <Divider\n orientation=\"vertical\"\n flexItem\n sx={(theme) => ({\n borderColor: theme.palette.grey['500'],\n '&.MuiDivider-root': {\n marginLeft: 2,\n marginRight: 1,\n },\n })}\n />\n <Button color=\"secondary\" variant=\"outlined\" onClick={onClose}>\n Close\n </Button>\n </>\n ) : (\n <>\n <Button\n type=\"submit\"\n variant=\"contained\"\n disabled={!form.formState.isValid}\n onClick={form.handleSubmit(processForm)}\n >\n {submitText}\n </Button>\n <Button color=\"secondary\" variant=\"outlined\" onClick={handleCancel}>\n Cancel\n </Button>\n </>\n )}\n </Stack>\n </Box>\n <Box padding={2} sx={{ overflowY: 'scroll' }}>\n <Grid container spacing={2} mb={2}>\n <Grid item xs={8}>\n <Controller\n name=\"name\"\n render={({ field, fieldState }) => (\n <TextField\n {...field}\n required\n fullWidth\n label=\"Name\"\n InputLabelProps={{ shrink: action === 'read' ? true : undefined }}\n InputProps={{\n disabled: action === 'update',\n readOnly: action === 'read',\n }}\n error={!!fieldState.error}\n helperText={fieldState.error?.message}\n onChange={(event) => {\n field.onChange(event);\n setState((draft) => {\n draft.name = event.target.value;\n });\n }}\n />\n )}\n />\n </Grid>\n <Grid item xs={4}>\n <Controller\n name=\"title\"\n render={({ field, fieldState }) => (\n <TextField\n {...field}\n fullWidth\n label=\"Display Label\"\n InputLabelProps={{ shrink: action === 'read' ? true : undefined }}\n InputProps={{\n readOnly: action === 'read',\n }}\n error={!!fieldState.error}\n helperText={fieldState.error?.message}\n onChange={(event) => {\n field.onChange(event);\n setState((draft) => {\n draft.title = event.target.value;\n });\n }}\n />\n )}\n />\n </Grid>\n <Grid item xs={8}>\n <Controller\n name=\"description\"\n render={({ field, fieldState }) => (\n <TextField\n {...field}\n fullWidth\n label=\"Description\"\n InputLabelProps={{ shrink: action === 'read' ? true : undefined }}\n InputProps={{\n readOnly: action === 'read',\n }}\n error={!!fieldState.error}\n helperText={fieldState.error?.message}\n onChange={(event) => {\n field.onChange(event);\n setState((draft) => {\n draft.description = event.target.value;\n });\n }}\n />\n )}\n />\n </Grid>\n <Grid item xs={4}>\n <Controller\n name=\"kind\"\n render={({ field, fieldState }) => (\n <TextField\n select\n {...field}\n fullWidth\n label=\"Type\"\n InputLabelProps={{ shrink: action === 'read' ? true : undefined }}\n InputProps={{\n readOnly: action === 'read',\n }}\n error={!!fieldState.error}\n helperText={fieldState.error?.message}\n onChange={(event) => {\n field.onChange(event);\n setState((draft) => {\n draft.kind = event.target.value as VariableEditorState['kind'];\n });\n }}\n >\n {VARIABLE_TYPES.map((v) => (\n <MenuItem key={v.kind} value={v.kind}>\n {v.label}\n </MenuItem>\n ))}\n </TextField>\n )}\n />\n </Grid>\n </Grid>\n\n <Divider />\n\n {state.kind === 'TextVariable' && (\n <>\n <Typography py={1} variant=\"subtitle1\">\n Text Options\n </Typography>\n <Stack spacing={2}>\n <Box>\n <VariablePreview values={[state.textVariableFields.value]} />\n </Box>\n <TextField\n label=\"Value\"\n value={state.textVariableFields.value}\n InputLabelProps={{ shrink: action === 'read' ? true : undefined }}\n InputProps={{\n readOnly: action === 'read',\n }}\n onChange={(v) => {\n setState((draft) => {\n draft.textVariableFields.value = v.target.value;\n });\n }}\n />\n <FormControlLabel\n control={\n <Switch\n checked={state.textVariableFields.constant ?? false}\n readOnly={action === 'read'}\n onChange={(e) => {\n if (action === 'read') return; // ReadOnly prop is not blocking user interaction...\n setState((draft) => {\n draft.textVariableFields.constant = e.target.checked;\n });\n }}\n />\n }\n label=\"Constant\"\n />\n </Stack>\n </>\n )}\n\n {state.kind === 'ListVariable' && (\n <>\n <Typography py={1} variant=\"subtitle1\">\n List Options\n </Typography>\n <Stack spacing={2} mb={2}>\n {state.listVariableFields.plugin.kind ? (\n <Box>\n <ErrorBoundary FallbackComponent={FallbackPreview} resetKeys={[previewSpec]}>\n <VariableListPreview definition={previewSpec} onRefresh={refreshPreview} />\n </ErrorBoundary>\n </Box>\n ) : (\n <VariablePreview isLoading={true} />\n )}\n\n <Stack>\n {/** Hack?: Cool technique to refresh the preview to simulate onBlur event */}\n <ClickAwayListener onClickAway={() => refreshPreview()}>\n <Box />\n </ClickAwayListener>\n {/** */}\n <PluginEditor\n width=\"100%\"\n pluginType=\"Variable\"\n pluginKindLabel=\"Source\"\n value={state.listVariableFields.plugin}\n isReadonly={action === 'read'}\n onChange={(val) => {\n setState((draft) => {\n draft.listVariableFields.plugin = val;\n });\n }}\n />\n </Stack>\n\n <Stack>\n <TextField\n label=\"Capturing Regexp Filter\"\n value={state.listVariableFields.capturingRegexp || ''}\n InputLabelProps={{ shrink: action === 'read' ? true : undefined }}\n InputProps={{\n readOnly: action === 'read',\n }}\n onChange={(e) => {\n setState((draft) => {\n if (e.target.value) {\n // TODO: do a better fix, if empty string => it should skip the filter\n draft.listVariableFields.capturingRegexp = e.target.value;\n } else {\n draft.listVariableFields.capturingRegexp = undefined;\n }\n });\n }}\n helperText=\"Optional, if you want to filter on captured result.\"\n />\n </Stack>\n </Stack>\n\n <Divider />\n\n <Typography py={1} variant=\"subtitle1\">\n Dropdown Options\n </Typography>\n <Stack spacing=\"2\">\n <Stack>\n <FormControlLabel\n control={\n <Switch\n checked={state.listVariableFields.allowMultiple}\n readOnly={action === 'read'}\n onChange={(e) => {\n if (action === 'read') return; // ReadOnly prop is not blocking user interaction...\n setState((draft) => {\n draft.listVariableFields.allowMultiple = e.target.checked;\n });\n }}\n />\n }\n label=\"Allow Multiple Values\"\n />\n <Typography variant=\"caption\">Enables multiple values to be selected at the same time</Typography>\n </Stack>\n <Stack>\n <FormControlLabel\n control={\n <Switch\n checked={state.listVariableFields.allowAll}\n readOnly={action === 'read'}\n onChange={(e) => {\n if (action === 'read') return; // ReadOnly prop is not blocking user interaction...\n setState((draft) => {\n draft.listVariableFields.allowAll = e.target.checked;\n });\n }}\n />\n }\n label=\"Allow All option\"\n />\n <Typography mb={1} variant=\"caption\">\n Enables an option to include all variable values\n </Typography>\n {state.listVariableFields.allowAll && (\n <TextField\n label=\"Custom All Value\"\n value={state.listVariableFields.customAllValue}\n InputLabelProps={{ shrink: action === 'read' ? true : undefined }}\n InputProps={{\n readOnly: action === 'read',\n }}\n onChange={(e) => {\n setState((draft) => {\n if (e.target.value) {\n draft.listVariableFields.customAllValue = e.target.value;\n } else {\n draft.listVariableFields.customAllValue = undefined;\n }\n });\n }}\n helperText=\"When All is selected, this value will be used\"\n />\n )}\n </Stack>\n </Stack>\n </>\n )}\n </Box>\n <DiscardChangesConfirmationDialog\n description=\"Are you sure you want to discard these changes? Changes cannot be recovered.\"\n isOpen={isDiscardDialogOpened}\n onCancel={() => {\n setDiscardDialogOpened(false);\n }}\n onDiscardChanges={() => {\n setDiscardDialogOpened(false);\n onClose();\n }}\n />\n </FormProvider>\n );\n}\n"],"names":["React","useCallback","useMemo","useState","Box","Typography","Switch","TextField","Grid","FormControlLabel","MenuItem","Button","Stack","ClickAwayListener","Divider","useImmer","DiscardChangesConfirmationDialog","ErrorBoundary","Controller","FormProvider","useForm","zodResolver","getSubmitText","getTitleAction","VARIABLE_TYPES","PluginEditor","variableEditValidationSchema","VariableListPreview","VariablePreview","getVariableDefinitionFromState","getInitialState","FallbackPreview","div","VariableEditorForm","props","initialVariableDefinition","initialAction","isDraft","isReadonly","onSave","onClose","onDelete","initialState","state","setState","isDiscardDialogOpened","setDiscardDialogOpened","previewKey","setPreviewKey","action","setAction","refreshPreview","prev","previewSpec","titleAction","submitText","form","resolver","mode","defaultValues","processForm","handleCancel","JSON","stringify","sx","display","alignItems","padding","theme","spacing","borderBottom","palette","divider","variant","direction","marginLeft","disabled","onClick","color","orientation","flexItem","borderColor","grey","marginRight","type","formState","isValid","handleSubmit","overflowY","container","mb","item","xs","name","render","field","fieldState","required","fullWidth","label","InputLabelProps","shrink","undefined","InputProps","readOnly","error","helperText","message","onChange","event","draft","target","value","title","description","select","kind","map","v","py","values","textVariableFields","control","checked","constant","e","listVariableFields","plugin","FallbackComponent","resetKeys","definition","onRefresh","isLoading","onClickAway","width","pluginType","pluginKindLabel","val","capturingRegexp","allowMultiple","allowAll","customAllValue","isOpen","onCancel","onDiscardChanges"],"mappings":"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"}