@dartech/arsenal-ui 1.2.4 → 1.2.6

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 (271) hide show
  1. package/.babelrc +13 -0
  2. package/.eslintrc.json +22 -0
  3. package/{index.d.ts → index.ts} +5 -5
  4. package/jest.config.ts +11 -0
  5. package/package.json +3 -12
  6. package/project.json +94 -0
  7. package/rollup.config.js +146 -0
  8. package/src/assets/chevron_left_gray.svg +3 -0
  9. package/src/consts/index.ts +13 -0
  10. package/src/interfaces/common.ts +18 -0
  11. package/src/interfaces/definition.ts +143 -0
  12. package/src/interfaces/{index.d.ts → index.ts} +3 -3
  13. package/src/interfaces/ui.ts +80 -0
  14. package/src/lib/Alert/Alert.tsx +108 -0
  15. package/src/lib/Alert/index.ts +1 -0
  16. package/src/lib/Breadcrumbs/Breadcrumbs.styled.tsx +16 -0
  17. package/src/lib/Breadcrumbs/Breadcrumbs.tsx +40 -0
  18. package/src/lib/Breadcrumbs/{index.d.ts → index.ts} +1 -1
  19. package/src/lib/ContentLayout/ContentLayout.tsx +31 -0
  20. package/src/lib/ContentLayout/index.ts +1 -0
  21. package/src/lib/Definition/CreateDefinition/CreateDefinition.tsx +78 -0
  22. package/src/lib/Definition/CreateDefinition/{index.d.ts → index.ts} +1 -1
  23. package/src/lib/Definition/DefinitionFiller/DefinitionFiller.tsx +71 -0
  24. package/src/lib/Definition/DefinitionFiller/{index.d.ts → index.ts} +1 -1
  25. package/src/lib/Definition/DefinitionValueView/DefinitionValueView.tsx +54 -0
  26. package/src/lib/Definition/DefinitionValueView/PropertyDataView.tsx +67 -0
  27. package/src/lib/Definition/DefinitionValueView/{index.d.ts → index.ts} +1 -1
  28. package/src/lib/Definition/{index.d.ts → index.ts} +3 -3
  29. package/src/lib/Forms/BackButton.tsx +46 -0
  30. package/src/lib/Forms/ControlAceEditor.tsx +125 -0
  31. package/src/lib/Forms/ControlAutocomplete.tsx +145 -0
  32. package/src/lib/Forms/ControlCheckbox.tsx +113 -0
  33. package/src/lib/Forms/ControlDate.tsx +75 -0
  34. package/src/lib/Forms/ControlDateTime.tsx +77 -0
  35. package/src/lib/Forms/ControlDebouncedInput.tsx +80 -0
  36. package/src/lib/Forms/ControlInput.tsx +111 -0
  37. package/src/lib/Forms/ControlNumberInput.tsx +121 -0
  38. package/src/lib/Forms/ControlQueryAutocomplete.tsx +197 -0
  39. package/src/lib/Forms/ControlRadio.tsx +136 -0
  40. package/src/lib/Forms/ControlSelect.tsx +164 -0
  41. package/src/lib/Forms/ControlSwitch.tsx +71 -0
  42. package/src/lib/Forms/ControlTime.tsx +93 -0
  43. package/src/lib/Forms/CopyButton.tsx +46 -0
  44. package/src/lib/Forms/{index.d.ts → index.ts} +15 -15
  45. package/src/lib/Forms/useAutocomplete.tsx +47 -0
  46. package/src/lib/InfoItem/InfoItem.tsx +40 -0
  47. package/src/lib/InfoItem/{index.d.ts → index.ts} +1 -1
  48. package/src/lib/InfoItem/styles.ts +17 -0
  49. package/src/lib/JsonPathPicker/JsonPathPicker.tsx +73 -0
  50. package/src/lib/JsonPathPicker/PropertyStep.tsx +70 -0
  51. package/src/lib/JsonPathPicker/{index.d.ts → index.ts} +1 -1
  52. package/src/lib/JsonView/JsonView.tsx +41 -0
  53. package/src/lib/JsonView/{index.d.ts → index.ts} +1 -1
  54. package/src/lib/Loader/Loader.tsx +41 -0
  55. package/src/lib/Loader/{index.d.ts → index.ts} +1 -1
  56. package/src/lib/Modals/JsonModalView.tsx +53 -0
  57. package/src/lib/Modals/{index.d.ts → index.ts} +1 -1
  58. package/src/lib/Property/PropertyFiller/JsonEditor.tsx +58 -0
  59. package/src/lib/Property/PropertyFiller/MultiplePropertyFiller.tsx +129 -0
  60. package/src/lib/Property/PropertyFiller/MultiplePropertyWidget.tsx +85 -0
  61. package/src/lib/Property/PropertyFiller/PropertyFiller.tsx +199 -0
  62. package/src/lib/Property/PropertyFiller/{index.d.ts → index.ts} +2 -2
  63. package/src/lib/Property/PropertyFiller/usePropertyFiller.ts +72 -0
  64. package/src/lib/Property/PropertyFiller/useStyles.ts +12 -0
  65. package/src/lib/Property/PropertyValidator/NodeValidator.tsx +92 -0
  66. package/src/lib/Property/PropertyValidator/NodesList.tsx +26 -0
  67. package/src/lib/Property/PropertyValidator/NumericTypeValidator.tsx +59 -0
  68. package/src/lib/Property/PropertyValidator/PropertyValidator.tsx +42 -0
  69. package/src/lib/Property/PropertyValidator/PropertyValidatorContext.tsx +4 -0
  70. package/src/lib/Property/PropertyValidator/StringTypeValidator.tsx +36 -0
  71. package/src/lib/Property/PropertyValidator/ValidationNodeSelector.tsx +62 -0
  72. package/src/lib/Property/PropertyValidator/index.ts +1 -0
  73. package/src/lib/Property/PropertyValueField/BooleanValueField.tsx +49 -0
  74. package/src/lib/Property/PropertyValueField/DateTimeValueField.tsx +58 -0
  75. package/src/lib/Property/PropertyValueField/DateValueField.tsx +58 -0
  76. package/src/lib/Property/PropertyValueField/JsonValueField.tsx +65 -0
  77. package/src/lib/Property/PropertyValueField/PropertyValueField.tsx +49 -0
  78. package/src/lib/Property/PropertyValueField/StringValueField.tsx +50 -0
  79. package/src/lib/Property/PropertyValueField/TimeValueField.tsx +67 -0
  80. package/src/lib/Property/PropertyValueField/{index.d.ts → index.ts} +1 -1
  81. package/src/lib/Property/PropertyWidget/PropertyWidget.tsx +115 -0
  82. package/src/lib/Property/PropertyWidget/{index.d.ts → index.ts} +1 -1
  83. package/src/lib/Property/UpsertProperty/CreatePropertiesList.tsx +148 -0
  84. package/src/lib/Property/UpsertProperty/CreatePropertyFormFields.tsx +158 -0
  85. package/src/lib/Property/UpsertProperty/CustomPropertyField.tsx +40 -0
  86. package/src/lib/Property/UpsertProperty/PropertyAdditionalFields/BigDecimalPropertyFields.tsx +41 -0
  87. package/src/lib/Property/UpsertProperty/PropertyAdditionalFields/DateAdditionalFields.tsx +27 -0
  88. package/src/lib/Property/UpsertProperty/PropertyAdditionalFields/EntityAdditionalFields.tsx +133 -0
  89. package/src/lib/Property/UpsertProperty/PropertyAdditionalFields/EntityReferencePropertyFields.tsx +46 -0
  90. package/src/lib/Property/UpsertProperty/PropertyAdditionalFields/PropertyAdditionalFields.tsx +52 -0
  91. package/src/lib/Property/UpsertProperty/PropertyAdditionalFields/StringPropertyFields.tsx +103 -0
  92. package/src/lib/Property/UpsertProperty/PropertyAdditionalFields/{index.d.ts → index.ts} +1 -1
  93. package/src/lib/Property/UpsertProperty/{index.d.ts → index.ts} +2 -2
  94. package/src/lib/Property/UpsertProperty/useCustomFields.ts +22 -0
  95. package/src/lib/Property/ViewPropertiesList/ViewPropertiesList.tsx +37 -0
  96. package/src/lib/Property/ViewPropertiesList/{index.d.ts → index.ts} +1 -1
  97. package/src/lib/Property/ViewProperty/EntityPropertiesShortView.tsx +40 -0
  98. package/src/lib/Property/ViewProperty/EntityPropertiesView.tsx +48 -0
  99. package/src/lib/Property/ViewProperty/PropertyDataTable.tsx +148 -0
  100. package/src/lib/Property/ViewProperty/PropertyItem.tsx +43 -0
  101. package/src/lib/Property/ViewProperty/ViewProperty.tsx +52 -0
  102. package/src/lib/Property/ViewProperty/{index.d.ts → index.ts} +1 -1
  103. package/src/lib/Property/{index.d.ts → index.ts} +5 -5
  104. package/src/lib/Sidebar/Sidebar.styled.tsx +157 -0
  105. package/src/lib/Sidebar/Sidebar.tsx +27 -0
  106. package/src/lib/Sidebar/SidebarContext.tsx +37 -0
  107. package/src/lib/Sidebar/SidebarDrawer.tsx +50 -0
  108. package/src/lib/Sidebar/SidebarLink/MenuIcon.tsx +16 -0
  109. package/src/lib/Sidebar/SidebarLink/SidebarLink.tsx +54 -0
  110. package/src/lib/Sidebar/SidebarLink/SidebarLinkItem.tsx +54 -0
  111. package/src/lib/Sidebar/SidebarLink/SidebarNestedItem.tsx +62 -0
  112. package/src/lib/Sidebar/SidebarLink/{index.d.ts → index.ts} +2 -2
  113. package/src/lib/Sidebar/index.ts +2 -0
  114. package/src/lib/Status/Status.tsx +16 -0
  115. package/src/lib/Status/{index.d.ts → index.ts} +1 -1
  116. package/src/lib/Status/styles.ts +21 -0
  117. package/src/lib/StepperView/StepperView.tsx +73 -0
  118. package/src/lib/StepperView/{index.d.ts → index.ts} +1 -1
  119. package/src/lib/Table/DataGrid/JsonTypeCell.tsx +51 -0
  120. package/src/lib/Table/DataGrid/Table.tsx +117 -0
  121. package/src/lib/Table/DataGrid/TableAction.tsx +43 -0
  122. package/src/lib/Table/DataGrid/TableColumnMenu.tsx +12 -0
  123. package/src/lib/Table/DataGrid/TablePagination.tsx +42 -0
  124. package/src/lib/Table/DataGrid/index.ts +2 -0
  125. package/src/lib/Table/DataGrid/styles.ts +59 -0
  126. package/src/lib/Table/DataGrid/usePagination.ts +15 -0
  127. package/src/lib/Table/DataGrid/useTableQueryPagination.ts +47 -0
  128. package/src/lib/Table/DataGrid/useTableQuerySorting.ts +47 -0
  129. package/src/lib/Table/SimpleTable/SimpleTable.tsx +138 -0
  130. package/src/lib/Table/SimpleTable/TableActionCell.tsx +67 -0
  131. package/src/lib/Table/SimpleTable/index.ts +2 -0
  132. package/src/lib/Table/SimpleTable/useTablePagination.ts +54 -0
  133. package/src/lib/Table/SimpleTable/useTableSorting.ts +50 -0
  134. package/src/lib/Table/index.ts +2 -0
  135. package/src/lib/Tabs/RouteTabs.tsx +54 -0
  136. package/src/lib/Tabs/TabPanel.tsx +42 -0
  137. package/src/lib/Tabs/{index.d.ts → index.ts} +2 -2
  138. package/src/lib/{index.d.ts → index.ts} +16 -16
  139. package/src/theme/baseTheme.ts +128 -0
  140. package/src/theme/fonts.d.ts +2 -0
  141. package/src/theme/index.ts +126 -0
  142. package/src/theme/inputThemeOptions.ts +126 -0
  143. package/src/theme/stepperThemeOptions.ts +20 -0
  144. package/src/theme/tableThemeOptions.ts +50 -0
  145. package/src/theme/typographyThemeOptions.ts +32 -0
  146. package/src/utils/common.ts +73 -0
  147. package/src/utils/dem.ts +431 -0
  148. package/src/utils/hooks.ts +41 -0
  149. package/src/utils/{index.d.ts → index.ts} +5 -5
  150. package/src/utils/ui-utils.tsx +132 -0
  151. package/src/utils/validators.ts +14 -0
  152. package/tsconfig.json +25 -0
  153. package/tsconfig.lib.json +23 -0
  154. package/tsconfig.spec.json +20 -0
  155. package/index.js +0 -1
  156. package/src/consts/index.d.ts +0 -12
  157. package/src/interfaces/common.d.ts +0 -17
  158. package/src/interfaces/definition.d.ts +0 -107
  159. package/src/interfaces/ui.d.ts +0 -70
  160. package/src/lib/Alert/Alert.d.ts +0 -53
  161. package/src/lib/Alert/index.d.ts +0 -1
  162. package/src/lib/Breadcrumbs/Breadcrumbs.d.ts +0 -9
  163. package/src/lib/Breadcrumbs/Breadcrumbs.styled.d.ts +0 -2
  164. package/src/lib/ContentLayout/ContentLayout.d.ts +0 -9
  165. package/src/lib/ContentLayout/index.d.ts +0 -1
  166. package/src/lib/Definition/CreateDefinition/CreateDefinition.d.ts +0 -11
  167. package/src/lib/Definition/DefinitionFiller/DefinitionFiller.d.ts +0 -10
  168. package/src/lib/Definition/DefinitionValueView/DefinitionValueView.d.ts +0 -8
  169. package/src/lib/Definition/DefinitionValueView/PropertyDataView.d.ts +0 -9
  170. package/src/lib/Forms/BackButton.d.ts +0 -7
  171. package/src/lib/Forms/ControlAceEditor.d.ts +0 -24
  172. package/src/lib/Forms/ControlAutocomplete.d.ts +0 -69
  173. package/src/lib/Forms/ControlCheckbox.d.ts +0 -51
  174. package/src/lib/Forms/ControlDate.d.ts +0 -18
  175. package/src/lib/Forms/ControlDateTime.d.ts +0 -18
  176. package/src/lib/Forms/ControlDebouncedInput.d.ts +0 -4
  177. package/src/lib/Forms/ControlInput.d.ts +0 -59
  178. package/src/lib/Forms/ControlNumberInput.d.ts +0 -51
  179. package/src/lib/Forms/ControlQueryAutocomplete.d.ts +0 -16
  180. package/src/lib/Forms/ControlRadio.d.ts +0 -66
  181. package/src/lib/Forms/ControlSelect.d.ts +0 -67
  182. package/src/lib/Forms/ControlSwitch.d.ts +0 -19
  183. package/src/lib/Forms/ControlTime.d.ts +0 -18
  184. package/src/lib/Forms/CopyButton.d.ts +0 -20
  185. package/src/lib/Forms/useAutocomplete.d.ts +0 -10
  186. package/src/lib/InfoItem/InfoItem.d.ts +0 -10
  187. package/src/lib/InfoItem/styles.d.ts +0 -12
  188. package/src/lib/JsonPathPicker/JsonPathPicker.d.ts +0 -10
  189. package/src/lib/JsonPathPicker/PropertyStep.d.ts +0 -11
  190. package/src/lib/JsonView/JsonView.d.ts +0 -7
  191. package/src/lib/Loader/Loader.d.ts +0 -21
  192. package/src/lib/Modals/JsonModalView.d.ts +0 -10
  193. package/src/lib/Property/PropertyFiller/JsonEditor.d.ts +0 -10
  194. package/src/lib/Property/PropertyFiller/MultiplePropertyFiller.d.ts +0 -12
  195. package/src/lib/Property/PropertyFiller/MultiplePropertyWidget.d.ts +0 -11
  196. package/src/lib/Property/PropertyFiller/PropertyFiller.d.ts +0 -12
  197. package/src/lib/Property/PropertyFiller/usePropertyFiller.d.ts +0 -24
  198. package/src/lib/Property/PropertyFiller/useStyles.d.ts +0 -12
  199. package/src/lib/Property/PropertyValidator/NodeValidator.d.ts +0 -6
  200. package/src/lib/Property/PropertyValidator/NodesList.d.ts +0 -6
  201. package/src/lib/Property/PropertyValidator/NumericTypeValidator.d.ts +0 -8
  202. package/src/lib/Property/PropertyValidator/PropertyValidator.d.ts +0 -6
  203. package/src/lib/Property/PropertyValidator/PropertyValidatorContext.d.ts +0 -3
  204. package/src/lib/Property/PropertyValidator/StringTypeValidator.d.ts +0 -8
  205. package/src/lib/Property/PropertyValidator/ValidationNodeSelector.d.ts +0 -7
  206. package/src/lib/Property/PropertyValidator/index.d.ts +0 -1
  207. package/src/lib/Property/PropertyValueField/BooleanValueField.d.ts +0 -7
  208. package/src/lib/Property/PropertyValueField/DateTimeValueField.d.ts +0 -9
  209. package/src/lib/Property/PropertyValueField/DateValueField.d.ts +0 -9
  210. package/src/lib/Property/PropertyValueField/JsonValueField.d.ts +0 -10
  211. package/src/lib/Property/PropertyValueField/PropertyValueField.d.ts +0 -9
  212. package/src/lib/Property/PropertyValueField/StringValueField.d.ts +0 -9
  213. package/src/lib/Property/PropertyValueField/TimeValueField.d.ts +0 -9
  214. package/src/lib/Property/PropertyWidget/PropertyWidget.d.ts +0 -13
  215. package/src/lib/Property/UpsertProperty/CreatePropertiesList.d.ts +0 -13
  216. package/src/lib/Property/UpsertProperty/CreatePropertyFormFields.d.ts +0 -10
  217. package/src/lib/Property/UpsertProperty/CustomPropertyField.d.ts +0 -7
  218. package/src/lib/Property/UpsertProperty/PropertyAdditionalFields/BigDecimalPropertyFields.d.ts +0 -6
  219. package/src/lib/Property/UpsertProperty/PropertyAdditionalFields/DateAdditionalFields.d.ts +0 -7
  220. package/src/lib/Property/UpsertProperty/PropertyAdditionalFields/EntityAdditionalFields.d.ts +0 -8
  221. package/src/lib/Property/UpsertProperty/PropertyAdditionalFields/EntityReferencePropertyFields.d.ts +0 -6
  222. package/src/lib/Property/UpsertProperty/PropertyAdditionalFields/PropertyAdditionalFields.d.ts +0 -10
  223. package/src/lib/Property/UpsertProperty/PropertyAdditionalFields/StringPropertyFields.d.ts +0 -6
  224. package/src/lib/Property/UpsertProperty/useCustomFields.d.ts +0 -6
  225. package/src/lib/Property/ViewPropertiesList/ViewPropertiesList.d.ts +0 -8
  226. package/src/lib/Property/ViewProperty/EntityPropertiesShortView.d.ts +0 -7
  227. package/src/lib/Property/ViewProperty/EntityPropertiesView.d.ts +0 -8
  228. package/src/lib/Property/ViewProperty/PropertyDataTable.d.ts +0 -7
  229. package/src/lib/Property/ViewProperty/PropertyItem.d.ts +0 -9
  230. package/src/lib/Property/ViewProperty/ViewProperty.d.ts +0 -9
  231. package/src/lib/Sidebar/Sidebar.d.ts +0 -10
  232. package/src/lib/Sidebar/Sidebar.styled.d.ts +0 -117
  233. package/src/lib/Sidebar/SidebarContext.d.ts +0 -11
  234. package/src/lib/Sidebar/SidebarDrawer.d.ts +0 -9
  235. package/src/lib/Sidebar/SidebarLink/MenuIcon.d.ts +0 -7
  236. package/src/lib/Sidebar/SidebarLink/SidebarLink.d.ts +0 -7
  237. package/src/lib/Sidebar/SidebarLink/SidebarLinkItem.d.ts +0 -8
  238. package/src/lib/Sidebar/SidebarLink/SidebarNestedItem.d.ts +0 -10
  239. package/src/lib/Sidebar/index.d.ts +0 -2
  240. package/src/lib/Status/Status.d.ts +0 -8
  241. package/src/lib/Status/styles.d.ts +0 -12
  242. package/src/lib/StepperView/StepperView.d.ts +0 -11
  243. package/src/lib/Table/DataGrid/JsonTypeCell.d.ts +0 -7
  244. package/src/lib/Table/DataGrid/Table.d.ts +0 -49
  245. package/src/lib/Table/DataGrid/TableAction.d.ts +0 -13
  246. package/src/lib/Table/DataGrid/TableColumnMenu.d.ts +0 -3
  247. package/src/lib/Table/DataGrid/TablePagination.d.ts +0 -3
  248. package/src/lib/Table/DataGrid/index.d.ts +0 -2
  249. package/src/lib/Table/DataGrid/styles.d.ts +0 -12
  250. package/src/lib/Table/DataGrid/usePagination.d.ts +0 -5
  251. package/src/lib/Table/DataGrid/useTableQueryPagination.d.ts +0 -11
  252. package/src/lib/Table/DataGrid/useTableQuerySorting.d.ts +0 -6
  253. package/src/lib/Table/SimpleTable/SimpleTable.d.ts +0 -17
  254. package/src/lib/Table/SimpleTable/TableActionCell.d.ts +0 -10
  255. package/src/lib/Table/SimpleTable/index.d.ts +0 -2
  256. package/src/lib/Table/SimpleTable/useTablePagination.d.ts +0 -7
  257. package/src/lib/Table/SimpleTable/useTableSorting.d.ts +0 -6
  258. package/src/lib/Table/index.d.ts +0 -2
  259. package/src/lib/Tabs/RouteTabs.d.ts +0 -11
  260. package/src/lib/Tabs/TabPanel.d.ts +0 -25
  261. package/src/theme/baseTheme.d.ts +0 -2
  262. package/src/theme/index.d.ts +0 -1
  263. package/src/theme/inputThemeOptions.d.ts +0 -117
  264. package/src/theme/stepperThemeOptions.d.ts +0 -16
  265. package/src/theme/tableThemeOptions.d.ts +0 -47
  266. package/src/theme/typographyThemeOptions.d.ts +0 -29
  267. package/src/utils/common.d.ts +0 -7
  268. package/src/utils/dem.d.ts +0 -27
  269. package/src/utils/hooks.d.ts +0 -7
  270. package/src/utils/ui-utils.d.ts +0 -8
  271. package/src/utils/validators.d.ts +0 -5
