envoc-form 3.2.0 → 4.0.1-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 (449) hide show
  1. package/README.md +10 -1
  2. package/dist/css/envoc-form-styles.css +0 -113
  3. package/dist/css/envoc-form-styles.css.map +1 -1
  4. package/es/AddressInput/AddressInput.d.ts +15 -0
  5. package/es/AddressInput/AddressInput.js +21 -97
  6. package/es/AddressInput/UsStates.d.ts +3 -0
  7. package/es/AddressInput/UsStates.js +53 -152
  8. package/es/ConfirmBaseForm/ConfirmBaseForm.d.ts +10 -0
  9. package/es/ConfirmBaseForm/ConfirmBaseForm.js +35 -43
  10. package/es/ConfirmDeleteForm/ConfirmDeleteForm.d.ts +11 -0
  11. package/es/ConfirmDeleteForm/ConfirmDeleteForm.js +54 -40
  12. package/es/DatePicker/DateOnlyDatePickerGroup.d.ts +10 -0
  13. package/es/DatePicker/DateOnlyDatePickerGroup.js +23 -0
  14. package/es/DatePicker/DatePickerGroup.d.ts +8 -0
  15. package/es/DatePicker/DatePickerGroup.js +60 -0
  16. package/es/DatePicker/DatePickerHelper.d.ts +3 -0
  17. package/es/DatePicker/DatePickerHelper.js +1 -0
  18. package/es/DatePicker/StringDatePickerGroup.d.ts +5 -0
  19. package/es/DatePicker/StringDatePickerGroup.js +19 -0
  20. package/es/Field/CustomFieldInputProps.d.ts +7 -0
  21. package/es/Field/CustomFieldInputProps.js +1 -0
  22. package/es/Field/CustomFieldMetaProps.d.ts +4 -0
  23. package/es/Field/CustomFieldMetaProps.js +1 -0
  24. package/es/Field/Field.d.ts +22 -0
  25. package/es/Field/Field.js +46 -0
  26. package/es/Field/FieldErrorScrollTarget.d.ts +2 -0
  27. package/es/Field/FieldErrorScrollTarget.js +11 -0
  28. package/es/Field/FieldNameContext.d.ts +3 -0
  29. package/es/Field/FieldNameContext.js +3 -0
  30. package/es/Field/FieldSection.d.ts +7 -0
  31. package/es/Field/FieldSection.js +20 -0
  32. package/es/Field/InjectedFieldProps.d.ts +7 -0
  33. package/es/Field/InjectedFieldProps.js +1 -0
  34. package/es/Field/StandAloneInput.d.ts +9 -0
  35. package/es/Field/StandAloneInput.js +49 -0
  36. package/es/Field/useStandardField.d.ts +15 -0
  37. package/es/Field/useStandardField.js +93 -0
  38. package/es/FieldArray/FieldArray.d.ts +15 -0
  39. package/es/FieldArray/FieldArray.js +80 -0
  40. package/es/File/FileGroup.d.ts +8 -0
  41. package/es/File/FileGroup.js +50 -0
  42. package/es/File/FileList.d.ts +6 -0
  43. package/es/File/FileList.js +20 -0
  44. package/es/File/humanFileSize.d.ts +1 -0
  45. package/es/File/humanFileSize.js +6 -0
  46. package/es/Form/FocusError.d.ts +5 -0
  47. package/es/Form/FocusError.js +41 -53
  48. package/es/Form/Form.d.ts +22 -0
  49. package/es/Form/Form.js +111 -125
  50. package/es/Form/FormBasedPreventNavigation.d.ts +5 -0
  51. package/es/Form/FormBasedPreventNavigation.js +53 -30
  52. package/es/Form/ServerErrorContext.d.ts +10 -0
  53. package/es/Form/ServerErrorContext.js +8 -6
  54. package/es/FormActions.d.ts +7 -0
  55. package/es/FormActions.js +22 -0
  56. package/es/Group.d.ts +13 -0
  57. package/es/Group.js +22 -0
  58. package/es/Input/IconInputGroup.d.ts +9 -0
  59. package/es/Input/IconInputGroup.js +40 -0
  60. package/es/Input/InputGroup.d.ts +12 -0
  61. package/es/Input/InputGroup.js +33 -0
  62. package/es/Input/MoneyInputGroup.d.ts +7 -0
  63. package/es/Input/MoneyInputGroup.js +41 -0
  64. package/es/Input/NumberInputGroup.d.ts +7 -0
  65. package/es/Input/NumberInputGroup.js +41 -0
  66. package/es/Input/StringInputGroup.d.ts +7 -0
  67. package/es/Input/StringInputGroup.js +40 -0
  68. package/es/Normalization/NormalizationFunction.d.ts +4 -0
  69. package/es/Normalization/NormalizationFunction.js +1 -0
  70. package/es/Normalization/normalizers.d.ts +2 -0
  71. package/es/Normalization/normalizers.js +30 -0
  72. package/es/Select/BooleanSelectGroup.d.ts +7 -0
  73. package/es/Select/BooleanSelectGroup.js +27 -0
  74. package/es/Select/NumberSelectGroup.d.ts +8 -0
  75. package/es/Select/NumberSelectGroup.js +19 -0
  76. package/es/Select/SelectGroup.d.ts +22 -0
  77. package/es/Select/SelectGroup.js +59 -0
  78. package/es/Select/SelectGroupPropsHelper.d.ts +3 -0
  79. package/es/Select/SelectGroupPropsHelper.js +1 -0
  80. package/es/Select/StringSelectGroup.d.ts +8 -0
  81. package/es/Select/StringSelectGroup.js +19 -0
  82. package/es/StandardFormActions.d.ts +6 -0
  83. package/es/StandardFormActions.js +23 -24
  84. package/es/SubmitFormButton.d.ts +7 -0
  85. package/es/SubmitFormButton.js +37 -23
  86. package/es/TextArea/TextAreaGroup.d.ts +8 -0
  87. package/es/TextArea/TextAreaGroup.js +33 -0
  88. package/es/Validation/ValidatedApiResult.d.ts +6 -0
  89. package/es/Validation/ValidatedApiResult.js +1 -0
  90. package/es/Validation/ValidationError.d.ts +5 -0
  91. package/es/Validation/ValidationError.js +1 -0
  92. package/es/Validation/ValidationFunction.d.ts +4 -0
  93. package/es/Validation/ValidationFunction.js +1 -0
  94. package/es/Validation/validators.d.ts +15 -0
  95. package/es/Validation/validators.js +73 -0
  96. package/es/__Tests__/FormTestBase.d.ts +27 -0
  97. package/es/__Tests__/FormTestBase.js +83 -12
  98. package/{src/__Tests__/index.js → es/__Tests__/index.d.ts} +0 -0
  99. package/es/__Tests__/index.js +2 -2
  100. package/es/index.d.ts +71 -0
  101. package/es/index.js +47 -20
  102. package/es/utils/objectContainsNonSerializableProperty.d.ts +1 -0
  103. package/es/utils/objectContainsNonSerializableProperty.js +14 -16
  104. package/es/utils/objectToFormData.d.ts +10 -0
  105. package/es/utils/objectToFormData.js +77 -65
  106. package/es/utils/typeChecks.d.ts +8 -0
  107. package/es/utils/typeChecks.js +18 -25
  108. package/lib/AddressInput/AddressInput.d.ts +15 -0
  109. package/lib/AddressInput/AddressInput.js +27 -123
  110. package/lib/AddressInput/UsStates.d.ts +3 -0
  111. package/lib/AddressInput/UsStates.js +55 -159
  112. package/lib/ConfirmBaseForm/ConfirmBaseForm.d.ts +10 -0
  113. package/lib/ConfirmBaseForm/ConfirmBaseForm.js +41 -57
  114. package/lib/ConfirmDeleteForm/ConfirmDeleteForm.d.ts +11 -0
  115. package/lib/ConfirmDeleteForm/ConfirmDeleteForm.js +60 -56
  116. package/lib/DatePicker/DateOnlyDatePickerGroup.d.ts +10 -0
  117. package/lib/DatePicker/DateOnlyDatePickerGroup.js +29 -0
  118. package/lib/DatePicker/DatePickerGroup.d.ts +8 -0
  119. package/lib/DatePicker/DatePickerGroup.js +66 -0
  120. package/lib/DatePicker/DatePickerHelper.d.ts +3 -0
  121. package/lib/DatePicker/DatePickerHelper.js +2 -0
  122. package/lib/DatePicker/StringDatePickerGroup.d.ts +5 -0
  123. package/lib/DatePicker/StringDatePickerGroup.js +25 -0
  124. package/lib/Field/CustomFieldInputProps.d.ts +7 -0
  125. package/lib/Field/CustomFieldInputProps.js +2 -0
  126. package/lib/Field/CustomFieldMetaProps.d.ts +4 -0
  127. package/lib/Field/CustomFieldMetaProps.js +2 -0
  128. package/lib/Field/Field.d.ts +22 -0
  129. package/lib/Field/Field.js +51 -0
  130. package/lib/Field/FieldErrorScrollTarget.d.ts +2 -0
  131. package/lib/Field/FieldErrorScrollTarget.js +14 -0
  132. package/lib/Field/FieldNameContext.d.ts +3 -0
  133. package/lib/Field/FieldNameContext.js +9 -0
  134. package/lib/Field/FieldSection.d.ts +7 -0
  135. package/lib/Field/FieldSection.js +23 -0
  136. package/lib/Field/InjectedFieldProps.d.ts +7 -0
  137. package/lib/Field/InjectedFieldProps.js +2 -0
  138. package/lib/Field/StandAloneInput.d.ts +9 -0
  139. package/lib/Field/StandAloneInput.js +75 -0
  140. package/lib/Field/useStandardField.d.ts +15 -0
  141. package/lib/Field/useStandardField.js +96 -0
  142. package/lib/FieldArray/FieldArray.d.ts +15 -0
  143. package/lib/FieldArray/FieldArray.js +86 -0
  144. package/lib/File/FileGroup.d.ts +8 -0
  145. package/lib/File/FileGroup.js +55 -0
  146. package/lib/File/FileList.d.ts +6 -0
  147. package/lib/File/FileList.js +23 -0
  148. package/lib/File/humanFileSize.d.ts +1 -0
  149. package/lib/File/humanFileSize.js +10 -0
  150. package/lib/Form/FocusError.d.ts +5 -0
  151. package/lib/Form/FocusError.js +47 -66
  152. package/lib/Form/Form.d.ts +22 -0
  153. package/lib/Form/Form.js +117 -153
  154. package/lib/Form/FormBasedPreventNavigation.d.ts +5 -0
  155. package/lib/Form/FormBasedPreventNavigation.js +56 -39
  156. package/lib/Form/ServerErrorContext.d.ts +10 -0
  157. package/lib/Form/ServerErrorContext.js +14 -18
  158. package/lib/FormActions.d.ts +7 -0
  159. package/lib/FormActions.js +28 -0
  160. package/lib/Group.d.ts +13 -0
  161. package/lib/Group.js +28 -0
  162. package/lib/Input/IconInputGroup.d.ts +9 -0
  163. package/lib/Input/IconInputGroup.js +45 -0
  164. package/lib/Input/InputGroup.d.ts +12 -0
  165. package/lib/Input/InputGroup.js +38 -0
  166. package/lib/Input/MoneyInputGroup.d.ts +7 -0
  167. package/lib/Input/MoneyInputGroup.js +46 -0
  168. package/lib/Input/NumberInputGroup.d.ts +7 -0
  169. package/lib/Input/NumberInputGroup.js +46 -0
  170. package/lib/Input/StringInputGroup.d.ts +7 -0
  171. package/lib/Input/StringInputGroup.js +45 -0
  172. package/lib/Normalization/NormalizationFunction.d.ts +4 -0
  173. package/lib/Normalization/NormalizationFunction.js +2 -0
  174. package/lib/Normalization/normalizers.d.ts +2 -0
  175. package/lib/Normalization/normalizers.js +35 -0
  176. package/lib/Select/BooleanSelectGroup.d.ts +7 -0
  177. package/lib/Select/BooleanSelectGroup.js +34 -0
  178. package/lib/Select/NumberSelectGroup.d.ts +8 -0
  179. package/lib/Select/NumberSelectGroup.js +27 -0
  180. package/lib/Select/SelectGroup.d.ts +22 -0
  181. package/lib/Select/SelectGroup.js +65 -0
  182. package/lib/Select/SelectGroupPropsHelper.d.ts +3 -0
  183. package/lib/Select/SelectGroupPropsHelper.js +2 -0
  184. package/lib/Select/StringSelectGroup.d.ts +8 -0
  185. package/lib/Select/StringSelectGroup.js +27 -0
  186. package/lib/StandardFormActions.d.ts +6 -0
  187. package/lib/StandardFormActions.js +29 -37
  188. package/lib/SubmitFormButton.d.ts +7 -0
  189. package/lib/SubmitFormButton.js +42 -38
  190. package/lib/TextArea/TextAreaGroup.d.ts +8 -0
  191. package/lib/TextArea/TextAreaGroup.js +38 -0
  192. package/lib/Validation/ValidatedApiResult.d.ts +6 -0
  193. package/lib/Validation/ValidatedApiResult.js +2 -0
  194. package/lib/Validation/ValidationError.d.ts +5 -0
  195. package/lib/Validation/ValidationError.js +2 -0
  196. package/lib/Validation/ValidationFunction.d.ts +4 -0
  197. package/lib/Validation/ValidationFunction.js +2 -0
  198. package/lib/Validation/validators.d.ts +15 -0
  199. package/lib/Validation/validators.js +86 -0
  200. package/lib/__Tests__/FormTestBase.d.ts +27 -0
  201. package/lib/__Tests__/FormTestBase.js +86 -25
  202. package/lib/__Tests__/index.d.ts +2 -0
  203. package/lib/__Tests__/index.js +8 -15
  204. package/lib/index.d.ts +71 -0
  205. package/lib/index.js +112 -174
  206. package/lib/utils/objectContainsNonSerializableProperty.d.ts +1 -0
  207. package/lib/utils/objectContainsNonSerializableProperty.js +17 -24
  208. package/lib/utils/objectToFormData.d.ts +10 -0
  209. package/lib/utils/objectToFormData.js +79 -73
  210. package/lib/utils/typeChecks.d.ts +8 -0
  211. package/lib/utils/typeChecks.js +29 -58
  212. package/package.json +106 -100
  213. package/src/AddressInput/{AddesssInput.test.js → AddressInput.test.tsx} +7 -3
  214. package/src/AddressInput/AddressInput.tsx +72 -0
  215. package/src/AddressInput/{UsStates.js → UsStates.ts} +3 -1
  216. package/src/AddressInput/__snapshots__/AddressInput.test.tsx.snap +175 -0
  217. package/src/ConfirmBaseForm/ConfirmBaseForm.test.tsx +24 -0
  218. package/src/ConfirmBaseForm/ConfirmBaseForm.tsx +50 -0
  219. package/src/ConfirmBaseForm/__snapshots__/{ConfirmBaseForm.test.js.snap → ConfirmBaseForm.test.tsx.snap} +2 -2
  220. package/src/ConfirmDeleteForm/{ConfirmDeleteForm.test.js → ConfirmDeleteForm.test.tsx} +3 -3
  221. package/src/ConfirmDeleteForm/ConfirmDeleteForm.tsx +67 -0
  222. package/src/ConfirmDeleteForm/__snapshots__/{ConfirmDeleteForm.test.js.snap → ConfirmDeleteForm.test.tsx.snap} +2 -2
  223. package/src/DatePicker/DateOnlyDatePickerGroup.tsx +24 -0
  224. package/src/DatePicker/DatePicker.test.tsx +48 -0
  225. package/src/DatePicker/DatePickerGroup.tsx +75 -0
  226. package/src/DatePicker/DatePickerHelper.ts +4 -0
  227. package/src/DatePicker/StringDatePickerGroup.tsx +14 -0
  228. package/src/DatePicker/__snapshots__/DatePicker.test.tsx.snap +151 -0
  229. package/src/Field/CustomFieldInputProps.ts +10 -0
  230. package/src/Field/CustomFieldMetaProps.ts +5 -0
  231. package/src/Field/Field.tsx +93 -0
  232. package/src/Field/FieldErrorScrollTarget.tsx +11 -0
  233. package/src/Field/FieldNameContext.ts +6 -0
  234. package/src/Field/FieldSection.tsx +18 -0
  235. package/src/Field/InjectedFieldProps.ts +8 -0
  236. package/src/Field/StandAloneInput.tsx +51 -0
  237. package/src/Field/useStandardField.ts +121 -0
  238. package/src/FieldArray/FieldArray.tsx +133 -0
  239. package/src/File/FileGroup.test.tsx +35 -0
  240. package/src/File/FileGroup.tsx +71 -0
  241. package/src/File/FileList.tsx +19 -0
  242. package/src/File/__snapshots__/FileGroup.test.tsx.snap +32 -0
  243. package/src/File/humanFileSize.ts +8 -0
  244. package/src/Form/{FocusError.js → FocusError.tsx} +10 -6
  245. package/src/Form/Form.test.tsx +14 -0
  246. package/src/Form/{Form.js → Form.tsx} +71 -31
  247. package/src/Form/FormBasedPreventNavigation.tsx +74 -0
  248. package/src/Form/ServerErrorContext.ts +17 -0
  249. package/src/Form/__snapshots__/{Form.test.js.snap → Form.test.tsx.snap} +1 -1
  250. package/src/FormActions.tsx +34 -0
  251. package/src/Group.tsx +43 -0
  252. package/src/Input/IconInputGroup.tsx +48 -0
  253. package/src/Input/InputGroup.tsx +57 -0
  254. package/src/Input/MoneyInputGroup.tsx +44 -0
  255. package/src/Input/NumberInputGroup.tsx +42 -0
  256. package/src/Input/StringInputGroup.tsx +48 -0
  257. package/src/Input/__Tests__/IconInputGroup.test.tsx +35 -0
  258. package/src/Input/__Tests__/MoneyInputGroup.test.tsx +37 -0
  259. package/src/Input/__Tests__/NumberInputGroup.test.tsx +35 -0
  260. package/src/Input/__Tests__/StringInputGroup.test.tsx +27 -0
  261. package/src/Input/__Tests__/__snapshots__/IconInputGroup.test.tsx.snap +29 -0
  262. package/src/Input/__Tests__/__snapshots__/MoneyInputGroup.test.tsx.snap +31 -0
  263. package/src/Input/__Tests__/__snapshots__/NumberInputGroup.test.tsx.snap +29 -0
  264. package/src/Input/__Tests__/__snapshots__/StringInputGroup.test.tsx.snap +28 -0
  265. package/src/Normalization/NormalizationFunction.ts +4 -0
  266. package/src/{normalizers.js → Normalization/normalizers.ts} +5 -5
  267. package/src/Select/BooleanSelectGroup.tsx +27 -0
  268. package/src/Select/NumberSelectGroup.tsx +14 -0
  269. package/src/Select/SelectGroup.tsx +106 -0
  270. package/src/Select/SelectGroupPropsHelper.ts +4 -0
  271. package/src/Select/StringSelectGroup.tsx +14 -0
  272. package/src/Select/__tests__/BooleanSelectGroup.test.tsx +35 -0
  273. package/src/Select/__tests__/NumberSelectGroup.test.tsx +87 -0
  274. package/src/Select/__tests__/StringSelectGroup.test.tsx +89 -0
  275. package/src/Select/__tests__/__snapshots__/BooleanSelectGroup.test.tsx.snap +99 -0
  276. package/src/Select/__tests__/__snapshots__/NumberSelectGroup.test.tsx.snap +197 -0
  277. package/src/Select/__tests__/__snapshots__/StringSelectGroup.test.tsx.snap +197 -0
  278. package/src/{StandardFormActions.js → StandardFormActions.tsx} +12 -6
  279. package/src/SubmitFormButton.tsx +44 -0
  280. package/src/TextArea/TextAreaGroup.tsx +55 -0
  281. package/src/Validation/ValidatedApiResult.ts +8 -0
  282. package/src/Validation/ValidationError.ts +6 -0
  283. package/src/Validation/ValidationFunction.ts +4 -0
  284. package/src/{validators/validators.test.js → Validation/validators.test.tsx} +6 -4
  285. package/src/Validation/validators.ts +92 -0
  286. package/src/__Tests__/FormTestBase.tsx +63 -0
  287. package/src/__Tests__/{StandardFormActions.test.js → StandardFormActions.test.tsx} +2 -8
  288. package/src/__Tests__/{SubmitFormButton.test.js → SubmitFormButton.test.tsx} +2 -8
  289. package/src/__Tests__/__snapshots__/{StandardFormActions.test.js.snap → StandardFormActions.test.tsx.snap} +2 -2
  290. package/src/__Tests__/__snapshots__/{SubmitFormButton.test.js.snap → SubmitFormButton.test.tsx.snap} +1 -1
  291. package/src/__Tests__/index.ts +3 -0
  292. package/src/index.ts +149 -0
  293. package/src/react-app-env.d.ts +1 -0
  294. package/src/styles.scss +0 -7
  295. package/src/utils/{objectContainsNonSerializableProperty.test.js → objectContainsNonSerializableProperty.test.tsx} +0 -0
  296. package/src/utils/{objectContainsNonSerializableProperty.js → objectContainsNonSerializableProperty.ts} +4 -2
  297. package/src/utils/{objectToFormData.test.js → objectToFormData.test.tsx} +0 -0
  298. package/src/utils/{objectToFormData.js → objectToFormData.ts} +29 -13
  299. package/src/utils/typeChecks.ts +18 -0
  300. package/es/AddressInput/index.js +0 -2
  301. package/es/BoolInput/BoolInput.js +0 -10
  302. package/es/BoolInput/InlineBoolInput.js +0 -10
  303. package/es/BoolInput/boolOptions.js +0 -8
  304. package/es/BoolInput/index.js +0 -3
  305. package/es/ConfirmBaseForm/index.js +0 -2
  306. package/es/ConfirmDeleteForm/index.js +0 -2
  307. package/es/DatePickerInput/DatePickerInput.js +0 -95
  308. package/es/DatePickerInput/index.js +0 -2
  309. package/es/ErrorScrollTarget.js +0 -10
  310. package/es/FileInput/DefaultFileList.js +0 -36
  311. package/es/FileInput/DropzoneFileInput.js +0 -58
  312. package/es/FileInput/FileInput.js +0 -62
  313. package/es/FileInput/index.js +0 -3
  314. package/es/Form/index.js +0 -3
  315. package/es/FormGroup.js +0 -22
  316. package/es/FormGroupWrapper.js +0 -22
  317. package/es/FormInput/FormInput.js +0 -206
  318. package/es/FormInput/index.js +0 -2
  319. package/es/FormInputArray/FormInputArray.js +0 -225
  320. package/es/FormInputArray/index.js +0 -2
  321. package/es/FormSection.js +0 -11
  322. package/es/IconInput.js +0 -33
  323. package/es/InlineFormInput/InlineFormInput.js +0 -8
  324. package/es/InlineFormInput/index.js +0 -2
  325. package/es/MoneyInput/InlineMoneyInput.js +0 -7
  326. package/es/MoneyInput/MoneyInput.js +0 -7
  327. package/es/MoneyInput/index.js +0 -3
  328. package/es/MoneyInput/moneyInputProps.js +0 -13
  329. package/es/NestedFormFieldContext.js +0 -4
  330. package/es/ReactSelectField/ReactSelectField.js +0 -162
  331. package/es/ReactSelectField/index.js +0 -2
  332. package/es/normalizers.js +0 -39
  333. package/es/selectors.js +0 -6
  334. package/es/useStandardFormInput.js +0 -119
  335. package/es/utils/index.js +0 -3
  336. package/es/validators/index.js +0 -2
  337. package/es/validators/validators.js +0 -94
  338. package/lib/AddressInput/index.js +0 -13
  339. package/lib/BoolInput/BoolInput.js +0 -23
  340. package/lib/BoolInput/InlineBoolInput.js +0 -23
  341. package/lib/BoolInput/boolOptions.js +0 -15
  342. package/lib/BoolInput/index.js +0 -23
  343. package/lib/ConfirmBaseForm/index.js +0 -13
  344. package/lib/ConfirmDeleteForm/index.js +0 -13
  345. package/lib/DatePickerInput/DatePickerInput.js +0 -113
  346. package/lib/DatePickerInput/index.js +0 -13
  347. package/lib/ErrorScrollTarget.js +0 -20
  348. package/lib/FileInput/DefaultFileList.js +0 -47
  349. package/lib/FileInput/DropzoneFileInput.js +0 -75
  350. package/lib/FileInput/FileInput.js +0 -82
  351. package/lib/FileInput/index.js +0 -23
  352. package/lib/Form/index.js +0 -23
  353. package/lib/FormGroup.js +0 -33
  354. package/lib/FormGroupWrapper.js +0 -37
  355. package/lib/FormInput/FormInput.js +0 -229
  356. package/lib/FormInput/index.js +0 -13
  357. package/lib/FormInputArray/FormInputArray.js +0 -248
  358. package/lib/FormInputArray/index.js +0 -13
  359. package/lib/FormSection.js +0 -28
  360. package/lib/IconInput.js +0 -51
  361. package/lib/InlineFormInput/InlineFormInput.js +0 -20
  362. package/lib/InlineFormInput/index.js +0 -13
  363. package/lib/MoneyInput/InlineMoneyInput.js +0 -20
  364. package/lib/MoneyInput/MoneyInput.js +0 -20
  365. package/lib/MoneyInput/index.js +0 -23
  366. package/lib/MoneyInput/moneyInputProps.js +0 -26
  367. package/lib/NestedFormFieldContext.js +0 -16
  368. package/lib/ReactSelectField/ReactSelectField.js +0 -187
  369. package/lib/ReactSelectField/index.js +0 -31
  370. package/lib/normalizers.js +0 -51
  371. package/lib/selectors.js +0 -18
  372. package/lib/useStandardFormInput.js +0 -135
  373. package/lib/utils/index.js +0 -23
  374. package/lib/validators/index.js +0 -17
  375. package/lib/validators/validators.js +0 -130
  376. package/src/AddressInput/AddressInput.js +0 -73
  377. package/src/AddressInput/__snapshots__/AddesssInput.test.js.snap +0 -207
  378. package/src/AddressInput/index.js +0 -2
  379. package/src/BoolInput/BoolInput.js +0 -7
  380. package/src/BoolInput/BoolInput.test.js +0 -23
  381. package/src/BoolInput/InlineBoolInput.js +0 -7
  382. package/src/BoolInput/__snapshots__/BoolInput.test.js.snap +0 -89
  383. package/src/BoolInput/boolOptions.js +0 -6
  384. package/src/BoolInput/index.js +0 -4
  385. package/src/ConfirmBaseForm/ConfirmBaseForm.js +0 -37
  386. package/src/ConfirmBaseForm/ConfirmBaseForm.test.js +0 -14
  387. package/src/ConfirmBaseForm/index.js +0 -2
  388. package/src/ConfirmDeleteForm/ConfirmDeleteForm.js +0 -39
  389. package/src/ConfirmDeleteForm/index.js +0 -2
  390. package/src/DatePickerInput/DatePickerInput.js +0 -49
  391. package/src/DatePickerInput/DatePickerInput.test.js +0 -74
  392. package/src/DatePickerInput/__snapshots__/DatePickerInput.test.js.snap +0 -134
  393. package/src/DatePickerInput/date-picker-input.scss +0 -42
  394. package/src/DatePickerInput/index.js +0 -3
  395. package/src/ErrorScrollTarget.js +0 -6
  396. package/src/FileInput/DefaultFileList.js +0 -39
  397. package/src/FileInput/DropzoneFileInput.js +0 -56
  398. package/src/FileInput/DropzoneFileInput.test.js +0 -24
  399. package/src/FileInput/FileInput.js +0 -77
  400. package/src/FileInput/FileInput.test.js +0 -24
  401. package/src/FileInput/__snapshots__/DropzoneFileInput.test.js.snap +0 -57
  402. package/src/FileInput/__snapshots__/FileInput.test.js.snap +0 -58
  403. package/src/FileInput/file-input.scss +0 -58
  404. package/src/FileInput/index.js +0 -4
  405. package/src/Form/Form.test.js +0 -23
  406. package/src/Form/FormBasedPreventNavigation.js +0 -25
  407. package/src/Form/ServerErrorContext.js +0 -7
  408. package/src/Form/index.js +0 -3
  409. package/src/FormGroup.js +0 -30
  410. package/src/FormGroupWrapper.js +0 -28
  411. package/src/FormInput/FormInput.js +0 -145
  412. package/src/FormInput/FormInput.test.js +0 -66
  413. package/src/FormInput/__snapshots__/FormInput.test.js.snap +0 -323
  414. package/src/FormInput/form-input.scss +0 -9
  415. package/src/FormInput/index.js +0 -2
  416. package/src/FormInputArray/FormInputArray.js +0 -224
  417. package/src/FormInputArray/FormInputArray.test.js +0 -108
  418. package/src/FormInputArray/__snapshots__/FormInputArray.test.js.snap +0 -52
  419. package/src/FormInputArray/form-input-array.scss +0 -13
  420. package/src/FormInputArray/index.js +0 -2
  421. package/src/FormSection.js +0 -13
  422. package/src/IconInput.js +0 -31
  423. package/src/InlineFormInput/InlineFormInput.js +0 -6
  424. package/src/InlineFormInput/InlineFormInput.test.js +0 -23
  425. package/src/InlineFormInput/__snapshots__/InlineFormInput.test.js.snap +0 -26
  426. package/src/InlineFormInput/index.js +0 -3
  427. package/src/InlineFormInput/inline-form-input.scss +0 -3
  428. package/src/MoneyInput/InlineMoneyInput.js +0 -7
  429. package/src/MoneyInput/MoneyInput.js +0 -7
  430. package/src/MoneyInput/MoneyInputs.test.js +0 -43
  431. package/src/MoneyInput/__snapshots__/MoneyInputs.test.js.snap +0 -81
  432. package/src/MoneyInput/index.js +0 -4
  433. package/src/MoneyInput/money-input.scss +0 -3
  434. package/src/MoneyInput/moneyInputProps.js +0 -12
  435. package/src/NestedFormFieldContext.js +0 -6
  436. package/src/ReactSelectField/ReactSelectField.js +0 -155
  437. package/src/ReactSelectField/index.js +0 -6
  438. package/src/ReactSelectField/react-select-field.scss +0 -5
  439. package/src/SubmitFormButton.js +0 -28
  440. package/src/__Tests__/FormTestBase.js +0 -14
  441. package/src/__Tests__/IconInput.test.js +0 -23
  442. package/src/__Tests__/__snapshots__/IconInput.test.js.snap +0 -38
  443. package/src/index.js +0 -45
  444. package/src/selectors.js +0 -3
  445. package/src/useStandardFormInput.js +0 -118
  446. package/src/utils/index.js +0 -3
  447. package/src/utils/typeChecks.js +0 -18
  448. package/src/validators/index.js +0 -2
  449. package/src/validators/validators.js +0 -93
