envoc-form 3.3.0 → 4.0.1-2

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 (455) 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 -25
  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 -262
  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 -101
  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 +179 -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 +33 -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 +30 -0
  262. package/src/Input/__Tests__/__snapshots__/MoneyInputGroup.test.tsx.snap +32 -0
  263. package/src/Input/__Tests__/__snapshots__/NumberInputGroup.test.tsx.snap +30 -0
  264. package/src/Input/__Tests__/__snapshots__/StringInputGroup.test.tsx.snap +29 -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 -3
  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 -4
  314. package/es/Form/index.js +0 -5
  315. package/es/FormGroup.js +0 -22
  316. package/es/FormGroupWrapper.js +0 -22
  317. package/es/FormInput/FormInput.js +0 -212
  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/MoneyFormattedInput/MoneyFormattedInput.js +0 -106
  326. package/es/MoneyFormattedInput/index.js +0 -2
  327. package/es/MoneyInput/InlineMoneyInput.js +0 -7
  328. package/es/MoneyInput/MoneyInput.js +0 -7
  329. package/es/MoneyInput/index.js +0 -3
  330. package/es/MoneyInput/moneyInputProps.js +0 -13
  331. package/es/NestedFormFieldContext.js +0 -4
  332. package/es/ReactSelectField/ReactSelectField.js +0 -162
  333. package/es/ReactSelectField/index.js +0 -2
  334. package/es/normalizers.js +0 -39
  335. package/es/selectors.js +0 -6
  336. package/es/useStandardFormInput.js +0 -119
  337. package/es/utils/index.js +0 -3
  338. package/es/validators/index.js +0 -2
  339. package/es/validators/validators.js +0 -94
  340. package/lib/AddressInput/index.js +0 -23
  341. package/lib/BoolInput/BoolInput.js +0 -23
  342. package/lib/BoolInput/InlineBoolInput.js +0 -23
  343. package/lib/BoolInput/boolOptions.js +0 -15
  344. package/lib/BoolInput/index.js +0 -23
  345. package/lib/ConfirmBaseForm/index.js +0 -13
  346. package/lib/ConfirmDeleteForm/index.js +0 -13
  347. package/lib/DatePickerInput/DatePickerInput.js +0 -113
  348. package/lib/DatePickerInput/index.js +0 -13
  349. package/lib/ErrorScrollTarget.js +0 -20
  350. package/lib/FileInput/DefaultFileList.js +0 -47
  351. package/lib/FileInput/DropzoneFileInput.js +0 -75
  352. package/lib/FileInput/FileInput.js +0 -82
  353. package/lib/FileInput/index.js +0 -31
  354. package/lib/Form/index.js +0 -39
  355. package/lib/FormGroup.js +0 -33
  356. package/lib/FormGroupWrapper.js +0 -37
  357. package/lib/FormInput/FormInput.js +0 -236
  358. package/lib/FormInput/index.js +0 -13
  359. package/lib/FormInputArray/FormInputArray.js +0 -248
  360. package/lib/FormInputArray/index.js +0 -13
  361. package/lib/FormSection.js +0 -28
  362. package/lib/IconInput.js +0 -51
  363. package/lib/InlineFormInput/InlineFormInput.js +0 -20
  364. package/lib/InlineFormInput/index.js +0 -13
  365. package/lib/MoneyFormattedInput/MoneyFormattedInput.js +0 -126
  366. package/lib/MoneyFormattedInput/index.js +0 -15
  367. package/lib/MoneyInput/InlineMoneyInput.js +0 -20
  368. package/lib/MoneyInput/MoneyInput.js +0 -20
  369. package/lib/MoneyInput/index.js +0 -23
  370. package/lib/MoneyInput/moneyInputProps.js +0 -26
  371. package/lib/NestedFormFieldContext.js +0 -16
  372. package/lib/ReactSelectField/ReactSelectField.js +0 -187
  373. package/lib/ReactSelectField/index.js +0 -31
  374. package/lib/normalizers.js +0 -51
  375. package/lib/selectors.js +0 -18
  376. package/lib/useStandardFormInput.js +0 -135
  377. package/lib/utils/index.js +0 -23
  378. package/lib/validators/index.js +0 -17
  379. package/lib/validators/validators.js +0 -130
  380. package/src/AddressInput/AddressInput.js +0 -73
  381. package/src/AddressInput/__snapshots__/AddesssInput.test.js.snap +0 -207
  382. package/src/AddressInput/index.js +0 -3
  383. package/src/BoolInput/BoolInput.js +0 -7
  384. package/src/BoolInput/BoolInput.test.js +0 -23
  385. package/src/BoolInput/InlineBoolInput.js +0 -7
  386. package/src/BoolInput/__snapshots__/BoolInput.test.js.snap +0 -89
  387. package/src/BoolInput/boolOptions.js +0 -6
  388. package/src/BoolInput/index.js +0 -4
  389. package/src/ConfirmBaseForm/ConfirmBaseForm.js +0 -37
  390. package/src/ConfirmBaseForm/ConfirmBaseForm.test.js +0 -14
  391. package/src/ConfirmBaseForm/index.js +0 -2
  392. package/src/ConfirmDeleteForm/ConfirmDeleteForm.js +0 -39
  393. package/src/ConfirmDeleteForm/index.js +0 -2
  394. package/src/DatePickerInput/DatePickerInput.js +0 -49
  395. package/src/DatePickerInput/DatePickerInput.test.js +0 -74
  396. package/src/DatePickerInput/__snapshots__/DatePickerInput.test.js.snap +0 -134
  397. package/src/DatePickerInput/date-picker-input.scss +0 -42
  398. package/src/DatePickerInput/index.js +0 -3
  399. package/src/ErrorScrollTarget.js +0 -6
  400. package/src/FileInput/DefaultFileList.js +0 -39
  401. package/src/FileInput/DropzoneFileInput.js +0 -56
  402. package/src/FileInput/DropzoneFileInput.test.js +0 -24
  403. package/src/FileInput/FileInput.js +0 -77
  404. package/src/FileInput/FileInput.test.js +0 -24
  405. package/src/FileInput/__snapshots__/DropzoneFileInput.test.js.snap +0 -57
  406. package/src/FileInput/__snapshots__/FileInput.test.js.snap +0 -58
  407. package/src/FileInput/file-input.scss +0 -58
  408. package/src/FileInput/index.js +0 -5
  409. package/src/Form/Form.test.js +0 -23
  410. package/src/Form/FormBasedPreventNavigation.js +0 -25
  411. package/src/Form/ServerErrorContext.js +0 -7
  412. package/src/Form/index.js +0 -11
  413. package/src/FormGroup.js +0 -30
  414. package/src/FormGroupWrapper.js +0 -28
  415. package/src/FormInput/FormInput.js +0 -148
  416. package/src/FormInput/FormInput.test.js +0 -66
  417. package/src/FormInput/__snapshots__/FormInput.test.js.snap +0 -323
  418. package/src/FormInput/form-input.scss +0 -9
  419. package/src/FormInput/index.js +0 -2
  420. package/src/FormInputArray/FormInputArray.js +0 -224
  421. package/src/FormInputArray/FormInputArray.test.js +0 -108
  422. package/src/FormInputArray/__snapshots__/FormInputArray.test.js.snap +0 -52
  423. package/src/FormInputArray/form-input-array.scss +0 -13
  424. package/src/FormInputArray/index.js +0 -2
  425. package/src/FormSection.js +0 -13
  426. package/src/IconInput.js +0 -31
  427. package/src/InlineFormInput/InlineFormInput.js +0 -6
  428. package/src/InlineFormInput/InlineFormInput.test.js +0 -23
  429. package/src/InlineFormInput/__snapshots__/InlineFormInput.test.js.snap +0 -26
  430. package/src/InlineFormInput/index.js +0 -3
  431. package/src/InlineFormInput/inline-form-input.scss +0 -3
  432. package/src/MoneyFormattedInput/MoneyFormattedInput.js +0 -115
  433. package/src/MoneyFormattedInput/index.js +0 -3
  434. package/src/MoneyInput/InlineMoneyInput.js +0 -7
  435. package/src/MoneyInput/MoneyInput.js +0 -7
  436. package/src/MoneyInput/MoneyInputs.test.js +0 -43
  437. package/src/MoneyInput/__snapshots__/MoneyInputs.test.js.snap +0 -81
  438. package/src/MoneyInput/index.js +0 -4
  439. package/src/MoneyInput/money-input.scss +0 -3
  440. package/src/MoneyInput/moneyInputProps.js +0 -12
  441. package/src/NestedFormFieldContext.js +0 -6
  442. package/src/ReactSelectField/ReactSelectField.js +0 -155
  443. package/src/ReactSelectField/index.js +0 -6
  444. package/src/ReactSelectField/react-select-field.scss +0 -5
  445. package/src/SubmitFormButton.js +0 -28
  446. package/src/__Tests__/FormTestBase.js +0 -14
  447. package/src/__Tests__/IconInput.test.js +0 -23
  448. package/src/__Tests__/__snapshots__/IconInput.test.js.snap +0 -38
  449. package/src/index.js +0 -70
  450. package/src/selectors.js +0 -3
  451. package/src/useStandardFormInput.js +0 -118
  452. package/src/utils/index.js +0 -3
  453. package/src/utils/typeChecks.js +0 -18
  454. package/src/validators/index.js +0 -2
  455. package/src/validators/validators.js +0 -93
