@dartech/arsenal-ui 1.2.4 → 1.2.5

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 +102 -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,145 @@
1
+ import Autocomplete, { AutocompleteProps } from '@mui/material/Autocomplete';
2
+ import TextField, { TextFieldProps } from '@mui/material/TextField';
3
+ import { Control, useController, useWatch } from 'react-hook-form';
4
+
5
+ import useAutocomplete from './useAutocomplete';
6
+ import { ValidateFunc } from '../../interfaces';
7
+
8
+ /**
9
+ * This interface is referencing the [[ControlAutocomplete]] component props.
10
+ * @category Forms
11
+ */
12
+ export type ControlAutocompleteProps = Omit<
13
+ AutocompleteProps<unknown, boolean, boolean, boolean, React.ElementType<any>>,
14
+ 'renderInput'
15
+ > & {
16
+ /**
17
+ * React Hook Form control `name` propery
18
+ */
19
+ name: string;
20
+ /**
21
+ * Label for MUI TextField select component
22
+ */
23
+ label?: string;
24
+ /**
25
+ * React Hook Form `control`
26
+ */
27
+ control: Control<any>;
28
+ /**
29
+ * Is input required flag
30
+ */
31
+ required?: boolean;
32
+ /**
33
+ * React Hook Form `defaultValue`
34
+ */
35
+ defaultValue?: unknown;
36
+ /**
37
+ * Is disabled input flag
38
+ */
39
+ disabled?: boolean;
40
+ /**
41
+ * React Hook Form validate function
42
+ * ```typescript
43
+ * type ValidateFunc = (value: string) => boolean | string;
44
+ * ```
45
+ */
46
+ validate?: ValidateFunc | Record<string, ValidateFunc>;
47
+ /**
48
+ * Hide error message flag
49
+ */
50
+ hideErrorMessage?: boolean;
51
+ /**
52
+ * Custom onChange functionƒ
53
+ */
54
+ onChange?: (event: React.ChangeEvent<HTMLInputElement>, value: unknown) => void;
55
+ /**
56
+ * Key for option label
57
+ */
58
+ labelKey?: string;
59
+ /**
60
+ * Key for option value
61
+ */
62
+ valueKey?: string;
63
+ /**
64
+ * Select options
65
+ */
66
+ options: string[] | unknown[];
67
+ textFieldProps?: TextFieldProps;
68
+ };
69
+
70
+ /**
71
+ * Material UI `Autocomplete` controlled component. Used with react-hook-form
72
+ * @category Forms
73
+ */
74
+ export const ControlAutocomplete = ({
75
+ control,
76
+ validate,
77
+ name = '',
78
+ label = '',
79
+ required = false,
80
+ defaultValue = '',
81
+ disabled = false,
82
+ hideErrorMessage = false,
83
+ onChange: customOnChange,
84
+ labelKey,
85
+ valueKey,
86
+ options = [],
87
+ multiple,
88
+ textFieldProps = {},
89
+ disableCloseOnSelect,
90
+ ...autocompleteProps
91
+ }: ControlAutocompleteProps) => {
92
+ const {
93
+ field: { ref, onChange },
94
+ fieldState: { error },
95
+ } = useController({
96
+ name,
97
+ control,
98
+ defaultValue,
99
+ rules: {
100
+ required: required && 'Please, fill this field',
101
+ validate,
102
+ },
103
+ });
104
+ const formValue = useWatch({ control, name, defaultValue: multiple ? [] : null });
105
+ const { getOptionLabel, isOptionEqualToValue, renderOption } = useAutocomplete({ valueKey, labelKey });
106
+
107
+ const handleChange = (_, value) => {
108
+ onChange(value);
109
+ };
110
+
111
+ return (
112
+ <Autocomplete
113
+ fullWidth
114
+ disablePortal
115
+ size="small"
116
+ readOnly={disabled}
117
+ options={options}
118
+ multiple={multiple}
119
+ getOptionLabel={getOptionLabel}
120
+ isOptionEqualToValue={isOptionEqualToValue}
121
+ disableCloseOnSelect={disableCloseOnSelect || multiple}
122
+ filterSelectedOptions={multiple}
123
+ value={formValue}
124
+ onChange={customOnChange ? customOnChange : handleChange}
125
+ renderOption={renderOption}
126
+ renderInput={(params) => {
127
+ return (
128
+ <TextField
129
+ {...params}
130
+ variant="outlined"
131
+ name={name}
132
+ label={label}
133
+ error={!!error}
134
+ inputRef={ref}
135
+ helperText={!hideErrorMessage && error?.message}
136
+ {...textFieldProps}
137
+ />
138
+ );
139
+ }}
140
+ {...autocompleteProps}
141
+ />
142
+ );
143
+ };
144
+
145
+ export default ControlAutocomplete;
@@ -0,0 +1,113 @@
1
+ import FormControl from '@mui/material/FormControl';
2
+ import FormControlLabel from '@mui/material/FormControlLabel';
3
+ import FormHelperText from '@mui/material/FormHelperText';
4
+ import Checkbox, { CheckboxProps } from '@mui/material/Checkbox';
5
+
6
+ import { useMemo } from 'react';
7
+ import { Control, useController, useWatch } from 'react-hook-form';
8
+ import { ValidateFunc } from '../../interfaces';
9
+
10
+ /**
11
+ * This interface is referencing the [[ControlCheckbox]] component props.
12
+ * @category Forms
13
+ */
14
+ export type ControlCheckboxProps = CheckboxProps & {
15
+ /**
16
+ * React Hook Form control `name` propery
17
+ */
18
+ name: string;
19
+ /**
20
+ * Label for MUI TextField component
21
+ */
22
+ label?: string;
23
+ /**
24
+ * React Hook Form `control`
25
+ */
26
+ control: Control<any>;
27
+ /**
28
+ * React Hook Form `defaultValue`
29
+ */
30
+ defaultValue?: unknown;
31
+ /**
32
+ * Is disabled input flag
33
+ */
34
+ disabled?: boolean;
35
+ /**
36
+ * React Hook Form validate function
37
+ * ```typescript
38
+ * type ValidateFunc = (value: string) => boolean | string;
39
+ * ```
40
+ */
41
+ validate?: ValidateFunc | Record<string, ValidateFunc>;
42
+ /**
43
+ * Hide error message flag
44
+ */
45
+ hideErrorMessage?: boolean;
46
+ /**
47
+ * Custom onChange functionƒ
48
+ */
49
+ onChange?: (event: React.ChangeEvent<HTMLInputElement>) => void;
50
+ };
51
+
52
+ /**
53
+ * Material UI `Checkbox` controlled component. Used with react-hook-form
54
+ * @category Forms
55
+ */
56
+ export const ControlCheckbox = ({
57
+ control,
58
+ validate,
59
+ name = '',
60
+ label = '',
61
+ required = false,
62
+ defaultValue = '',
63
+ disabled = false,
64
+ hideErrorMessage = false,
65
+ onChange: customOnChange,
66
+ ...checkboxProps
67
+ }: ControlCheckboxProps) => {
68
+ const {
69
+ field: { ref, onChange },
70
+ fieldState: { error },
71
+ } = useController({
72
+ name,
73
+ control,
74
+ defaultValue,
75
+ });
76
+ const value = useWatch({ control, name });
77
+
78
+ const checked = useMemo(() => {
79
+ if (typeof value === 'boolean') {
80
+ return value;
81
+ } else if (typeof value === 'string') {
82
+ if (value === 'false') {
83
+ onChange(false);
84
+ return false;
85
+ } else if (value === 'true') {
86
+ onChange(true);
87
+ return true;
88
+ }
89
+ }
90
+ return false;
91
+ }, [value, onChange]);
92
+
93
+ return (
94
+ <FormControl error={!!error} component="fieldset" variant="standard" disabled={disabled}>
95
+ <FormControlLabel
96
+ control={
97
+ <Checkbox
98
+ checked={checked}
99
+ onChange={customOnChange ? customOnChange : onChange}
100
+ name={name}
101
+ inputRef={ref}
102
+ disabled={disabled}
103
+ {...checkboxProps}
104
+ />
105
+ }
106
+ label={label}
107
+ />
108
+ {!hideErrorMessage && error?.message && <FormHelperText>{error.message}</FormHelperText>}
109
+ </FormControl>
110
+ );
111
+ };
112
+
113
+ export default ControlCheckbox;
@@ -0,0 +1,75 @@
1
+ import TextField from '@mui/material/TextField';
2
+ import { DatePicker } from '@mui/x-date-pickers/DatePicker';
3
+
4
+ import { isValid, format as dateFnsFormat, isMatch } from 'date-fns';
5
+ import { Control, useController, useWatch } from 'react-hook-form';
6
+ import { DATE_DEFAULT_FORMAT } from '../../interfaces';
7
+
8
+ type Props = {
9
+ /**
10
+ * React Hook Form `control`
11
+ */
12
+ control: Control<any>;
13
+ /**
14
+ * Is input required flag
15
+ */
16
+ required?: boolean;
17
+ name: string;
18
+ label?: string;
19
+ format?: string;
20
+ hideErrorMessage?: boolean;
21
+ };
22
+
23
+ export const ControlDate = ({
24
+ control,
25
+ name,
26
+ required,
27
+ label,
28
+ format = DATE_DEFAULT_FORMAT,
29
+ hideErrorMessage = false,
30
+ }: Props) => {
31
+ const {
32
+ field: { onChange, ref },
33
+ fieldState: { error },
34
+ } = useController({
35
+ control,
36
+ name,
37
+ rules: {
38
+ required: required && 'Please, fill this field',
39
+ validate: (val) => {
40
+ if (isMatch(val, format)) {
41
+ return true;
42
+ }
43
+ return 'Incorrect date format';
44
+ },
45
+ },
46
+ });
47
+ const value = useWatch({ control, name });
48
+
49
+ const handleChange = (date) => {
50
+ onChange(isValid(date) ? dateFnsFormat(date, format) : date);
51
+ };
52
+
53
+ return (
54
+ <DatePicker
55
+ label={label}
56
+ inputRef={ref}
57
+ inputFormat={format}
58
+ value={value || null}
59
+ onChange={handleChange}
60
+ renderInput={(props) => (
61
+ <TextField
62
+ {...props}
63
+ fullWidth
64
+ size="small"
65
+ variant="outlined"
66
+ name={name}
67
+ error={!!error}
68
+ helperText={!hideErrorMessage && error?.message}
69
+ />
70
+ )}
71
+ />
72
+ );
73
+ };
74
+
75
+ export default ControlDate;
@@ -0,0 +1,77 @@
1
+ import TextField from '@mui/material/TextField';
2
+ import { DateTimePicker } from '@mui/x-date-pickers/DateTimePicker';
3
+
4
+ import { isValid, format as dateFnsFormat, isMatch } from 'date-fns';
5
+ import { Control, useController, useWatch } from 'react-hook-form';
6
+ import { DATE_TIME_DEFAULT_FORMAT } from '../../interfaces';
7
+
8
+ type Props = {
9
+ /**
10
+ * React Hook Form `control`
11
+ */
12
+ control: Control<any>;
13
+ /**
14
+ * Is input required flag
15
+ */
16
+ required?: boolean;
17
+ name: string;
18
+ label?: string;
19
+ format?: string;
20
+ hideErrorMessage?: boolean;
21
+ };
22
+
23
+ export const ControlDateTime = ({
24
+ control,
25
+ name,
26
+ required,
27
+ label,
28
+ format = DATE_TIME_DEFAULT_FORMAT,
29
+ hideErrorMessage = false,
30
+ }: Props) => {
31
+ const {
32
+ field: { onChange, ref },
33
+ fieldState: { error },
34
+ } = useController({
35
+ control,
36
+ name,
37
+ rules: {
38
+ required: required && 'Please, fill this field',
39
+ validate: (val) => {
40
+ if (isMatch(val, format)) {
41
+ return true;
42
+ }
43
+ return 'Incorrect date format';
44
+ },
45
+ },
46
+ });
47
+ const value = useWatch({ control, name });
48
+
49
+ const handleChange = (date) => {
50
+ onChange(isValid(date) ? dateFnsFormat(date, format) : date);
51
+ };
52
+
53
+ return (
54
+ <DateTimePicker
55
+ mask=""
56
+ ampm={false}
57
+ inputRef={ref}
58
+ label={label}
59
+ value={value || null}
60
+ inputFormat={format}
61
+ onChange={handleChange}
62
+ renderInput={(props) => (
63
+ <TextField
64
+ {...props}
65
+ fullWidth
66
+ size="small"
67
+ variant="outlined"
68
+ name={name}
69
+ error={!!error}
70
+ helperText={!hideErrorMessage && error?.message}
71
+ />
72
+ )}
73
+ />
74
+ );
75
+ };
76
+
77
+ export default ControlDateTime;
@@ -0,0 +1,80 @@
1
+ import TextField from '@mui/material/TextField';
2
+
3
+ import { useCallback, useEffect, useState } from 'react';
4
+ import { useController, useWatch } from 'react-hook-form';
5
+ import { useDebounce } from '../../utils/hooks';
6
+ import { ControlInputProps } from './ControlInput';
7
+
8
+ export const ControlDebouncedInput = ({
9
+ control,
10
+ validate,
11
+ name = '',
12
+ label = '',
13
+ required = false,
14
+ defaultValue = '',
15
+ disabled = false,
16
+ textarea = false,
17
+ hideErrorMessage = false,
18
+ onChange: customOnChange,
19
+ ...textFieldProps
20
+ }: ControlInputProps) => {
21
+ const {
22
+ field: { ref, onChange },
23
+ fieldState: { error },
24
+ } = useController({
25
+ name,
26
+ control,
27
+ defaultValue,
28
+ rules: {
29
+ required: required && 'Please, fill this field',
30
+ validate,
31
+ },
32
+ });
33
+ const value = useWatch({ control, name });
34
+
35
+ const [fieldValue, setFieldValue] = useState('');
36
+
37
+ useEffect(() => {
38
+ if (!fieldValue && value) {
39
+ setFieldValue(value);
40
+ }
41
+ }, [fieldValue, value]);
42
+
43
+ const debouncedChange = useDebounce((value) => {
44
+ onChange(value);
45
+ }, 200);
46
+
47
+ const handleChange = useCallback(
48
+ (e) => {
49
+ setFieldValue(e.target.value);
50
+ debouncedChange(e.target.value);
51
+ },
52
+ [debouncedChange]
53
+ );
54
+
55
+ return (
56
+ <TextField
57
+ fullWidth
58
+ size="small"
59
+ variant="outlined"
60
+ type="text"
61
+ inputRef={ref}
62
+ name={name}
63
+ label={label}
64
+ error={!!error}
65
+ helperText={!hideErrorMessage && error?.message}
66
+ disabled={disabled}
67
+ multiline={textarea}
68
+ minRows={textarea ? 3 : 1}
69
+ value={fieldValue ?? ''}
70
+ onChange={handleChange}
71
+ {...textFieldProps}
72
+ inputProps={{
73
+ ...(textFieldProps?.inputProps ?? {}),
74
+ value: fieldValue ?? '',
75
+ }}
76
+ />
77
+ );
78
+ };
79
+
80
+ export default ControlDebouncedInput;
@@ -0,0 +1,111 @@
1
+ import { useController, Control, useWatch } from 'react-hook-form';
2
+ import TextField, { TextFieldProps } from '@mui/material/TextField';
3
+ import { ValidateFunc } from '../../interfaces';
4
+
5
+ /**
6
+ * This interface is referencing the [[ControlInput]] component props.
7
+ * @category Forms
8
+ */
9
+ export type ControlInputProps = TextFieldProps & {
10
+ /**
11
+ * React Hook Form control `name` propery
12
+ */
13
+ name: string;
14
+ /**
15
+ * Label for MUI TextField component
16
+ */
17
+ label?: string;
18
+ /**
19
+ * React Hook Form `control`
20
+ */
21
+ control: Control<any>;
22
+ /**
23
+ * Is input required flag
24
+ */
25
+ required?: boolean;
26
+ /**
27
+ * React Hook Form `defaultValue`
28
+ */
29
+ defaultValue?: unknown;
30
+ /**
31
+ * Is disabled input flag
32
+ */
33
+ disabled?: boolean;
34
+ /**
35
+ * React Hook Form validate function
36
+ * ```typescript
37
+ * type ValidateFunc = (value: string) => boolean | string;
38
+ * ```
39
+ */
40
+ validate?: ValidateFunc | Record<string, ValidateFunc>;
41
+ /**
42
+ * Is input textarea flag
43
+ */
44
+ textarea?: boolean;
45
+ /**
46
+ * Hide error message flag
47
+ */
48
+ hideErrorMessage?: boolean;
49
+ /**
50
+ * Custom onChange functionƒ
51
+ */
52
+ onChange?: (event: React.ChangeEvent<HTMLInputElement>) => void;
53
+ };
54
+
55
+ /**
56
+ * Material UI `TextField` controlled component. Used with react-hook-form
57
+ * @category Forms
58
+ */
59
+ export const ControlInput = ({
60
+ control,
61
+ validate,
62
+ name = '',
63
+ label = '',
64
+ required = false,
65
+ defaultValue = '',
66
+ disabled = false,
67
+ textarea = false,
68
+ hideErrorMessage = false,
69
+ onChange: customOnChange,
70
+ ...textFieldProps
71
+ }: ControlInputProps) => {
72
+ const {
73
+ field: { ref, onChange },
74
+ fieldState: { error },
75
+ } = useController({
76
+ name,
77
+ control,
78
+ defaultValue,
79
+ rules: {
80
+ required: required && 'Please, fill this field',
81
+ validate,
82
+ },
83
+ });
84
+ const value = useWatch({ control, name });
85
+
86
+ return (
87
+ <TextField
88
+ fullWidth
89
+ size="small"
90
+ variant="outlined"
91
+ type="text"
92
+ inputRef={ref}
93
+ name={name}
94
+ label={label}
95
+ error={!!error}
96
+ helperText={!hideErrorMessage && error?.message}
97
+ disabled={disabled}
98
+ multiline={textarea}
99
+ minRows={textarea ? 3 : 1}
100
+ value={value ?? ''}
101
+ onChange={customOnChange ? customOnChange : onChange}
102
+ {...textFieldProps}
103
+ inputProps={{
104
+ ...(textFieldProps?.inputProps ?? {}),
105
+ value: value ?? '',
106
+ }}
107
+ />
108
+ );
109
+ };
110
+
111
+ export default ControlInput;