envoc-form 5.0.3 → 5.0.4-0

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 (323) hide show
  1. package/README.md +4650 -1250
  2. package/dist/index.cjs +21523 -0
  3. package/dist/index.d.ts +575 -0
  4. package/dist/index.js +21456 -0
  5. package/package.json +107 -111
  6. package/dist/css/envoc-form-styles.css +0 -3
  7. package/dist/css/envoc-form-styles.css.map +0 -1
  8. package/es/AddressInput/AddressInput.d.ts +0 -24
  9. package/es/AddressInput/AddressInput.js +0 -20
  10. package/es/AddressInput/UsStates.d.ts +0 -3
  11. package/es/AddressInput/UsStates.js +0 -53
  12. package/es/ConfirmBaseForm/ConfirmBaseForm.d.ts +0 -26
  13. package/es/ConfirmBaseForm/ConfirmBaseForm.js +0 -42
  14. package/es/ConfirmDeleteForm/ConfirmDeleteForm.d.ts +0 -24
  15. package/es/ConfirmDeleteForm/ConfirmDeleteForm.js +0 -60
  16. package/es/DatePicker/DatePickerGroup.d.ts +0 -13
  17. package/es/DatePicker/DatePickerGroup.js +0 -87
  18. package/es/DatePicker/DatePickerHelper.d.ts +0 -3
  19. package/es/DatePicker/DatePickerHelper.js +0 -1
  20. package/es/DatePicker/StringDateOnlyPickerGroup.d.ts +0 -9
  21. package/es/DatePicker/StringDateOnlyPickerGroup.js +0 -29
  22. package/es/DatePicker/StringDatePickerGroup.d.ts +0 -9
  23. package/es/DatePicker/StringDatePickerGroup.js +0 -24
  24. package/es/Field/CustomFieldInputProps.d.ts +0 -7
  25. package/es/Field/CustomFieldInputProps.js +0 -1
  26. package/es/Field/CustomFieldMetaProps.d.ts +0 -4
  27. package/es/Field/CustomFieldMetaProps.js +0 -1
  28. package/es/Field/Field.d.ts +0 -28
  29. package/es/Field/Field.js +0 -51
  30. package/es/Field/FieldErrorScrollTarget.d.ts +0 -2
  31. package/es/Field/FieldErrorScrollTarget.js +0 -12
  32. package/es/Field/FieldNameContext.d.ts +0 -3
  33. package/es/Field/FieldNameContext.js +0 -3
  34. package/es/Field/FieldSection.d.ts +0 -7
  35. package/es/Field/FieldSection.js +0 -9
  36. package/es/Field/InjectedFieldProps.d.ts +0 -7
  37. package/es/Field/InjectedFieldProps.js +0 -1
  38. package/es/Field/StandAloneInput.d.ts +0 -13
  39. package/es/Field/StandAloneInput.js +0 -50
  40. package/es/Field/useStandardField.d.ts +0 -21
  41. package/es/Field/useStandardField.js +0 -92
  42. package/es/FieldArray/FieldArray.d.ts +0 -24
  43. package/es/FieldArray/FieldArray.js +0 -77
  44. package/es/File/FileGroup.d.ts +0 -10
  45. package/es/File/FileGroup.js +0 -53
  46. package/es/File/FileList.d.ts +0 -5
  47. package/es/File/FileList.js +0 -10
  48. package/es/File/humanFileSize.d.ts +0 -1
  49. package/es/File/humanFileSize.js +0 -6
  50. package/es/Form/FocusError.d.ts +0 -7
  51. package/es/Form/FocusError.js +0 -42
  52. package/es/Form/Form.d.ts +0 -33
  53. package/es/Form/Form.js +0 -141
  54. package/es/Form/FormBasedPreventNavigation.d.ts +0 -6
  55. package/es/Form/FormBasedPreventNavigation.js +0 -20
  56. package/es/Form/LegacyFormBasedPreventNavigation.d.ts +0 -17
  57. package/es/Form/LegacyFormBasedPreventNavigation.js +0 -69
  58. package/es/Form/NewFormBasedPreventNavigation.d.ts +0 -14
  59. package/es/Form/NewFormBasedPreventNavigation.js +0 -39
  60. package/es/Form/ServerErrorContext.d.ts +0 -11
  61. package/es/Form/ServerErrorContext.js +0 -9
  62. package/es/FormActions.d.ts +0 -12
  63. package/es/FormActions.js +0 -16
  64. package/es/FormDefaults.d.ts +0 -4
  65. package/es/FormDefaults.js +0 -2
  66. package/es/Group.d.ts +0 -16
  67. package/es/Group.js +0 -14
  68. package/es/Input/IconInputGroup.d.ts +0 -12
  69. package/es/Input/IconInputGroup.js +0 -43
  70. package/es/Input/InputGroup.d.ts +0 -12
  71. package/es/Input/InputGroup.js +0 -34
  72. package/es/Input/MoneyInputGroup.d.ts +0 -9
  73. package/es/Input/MoneyInputGroup.js +0 -43
  74. package/es/Input/NumberInputGroup.d.ts +0 -9
  75. package/es/Input/NumberInputGroup.js +0 -43
  76. package/es/Input/PhoneNumberInputGroup.d.ts +0 -10
  77. package/es/Input/PhoneNumberInputGroup.js +0 -47
  78. package/es/Input/StringInputGroup.d.ts +0 -8
  79. package/es/Input/StringInputGroup.js +0 -43
  80. package/es/Normalization/NormalizationFunction.d.ts +0 -4
  81. package/es/Normalization/NormalizationFunction.js +0 -1
  82. package/es/Normalization/normalizers.d.ts +0 -4
  83. package/es/Normalization/normalizers.js +0 -32
  84. package/es/Select/BooleanSelectGroup.d.ts +0 -7
  85. package/es/Select/BooleanSelectGroup.js +0 -28
  86. package/es/Select/NumberSelectGroup.d.ts +0 -9
  87. package/es/Select/NumberSelectGroup.js +0 -21
  88. package/es/Select/SelectGroup.d.ts +0 -27
  89. package/es/Select/SelectGroup.js +0 -65
  90. package/es/Select/SelectGroupPropsHelper.d.ts +0 -3
  91. package/es/Select/SelectGroupPropsHelper.js +0 -1
  92. package/es/Select/StringSelectGroup.d.ts +0 -9
  93. package/es/Select/StringSelectGroup.js +0 -21
  94. package/es/StandardFormActions.d.ts +0 -11
  95. package/es/StandardFormActions.js +0 -14
  96. package/es/SubmitFormButton.d.ts +0 -10
  97. package/es/SubmitFormButton.js +0 -40
  98. package/es/TextArea/TextAreaGroup.d.ts +0 -9
  99. package/es/TextArea/TextAreaGroup.js +0 -35
  100. package/es/Validation/ValidatedApiResult.d.ts +0 -6
  101. package/es/Validation/ValidatedApiResult.js +0 -1
  102. package/es/Validation/ValidationError.d.ts +0 -5
  103. package/es/Validation/ValidationError.js +0 -1
  104. package/es/Validation/ValidationFunction.d.ts +0 -4
  105. package/es/Validation/ValidationFunction.js +0 -1
  106. package/es/Validation/validators.d.ts +0 -18
  107. package/es/Validation/validators.js +0 -77
  108. package/es/index.d.ts +0 -75
  109. package/es/index.js +0 -51
  110. package/es/setupTests.d.ts +0 -1
  111. package/es/setupTests.js +0 -1
  112. package/es/utils/objectContainsNonSerializableProperty.d.ts +0 -1
  113. package/es/utils/objectContainsNonSerializableProperty.js +0 -14
  114. package/es/utils/objectToFormData.d.ts +0 -10
  115. package/es/utils/objectToFormData.js +0 -77
  116. package/es/utils/typeChecks.d.ts +0 -8
  117. package/es/utils/typeChecks.js +0 -18
  118. package/lib/AddressInput/AddressInput.d.ts +0 -24
  119. package/lib/AddressInput/AddressInput.js +0 -26
  120. package/lib/AddressInput/UsStates.d.ts +0 -3
  121. package/lib/AddressInput/UsStates.js +0 -55
  122. package/lib/ConfirmBaseForm/ConfirmBaseForm.d.ts +0 -26
  123. package/lib/ConfirmBaseForm/ConfirmBaseForm.js +0 -48
  124. package/lib/ConfirmDeleteForm/ConfirmDeleteForm.d.ts +0 -24
  125. package/lib/ConfirmDeleteForm/ConfirmDeleteForm.js +0 -66
  126. package/lib/DatePicker/DatePickerGroup.d.ts +0 -13
  127. package/lib/DatePicker/DatePickerGroup.js +0 -95
  128. package/lib/DatePicker/DatePickerHelper.d.ts +0 -3
  129. package/lib/DatePicker/DatePickerHelper.js +0 -2
  130. package/lib/DatePicker/StringDateOnlyPickerGroup.d.ts +0 -9
  131. package/lib/DatePicker/StringDateOnlyPickerGroup.js +0 -35
  132. package/lib/DatePicker/StringDatePickerGroup.d.ts +0 -9
  133. package/lib/DatePicker/StringDatePickerGroup.js +0 -30
  134. package/lib/Field/CustomFieldInputProps.d.ts +0 -7
  135. package/lib/Field/CustomFieldInputProps.js +0 -2
  136. package/lib/Field/CustomFieldMetaProps.d.ts +0 -4
  137. package/lib/Field/CustomFieldMetaProps.js +0 -2
  138. package/lib/Field/Field.d.ts +0 -28
  139. package/lib/Field/Field.js +0 -56
  140. package/lib/Field/FieldErrorScrollTarget.d.ts +0 -2
  141. package/lib/Field/FieldErrorScrollTarget.js +0 -15
  142. package/lib/Field/FieldNameContext.d.ts +0 -3
  143. package/lib/Field/FieldNameContext.js +0 -9
  144. package/lib/Field/FieldSection.d.ts +0 -7
  145. package/lib/Field/FieldSection.js +0 -12
  146. package/lib/Field/InjectedFieldProps.d.ts +0 -7
  147. package/lib/Field/InjectedFieldProps.js +0 -2
  148. package/lib/Field/StandAloneInput.d.ts +0 -13
  149. package/lib/Field/StandAloneInput.js +0 -76
  150. package/lib/Field/useStandardField.d.ts +0 -21
  151. package/lib/Field/useStandardField.js +0 -95
  152. package/lib/FieldArray/FieldArray.d.ts +0 -24
  153. package/lib/FieldArray/FieldArray.js +0 -83
  154. package/lib/File/FileGroup.d.ts +0 -10
  155. package/lib/File/FileGroup.js +0 -58
  156. package/lib/File/FileList.d.ts +0 -5
  157. package/lib/File/FileList.js +0 -13
  158. package/lib/File/humanFileSize.d.ts +0 -1
  159. package/lib/File/humanFileSize.js +0 -10
  160. package/lib/Form/FocusError.d.ts +0 -7
  161. package/lib/Form/FocusError.js +0 -48
  162. package/lib/Form/Form.d.ts +0 -33
  163. package/lib/Form/Form.js +0 -147
  164. package/lib/Form/FormBasedPreventNavigation.d.ts +0 -6
  165. package/lib/Form/FormBasedPreventNavigation.js +0 -26
  166. package/lib/Form/LegacyFormBasedPreventNavigation.d.ts +0 -17
  167. package/lib/Form/LegacyFormBasedPreventNavigation.js +0 -72
  168. package/lib/Form/NewFormBasedPreventNavigation.d.ts +0 -14
  169. package/lib/Form/NewFormBasedPreventNavigation.js +0 -42
  170. package/lib/Form/ServerErrorContext.d.ts +0 -11
  171. package/lib/Form/ServerErrorContext.js +0 -15
  172. package/lib/FormActions.d.ts +0 -12
  173. package/lib/FormActions.js +0 -22
  174. package/lib/FormDefaults.d.ts +0 -4
  175. package/lib/FormDefaults.js +0 -5
  176. package/lib/Group.d.ts +0 -16
  177. package/lib/Group.js +0 -20
  178. package/lib/Input/IconInputGroup.d.ts +0 -12
  179. package/lib/Input/IconInputGroup.js +0 -48
  180. package/lib/Input/InputGroup.d.ts +0 -12
  181. package/lib/Input/InputGroup.js +0 -39
  182. package/lib/Input/MoneyInputGroup.d.ts +0 -9
  183. package/lib/Input/MoneyInputGroup.js +0 -48
  184. package/lib/Input/NumberInputGroup.d.ts +0 -9
  185. package/lib/Input/NumberInputGroup.js +0 -48
  186. package/lib/Input/PhoneNumberInputGroup.d.ts +0 -10
  187. package/lib/Input/PhoneNumberInputGroup.js +0 -52
  188. package/lib/Input/StringInputGroup.d.ts +0 -8
  189. package/lib/Input/StringInputGroup.js +0 -48
  190. package/lib/Normalization/NormalizationFunction.d.ts +0 -4
  191. package/lib/Normalization/NormalizationFunction.js +0 -2
  192. package/lib/Normalization/normalizers.d.ts +0 -4
  193. package/lib/Normalization/normalizers.js +0 -37
  194. package/lib/Select/BooleanSelectGroup.d.ts +0 -7
  195. package/lib/Select/BooleanSelectGroup.js +0 -35
  196. package/lib/Select/NumberSelectGroup.d.ts +0 -9
  197. package/lib/Select/NumberSelectGroup.js +0 -29
  198. package/lib/Select/SelectGroup.d.ts +0 -27
  199. package/lib/Select/SelectGroup.js +0 -71
  200. package/lib/Select/SelectGroupPropsHelper.d.ts +0 -3
  201. package/lib/Select/SelectGroupPropsHelper.js +0 -2
  202. package/lib/Select/StringSelectGroup.d.ts +0 -9
  203. package/lib/Select/StringSelectGroup.js +0 -29
  204. package/lib/StandardFormActions.d.ts +0 -11
  205. package/lib/StandardFormActions.js +0 -20
  206. package/lib/SubmitFormButton.d.ts +0 -10
  207. package/lib/SubmitFormButton.js +0 -45
  208. package/lib/TextArea/TextAreaGroup.d.ts +0 -9
  209. package/lib/TextArea/TextAreaGroup.js +0 -40
  210. package/lib/Validation/ValidatedApiResult.d.ts +0 -6
  211. package/lib/Validation/ValidatedApiResult.js +0 -2
  212. package/lib/Validation/ValidationError.d.ts +0 -5
  213. package/lib/Validation/ValidationError.js +0 -2
  214. package/lib/Validation/ValidationFunction.d.ts +0 -4
  215. package/lib/Validation/ValidationFunction.js +0 -2
  216. package/lib/Validation/validators.d.ts +0 -18
  217. package/lib/Validation/validators.js +0 -90
  218. package/lib/index.d.ts +0 -75
  219. package/lib/index.js +0 -119
  220. package/lib/setupTests.d.ts +0 -1
  221. package/lib/setupTests.js +0 -3
  222. package/lib/utils/objectContainsNonSerializableProperty.d.ts +0 -1
  223. package/lib/utils/objectContainsNonSerializableProperty.js +0 -17
  224. package/lib/utils/objectToFormData.d.ts +0 -10
  225. package/lib/utils/objectToFormData.js +0 -79
  226. package/lib/utils/typeChecks.d.ts +0 -8
  227. package/lib/utils/typeChecks.js +0 -29
  228. package/src/AddressInput/AddressInput.test.tsx +0 -27
  229. package/src/AddressInput/AddressInput.tsx +0 -82
  230. package/src/AddressInput/UsStates.ts +0 -55
  231. package/src/AddressInput/__snapshots__/AddressInput.test.tsx.snap +0 -182
  232. package/src/ConfirmBaseForm/ConfirmBaseForm.test.tsx +0 -24
  233. package/src/ConfirmBaseForm/ConfirmBaseForm.tsx +0 -74
  234. package/src/ConfirmBaseForm/__snapshots__/ConfirmBaseForm.test.tsx.snap +0 -23
  235. package/src/ConfirmDeleteForm/ConfirmDeleteForm.test.tsx +0 -24
  236. package/src/ConfirmDeleteForm/ConfirmDeleteForm.tsx +0 -87
  237. package/src/ConfirmDeleteForm/__snapshots__/ConfirmDeleteForm.test.tsx.snap +0 -25
  238. package/src/DatePicker/DatePicker.test.tsx +0 -48
  239. package/src/DatePicker/DatePickerGroup.tsx +0 -115
  240. package/src/DatePicker/DatePickerHelper.ts +0 -4
  241. package/src/DatePicker/StringDateOnlyPickerGroup.tsx +0 -28
  242. package/src/DatePicker/StringDatePickerGroup.tsx +0 -20
  243. package/src/DatePicker/__snapshots__/DatePicker.test.tsx.snap +0 -152
  244. package/src/Field/CustomFieldInputProps.ts +0 -10
  245. package/src/Field/CustomFieldMetaProps.ts +0 -5
  246. package/src/Field/Field.tsx +0 -113
  247. package/src/Field/FieldErrorScrollTarget.tsx +0 -12
  248. package/src/Field/FieldNameContext.ts +0 -6
  249. package/src/Field/FieldSection.tsx +0 -18
  250. package/src/Field/InjectedFieldProps.ts +0 -8
  251. package/src/Field/StandAloneInput.tsx +0 -55
  252. package/src/Field/useStandardField.ts +0 -125
  253. package/src/FieldArray/FieldArray.tsx +0 -154
  254. package/src/File/FileGroup.test.tsx +0 -35
  255. package/src/File/FileGroup.tsx +0 -85
  256. package/src/File/FileList.tsx +0 -21
  257. package/src/File/__snapshots__/FileGroup.test.tsx.snap +0 -34
  258. package/src/File/humanFileSize.ts +0 -8
  259. package/src/Form/FocusError.tsx +0 -55
  260. package/src/Form/Form.test.tsx +0 -14
  261. package/src/Form/Form.tsx +0 -237
  262. package/src/Form/FormBasedPreventNavigation.tsx +0 -56
  263. package/src/Form/LegacyFormBasedPreventNavigation.tsx +0 -77
  264. package/src/Form/NewFormBasedPreventNavigation.tsx +0 -59
  265. package/src/Form/ServerErrorContext.ts +0 -18
  266. package/src/Form/__snapshots__/Form.test.tsx.snap +0 -10
  267. package/src/FormActions.tsx +0 -47
  268. package/src/FormDefaults.ts +0 -2
  269. package/src/Group.tsx +0 -62
  270. package/src/Input/IconInputGroup.tsx +0 -54
  271. package/src/Input/InputGroup.tsx +0 -72
  272. package/src/Input/MoneyInputGroup.tsx +0 -50
  273. package/src/Input/NumberInputGroup.tsx +0 -48
  274. package/src/Input/PhoneNumberInputGroup.tsx +0 -45
  275. package/src/Input/StringInputGroup.tsx +0 -53
  276. package/src/Input/__Tests__/IconInputGroup.test.tsx +0 -35
  277. package/src/Input/__Tests__/MoneyInputGroup.test.tsx +0 -37
  278. package/src/Input/__Tests__/NumberInputGroup.test.tsx +0 -35
  279. package/src/Input/__Tests__/PhoneNumberInputGroup.test.tsx +0 -36
  280. package/src/Input/__Tests__/StringInputGroup.test.tsx +0 -27
  281. package/src/Input/__Tests__/__snapshots__/IconInputGroup.test.tsx.snap +0 -32
  282. package/src/Input/__Tests__/__snapshots__/MoneyInputGroup.test.tsx.snap +0 -34
  283. package/src/Input/__Tests__/__snapshots__/NumberInputGroup.test.tsx.snap +0 -32
  284. package/src/Input/__Tests__/__snapshots__/PhoneNumberInputGroup.test.tsx.snap +0 -33
  285. package/src/Input/__Tests__/__snapshots__/StringInputGroup.test.tsx.snap +0 -31
  286. package/src/Normalization/NormalizationFunction.ts +0 -4
  287. package/src/Normalization/normalizers.ts +0 -44
  288. package/src/Select/BooleanSelectGroup.tsx +0 -28
  289. package/src/Select/NumberSelectGroup.tsx +0 -16
  290. package/src/Select/SelectGroup.tsx +0 -124
  291. package/src/Select/SelectGroupPropsHelper.ts +0 -4
  292. package/src/Select/StringSelectGroup.tsx +0 -16
  293. package/src/Select/__tests__/BooleanSelectGroup.test.tsx +0 -35
  294. package/src/Select/__tests__/NumberSelectGroup.test.tsx +0 -87
  295. package/src/Select/__tests__/StringSelectGroup.test.tsx +0 -89
  296. package/src/Select/__tests__/__snapshots__/BooleanSelectGroup.test.tsx.snap +0 -98
  297. package/src/Select/__tests__/__snapshots__/NumberSelectGroup.test.tsx.snap +0 -195
  298. package/src/Select/__tests__/__snapshots__/StringSelectGroup.test.tsx.snap +0 -195
  299. package/src/StandardFormActions.tsx +0 -41
  300. package/src/SubmitFormButton.tsx +0 -54
  301. package/src/TextArea/TextAreaGroup.tsx +0 -64
  302. package/src/Validation/ValidatedApiResult.ts +0 -8
  303. package/src/Validation/ValidationError.ts +0 -6
  304. package/src/Validation/ValidationFunction.ts +0 -4
  305. package/src/Validation/validators.test.tsx +0 -81
  306. package/src/Validation/validators.ts +0 -97
  307. package/src/__Tests__/FormTestBase.tsx +0 -64
  308. package/src/__Tests__/RealisticForm.test.tsx +0 -82
  309. package/src/__Tests__/StandardFormActions.test.tsx +0 -17
  310. package/src/__Tests__/SubmitFormButton.test.tsx +0 -17
  311. package/src/__Tests__/__snapshots__/StandardFormActions.test.tsx.snap +0 -27
  312. package/src/__Tests__/__snapshots__/SubmitFormButton.test.tsx.snap +0 -20
  313. package/src/__Tests__/index.ts +0 -3
  314. package/src/_variables.scss +0 -11
  315. package/src/index.ts +0 -153
  316. package/src/react-app-env.d.ts +0 -1
  317. package/src/setupTests.ts +0 -1
  318. package/src/styles.scss +0 -0
  319. package/src/utils/objectContainsNonSerializableProperty.test.tsx +0 -49
  320. package/src/utils/objectContainsNonSerializableProperty.ts +0 -17
  321. package/src/utils/objectToFormData.test.tsx +0 -76
  322. package/src/utils/objectToFormData.ts +0 -105
  323. package/src/utils/typeChecks.ts +0 -18