@@ -0,0 +1,197 @@
1
+ // Jest Snapshot v1, https://goo.gl/fbAQLP
2
+
3
+ exports[`MultiNumberSelectGroup has matching snapshot 1`] = `
4
+ <DocumentFragment>
5
+ <form
6
+ action="#"
7
+ >
8
+ <div
9
+ class="multiple select-group group"
10
+ >
11
+ <div
12
+ id="userroles-error-scroll-target"
13
+ style="display: none;"
14
+ />
15
+ <label
16
+ for="userRoles"
17
+ >
18
+ Favorite Number
19
+ </label>
20
+ <div
21
+ class="select-group css-b62m3t-container"
22
+ >
23
+ <span
24
+ class="css-1f43avz-a11yText-A11yText"
25
+ id="react-select-5-live-region"
26
+ />
27
+ <span
28
+ aria-atomic="false"
29
+ aria-live="polite"
30
+ aria-relevant="additions text"
31
+ class="css-1f43avz-a11yText-A11yText"
32
+ />
33
+ <div
34
+ class="react-select__control css-1s2u09g-control"
35
+ >
36
+ <div
37
+ class="react-select__value-container react-select__value-container--is-multi css-dlobye-Component"
38
+ >
39
+ <div
40
+ class="react-select__placeholder css-14el2xx-placeholder"
41
+ id="react-select-5-placeholder"
42
+ >
43
+ Select...
44
+ </div>
45
+ <div
46
+ class="react-select__input-container css-1u4kn00-Component"
47
+ data-value=""
48
+ >
49
+ <input
50
+ aria-autocomplete="list"
51
+ aria-controls="react-select-5-listbox"
52
+ aria-describedby="react-select-5-placeholder"
53
+ aria-expanded="false"
54
+ aria-haspopup="true"
55
+ aria-owns="react-select-5-listbox"
56
+ autocapitalize="none"
57
+ autocomplete="off"
58
+ autocorrect="off"
59
+ class="react-select__input"
60
+ id="userRoles"
61
+ role="combobox"
62
+ spellcheck="false"
63
+ style="opacity: 1; width: 100%; grid-area: 1 / 2; min-width: 2px; border: 0px; margin: 0px; outline: 0; padding: 0px;"
64
+ tabindex="0"
65
+ type="text"
66
+ value=""
67
+ />
68
+ </div>
69
+ </div>
70
+ <div
71
+ class="react-select__indicators css-ny0e4k-Component"
72
+ >
73
+ <span
74
+ class="react-select__indicator-separator css-1okebmr-indicatorSeparator"
75
+ />
76
+ <div
77
+ aria-hidden="true"
78
+ class="react-select__indicator react-select__dropdown-indicator css-tlfecz-indicatorContainer"
79
+ >
80
+ <svg
81
+ aria-hidden="true"
82
+ class="css-tj5bde-Svg"
83
+ focusable="false"
84
+ height="20"
85
+ viewBox="0 0 20 20"
86
+ width="20"
87
+ >
88
+ <path
89
+ d="M4.516 7.548c0.436-0.446 1.043-0.481 1.576 0l3.908 3.747 3.908-3.747c0.533-0.481 1.141-0.446 1.574 0 0.436 0.445 0.408 1.197 0 1.615-0.406 0.418-4.695 4.502-4.695 4.502-0.217 0.223-0.502 0.335-0.787 0.335s-0.57-0.112-0.789-0.335c0 0-4.287-4.084-4.695-4.502s-0.436-1.17 0-1.615z"
90
+ />
91
+ </svg>
92
+ </div>
93
+ </div>
94
+ </div>
95
+ </div>
96
+ </div>
97
+ </form>
98
+ </DocumentFragment>
99
+ `;
100
+
101
+ exports[`SingleNumberSelectGroup has matching snapshot 1`] = `
102
+ <DocumentFragment>
103
+ <form
104
+ action="#"
105
+ >
106
+ <div
107
+ class="select-group group"
108
+ >
109
+ <div
110
+ id="favoritenumber-error-scroll-target"
111
+ style="display: none;"
112
+ />
113
+ <label
114
+ for="favoriteNumber"
115
+ >
116
+ Favorite Number
117
+ </label>
118
+ <div
119
+ class="select-group css-b62m3t-container"
120
+ >
121
+ <span
122
+ class="css-1f43avz-a11yText-A11yText"
123
+ id="react-select-3-live-region"
124
+ />
125
+ <span
126
+ aria-atomic="false"
127
+ aria-live="polite"
128
+ aria-relevant="additions text"
129
+ class="css-1f43avz-a11yText-A11yText"
130
+ />
131
+ <div
132
+ class="react-select__control css-1s2u09g-control"
133
+ >
134
+ <div
135
+ class="react-select__value-container css-dlobye-Component"
136
+ >
137
+ <div
138
+ class="react-select__placeholder css-14el2xx-placeholder"
139
+ id="react-select-3-placeholder"
140
+ >
141
+ Select...
142
+ </div>
143
+ <div
144
+ class="react-select__input-container css-1u4kn00-Component"
145
+ data-value=""
146
+ >
147
+ <input
148
+ aria-autocomplete="list"
149
+ aria-controls="react-select-3-listbox"
150
+ aria-describedby="react-select-3-placeholder"
151
+ aria-expanded="false"
152
+ aria-haspopup="true"
153
+ aria-owns="react-select-3-listbox"
154
+ autocapitalize="none"
155
+ autocomplete="off"
156
+ autocorrect="off"
157
+ class="react-select__input"
158
+ id="favoriteNumber"
159
+ role="combobox"
160
+ spellcheck="false"
161
+ style="opacity: 1; width: 100%; grid-area: 1 / 2; min-width: 2px; border: 0px; margin: 0px; outline: 0; padding: 0px;"
162
+ tabindex="0"
163
+ type="text"
164
+ value=""
165
+ />
166
+ </div>
167
+ </div>
168
+ <div
169
+ class="react-select__indicators css-ny0e4k-Component"
170
+ >
171
+ <span
172
+ class="react-select__indicator-separator css-1okebmr-indicatorSeparator"
173
+ />
174
+ <div
175
+ aria-hidden="true"
176
+ class="react-select__indicator react-select__dropdown-indicator css-tlfecz-indicatorContainer"
177
+ >
178
+ <svg
179
+ aria-hidden="true"
180
+ class="css-tj5bde-Svg"
181
+ focusable="false"
182
+ height="20"
183
+ viewBox="0 0 20 20"
184
+ width="20"
185
+ >
186
+ <path
187
+ d="M4.516 7.548c0.436-0.446 1.043-0.481 1.576 0l3.908 3.747 3.908-3.747c0.533-0.481 1.141-0.446 1.574 0 0.436 0.445 0.408 1.197 0 1.615-0.406 0.418-4.695 4.502-4.695 4.502-0.217 0.223-0.502 0.335-0.787 0.335s-0.57-0.112-0.789-0.335c0 0-4.287-4.084-4.695-4.502s-0.436-1.17 0-1.615z"
188
+ />
189
+ </svg>
190
+ </div>
191
+ </div>
192
+ </div>
193
+ </div>
194
+ </div>
195
+ </form>
196
+ </DocumentFragment>
197
+ `;
@@ -0,0 +1,197 @@
1
+ // Jest Snapshot v1, https://goo.gl/fbAQLP
2
+
3
+ exports[`MultiStringSelectGroup has matching snapshot 1`] = `
4
+ <DocumentFragment>
5
+ <form
6
+ action="#"
7
+ >
8
+ <div
9
+ class="multiple select-group group"
10
+ >
11
+ <div
12
+ id="favoritecolors-error-scroll-target"
13
+ style="display: none;"
14
+ />
15
+ <label
16
+ for="favoriteColors"
17
+ >
18
+ Favorite Color
19
+ </label>
20
+ <div
21
+ class="select-group css-b62m3t-container"
22
+ >
23
+ <span
24
+ class="css-1f43avz-a11yText-A11yText"
25
+ id="react-select-5-live-region"
26
+ />
27
+ <span
28
+ aria-atomic="false"
29
+ aria-live="polite"
30
+ aria-relevant="additions text"
31
+ class="css-1f43avz-a11yText-A11yText"
32
+ />
33
+ <div
34
+ class="react-select__control css-1s2u09g-control"
35
+ >
36
+ <div
37
+ class="react-select__value-container react-select__value-container--is-multi css-dlobye-Component"
38
+ >
39
+ <div
40
+ class="react-select__placeholder css-14el2xx-placeholder"
41
+ id="react-select-5-placeholder"
42
+ >
43
+ Select...
44
+ </div>
45
+ <div
46
+ class="react-select__input-container css-1u4kn00-Component"
47
+ data-value=""
48
+ >
49
+ <input
50
+ aria-autocomplete="list"
51
+ aria-controls="react-select-5-listbox"
52
+ aria-describedby="react-select-5-placeholder"
53
+ aria-expanded="false"
54
+ aria-haspopup="true"
55
+ aria-owns="react-select-5-listbox"
56
+ autocapitalize="none"
57
+ autocomplete="off"
58
+ autocorrect="off"
59
+ class="react-select__input"
60
+ id="favoriteColors"
61
+ role="combobox"
62
+ spellcheck="false"
63
+ style="opacity: 1; width: 100%; grid-area: 1 / 2; min-width: 2px; border: 0px; margin: 0px; outline: 0; padding: 0px;"
64
+ tabindex="0"
65
+ type="text"
66
+ value=""
67
+ />
68
+ </div>
69
+ </div>
70
+ <div
71
+ class="react-select__indicators css-ny0e4k-Component"
72
+ >
73
+ <span
74
+ class="react-select__indicator-separator css-1okebmr-indicatorSeparator"
75
+ />
76
+ <div
77
+ aria-hidden="true"
78
+ class="react-select__indicator react-select__dropdown-indicator css-tlfecz-indicatorContainer"
79
+ >
80
+ <svg
81
+ aria-hidden="true"
82
+ class="css-tj5bde-Svg"
83
+ focusable="false"
84
+ height="20"
85
+ viewBox="0 0 20 20"
86
+ width="20"
87
+ >
88
+ <path
89
+ d="M4.516 7.548c0.436-0.446 1.043-0.481 1.576 0l3.908 3.747 3.908-3.747c0.533-0.481 1.141-0.446 1.574 0 0.436 0.445 0.408 1.197 0 1.615-0.406 0.418-4.695 4.502-4.695 4.502-0.217 0.223-0.502 0.335-0.787 0.335s-0.57-0.112-0.789-0.335c0 0-4.287-4.084-4.695-4.502s-0.436-1.17 0-1.615z"
90
+ />
91
+ </svg>
92
+ </div>
93
+ </div>
94
+ </div>
95
+ </div>
96
+ </div>
97
+ </form>
98
+ </DocumentFragment>
99
+ `;
100
+
101
+ exports[`SingleStringSelectGroup has matching snapshot 1`] = `
102
+ <DocumentFragment>
103
+ <form
104
+ action="#"
105
+ >
106
+ <div
107
+ class="select-group group"
108
+ >
109
+ <div
110
+ id="favoritecolor-error-scroll-target"
111
+ style="display: none;"
112
+ />
113
+ <label
114
+ for="favoriteColor"
115
+ >
116
+ Favorite Color
117
+ </label>
118
+ <div
119
+ class="select-group css-b62m3t-container"
120
+ >
121
+ <span
122
+ class="css-1f43avz-a11yText-A11yText"
123
+ id="react-select-3-live-region"
124
+ />
125
+ <span
126
+ aria-atomic="false"
127
+ aria-live="polite"
128
+ aria-relevant="additions text"
129
+ class="css-1f43avz-a11yText-A11yText"
130
+ />
131
+ <div
132
+ class="react-select__control css-1s2u09g-control"
133
+ >
134
+ <div
135
+ class="react-select__value-container css-dlobye-Component"
136
+ >
137
+ <div
138
+ class="react-select__placeholder css-14el2xx-placeholder"
139
+ id="react-select-3-placeholder"
140
+ >
141
+ Select...
142
+ </div>
143
+ <div
144
+ class="react-select__input-container css-1u4kn00-Component"
145
+ data-value=""
146
+ >
147
+ <input
148
+ aria-autocomplete="list"
149
+ aria-controls="react-select-3-listbox"
150
+ aria-describedby="react-select-3-placeholder"
151
+ aria-expanded="false"
152
+ aria-haspopup="true"
153
+ aria-owns="react-select-3-listbox"
154
+ autocapitalize="none"
155
+ autocomplete="off"
156
+ autocorrect="off"
157
+ class="react-select__input"
158
+ id="favoriteColor"
159
+ role="combobox"
160
+ spellcheck="false"
161
+ style="opacity: 1; width: 100%; grid-area: 1 / 2; min-width: 2px; border: 0px; margin: 0px; outline: 0; padding: 0px;"
162
+ tabindex="0"
163
+ type="text"
164
+ value=""
165
+ />
166
+ </div>
167
+ </div>
168
+ <div
169
+ class="react-select__indicators css-ny0e4k-Component"
170
+ >
171
+ <span
172
+ class="react-select__indicator-separator css-1okebmr-indicatorSeparator"
173
+ />
174
+ <div
175
+ aria-hidden="true"
176
+ class="react-select__indicator react-select__dropdown-indicator css-tlfecz-indicatorContainer"
177
+ >
178
+ <svg
179
+ aria-hidden="true"
180
+ class="css-tj5bde-Svg"
181
+ focusable="false"
182
+ height="20"
183
+ viewBox="0 0 20 20"
184
+ width="20"
185
+ >
186
+ <path
187
+ d="M4.516 7.548c0.436-0.446 1.043-0.481 1.576 0l3.908 3.747 3.908-3.747c0.533-0.481 1.141-0.446 1.574 0 0.436 0.445 0.408 1.197 0 1.615-0.406 0.418-4.695 4.502-4.695 4.502-0.217 0.223-0.502 0.335-0.787 0.335s-0.57-0.112-0.789-0.335c0 0-4.287-4.084-4.695-4.502s-0.436-1.17 0-1.615z"
188
+ />
189
+ </svg>
190
+ </div>
191
+ </div>
192
+ </div>
193
+ </div>
194
+ </div>
195
+ </form>
196
+ </DocumentFragment>
197
+ `;
@@ -1,24 +1,30 @@
1
- import React from 'react';
2
- import { Button } from 'reactstrap';
1
+ import { MouseEventHandler } from 'react';
2
+ import classNames from 'classnames';
3
3
  import { useFormikContext } from 'formik';