@@ -0,0 +1,67 @@
1
+ import React from 'react';
2
+ import { useNavigate, useParams } from 'react-router-dom';
3
+ import { toast } from 'react-toastify';
4
+ import { useAxiosRequestProps } from 'envoc-request';
5
+ import ConfirmBaseForm, { ConfirmBaseFormProps } from '../ConfirmBaseForm/ConfirmBaseForm';
6
+
7
+ export interface ConfirmDeleteFormProps
8
+ extends Pick<ConfirmBaseFormProps, 'style'> {
9
+ successUrl?: string;
10
+ form: string;
11
+ title?: string;
12
+ handleComplete?: Function;
13
+ handleError?: Function;
14
+ children?: React.ReactNode;
15
+ }
16
+
17
+ export default function ConfirmDeleteForm({
18
+ successUrl,
19
+ form,
20
+ title,
21
+ handleComplete,
22
+ handleError,
23
+ children,
24
+ ...props
25
+ }: ConfirmDeleteFormProps) {
26
+ const navigate = useNavigate();
27
+ const { entityId } = useParams();
28
+ const onComplete =
29
+ handleComplete ??
30
+ function () {
31
+ toast.success('Deleted!');
32
+ goBack();
33
+ };
34
+ const onError =
35
+ handleError ??
36
+ function (error: any) {
37
+ toast.error(
38
+ error.response?.data?.validationFailures[0]?.errorMessage ??
39
+ 'Something went wrong talking to the portal. Contact support if this continues.'
40
+ );
41
+ };
42
+
43
+ const request = {
44
+ method: 'delete',
45
+ url: `/api/${form}/${entityId}`,
46
+ onComplete: onComplete,
47
+ onError: onError,
48
+ } as useAxiosRequestProps;
49
+
50
+ return (
51
+ <ConfirmBaseForm
52
+ request={request}
53
+ handleCancel={goBack}
54
+ title={title ?? 'Are you sure you want to delete this?'}
55
+ {...props}>
56
+ {children}
57
+ </ConfirmBaseForm>
58
+ );
59
+
60
+ function goBack() {
61
+ if (successUrl) {
62
+ navigate(successUrl);
63
+ } else {
64
+ navigate(-1);
65
+ }
66
+ }
67
+ }
@@ -9,13 +9,13 @@ exports[`ConfirmDeleteForm has matching snapshot 1`] = `
9
9
  Are you sure you want to delete this?
10
10
  </h3>
11
11
  <button
12
- class="btn btn-danger"
12
+ class="confirm-base-form-yes-button"
13
13
  type="button"
14
14
  >
15
15
  Yes
16
16
  </button>
17
17
  <button
18
- class="btn btn-link"
18
+ class="confirm-base-form-cancel-button"
19
19
  type="button"
20
20
  >
21
21
  Cancel
@@ -0,0 +1,24 @@
1
+ import DatePickerGroup from './DatePickerGroup';
2
+ import { DatePickerHelper } from './DatePickerHelper';
3
+
4
+ export interface DateOnly {
5
+ year?: number;
6
+ month?: number;
7
+ day?: number;
8
+ }
9
+
10
+ export interface DateOnlyDatePickerGroupProps
11
+ extends DatePickerHelper<DateOnly | undefined> {}
12
+ export default function DateOnlyDatePickerGroup(
13
+ props: DateOnlyDatePickerGroupProps
14
+ ) {
15
+ return <DatePickerGroup {...props} convert={convertToDateOnly} />;
16
+ }
17
+
18
+ function convertToDateOnly(arg: Date) {
19
+ return {
20
+ year: arg.getFullYear(),
21
+ month: arg.getMonth() + 1,
22
+ day: arg.getDate(),
23
+ };
24
+ }
@@ -0,0 +1,48 @@
1
+ import React from 'react';
2
+ import { render } from '@testing-library/react';
3
+ import DateOnlyDatePickerGroup from './DateOnlyDatePickerGroup';
4
+ import FormTestBase from '../__Tests__/FormTestBase';
5
+
6
+ //hack so the datepicker internals don't complain about this not existing in the context of jest
7
+ HTMLCanvasElement.prototype.getContext = () => {};
8
+
9
+ describe('IconInputGroup', () => {
10
+ it('renders without crashing', () => {
11
+ render(
12
+ <FormTestBase>
13
+ {({ Field }) => (
14
+ <Field
15
+ name="favoriteDate"
16
+ Component={DateOnlyDatePickerGroup}
17
+ label="Favorite Date"
18
+ monthPlaceholder="mm"
19
+ dayPlaceholder="dd"
20
+ yearPlaceholder="yyyy"
21
+ maxDate={new Date('9/23/2023')}
22
+ minDate={new Date('6/22/2022')}
23
+ />
24
+ )}
25
+ </FormTestBase>
26
+ );
27
+ });
28
+
29
+ it('has matching snapshot', () => {
30
+ const renderResult = render(
31
+ <FormTestBase>
32
+ {({ Field }) => (
33
+ <Field
34
+ name="favoriteDate"
35
+ Component={DateOnlyDatePickerGroup}
36
+ label="Favorite Date"
37
+ monthPlaceholder="mm"
38
+ dayPlaceholder="dd"
39
+ yearPlaceholder="yyyy"
40
+ maxDate={new Date('9/23/2023')}
41
+ minDate={new Date('6/22/2022')}
42
+ />
43
+ )}
44
+ </FormTestBase>
45
+ );
46
+ expect(renderResult.asFragment()).toMatchSnapshot();
47
+ });
48
+ });
@@ -0,0 +1,75 @@
1
+ import { useState } from 'react';
2
+ import DatePicker, { DatePickerProps } from 'react-date-picker/dist/entry.nostyle';
3
+ import classnames from 'classnames';
4
+ import parseISO from 'date-fns/parseISO';
5
+ import { InjectedFieldProps } from '../Field/InjectedFieldProps';
6
+ import Group, { GroupProps } from '../Group';
7
+
8
+ // Docs for react-date-picker https://www.npmjs.com/package/react-date-picker
9
+
10
+ export interface DatePickerGroupProps<T>
11
+ extends InjectedFieldProps<T | undefined>,
12
+ Omit<
13
+ DatePickerProps,
14
+ keyof InjectedFieldProps<T> | 'name' | 'value' | 'className'
15
+ >,
16
+ Omit<GroupProps, keyof InjectedFieldProps<T> | 'children'> {
17
+ convert: (arg: Date) => T;
18
+ }
19
+
20
+ export default function DatePickerGroup<T>({
21
+ input,
22
+ meta,
23
+ label,
24
+ helpText,
25
+ className,
26
+ disabled,
27
+ convert,
28
+ ...rest
29
+ }: DatePickerGroupProps<T>) {
30
+ const [displayDate, setDisplayDate] = useState<Date | null>(null);
31
+
32
+ return (
33
+ <Group
34
+ input={input}
35
+ meta={meta}
36
+ label={label}
37
+ helpText={helpText}
38
+ className={classnames(className, 'date-picker')}
39
+ disabled={disabled}>
40
+ <DatePicker
41
+ {...rest}
42
+ className={classnames('date-picker', className)}
43
+ value={displayDate}
44
+ onChange={handleChange}
45
+ />
46
+ </Group>
47
+ );
48
+
49
+ function handleChange(e: Date | Date[] | string | undefined) {
50
+ const { onChange } = input;
51
+ if (onChange === null) {
52
+ return;
53
+ }
54
+
55
+ if (!e) {
56
+ onChange(undefined);
57
+ setDisplayDate(null);
58
+ return;
59
+ } else if (typeof e === 'string') {
60
+ const parsedValue = parseISO(e.toString().split('T')[0]);
61
+ setDisplayDate(parsedValue);
62
+ onChange(convert(parsedValue));
63
+ } else if (e instanceof Date) {
64
+ const parsedValue = parseISO(e.toISOString().split('T')[0]);
65
+ setDisplayDate(parsedValue);
66
+ onChange(convert(parsedValue));
67
+ } else {
68
+ // e is instanceof Date[]
69
+ const parsedValue = parseISO(e[0].toISOString().split('T')[0]);
70
+
71
+ setDisplayDate(parsedValue);
72
+ onChange(convert(parsedValue));
73
+ }
74
+ }
75
+ }
@@ -0,0 +1,4 @@
1
+ import { DatePickerGroupProps } from './DatePickerGroup';
2
+
3
+ export interface DatePickerHelper<T>
4
+ extends Omit<DatePickerGroupProps<T>, 'convert'> {}
@@ -0,0 +1,14 @@
1
+ import DatePickerGroup from './DatePickerGroup';
2
+ import { DatePickerHelper } from './DatePickerHelper';
3
+
4
+ export interface StringDatePickerGroupProps
5
+ extends DatePickerHelper<string | undefined> {}
6
+ export default function StringDatePickerGroup(
7
+ props: StringDatePickerGroupProps
8
+ ) {
9
+ return <DatePickerGroup {...props} convert={convertToDateOnly} />;
10
+ }
11
+
12
+ function convertToDateOnly(arg: Date) {
13
+ return arg.toISOString();
14
+ }
@@ -0,0 +1,151 @@
1
+ // Jest Snapshot v1, https://goo.gl/fbAQLP
2
+
3
+ exports[`IconInputGroup has matching snapshot 1`] = `
4
+ <DocumentFragment>
5
+ <form
6
+ action="#"
7
+ >
8
+ <div
9
+ class="date-picker group"
10
+ >
11
+ <div
12
+ id="favoritedate-error-scroll-target"
13
+ style="display: none;"
14
+ />
15
+ <label
16
+ for="favoriteDate"
17
+ >
18
+ Favorite Date
19
+ </label>
20
+ <div
21
+ class="react-date-picker react-date-picker--closed react-date-picker--enabled date-picker"
22
+ >
23
+ <div
24
+ class="react-date-picker__wrapper"
25
+ >
26
+ <div
27
+ class="react-date-picker__inputGroup"
28
+ >
29
+ <input
30
+ max="2023-09-23"
31
+ min="2022-06-22"
32
+ name="date"
33
+ style="visibility: hidden; position: absolute; z-index: -999;"
34
+ type="date"
35
+ value=""
36
+ />
37
+ <input
38
+ autocomplete="off"
39
+ class="react-date-picker__inputGroup__input react-date-picker__inputGroup__month"
40
+ data-input="true"
41
+ inputmode="numeric"
42
+ max="12"
43
+ min="1"
44
+ name="month"
45
+ placeholder="mm"
46
+ type="number"
47
+ value=""
48
+ />
49
+ <span
50
+ class="react-date-picker__inputGroup__divider"
51
+ >
52
+ /
53
+ </span>
54
+ <input
55
+ autocomplete="off"
56
+ class="react-date-picker__inputGroup__input react-date-picker__inputGroup__day"
57
+ data-input="true"
58
+ inputmode="numeric"
59
+ max="31"
60
+ min="1"
61
+ name="day"
62
+ placeholder="dd"
63
+ type="number"
64
+ value=""
65
+ />
66
+ <span
67
+ class="react-date-picker__inputGroup__divider"
68
+ >
69
+ /
70
+ </span>
71
+ <input
72
+ autocomplete="off"
73
+ class="react-date-picker__inputGroup__input react-date-picker__inputGroup__year"
74
+ data-input="true"
75
+ inputmode="numeric"
76
+ max="2023"
77
+ min="2022"
78
+ name="year"
79
+ placeholder="yyyy"
80
+ step="1"
81
+ type="number"
82
+ value=""
83
+ />
84
+ </div>
85
+ <button
86
+ class="react-date-picker__clear-button react-date-picker__button"
87
+ type="button"
88
+ >
89
+ <svg
90
+ class="react-date-picker__clear-button__icon react-date-picker__button__icon"
91
+ height="19"
92
+ stroke="black"
93
+ stroke-width="2"
94
+ viewBox="0 0 19 19"
95
+ width="19"
96
+ xmlns="http://www.w3.org/2000/svg"
97
+ >
98
+ <line
99
+ x1="4"
100
+ x2="15"
101
+ y1="4"
102
+ y2="15"
103
+ />
104
+ <line
105
+ x1="15"
106
+ x2="4"
107
+ y1="4"
108
+ y2="15"
109
+ />
110
+ </svg>
111
+ </button>
112
+ <button
113
+ class="react-date-picker__calendar-button react-date-picker__button"
114
+ type="button"
115
+ >
116
+ <svg
117
+ class="react-date-picker__calendar-button__icon react-date-picker__button__icon"
118
+ height="19"
119
+ stroke="black"
120
+ stroke-width="2"
121
+ viewBox="0 0 19 19"
122
+ width="19"
123
+ xmlns="http://www.w3.org/2000/svg"
124
+ >
125
+ <rect
126
+ fill="none"
127
+ height="15"
128
+ width="15"
129
+ x="2"
130
+ y="2"
131
+ />
132
+ <line
133
+ x1="6"
134
+ x2="6"
135
+ y1="0"
136
+ y2="4"
137
+ />
138
+ <line
139
+ x1="13"
140
+ x2="13"
141
+ y1="0"
142
+ y2="4"
143
+ />
144
+ </svg>
145
+ </button>
146
+ </div>
147
+ </div>
148
+ </div>
149
+ </form>
150
+ </DocumentFragment>
151
+ `;
@@ -0,0 +1,10 @@
1
+ export interface CustomFieldInputProps<TValue> {
2
+ id: string;
3
+ name: string;
4
+ value: TValue;
5
+ // we want to be more strict than formik is for setting the value
6
+ onChange: (newValue: TValue) => void;
7
+
8
+ // we don't want controlled vs uncontrolled components to behave oddly
9
+ onBlur: () => void;
10
+ }
@@ -0,0 +1,5 @@
1
+ import { FieldMetaProps } from 'formik';
2
+
3
+ export interface CustomFieldMetaProps<TValue> extends FieldMetaProps<TValue> {
4
+ warning: string | undefined;
5
+ }
@@ -0,0 +1,93 @@
1
+ import React, { ComponentProps, ElementType, LegacyRef } from 'react';
2
+ import { FieldNameContext } from './FieldNameContext';
3
+ import { InjectedFieldProps } from './InjectedFieldProps';
4
+ import useStandardFormInput from './useStandardField';
5
+ import { NormalizationFunction } from '../Normalization/NormalizationFunction';
6
+ import { ValidationFunction } from '../Validation/ValidationFunction';
7
+
8
+ // we attempted to support generic components but failed
9
+ // so, we assume the actual TRenderComponent has no generic arguments
10
+ // instead, any concrete TRenderComponent can utilize a TRenderComponent<TValue> as needed
11
+
12
+ export type RenderComponent<
13
+ TValue,
14
+ TRenderComponent extends ElementType
15
+ > = Partial<ComponentProps<TRenderComponent>> extends Partial<
16
+ InjectedFieldProps<TValue>
17
+ >
18
+ ? TRenderComponent
19
+ : never;
20
+
21
+ export type RenderComponentProps<
22
+ TValue,
23
+ TRenderComponent extends ElementType
24
+ > = Partial<ComponentProps<TRenderComponent>> extends Partial<
25
+ InjectedFieldProps<TValue>
26
+ >
27
+ ? ComponentProps<TRenderComponent>
28
+ : never;
29
+
30
+ /** A specific Field instance to be rendered by the given TRenderComponent or by whatever default is reasonable */
31
+ export type FieldProps<
32
+ TForm extends object,
33
+ TProp extends keyof TForm,
34
+ TRenderComponent extends ElementType
35
+ > = {
36
+ name: TProp; // somewhat duplicated from useStandardFormInputProps but better for autocomplete
37
+ Component: RenderComponent<TForm[TProp], TRenderComponent>;
38
+
39
+ id?: string;
40
+ disabled?: boolean;
41
+ validate?:
42
+ | ValidationFunction<TForm[TProp]>
43
+ | ValidationFunction<TForm[TProp]>[];
44
+ normalize?: NormalizationFunction<TForm[TProp]>;
45
+ } & Omit<
46
+ RenderComponentProps<TForm[TProp], TRenderComponent>,
47
+ keyof InjectedFieldProps<TForm[TProp]>
48
+ >;
49
+
50
+ /**
51
+ * Renders whatever Component is passed - injecting the formik values needed to finish wiring up that individual field.
52
+ * Should no Component be used then the default will be provided by the default lookup based on typeof(TForm[TProp])
53
+ */
54
+ function Field<
55
+ TForm extends object,
56
+ TProp extends keyof TForm,
57
+ TRenderComponent extends ElementType
58
+ >(
59
+ {
60
+ name,
61
+ Component,
62
+ id,
63
+ normalize,
64
+ validate,
65
+ disabled,
66
+ ...rest
67
+ }: FieldProps<TForm, TProp, TRenderComponent>,
68
+ ref: LegacyRef<any>
69
+ ) {
70
+ const [input, meta] = useStandardFormInput<TForm[TProp]>({
71
+ name: String(name),
72
+ id: id,
73
+ normalize: normalize,
74
+ validate: validate,
75
+ disabled: disabled,
76
+ });
77
+
78
+ // a bit of a hack so JSX is happy with us
79
+ const Wrapped = Component as React.ComponentType<
80
+ InjectedFieldProps<TForm[TProp]>
81
+ >;
82
+
83
+ return (
84
+ <FieldNameContext.Provider value={input.name}>
85
+ <Wrapped {...rest} ref={ref} id={id} input={input} meta={meta} />
86
+ </FieldNameContext.Provider>
87
+ );
88
+ }
89
+
90
+ // hack to get forwarded refs to work
91
+ const FieldWithRef = React.forwardRef(Field as any);
92
+
93
+ export default FieldWithRef as typeof Field;
@@ -0,0 +1,11 @@
1
+ import { useContext } from 'react';
2
+ import { FieldNameContext } from './FieldNameContext';
3
+
4
+ export default function FieldErrorScrollTarget() {
5
+ const name = useContext(FieldNameContext);
6
+ if (!name) {
7
+ return null;
8
+ }
9
+ const divId = `${name.toLowerCase()}-error-scroll-target`;
10
+ return <div id={divId} style={{ display: 'none' }} />;
11
+ }
@@ -0,0 +1,6 @@
1
+ import React from 'react';
2
+
3
+ /** provides the full, qualified name of the current field name - including nested fields, path/dot delimited */
4
+ export const FieldNameContext = React.createContext<string | undefined>(
5
+ undefined
6
+ );
@@ -0,0 +1,18 @@
1
+ import React, { useContext } from 'react';
2
+ import { FieldNameContext } from './FieldNameContext';
3
+
4
+ interface FieldSectionProps {
5
+ children: React.ReactNode;
6
+ name: string;
7
+ }
8
+
9
+ export default function FieldSection({ children, name }: FieldSectionProps) {
10
+ const parentContext = useContext(FieldNameContext);
11
+ const effectiveValue = parentContext ? `${parentContext}.${name}` : name;
12
+
13
+ return (
14
+ <FieldNameContext.Provider value={effectiveValue}>
15
+ {children}
16
+ </FieldNameContext.Provider>
17
+ );
18
+ }
@@ -0,0 +1,8 @@
1
+ import { CustomFieldInputProps } from './CustomFieldInputProps';
2
+ import { CustomFieldMetaProps } from './CustomFieldMetaProps';
3
+
4
+ /** Defines what is injected by a Field wrapper of some TRenderComponent */
5
+ export interface InjectedFieldProps<TValue> {
6
+ input: CustomFieldInputProps<TValue>;
7
+ meta: CustomFieldMetaProps<TValue>;
8
+ }
@@ -0,0 +1,51 @@
1
+ import { ElementType, useRef } from 'react';
2
+ import * as uuid from 'uuid';
3
+ import { CustomFieldInputProps } from './CustomFieldInputProps';
4
+ import { CustomFieldMetaProps } from './CustomFieldMetaProps';
5
+ import { RenderComponent, RenderComponentProps } from './Field';
6
+ import { InjectedFieldProps } from './InjectedFieldProps';
7
+
8
+ export type StandAloneInputProps<
9
+ TValue,
10
+ TRenderComponent extends ElementType
11
+ > = {
12
+ Component: RenderComponent<TValue, TRenderComponent>;
13
+ value: TValue;
14
+ onChange: (arg: TValue) => void;
15
+ } & Omit<
16
+ RenderComponentProps<TValue, TRenderComponent>,
17
+ | keyof InjectedFieldProps<TValue>
18
+ | 'value'
19
+ | 'onChange'
20
+ | 'normalize'
21
+ | 'validate'
22
+ >;
23
+
24
+ export default function StandAloneInput<TValue, TComponent extends ElementType>(
25
+ props: StandAloneInputProps<TValue, TComponent>
26
+ ) {
27
+ const { Component, value, onChange, disabled, ...rest } = props;
28
+ const handleChange = (arg: TValue) => {
29
+ if (!disabled) {
30
+ onChange(arg);
31
+ }
32
+ };
33
+ const Wrapped = Component as React.ComponentType<InjectedFieldProps<TValue>>;
34
+ const idRef = useRef(uuid.v4());
35
+ const input: CustomFieldInputProps<TValue> = {
36
+ id: idRef.current,
37
+ name: idRef.current,
38
+ value: value,
39
+ onChange: handleChange,
40
+ onBlur: () => {},
41
+ };
42
+
43
+ const meta: CustomFieldMetaProps<TValue> = {
44
+ warning: undefined,
45
+ value: value,
46
+ touched: false,
47
+ initialTouched: false,
48
+ };
49
+
50
+ return <Wrapped {...rest} disabled={disabled} input={input} meta={meta} />;
51
+ }