@@ -1,44 +0,0 @@
1
- /** Normalizer for converting a string into a valid phone number. */
2
- export const phoneNumber = (value: string | undefined | null) => {
3
- if (!value) {
4
- return undefined;
5
- }
6
-
7
- const onlyNums = value.replace(/[^\d]/g, '');
8
- if (onlyNums.length <= 3) {
9
- return onlyNums;
10
- }
11
- if (onlyNums.length <= 7) {
12
- return `${onlyNums.slice(0, 3)}-${onlyNums.slice(3)}`;
13
- }
14
- if (onlyNums.length <= 10) {
15
- return `${onlyNums.slice(0, 3)}-${onlyNums.slice(3, 6)}-${onlyNums.slice(
16
- 6,
17
- 10
18
- )}`;
19
- }
20
- if (onlyNums.length <= 13) {
21
- const countryCodeLength = onlyNums.length - 10;
22
- return `+${onlyNums.slice(0, countryCodeLength)} ${onlyNums.slice(
23
- countryCodeLength,
24
- 3 + countryCodeLength
25
- )}-${onlyNums.slice(
26
- 3 + countryCodeLength,
27
- 6 + countryCodeLength
28
- )}-${onlyNums.slice(6 + countryCodeLength, onlyNums.length)}`;
29
- }
30
-
31
- return onlyNums;
32
- };
33
-
34
- /** Normalizer for converting a string into a valid zip code. Allows for XXXXX and XXXXX-XXXX format. */
35
- export const zipCode = (value: string | undefined | null) => {
36
- if (!value) {
37
- return undefined;
38
- }
39
- const onlyNums = value.replace(/[^\d]/g, '');
40
- if (onlyNums.length > 5) {
41
- return onlyNums.substring(0, 5) + '-' + onlyNums.substring(5, 9);
42
- }
43
- return onlyNums;
44
- };
@@ -1,28 +0,0 @@
1
- import SelectGroup, { SelectOption } from './SelectGroup';
2
- import { SelectGroupPropsHelper } from './SelectGroupPropsHelper';
3
-
4
- const booleanOptions: SelectOption<boolean>[] = [
5
- {
6
- label: 'Yes',
7
- value: true,
8
- },
9
- {
10
- label: 'No',
11
- value: false,
12
- },
13
- ];
14
-
15
- export interface BooleanSelectGroupProps
16
- extends Omit<SelectGroupPropsHelper<boolean | undefined | null>, 'options'> {
17
- options?: SelectOption<boolean>[];
18
- }
19
- /** A `<SelectGroup/>` dropdown with two options. Default options are 'Yes' and 'No' with values of `true` and `false`. */
20
- export function BooleanSelectGroup(props: BooleanSelectGroupProps) {
21
- return (
22
- <SelectGroup
23
- multiple={false}
24
- {...props}
25
- options={props.options ?? booleanOptions}
26
- />
27
- );
28
- }
@@ -1,16 +0,0 @@
1
- import SelectGroup from './SelectGroup';
2
- import { SelectGroupPropsHelper } from './SelectGroupPropsHelper';
3
-
4
- export interface MultiNumberSelectGroupProps
5
- extends SelectGroupPropsHelper<number[] | undefined | null> {}
6
- /** A `<SelectGroup/>` dropdown with values as numbers. Many options can be selected at a time. */
7
- export function MultiNumberSelectGroup(props: MultiNumberSelectGroupProps) {
8
- return <SelectGroup multiple={true} {...props} />;
9
- }
10
-
11
- export interface SingleNumberSelectGroupProps
12
- extends SelectGroupPropsHelper<number | undefined | null> {}
13
- /** A `<SelectGroup/>` dropdown with values as numbers. Only one option can be selected at a time. */
14
- export function SingleNumberSelectGroup(props: SingleNumberSelectGroupProps) {
15
- return <SelectGroup multiple={false} {...props} />;
16
- }
@@ -1,124 +0,0 @@
1
- import { default as ReactSelect } from 'react-select';
2
- import classNames from 'classnames';
3
- import { InjectedFieldProps } from '../Field/InjectedFieldProps';
4
- import { FormDefaults } from '../FormDefaults';
5
- import Group, { GroupProps } from '../Group';
6
-
7
- export interface SelectOption<TValue> {
8
- /** Value for the select. This will be sent to the API. */
9
- value: (TValue extends Array<infer P> ? P : TValue) | undefined;
10
- /** Label for the select. This is displayed to the user. */
11
- label: string;
12
- }
13
-
14
- // types roughly like the useService (envoc-core) result
15
- interface OptionsApiResult<TValue> {
16
- // we must apply Partial here because all results from template code gen are optional
17
- result?: Partial<SelectOption<TValue>>[];
18
- }
19
-
20
- interface OptionsUseServiceResult<TValue> {
21
- loading?: boolean;
22
- // we must apply Partial here because all results from template code gen are optional
23
- resp?: Partial<SelectOption<TValue>>[] | OptionsApiResult<TValue> | null;
24
- error?: any;
25
- }
26
-
27
- export interface SelectGroupProps<TValue>
28
- extends InjectedFieldProps<TValue | undefined | null>,
29
- Omit<GroupProps, 'input' | 'meta' | 'children'> {
30
- // allows for "useService" or other handles to control the data - including cache
31
- // TODO: do we still want a version of select that has a "url" or maybe a promise func or something?
32
- // eventually we can just add the shape of, say, useQuery (TanStack) to the union type
33
- /** Options for the dropdown. Includes the label and value. */
34
- options: SelectOption<TValue>[] | OptionsUseServiceResult<TValue>;
35
- /** Whether the user should be able to have multiple values selected. */
36
- multiple: TValue extends Array<any> ? true : false;
37
- /** Text diplayed when no value is selected. */
38
- placeholder?: string;
39
- }
40
-
41
- // TODO: we could also name this "ReactSelectGroup" or similar but the types are strongly defined now so kept the names consistent
42
- /** Generic select dropdown. Uses [react-select](https://react-select.com/home). */
43
- export default function SelectGroup<TValue>({
44
- input,
45
- meta,
46
- className,
47
- required,
48
- disabled,
49
- options,
50
- multiple,
51
- placeholder,
52
- ...rest
53
- }: SelectGroupProps<TValue>) {
54
- const effectiveOptions: Partial<SelectOption<TValue>>[] = !options
55
- ? []
56
- : Array.isArray(options)
57
- ? options
58
- : 'resp' in options &&
59
- !!options.resp &&
60
- 'result' in options.resp &&
61
- !!options.resp.result
62
- ? options.resp.result
63
- : 'resp' in options && !!options.resp && Array.isArray(options.resp)
64
- ? options.resp
65
- : [];
66
-
67
- const isLoading =
68
- (options && 'loading' in options && options.loading) || false;
69
-
70
- return (
71
- <Group
72
- {...rest}
73
- input={input}
74
- meta={meta}
75
- required={required}
76
- disabled={disabled}
77
- className={classNames(
78
- className,
79
- {
80
- [FormDefaults.cssClassPrefix + 'multiple']: multiple,
81
- [FormDefaults.cssClassPrefix + 'loading']: isLoading,
82
- },
83
- FormDefaults.cssClassPrefix + 'select-group'
84
- )}>
85
- <ReactSelect<
86
- Partial<SelectOption<TValue>>,
87
- TValue extends Array<any> ? true : false
88
- >
89
- inputId={input.id}
90
- isMulti={multiple}
91
- isDisabled={disabled}
92
- options={effectiveOptions}
93
- onBlur={input.onBlur}
94
- value={getValue()}
95
- onChange={(e: any) => {
96
- if (multiple === true) {
97
- input.onChange(e?.map((x: any) => x.value));
98
- } else {
99
- input.onChange(e?.value as any);
100
- }
101
- }}
102
- getOptionLabel={(option) => option?.label ?? ''}
103
- className={classNames(
104
- className,
105
- FormDefaults.cssClassPrefix + 'select-group'
106
- )}
107
- classNamePrefix="react-select"
108
- menuPortalTarget={document.body}
109
- menuPlacement="auto"
110
- placeholder={placeholder}
111
- />
112
- </Group>
113
- );
114
-
115
- function getValue() {
116
- if (multiple) {
117
- return effectiveOptions.filter(
118
- (o) =>
119
- Array.isArray(input.value) && !!input.value.find((x) => o.value === x)
120
- );
121
- }
122
- return effectiveOptions.find((o) => o.value === input.value);
123
- }
124
- }
@@ -1,4 +0,0 @@
1
- import { SelectGroupProps } from './SelectGroup';
2
-
3
- export interface SelectGroupPropsHelper<T>
4
- extends Omit<SelectGroupProps<T>, 'multiple'> {}
@@ -1,16 +0,0 @@
1
- import SelectGroup from './SelectGroup';
2
- import { SelectGroupPropsHelper } from './SelectGroupPropsHelper';
3
-
4
- export interface MultiStringSelectGroupProps
5
- extends SelectGroupPropsHelper<string[]> {}
6
- /** A `<SelectGroup/>` dropdown with values as strings. Multiple options can be selected at a time. */
7
- export function MultiStringSelectGroup(props: MultiStringSelectGroupProps) {
8
- return <SelectGroup multiple={true} {...props} />;
9
- }
10
-
11
- export interface SingleStringSelectGroupProps
12
- extends SelectGroupPropsHelper<string> {}
13
- /** A `<SelectGroup/>` dropdown with the value as a string. Only one option can be selected at a time. */
14
- export function SingleStringSelectGroup(props: SingleStringSelectGroupProps) {
15
- return <SelectGroup multiple={false} {...props} />;
16
- }
@@ -1,35 +0,0 @@
1
- import React from 'react';
2
- import { render } from '@testing-library/react';
3
- import FormTestBase from '../../__Tests__/FormTestBase';
4
- import { BooleanSelectGroup } from '../BooleanSelectGroup';
5
-
6
- describe('BooleanSelectGroup', () => {
7
- it('renders without crashing', () => {
8
- render(
9
- <FormTestBase>
10
- {({ Field }) => (
11
- <Field
12
- name="allowLogin"
13
- Component={BooleanSelectGroup}
14
- label="Allow Login"
15
- />
16
- )}
17
- </FormTestBase>
18
- );
19
- });
20
-
21
- it('has matching snapshot', () => {
22
- const renderResult = render(
23
- <FormTestBase>
24
- {({ Field }) => (
25
- <Field
26
- name="allowLogin"
27
- Component={BooleanSelectGroup}
28
- label="Allow Login"
29
- />
30
- )}
31
- </FormTestBase>
32
- );
33
- expect(renderResult.asFragment()).toMatchSnapshot();
34
- });
35
- });
@@ -1,87 +0,0 @@
1
- import React from 'react';
2
- import { render } from '@testing-library/react';
3
- import FormTestBase from '../../__Tests__/FormTestBase';
4
- import {
5
- MultiNumberSelectGroup,
6
- SingleNumberSelectGroup,
7
- } from '../NumberSelectGroup';
8
-
9
- describe('SingleNumberSelectGroup', () => {
10
- it('renders without crashing', () => {
11
- render(
12
- <FormTestBase>
13
- {({ Field }) => (
14
- <Field
15
- name="favoriteNumber"
16
- Component={SingleNumberSelectGroup}
17
- label="Favorite Number"
18
- options={[
19
- { label: 'I like one', value: 1 },
20
- { label: 'Occasionally two', value: 2 },
21
- { label: 'Forever three', value: 3 },
22
- ]}
23
- />
24
- )}
25
- </FormTestBase>
26
- );
27
- });
28
-
29
- it('has matching snapshot', () => {
30
- const renderResult = render(
31
- <FormTestBase>
32
- {({ Field }) => (
33
- <Field
34
- name="favoriteNumber"
35
- Component={SingleNumberSelectGroup}
36
- label="Favorite Number"
37
- options={[
38
- { label: 'I like one', value: 1 },
39
- { label: 'Occasionally two', value: 2 },
40
- { label: 'Forever three', value: 3 },
41
- ]}
42
- />
43
- )}
44
- </FormTestBase>
45
- );
46
- expect(renderResult.asFragment()).toMatchSnapshot();
47
- });
48
- });
49
-
50
- describe('MultiNumberSelectGroup', () => {
51
- it('renders without crashing', () => {
52
- render(
53
- <FormTestBase>
54
- {({ Field }) => (
55
- <Field
56
- name="userRoles"
57
- Component={MultiNumberSelectGroup}
58
- label="Favorite Number"
59
- options={[
60
- { label: 'Tyrannosaurus Rex', value: 1 },
61
- { label: 'Stegosaurus', value: 2 },
62
- ]}
63
- />
64
- )}
65
- </FormTestBase>
66
- );
67
- });
68
-
69
- it('has matching snapshot', () => {
70
- const renderResult = render(
71
- <FormTestBase>
72
- {({ Field }) => (
73
- <Field
74
- name="userRoles"
75
- Component={MultiNumberSelectGroup}
76
- label="Favorite Number"
77
- options={[
78
- { label: 'Tyrannosaurus Rex', value: 1 },
79
- { label: 'Stegosaurus', value: 2 },
80
- ]}
81
- />
82
- )}
83
- </FormTestBase>
84
- );
85
- expect(renderResult.asFragment()).toMatchSnapshot();
86
- });
87
- });
@@ -1,89 +0,0 @@
1
- import React from 'react';
2
- import { render } from '@testing-library/react';
3
- import FormTestBase from '../../__Tests__/FormTestBase';
4
- import {
5
- MultiStringSelectGroup,
6
- SingleStringSelectGroup,
7
- } from '../StringSelectGroup';
8
-
9
- describe('SingleStringSelectGroup', () => {
10
- it('renders without crashing', () => {
11
- render(
12
- <FormTestBase>
13
- {({ Field }) => (
14
- <Field
15
- name="favoriteColor"
16
- Component={SingleStringSelectGroup}
17
- label="Favorite Color"
18
- options={[
19
- { label: 'Blue', value: 'Blue' },
20
- { label: 'Green', value: 'Green' },
21
- { label: 'Red', value: 'Red' },
22
- ]}
23
- />
24
- )}
25
- </FormTestBase>
26
- );
27
- });
28
-
29
- it('has matching snapshot', () => {
30
- const renderResult = render(
31
- <FormTestBase>
32
- {({ Field }) => (
33
- <Field
34
- name="favoriteColor"
35
- Component={SingleStringSelectGroup}
36
- label="Favorite Color"
37
- options={[
38
- { label: 'Blue', value: 'Blue' },
39
- { label: 'Green', value: 'Green' },
40
- { label: 'Red', value: 'Red' },
41
- ]}
42
- />
43
- )}
44
- </FormTestBase>
45
- );
46
- expect(renderResult.asFragment()).toMatchSnapshot();
47
- });
48
- });
49
-
50
- describe('MultiStringSelectGroup', () => {
51
- it('renders without crashing', () => {
52
- render(
53
- <FormTestBase>
54
- {({ Field }) => (
55
- <Field
56
- name="favoriteColors"
57
- Component={MultiStringSelectGroup}
58
- label="Favorite Color"
59
- options={[
60
- { label: 'Blue', value: 'Blue' },
61
- { label: 'Green', value: 'Green' },
62
- { label: 'Red', value: 'Red' },
63
- ]}
64
- />
65
- )}
66
- </FormTestBase>
67
- );
68
- });
69
-
70
- it('has matching snapshot', () => {
71
- const renderResult = render(
72
- <FormTestBase>
73
- {({ Field }) => (
74
- <Field
75
- name="favoriteColors"
76
- Component={MultiStringSelectGroup}
77
- label="Favorite Color"
78
- options={[
79
- { label: 'Blue', value: 'Blue' },
80
- { label: 'Green', value: 'Green' },
81
- { label: 'Red', value: 'Red' },
82
- ]}
83
- />
84
- )}
85
- </FormTestBase>
86
- );
87
- expect(renderResult.asFragment()).toMatchSnapshot();
88
- });
89
- });
@@ -1,98 +0,0 @@
1
- // Jest Snapshot v1, https://goo.gl/fbAQLP
2
-
3
- exports[`BooleanSelectGroup has matching snapshot 1`] = `
4
- <DocumentFragment>
5
- <form
6
- action="#"
7
- class="envoc-form-form"
8
- >
9
- <div
10
- class="envoc-form-select-group envoc-form-group"
11
- >
12
- <div
13
- id="allowlogin-error-scroll-target"
14
- style="display: none;"
15
- />
16
- <label
17
- for="allowLogin"
18
- >
19
- Allow Login
20
- </label>
21
- <div
22
- class="envoc-form-select-group css-b62m3t-container"
23
- >
24
- <span
25
- class="css-1f43avz-a11yText-A11yText"
26
- id="react-select-3-live-region"
27
- />
28
- <span
29
- aria-atomic="false"
30
- aria-live="polite"
31
- aria-relevant="additions text"
32
- class="css-1f43avz-a11yText-A11yText"
33
- />
34
- <div
35
- class="react-select__control css-13cymwt-control"
36
- >
37
- <div
38
- class="react-select__value-container css-16674sh-Component"
39
- >
40
- <div
41
- class="react-select__placeholder css-1jqq78o-placeholder"
42
- id="react-select-3-placeholder"
43
- >
44
- Select...
45
- </div>
46
- <div
47
- class="react-select__input-container css-d9r47t-Component"
48
- data-value=""
49
- >
50
- <input
51
- aria-autocomplete="list"
52
- aria-describedby="react-select-3-placeholder"
53
- aria-expanded="false"
54
- aria-haspopup="true"
55
- autocapitalize="none"
56
- autocomplete="off"
57
- autocorrect="off"
58
- class="react-select__input"
59
- id="allowLogin"
60
- role="combobox"
61
- spellcheck="false"
62
- style="opacity: 1; width: 100%; grid-area: 1 / 2; min-width: 2px; border: 0px; margin: 0px; outline: 0; padding: 0px;"
63
- tabindex="0"
64
- type="text"
65
- value=""
66
- />
67
- </div>
68
- </div>
69
- <div
70
- class="react-select__indicators css-ny0e4k-Component"
71
- >
72
- <span
73
- class="react-select__indicator-separator css-1u9des2-indicatorSeparator"
74
- />
75
- <div
76
- aria-hidden="true"
77
- class="react-select__indicator react-select__dropdown-indicator css-1xc3v61-indicatorContainer"
78
- >
79
- <svg
80
- aria-hidden="true"
81
- class="css-tj5bde-Svg"
82
- focusable="false"
83
- height="20"
84
- viewBox="0 0 20 20"
85
- width="20"
86
- >
87
- <path
88
- 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"
89
- />
90
- </svg>
91
- </div>
92
- </div>
93
- </div>
94
- </div>
95
- </div>
96
- </form>
97
- </DocumentFragment>
98
- `;