4
4
  import SubmitFormButton from './SubmitFormButton';
5
5
 
6
+ export interface StandardFormActionsProps {
7
+ allowPristineSubmit?: boolean;
8
+ handleCancel?: MouseEventHandler<HTMLButtonElement>;
9
+ }
10
+
6
11
  export default function StandardFormActions({
7
12
  allowPristineSubmit,
8
13
  handleCancel,
9
- }) {
14
+ }: StandardFormActionsProps) {
10
15
  const { isSubmitting } = useFormikContext();
16
+
11
17
  return (
12
18
  <>
13
19
  <SubmitFormButton allowPristineSubmit={allowPristineSubmit} />
14
20
  &nbsp;
15
- <Button
21
+ <button
22
+ className={classNames('standard-form-actions-cancel-button')}
16
23
  type="button"
17
- color="link"
18
24
  disabled={isSubmitting}
19
25
  onClick={handleCancel || goBack}>
20
26
  Cancel
21
- </Button>
27
+ </button>
22
28
  </>
23
29
  );
24
30
  function goBack() {
@@ -0,0 +1,44 @@
1
+ import React, { LegacyRef } from 'react';
2
+ import classNames from 'classnames';
3
+ import { useFormikContext } from 'formik';
4
+
5
+ export interface SubmitFormButtonProps
6
+ extends Omit<React.HTMLProps<HTMLButtonElement>, 'type'> {
7
+ allowPristineSubmit?: boolean;
8
+ children?: React.ReactNode;
9
+ }
10
+ function SubmitFormButton(
11
+ {
12
+ allowPristineSubmit,
13
+ children,
14
+ disabled,
15
+ title,
16
+ className,
17
+ ...props
18
+ }: SubmitFormButtonProps,
19
+ ref: LegacyRef<HTMLButtonElement>
20
+ ) {
21
+ const { isSubmitting, dirty } = useFormikContext();
22
+ const preventSubmit = (!dirty && !allowPristineSubmit) || isSubmitting;
23
+ return (
24
+ <button
25
+ {...props}
26
+ ref={ref}
27
+ type="submit"
28
+ disabled={preventSubmit || disabled}
29
+ title={
30
+ title || isSubmitting
31
+ ? 'Loading, please wait...'
32
+ : preventSubmit
33
+ ? "You haven't made any changes"
34
+ : ''
35
+ }
36
+ className={classNames('submit-form-button', className)}>
37
+ {children || 'Submit'}
38
+ </button>
39
+ );
40
+ }
41
+
42
+ export default React.forwardRef(
43
+ SubmitFormButton
44
+ ) as React.ComponentType<SubmitFormButtonProps>;
@@ -0,0 +1,55 @@
1
+ import React, { LegacyRef } from 'react';
2
+ import classNames from 'classnames';
3
+ import { InjectedFieldProps } from '../Field/InjectedFieldProps';
4
+ import Group, { GroupProps } from '../Group';
5
+
6
+ export interface TextAreaGroupProps
7
+ extends InjectedFieldProps<string | undefined>,
8
+ Omit<
9
+ React.HTMLProps<HTMLTextAreaElement>,
10
+ keyof InjectedFieldProps<any> | 'children' | 'className' | 'label'
11
+ >,
12
+ Omit<GroupProps, keyof InjectedFieldProps<any> | 'children'> {
13
+ icon?: React.ReactNode;
14
+ }
15
+
16
+ /** generic controlled <textarea/> wrapped by a Group */
17
+ function TextAreaGroup(
18
+ {
19
+ input,
20
+ meta,
21
+ label,
22
+ helpText,
23
+ className,
24
+ disabled,
25
+ icon,
26
+ ...rest
27
+ }: TextAreaGroupProps,
28
+ ref: LegacyRef<HTMLTextAreaElement>
29
+ ) {
30
+ return (
31
+ <Group
32
+ input={input}
33
+ meta={meta}
34
+ disabled={disabled}
35
+ label={label}
36
+ helpText={helpText}
37
+ className={classNames(className, 'text-area-group')}>
38
+ {icon}
39
+ <textarea
40
+ {...input}
41
+ {...rest}
42
+ value={input.value}
43
+ onChange={(val) => input.onChange(val.target.value)}
44
+ ref={ref}
45
+ className={classNames(className, 'text-area-group')}
46
+ />
47
+ </Group>
48
+ );
49
+ }
50
+
51
+ const TextAreaGroupWithRef = React.forwardRef(
52
+ TextAreaGroup
53
+ ) as React.ComponentType<TextAreaGroupProps>;
54
+
55
+ export default TextAreaGroupWithRef;
@@ -0,0 +1,8 @@
1
+ import { ValidationError } from './ValidationError';
2
+
3
+ // TODO: this means that all template projects MUST have this API shape - thoughts?
4
+ /** The root result from a typical envoc API call when forms are returned */
5
+ export interface ValidatedApiResult {
6
+ validationFailures?: ValidationError[];
7
+ hasErrors?: boolean;
8
+ }
@@ -0,0 +1,6 @@
1
+ // TODO: this means that all template projects MUST have this API shape - thoughts?
2
+ /** Represents a server side validation failure - only 'standard' for envoc */
3
+ export interface ValidationError {
4
+ propertyName?: string;
5
+ errorMessage?: string;
6
+ }
@@ -0,0 +1,4 @@
1
+ /** Client side validation function */
2
+ export interface ValidationFunction<TValue> {
3
+ (value: TValue): string | undefined;
4
+ }
@@ -2,12 +2,12 @@ import { integer, length, maxLength, maxValue, minValue } from './validators';
2
2
 
3
3
  describe('integer validator', () => {
4
4
  it('accepts an integer', () => {
5
- const returned = integer(123);
5
+ const returned = integer('123');
6
6
  expect(returned).toBe(undefined);
7
7
  });
8
8
 
9
9
  it("doesn't accept a float", () => {
10
- const returned = integer(123.5569);
10
+ const returned = integer('123.5569');
11
11
  expect(returned).toBe('Must be a whole number');
12
12
  });
13
13
  });
@@ -65,8 +65,10 @@ describe('minValue validator', () => {
65
65
  describe('maxLength validator', () => {
66
66
  it('fails for invalid value', () => {
67
67
  const maxLength10 = maxLength(10);
68
- const tooLong = maxLength10('012345678910');
69
- expect(tooLong).toBe('Maximum length 10 exceeded');
68
+ const stringTooLong = maxLength10('012345678910');
69
+ const numberTooLong = maxLength10(1234567890123);
70
+ expect(stringTooLong).toBe('Maximum length 10 exceeded');
71
+ expect(numberTooLong).toBe('Maximum length 10 exceeded');
70
72
  });
71
73
 
72
74
  it('succeeds for valid value', () => {
@@ -0,0 +1,92 @@
1
+ import { ValidationFunction } from './ValidationFunction';
2
+
3
+ export const required = (value: any) =>
4
+ Array.isArray(value)
5
+ ? value.length > 0
6
+ ? undefined
7
+ : 'Required'
8
+ : value || value === false || value === 0
9
+ ? undefined
10
+ : 'Required';
11
+
12
+ //asserts that the value is a certain number of characters. numbers are coerced to a string
13
+ export const length = (len: number) => (value: string | number | undefined) => {
14
+ const hasError = getLengthOfValue(value) !== len;
15
+ return !hasError ? undefined : `Length must be ${len}`;
16
+ };
17
+
18
+ export const integer = (val: string | number | undefined) => {
19
+ if (!val) {
20
+ return undefined;
21
+ }
22
+ if (!Number.isInteger(typeof val === 'number' ? val : parseFloat(val))) {
23
+ return 'Must be a whole number';
24
+ }
25
+ };
26
+
27
+ export const maxLength =
28
+ (len: number) => (value: string | number | undefined) => {
29
+ const hasError = getLengthOfValue(value) > len;
30
+ return !hasError ? undefined : `Maximum length ${len} exceeded`;
31
+ };
32
+
33
+ export const maxCount =
34
+ (count: number) => (value: { isDeleted?: boolean }[] | undefined) => {
35
+ const hasError =
36
+ !!value && value.filter((x) => !x.isDeleted).length > count;
37
+ return !hasError ? undefined : `Should not have more than ${count}`;
38
+ };
39
+
40
+ export const minCount =
41
+ (count: number) => (value: { isDeleted?: boolean }[] | undefined) => {
42
+ const hasError = !value || value.filter((x) => !x.isDeleted).length < count;
43
+ return !hasError ? undefined : `Should have at least ${count}`;
44
+ };
45
+
46
+ export const maxValue = (max: number) => (value: number | undefined) => {
47
+ const hasError = !!value && value > max;
48
+ return !hasError ? undefined : `Maximum value ${max} exceeded`;
49
+ };
50
+
51
+ export const minValue = (min: number) => (value: number | undefined) => {
52
+ const hasError = !value || value < min;
53
+ return !hasError ? undefined : `Minimum value ${min} not met`;
54
+ };
55
+
56
+ export const zipCode = (value: string | undefined) => {
57
+ return value && !/^[0-9]{5}(?:-[0-9]{4})?$/.test(value)
58
+ ? 'Invalid ZIP Code'
59
+ : undefined;
60
+ };
61
+
62
+ //one of the validators provided must be true
63
+ export const any =
64
+ <TValue>(validatorList: ValidationFunction<TValue>[]) =>
65
+ (value: TValue) => {
66
+ if (validatorList.length === 0 || !value) {
67
+ return;
68
+ }
69
+
70
+ return validatorList.reduce(
71
+ (isAnyTrue, x) => (isAnyTrue ? isAnyTrue : x(value)),
72
+ undefined as string | undefined
73
+ );
74
+ };
75
+
76
+ function getLengthOfValue(value: string | number | undefined) {
77
+ switch (typeof value) {
78
+ case 'undefined':
79
+ return 0;
80
+ case 'string':
81
+ return value.length;
82
+ case 'number':
83
+ // TODO: this seems iffy to me - what if the actual visible value is a fixed length or some special format (e.g. with commas?)
84
+ return value.toString().length;
85
+ default:
86
+ assertUnreachable(value);
87
+ return 0;
88
+ }
89
+ }
90
+ function assertUnreachable(x: never) {
91
+ return null;
92
+ }