@@ -0,0 +1,42 @@
1
+ import { useState, useCallback, useEffect } from 'react';
2
+ import Typography from '@mui/material/Typography';
3
+ import Box from '@mui/material/Box';
4
+ import FormControlLabel from '@mui/material/FormControlLabel';
5
+ import Checkbox from '@mui/material/Checkbox';
6
+ import ValidationNodeSelector from './ValidationNodeSelector';
7
+ import { useFormContext } from 'react-hook-form';
8
+
9
+ type Props = {
10
+ name: string;
11
+ }
12
+
13
+ export const PropertyValidator = ({ name }: Props) => {
14
+ const [enable, setEnable] = useState(false);
15
+ const { setValue, getValues } = useFormContext();
16
+
17
+ const handleChangeEnable = useCallback(e => {
18
+ setEnable(e.target.checked);
19
+ if (!e.target.checked) {
20
+ setValue(name, null);
21
+ }
22
+ }, [setValue, name]);
23
+
24
+ useEffect(() => {
25
+ const validator = getValues(name);
26
+ if (validator) setEnable(true);
27
+ }, [name, getValues]);
28
+
29
+ return (
30
+ <>
31
+ <Box display="flex" justifyContent="space-between">
32
+ <Typography variant="h6">Validator</Typography>
33
+ <FormControlLabel label="Enable" control={<Checkbox color="primary" checked={enable} onChange={handleChangeEnable} /> } />
34
+ </Box>
35
+ {
36
+ enable && <ValidationNodeSelector name={name} />
37
+ }
38
+ </>
39
+ )
40
+ }
41
+
42
+ export default PropertyValidator;
@@ -0,0 +1,4 @@
1
+ import { createContext } from 'react';
2
+ import type { PropertyType } from '../../../interfaces';
3
+
4
+ export const PropertyValidatorContext = createContext<PropertyType | ''>('');
@@ -0,0 +1,36 @@
1
+ import React from 'react'
2
+ import { ControlInput } from '../../Forms';
3
+ import Box from '@mui/material/Box';
4
+ import Typography from '@mui/material/Typography';
5
+ import { Control } from 'react-hook-form';
6
+
7
+ type Props = {
8
+ name: string;
9
+ control: Control;
10
+ }
11
+
12
+ export const StringTypeValidator = ({ name, control }: Props) => {
13
+ return (
14
+ <>
15
+ <Typography variant="body2" gutterBottom>Node</Typography>
16
+ <Box>
17
+ <ControlInput
18
+ control={control}
19
+ name={`${name}.minimumLength`}
20
+ label="Minimum Length"
21
+ type="number"
22
+ />
23
+ </Box>
24
+ <Box mt={2}>
25
+ <ControlInput
26
+ control={control}
27
+ name={`${name}.maximumLength`}
28
+ label="Maximum Length"
29
+ type="number"
30
+ />
31
+ </Box>
32
+ </>
33
+ )
34
+ }
35
+
36
+ export default StringTypeValidator;
@@ -0,0 +1,62 @@
1
+ import { useMemo } from 'react';
2
+ import { useFormContext, useWatch } from 'react-hook-form';
3
+ import { ControlSelect } from '../../Forms';
4
+ import IconButton from '@mui/material/IconButton';
5
+ import DeleteIcon from '@mui/icons-material/Delete';
6
+ import Box from '@mui/material/Box';
7
+ import NodesList from './NodesList';
8
+ import NodeValidator from './NodeValidator';
9
+ import { StepperView } from '../../StepperView';
10
+
11
+ type Props = {
12
+ name: string;
13
+ removeHandle?: () => void;
14
+ }
15
+
16
+ const nodeTypes = ['AND', 'OR', 'NOT', 'NODE'];
17
+
18
+ const ValidationNodeSelector = ({ name, removeHandle }: Props) => {
19
+ const { control } = useFormContext();
20
+ const selectedType = useWatch({ control, name: `${name}.type` });
21
+ const nodeComponent = useMemo(() => ({
22
+ AND: <NodesList name={`${name}.nodes`} />,
23
+ OR: <NodesList name={`${name}.nodes`} />,
24
+ NODE: <NodeValidator name={`${name}.validator`} />,
25
+ NOT: <ValidationNodeSelector name={`${name}.node`} />,
26
+ }), [name]);
27
+ return (
28
+ <StepperView
29
+ data={[{
30
+ label: 'Node Type',
31
+ content: (
32
+ <>
33
+ <Box display="flex" alignItems="center">
34
+ <ControlSelect
35
+ required
36
+ control={control}
37
+ name={`${name}.type`}
38
+ label="Type"
39
+ options={nodeTypes}
40
+ />
41
+ {
42
+ removeHandle && (
43
+ <Box ml={2}>
44
+ <IconButton onClick={removeHandle} color="primary">
45
+ <DeleteIcon />
46
+ </IconButton>
47
+ </Box>
48
+
49
+ )
50
+ }
51
+ </Box>
52
+ <Box>
53
+ {nodeComponent[selectedType]}
54
+ </Box>
55
+ </>
56
+ )
57
+ }]}
58
+ />
59
+ )
60
+ }
61
+
62
+ export default ValidationNodeSelector;
@@ -0,0 +1 @@
1
+ export * from './PropertyValidator';
@@ -0,0 +1,49 @@
1
+ import Switch from '@mui/material/Switch';
2
+ import Typography from '@mui/material/Typography';
3
+ import FormControlLabel from '@mui/material/FormControlLabel';
4
+ import { Controller, useFormContext, useWatch } from 'react-hook-form';
5
+ import { useEffect } from 'react';
6
+
7
+ type Props = {
8
+ name: string;
9
+ label?: string;
10
+ };
11
+
12
+ const BooleanValueField = ({ name, label = '' }: Props) => {
13
+ const { control, setValue } = useFormContext();
14
+ const value = useWatch({ name, control });
15
+
16
+ useEffect(() => {
17
+ if (value === null) {
18
+ setValue(name, false);
19
+ }
20
+ }, [value, name]);
21
+
22
+ return (
23
+ <>
24
+ <Typography>{label}</Typography>
25
+ <Controller
26
+ control={control}
27
+ name={name}
28
+ render={({ field }) => (
29
+ <FormControlLabel
30
+ label={(!!field.value + '').toUpperCase()}
31
+ control={
32
+ <Switch
33
+ color="primary"
34
+ size="small"
35
+ onChange={(e) => {
36
+ const { checked } = e.target;
37
+ field.onChange(checked);
38
+ }}
39
+ checked={!!field.value + '' === 'true'}
40
+ />
41
+ }
42
+ />
43
+ )}
44
+ />
45
+ </>
46
+ );
47
+ };
48
+
49
+ export default BooleanValueField;
@@ -0,0 +1,58 @@
1
+ import TextField from '@mui/material/TextField';
2
+ import { DateTimePicker } from '@mui/x-date-pickers/DateTimePicker';
3
+
4
+ import { format as dateFnsFormat, isValid } from 'date-fns';
5
+ import { Controller, useFormContext } from 'react-hook-form';
6
+ import { DATE_TIME_DEFAULT_FORMAT } from '../../../interfaces';
7
+
8
+ type Props = {
9
+ name: string;
10
+ label?: string;
11
+ required?: boolean;
12
+ format?: string;
13
+ };
14
+
15
+ const DateTimeValueField = ({ name, label, required = false, format = DATE_TIME_DEFAULT_FORMAT }: Props) => {
16
+ const { control, setError, clearErrors } = useFormContext();
17
+
18
+ const onError = (err) => {
19
+ if (err) {
20
+ setError(name, { type: 'custom', message: 'Incorrect date format' });
21
+ } else {
22
+ clearErrors(name);
23
+ }
24
+ };
25
+
26
+ return (
27
+ <Controller
28
+ control={control}
29
+ name={name}
30
+ rules={{ required: required && 'Required field' }}
31
+ render={({ field: { ref, value, onChange }, fieldState: { error } }) => (
32
+ <DateTimePicker
33
+ ampm={false}
34
+ inputRef={ref}
35
+ label={label}
36
+ value={value || null}
37
+ inputFormat={format}
38
+ onError={onError}
39
+ onChange={(date) => {
40
+ onChange(isValid(date) ? dateFnsFormat(date, format) : date);
41
+ }}
42
+ renderInput={(props) => (
43
+ <TextField
44
+ {...props}
45
+ fullWidth
46
+ size="small"
47
+ variant="outlined"
48
+ error={!!error}
49
+ helperText={error?.message}
50
+ />
51
+ )}
52
+ />
53
+ )}
54
+ />
55
+ );
56
+ };
57
+
58
+ export default DateTimeValueField;
@@ -0,0 +1,58 @@
1
+ import TextField from '@mui/material/TextField';
2
+ import { DatePicker } from '@mui/x-date-pickers/DatePicker';
3
+
4
+ import { format as dateFnsFormat, isValid } from 'date-fns';
5
+ import { Controller, useFormContext } from 'react-hook-form';
6
+ import { DATE_DEFAULT_FORMAT } from '../../../interfaces';
7
+
8
+ type Props = {
9
+ name: string;
10
+ format: string;
11
+ label?: string;
12
+ required?: boolean;
13
+ };
14
+
15
+ const DateValueField = ({ name, label = '', required = false, format = DATE_DEFAULT_FORMAT }: Props) => {
16
+ const { control, setError, clearErrors } = useFormContext();
17
+
18
+ const onError = (err) => {
19
+ if (err) {
20
+ setError(name, { type: 'custom', message: 'Incorrect date format' });
21
+ } else {
22
+ clearErrors(name);
23
+ }
24
+ };
25
+
26
+ return (
27
+ <Controller
28
+ control={control}
29
+ name={name}
30
+ rules={{ required: required && 'Required field' }}
31
+ render={({ field: { ref, value, onChange }, fieldState: { error } }) => (
32
+ <DatePicker
33
+ mask=""
34
+ label={label}
35
+ inputRef={ref}
36
+ inputFormat={format}
37
+ value={value || null}
38
+ onError={onError}
39
+ onChange={(date) => {
40
+ onChange(isValid(date) ? dateFnsFormat(date, format) : date);
41
+ }}
42
+ renderInput={(props) => (
43
+ <TextField
44
+ {...props}
45
+ fullWidth
46
+ size="small"
47
+ variant="outlined"
48
+ error={!!error}
49
+ helperText={error?.message}
50
+ />
51
+ )}
52
+ />
53
+ )}
54
+ />
55
+ );
56
+ };
57
+
58
+ export default DateValueField;
@@ -0,0 +1,65 @@
1
+ import AceEditor from 'react-ace';
2
+ import FormHelperText from '@mui/material/FormHelperText';
3
+ import Typography from '@mui/material/Typography';
4
+ import { Controller, useFormContext } from 'react-hook-form';
5
+
6
+ import 'ace-builds/src-noconflict/ace';
7
+ import 'ace-builds/src-noconflict/mode-json';
8
+
9
+ type Props = {
10
+ name: string;
11
+ label?: string;
12
+ required?: boolean;
13
+ };
14
+
15
+ const JsonValueField = ({ name, label, required = false }: Props) => {
16
+ const { control, setError, clearErrors } = useFormContext();
17
+
18
+ return (
19
+ <>
20
+ <Typography>{label}</Typography>
21
+ <Controller
22
+ control={control}
23
+ name={name}
24
+ rules={{
25
+ required: required && 'Required field',
26
+ }}
27
+ render={({ field: { value, onChange }, fieldState: { error } }) => (
28
+ <>
29
+ <AceEditor
30
+ value={value && typeof value !== 'string' ? JSON.stringify(value, null, 2) : value}
31
+ onChange={(value) => {
32
+ if (!value) {
33
+ onChange('');
34
+ return null;
35
+ }
36
+ try {
37
+ clearErrors(name);
38
+ const val = JSON.parse(value);
39
+ onChange(Array.isArray(val) ? '' : val);
40
+ } catch (e) {
41
+ setError(name, { message: 'Invalid JSON' });
42
+ onChange(value);
43
+ }
44
+ }}
45
+ mode="json"
46
+ width="100%"
47
+ height="200px"
48
+ fontSize="16"
49
+ setOptions={{
50
+ enableSnippets: false,
51
+ copyWithEmptySelection: true,
52
+ showLineNumbers: true,
53
+ tabSize: 2,
54
+ useWorker: false
55
+ }}
56
+ />
57
+ {error && <FormHelperText error>{error.message}</FormHelperText>}
58
+ </>
59
+ )}
60
+ />
61
+ </>
62
+ );
63
+ };
64
+
65
+ export default JsonValueField;
@@ -0,0 +1,49 @@
1
+ import { useMemo } from 'react';
2
+ import { useFormContext, useWatch } from 'react-hook-form';
3
+ import { MultiplePropertyFiller, PropertyFiller } from '../PropertyFiller';
4
+ import { PropertyUnion } from '../../../interfaces';
5
+
6
+ type Props = {
7
+ propertyFieldName: string;
8
+ name: string;
9
+ label?: string;
10
+ required?: boolean;
11
+ };
12
+
13
+ export const PropertyValueField = ({ propertyFieldName, name, label = '', required }: Props) => {
14
+ const { control } = useFormContext();
15
+
16
+ const propertyType = useWatch({ control, name: `${propertyFieldName}.propertyType` });
17
+ const isMultiple = useWatch({ control, name: `${propertyFieldName}.isMultiple` });
18
+ const format = useWatch({ control, name: `${propertyFieldName}.format` });
19
+ const restrictedValues = useWatch({ control, name: `${propertyFieldName}.restrictedValues` });
20
+ const properties = useWatch({ control, name: `${propertyFieldName}.properties` });
21
+ const isRequired = useWatch({ control, name: `${propertyFieldName}.isRequired` });
22
+
23
+ const fillerProperty: PropertyUnion = useMemo(() => {
24
+ const typeValue = typeof propertyType === 'string' ? propertyType : propertyType.value;
25
+ return {
26
+ name: label,
27
+ isRequired,
28
+ isMultiple,
29
+ format,
30
+ restrictedValues,
31
+ properties,
32
+ propertyType: typeValue,
33
+ defaultValue: null,
34
+ defaultValues: [],
35
+ sortOrder: 0,
36
+ isEnabled: true,
37
+ uiSettings: null,
38
+ validationNode: null,
39
+ };
40
+ }, [propertyType, format, restrictedValues, isMultiple, label, isRequired, properties]);
41
+
42
+ return isMultiple ? (
43
+ <MultiplePropertyFiller name={name} property={fillerProperty} title={label} required={required} />
44
+ ) : (
45
+ <PropertyFiller name={name} property={fillerProperty} title={label} required={required} />
46
+ );
47
+ };
48
+
49
+ export default PropertyValueField;
@@ -0,0 +1,50 @@
1
+ import Select from '@mui/material/Select';
2
+ import MenuItem from '@mui/material/MenuItem';
3
+ import FormControl from '@mui/material/FormControl';
4
+ import InputLabel from '@mui/material/InputLabel';
5
+ import { ControlInput } from '../../Forms';
6
+
7
+ import { useController, useFormContext, useWatch } from 'react-hook-form';
8
+
9
+ type Props = {
10
+ name: string;
11
+ label?: string;
12
+ required?: boolean;
13
+ restrictedValues?: string[];
14
+ };
15
+
16
+ const StringValueField = ({ name, label, required, restrictedValues }: Props) => {
17
+ const { control } = useFormContext();
18
+ const {
19
+ field: { onChange, ref },
20
+ fieldState: { error },
21
+ } = useController({
22
+ control,
23
+ name,
24
+ rules: {
25
+ required:
26
+ required &&
27
+ (Array.isArray(restrictedValues) && restrictedValues.length
28
+ ? 'Please, select a value'
29
+ : 'Please, fill this field'),
30
+ },
31
+ });
32
+ const value = useWatch({ control, name });
33
+
34
+ return Array.isArray(restrictedValues) && restrictedValues.length ? (
35
+ <FormControl fullWidth size="small" variant="outlined" error={!!error}>
36
+ <InputLabel htmlFor="type-select">{label}</InputLabel>
37
+ <Select labelId="type-select" label={label} value={value || ''} onChange={onChange} ref={ref}>
38
+ {restrictedValues.map((restrictedValue) => (
39
+ <MenuItem key={restrictedValue} value={restrictedValue}>
40
+ {restrictedValue}
41
+ </MenuItem>
42
+ ))}
43
+ </Select>
44
+ </FormControl>
45
+ ) : (
46
+ <ControlInput hideErrorMessage required={required} control={control} name={name} label={label} />
47
+ );
48
+ };
49
+
50
+ export default StringValueField;
@@ -0,0 +1,67 @@
1
+ import TextField from '@mui/material/TextField';
2
+ import { TimePicker } from '@mui/x-date-pickers/TimePicker';
3
+
4
+ import { format as dateFnsFormat, isValid, parse } from 'date-fns';
5
+ import { useEffect, useState } from 'react';
6
+ import { useController, useFormContext } from 'react-hook-form';
7
+ import { TIME_DEFAULT_FORMAT } from '../../../interfaces';
8
+
9
+ type Props = {
10
+ name: string;
11
+ label?: string;
12
+ format?: string;
13
+ required?: boolean;
14
+ };
15
+
16
+ const TimeValueField = ({ name, label, format = TIME_DEFAULT_FORMAT, required = false }: Props) => {
17
+ const { control, setError, clearErrors } = useFormContext();
18
+ const {
19
+ field: { ref, onChange, value },
20
+ fieldState: { error },
21
+ } = useController({ control, name, rules: { required: required && 'Required field' } });
22
+
23
+ const [fieldValue, setFieldValue] = useState(null);
24
+
25
+ useEffect(() => {
26
+ if (value && format) {
27
+ let parsedValue = parse(value, format, new Date());
28
+
29
+ if (!isValid(parsedValue)) {
30
+ parsedValue = parse(value, 'HH:mm:ss.SSS', new Date());
31
+ }
32
+
33
+ setFieldValue(parsedValue);
34
+ }
35
+ }, [value, format]);
36
+
37
+ const handleChange = (date: Date) => {
38
+ setFieldValue(date);
39
+ onChange(isValid(date) ? dateFnsFormat(date, format) : date);
40
+ };
41
+
42
+ const onError = (err) => {
43
+ if (err) {
44
+ setError(name, { type: 'custom', message: 'Incorrect date format' });
45
+ } else {
46
+ clearErrors(name);
47
+ }
48
+ };
49
+
50
+ return (
51
+ <TimePicker
52
+ mask=""
53
+ inputRef={ref}
54
+ label={label}
55
+ ampm={false}
56
+ value={fieldValue}
57
+ inputFormat={format}
58
+ onError={onError}
59
+ onChange={handleChange}
60
+ renderInput={(props) => (
61
+ <TextField {...props} fullWidth size="small" variant="outlined" error={!!error} helperText={error?.message} />
62
+ )}
63
+ />
64
+ );
65
+ };
66
+
67
+ export default TimeValueField;
@@ -1 +1 @@
1
- export * from './PropertyValueField';
1
+ export * from './PropertyValueField';
@@ -0,0 +1,115 @@
1
+ import {
2
+ ControlDate,
3
+ ControlDateTime,
4
+ ControlInput,
5
+ ControlNumberInput,
6
+ ControlSwitch,
7
+ ControlTime,
8
+ } from '../../Forms';
9
+ import JsonEditor from '../PropertyFiller/JsonEditor';
10
+ import StringValueField from '../PropertyValueField/StringValueField';
11
+ import { DefinitionFiller } from '../../Definition';
12
+
13
+ import { RefCallBack, useFormContext } from 'react-hook-form';
14
+
15
+ import {
16
+ DateProperty,
17
+ DateTimeProperty,
18
+ EntityTypeProperty,
19
+ PropertiesArrayType,
20
+ PropertyType,
21
+ PropertyUnion,
22
+ StringProperty,
23
+ TimeProperty,
24
+ } from '../../../interfaces';
25
+ import { useMemo } from 'react';
26
+
27
+ type Props = {
28
+ property: PropertyUnion;
29
+ name: string;
30
+ label?: string;
31
+ useExpression?: boolean;
32
+ required?: boolean;
33
+ inputRef: RefCallBack;
34
+ };
35
+
36
+ export const PropertyWidget = ({ property, name, label, useExpression, inputRef }: Props) => {
37
+ const { control } = useFormContext();
38
+ const propertyType = useMemo(
39
+ () => (typeof property.propertyType === 'string' ? property.propertyType : property['propertyType']['value']),
40
+ [property]
41
+ );
42
+
43
+ switch (propertyType) {
44
+ case PropertyType.BIG_DECIMAL:
45
+ case PropertyType.FLOAT:
46
+ case PropertyType.DOUBLE:
47
+ return <ControlNumberInput decimal required hideErrorMessage control={control} name={name} label={label} />;
48
+ case PropertyType.INTEGER:
49
+ case PropertyType.BIG_INTEGER:
50
+ case PropertyType.LONG:
51
+ return <ControlNumberInput required hideErrorMessage control={control} name={name} label={label} />;
52
+ case PropertyType.BOOLEAN:
53
+ return <ControlSwitch control={control} name={name} />;
54
+ case PropertyType.DATE:
55
+ return (
56
+ <ControlDate
57
+ required
58
+ hideErrorMessage
59
+ control={control}
60
+ name={name}
61
+ label={label}
62
+ format={(property as DateProperty).format}
63
+ />
64
+ );
65
+ case PropertyType.TIME:
66
+ return (
67
+ <ControlTime
68
+ required
69
+ hideErrorMessage
70
+ control={control}
71
+ name={name}
72
+ label={label}
73
+ format={(property as TimeProperty).format}
74
+ />
75
+ );
76
+ case PropertyType.DATE_TIME:
77
+ return (
78
+ <ControlDateTime
79
+ required
80
+ hideErrorMessage
81
+ control={control}
82
+ name={name}
83
+ label={label}
84
+ format={(property as DateTimeProperty).format}
85
+ />
86
+ );
87
+ case PropertyType.JSON:
88
+ return <JsonEditor validate name={name} inputRef={inputRef} />;
89
+ case PropertyType.STRING:
90
+ return (
91
+ <StringValueField
92
+ required
93
+ name={name}
94
+ label={label}
95
+ restrictedValues={(property as StringProperty).restrictedValues}
96
+ />
97
+ );
98
+ case PropertyType.ENTITY_REFERENCE:
99
+ return <ControlInput required hideErrorMessage name={name} label={label} control={control} />;
100
+ case PropertyType.ANY:
101
+ return <JsonEditor name={name} inputRef={inputRef} />;
102
+ case PropertyType.ENTITY:
103
+ return (
104
+ <DefinitionFiller
105
+ properties={(property as EntityTypeProperty).properties as PropertiesArrayType}
106
+ dataFieldName={name}
107
+ useExpression={useExpression}
108
+ />
109
+ );
110
+ default:
111
+ return <div>No widget</div>;
112
+ }
113
+ };
114
+
115
+ export default PropertyWidget;
@@ -1 +1 @@
1
- export * from './PropertyWidget';
1
+ export * from './PropertyWidget';