@digigov/form 0.6.8 → 0.7.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 (298) hide show
  1. package/CHANGELOG.md +26 -1
  2. package/Field/FieldBase.js +110 -0
  3. package/Field/{ConditionalField.js → FieldConditional.js} +9 -29
  4. package/Field/FieldContainer.js +62 -0
  5. package/Field/index.js +11 -251
  6. package/Field/types.js +5 -0
  7. package/Field/utils.js +146 -0
  8. package/Fieldset/FieldsetWithContext.js +63 -0
  9. package/Fieldset/index.js +5 -64
  10. package/Fieldset/types.js +5 -0
  11. package/FormBuilder.js +178 -0
  12. package/FormContext.js +14 -0
  13. package/Questions/Questions.js +105 -0
  14. package/Questions/QuestionsContext.js +20 -0
  15. package/Questions/Step/ReviewStep.js +11 -7
  16. package/Questions/Step/Step.js +93 -0
  17. package/Questions/Step/StepArrayReview.js +79 -0
  18. package/Questions/Step/StepContext.js +37 -0
  19. package/Questions/Step/StepDescription.js +2 -2
  20. package/Questions/Step/StepForm.js +10 -6
  21. package/Questions/Step/StepTitle.js +2 -2
  22. package/Questions/Step/getAddMoreFields.js +31 -0
  23. package/Questions/Step/index.js +81 -200
  24. package/Questions/Step/types.js +5 -0
  25. package/Questions/__snapshots__/index.spec.tsx.snap +461 -2499
  26. package/Questions/getNextStep.js +30 -0
  27. package/Questions/index.js +4 -150
  28. package/Questions/types.js +5 -0
  29. package/es/Field/FieldBase.js +93 -0
  30. package/es/Field/{ConditionalField.js → FieldConditional.js} +5 -28
  31. package/es/Field/FieldContainer.js +40 -0
  32. package/es/Field/index.js +8 -233
  33. package/es/Field/types.js +1 -0
  34. package/es/Field/utils.js +122 -0
  35. package/es/Fieldset/FieldsetWithContext.js +41 -0
  36. package/es/Fieldset/index.js +4 -52
  37. package/es/Fieldset/types.js +1 -0
  38. package/es/FormBuilder.js +148 -0
  39. package/es/FormContext.js +5 -0
  40. package/es/Questions/Questions.js +84 -0
  41. package/es/Questions/QuestionsContext.js +11 -0
  42. package/es/Questions/Step/ReviewStep.js +5 -3
  43. package/es/Questions/Step/Step.js +69 -0
  44. package/es/Questions/Step/StepArrayReview.js +50 -0
  45. package/es/Questions/Step/StepContext.js +27 -0
  46. package/es/Questions/Step/StepDescription.js +1 -1
  47. package/es/Questions/Step/StepForm.js +4 -2
  48. package/es/Questions/Step/StepTitle.js +1 -1
  49. package/es/Questions/Step/getAddMoreFields.js +22 -0
  50. package/es/Questions/Step/index.js +13 -165
  51. package/es/Questions/Step/types.js +1 -0
  52. package/es/Questions/__snapshots__/index.spec.tsx.snap +461 -2499
  53. package/es/Questions/getNextStep.js +23 -0
  54. package/es/Questions/index.js +2 -119
  55. package/es/Questions/index.spec.js +2 -1
  56. package/es/Questions/types.js +1 -0
  57. package/es/index.js +2 -153
  58. package/es/inputs/index.js +5 -4
  59. package/es/internal.js +31 -0
  60. package/es/types.js +1 -0
  61. package/es/utils.js +5 -3
  62. package/es/validators/index.js +155 -0
  63. package/es/validators/types.js +1 -0
  64. package/es/validators/utils/afm.js +35 -0
  65. package/es/validators/utils/file.js +52 -0
  66. package/es/validators/utils/iban.js +123 -0
  67. package/es/validators/utils/index.js +105 -0
  68. package/es/validators/utils/phone.js +122 -0
  69. package/es/validators/utils/postal_code.js +29 -0
  70. package/es/validators/utils/uuid4.js +20 -0
  71. package/{esm → es/validators}/validators.spec.js +1 -1
  72. package/esm/Field/FieldBase.js +93 -0
  73. package/esm/Field/{ConditionalField.js → FieldConditional.js} +5 -28
  74. package/esm/Field/FieldContainer.js +40 -0
  75. package/esm/Field/index.js +8 -233
  76. package/esm/Field/types.js +1 -0
  77. package/esm/Field/utils.js +122 -0
  78. package/esm/Fieldset/FieldsetWithContext.js +41 -0
  79. package/esm/Fieldset/index.js +4 -52
  80. package/esm/Fieldset/types.js +1 -0
  81. package/esm/FormBuilder.js +148 -0
  82. package/esm/FormContext.js +5 -0
  83. package/esm/Questions/Questions.js +84 -0
  84. package/esm/Questions/QuestionsContext.js +11 -0
  85. package/esm/Questions/Step/ReviewStep.js +5 -3
  86. package/esm/Questions/Step/Step.js +69 -0
  87. package/esm/Questions/Step/StepArrayReview.js +50 -0
  88. package/esm/Questions/Step/StepContext.js +27 -0
  89. package/esm/Questions/Step/StepDescription.js +1 -1
  90. package/esm/Questions/Step/StepForm.js +4 -2
  91. package/esm/Questions/Step/StepTitle.js +1 -1
  92. package/esm/Questions/Step/getAddMoreFields.js +22 -0
  93. package/esm/Questions/Step/index.js +13 -165
  94. package/esm/Questions/Step/types.js +1 -0
  95. package/esm/Questions/__snapshots__/index.spec.tsx.snap +461 -2499
  96. package/esm/Questions/getNextStep.js +23 -0
  97. package/esm/Questions/index.js +2 -119
  98. package/esm/Questions/index.spec.js +2 -1
  99. package/esm/Questions/types.js +1 -0
  100. package/esm/index.js +3 -154
  101. package/esm/inputs/index.js +5 -4
  102. package/esm/internal.js +31 -0
  103. package/esm/types.js +1 -0
  104. package/esm/utils.js +5 -3
  105. package/esm/validators/index.js +155 -0
  106. package/esm/validators/types.js +1 -0
  107. package/esm/validators/utils/afm.js +35 -0
  108. package/esm/validators/utils/file.js +52 -0
  109. package/esm/validators/utils/iban.js +123 -0
  110. package/esm/validators/utils/index.js +105 -0
  111. package/esm/validators/utils/phone.js +122 -0
  112. package/esm/validators/utils/postal_code.js +29 -0
  113. package/esm/validators/utils/uuid4.js +20 -0
  114. package/{es → esm/validators}/validators.spec.js +1 -1
  115. package/index.js +8 -191
  116. package/inputs/index.js +13 -5
  117. package/internal.js +356 -0
  118. package/libs/form/src/Field/FieldBase.d.ts +3 -0
  119. package/libs/form/src/Field/FieldConditional.d.ts +4 -0
  120. package/libs/form/src/Field/FieldContainer.d.ts +4 -0
  121. package/libs/form/src/Field/index.d.ts +1 -62
  122. package/libs/form/src/Field/types.d.ts +75 -0
  123. package/libs/form/src/Field/utils.d.ts +5 -0
  124. package/libs/form/src/Fieldset/FieldsetWithContext.d.ts +4 -0
  125. package/libs/form/src/Fieldset/index.d.ts +2 -12
  126. package/libs/form/src/Fieldset/types.d.ts +6 -0
  127. package/libs/form/src/FormBuilder.d.ts +5 -0
  128. package/libs/form/src/FormContext.d.ts +3 -0
  129. package/libs/form/src/Questions/Questions.d.ts +8 -0
  130. package/libs/form/src/Questions/QuestionsContext.d.ts +3 -0
  131. package/libs/form/src/Questions/Step/ReviewStep.d.ts +1 -0
  132. package/libs/form/src/Questions/Step/Step.d.ts +9 -0
  133. package/libs/form/src/Questions/Step/StepArrayReview.d.ts +4 -0
  134. package/libs/form/src/Questions/Step/StepContext.d.ts +4 -0
  135. package/libs/form/src/Questions/Step/StepForm.d.ts +2 -1
  136. package/libs/form/src/Questions/Step/getAddMoreFields.d.ts +3 -0
  137. package/libs/form/src/Questions/Step/index.d.ts +12 -47
  138. package/libs/form/src/Questions/Step/types.d.ts +31 -0
  139. package/libs/form/src/Questions/getNextStep.d.ts +2 -0
  140. package/libs/form/src/Questions/index.d.ts +1 -28
  141. package/libs/form/src/Questions/types.d.ts +19 -0
  142. package/libs/form/src/index.d.ts +2 -73
  143. package/libs/form/src/inputs/Checkboxes/index.d.ts +1 -1
  144. package/libs/form/src/inputs/DateInput/index.d.ts +1 -1
  145. package/libs/form/src/inputs/FileInput/index.d.ts +1 -1
  146. package/libs/form/src/inputs/Input/index.d.ts +1 -1
  147. package/libs/form/src/inputs/Label/index.d.ts +2 -1
  148. package/libs/form/src/inputs/Radio/index.d.ts +1 -1
  149. package/libs/form/src/inputs/Select/index.d.ts +1 -1
  150. package/libs/form/src/inputs/index.d.ts +4 -3
  151. package/libs/form/src/internal.d.ts +31 -0
  152. package/libs/form/src/types.d.ts +70 -0
  153. package/libs/form/src/validators/index.d.ts +8 -0
  154. package/libs/form/src/validators/types.d.ts +2 -0
  155. package/libs/form/src/validators/utils/afm.d.ts +6 -0
  156. package/libs/form/src/validators/utils/file.d.ts +1 -0
  157. package/libs/form/src/validators/utils/iban.d.ts +2 -0
  158. package/libs/form/src/validators/utils/index.d.ts +12 -0
  159. package/libs/form/src/validators/utils/phone.d.ts +9 -0
  160. package/libs/form/src/validators/utils/postal_code.d.ts +2 -0
  161. package/libs/form/src/validators/utils/uuid4.d.ts +6 -0
  162. package/libs/form/src/{validators.spec.d.ts → validators/validators.spec.d.ts} +0 -0
  163. package/libs/ui/src/core/Accordion/index.d.ts +3 -3
  164. package/libs/ui/src/core/BackLink/index.d.ts +3 -0
  165. package/libs/ui/src/core/Blockquote/index.d.ts +1 -1
  166. package/libs/ui/src/core/Breadcrumbs/index.d.ts +2 -0
  167. package/libs/ui/src/core/Button/BackButton.d.ts +1 -1
  168. package/libs/ui/src/core/Button/ButtonLink.d.ts +1 -1
  169. package/libs/ui/src/core/Button/index.d.ts +1 -1
  170. package/libs/ui/src/core/Confirmation/index.d.ts +5 -0
  171. package/libs/ui/src/core/Divider/index.d.ts +1 -1
  172. package/libs/ui/src/core/NavList/NavList.d.ts +1 -14
  173. package/libs/ui/src/core/NavList/NavListBase.d.ts +4 -0
  174. package/libs/ui/src/core/NavList/NavListItem.d.ts +2 -1
  175. package/libs/ui/src/core/NavList/NavListItemBase.d.ts +2 -1
  176. package/libs/ui/src/core/NavList/NavListSubMenu.d.ts +1 -1
  177. package/libs/ui/src/core/NavList/types.d.ts +14 -0
  178. package/libs/ui/src/core/NotificationBanner/index.d.ts +1 -1
  179. package/libs/ui/src/core/PhaseBanner/index.d.ts +6 -0
  180. package/libs/ui/src/core/Table/TableFloatingScroll.d.ts +3 -0
  181. package/libs/ui/src/core/Table/index.d.ts +1 -0
  182. package/libs/ui/src/core/TextArea/index.d.ts +3 -0
  183. package/libs/ui/src/core/TextInput/index.d.ts +3 -0
  184. package/libs/ui/src/core/VisuallyHidden/index.d.ts +2 -0
  185. package/libs/ui/src/core/index.d.ts +8 -2
  186. package/libs/ui/src/hooks/useTogglableSections.d.ts +3 -2
  187. package/libs/ui/src/layouts/Grid/index.d.ts +4 -0
  188. package/libs/ui/src/locales/el.d.ts +1 -0
  189. package/libs/ui/src/typography/{Caption.d.ts → Caption/index.d.ts} +1 -1
  190. package/libs/ui/src/typography/{NormalText.d.ts → NormalText/index.d.ts} +0 -0
  191. package/libs/ui/src/typography/{Paragraph.d.ts → Paragraph/index.d.ts} +0 -0
  192. package/libs/ui/src/typography/{Title.d.ts → Title/index.d.ts} +0 -0
  193. package/libs-ui/react-core/src/Accordion/index.d.ts +1 -1
  194. package/libs-ui/react-core/src/AccordionControls/index.d.ts +1 -1
  195. package/libs-ui/react-core/src/AccordionSection/index.d.ts +1 -1
  196. package/libs-ui/react-core/src/AccordionSectionContent/index.d.ts +1 -1
  197. package/libs-ui/react-core/src/AccordionSectionHeader/index.d.ts +1 -1
  198. package/libs-ui/react-core/src/AccordionSectionSummary/index.d.ts +2 -1
  199. package/libs-ui/react-core/src/AccordionSectionSummaryHeading/index.d.ts +1 -1
  200. package/libs-ui/react-core/src/BackLink/index.d.ts +1 -1
  201. package/libs-ui/react-core/src/Blockquote/index.d.ts +1 -1
  202. package/libs-ui/react-core/src/Breadcrumbs/index.d.ts +1 -1
  203. package/libs-ui/react-core/src/BreadcrumbsList/index.d.ts +1 -1
  204. package/libs-ui/react-core/src/BreadcrumbsListItem/index.d.ts +1 -1
  205. package/libs-ui/react-core/src/Button/index.d.ts +1 -1
  206. package/libs-ui/react-core/src/ButtonGroup/index.d.ts +1 -1
  207. package/libs-ui/react-core/src/ButtonLink/index.d.ts +1 -1
  208. package/libs-ui/react-core/src/CallToAction/index.d.ts +1 -1
  209. package/libs-ui/react-core/src/Card/index.d.ts +1 -1
  210. package/libs-ui/react-core/src/CardAction/index.d.ts +1 -1
  211. package/libs-ui/react-core/src/CardHeading/index.d.ts +1 -1
  212. package/libs-ui/react-core/src/CardText/index.d.ts +1 -1
  213. package/libs-ui/react-core/src/Checkbox/index.d.ts +1 -1
  214. package/libs-ui/react-core/src/CheckboxItem/index.d.ts +1 -1
  215. package/libs-ui/react-core/src/Confirmation/index.d.ts +9 -0
  216. package/libs-ui/react-core/src/ConfirmationBody/index.d.ts +9 -0
  217. package/libs-ui/react-core/src/ConfirmationTitle/index.d.ts +9 -0
  218. package/libs-ui/react-core/src/DateInput/index.d.ts +1 -1
  219. package/libs-ui/react-core/src/DateInputItem/index.d.ts +1 -1
  220. package/libs-ui/react-core/src/Details/index.d.ts +1 -1
  221. package/libs-ui/react-core/src/DetailsContent/index.d.ts +1 -1
  222. package/libs-ui/react-core/src/DetailsSummary/index.d.ts +1 -1
  223. package/libs-ui/react-core/src/ErrorMessage/index.d.ts +1 -1
  224. package/libs-ui/react-core/src/ErrorSummary/index.d.ts +1 -1
  225. package/libs-ui/react-core/src/Field/index.d.ts +3 -3
  226. package/libs-ui/react-core/src/Fieldset/index.d.ts +1 -1
  227. package/libs-ui/react-core/src/FieldsetLegend/index.d.ts +1 -1
  228. package/libs-ui/react-core/src/FileUpload/index.d.ts +1 -1
  229. package/libs-ui/react-core/src/Form/index.d.ts +11 -0
  230. package/libs-ui/react-core/src/Grid/index.d.ts +20 -0
  231. package/libs-ui/react-core/src/Heading/index.d.ts +1 -1
  232. package/libs-ui/react-core/src/HeadingCaption/index.d.ts +1 -1
  233. package/libs-ui/react-core/src/Hidden/index.d.ts +1 -1
  234. package/libs-ui/react-core/src/Hint/index.d.ts +1 -1
  235. package/libs-ui/react-core/src/Label/index.d.ts +1 -1
  236. package/libs-ui/react-core/src/LabelTitle/index.d.ts +1 -1
  237. package/libs-ui/react-core/src/Link/index.d.ts +1 -1
  238. package/libs-ui/react-core/src/List/index.d.ts +1 -1
  239. package/libs-ui/react-core/src/ListItem/index.d.ts +1 -1
  240. package/libs-ui/react-core/src/NormalText/index.d.ts +1 -1
  241. package/libs-ui/react-core/src/NotificationBanner/index.d.ts +1 -1
  242. package/libs-ui/react-core/src/NotificationBannerContent/index.d.ts +1 -1
  243. package/libs-ui/react-core/src/NotificationBannerHeader/index.d.ts +1 -1
  244. package/libs-ui/react-core/src/NotificationBannerHeading/index.d.ts +1 -1
  245. package/libs-ui/react-core/src/NotificationBannerLink/index.d.ts +1 -1
  246. package/libs-ui/react-core/src/Paragraph/index.d.ts +1 -1
  247. package/libs-ui/react-core/src/PhaseBanner/index.d.ts +1 -1
  248. package/libs-ui/react-core/src/PhaseBannerHeaderContainer/index.d.ts +8 -0
  249. package/libs-ui/react-core/src/PhaseBannerTag/index.d.ts +1 -1
  250. package/libs-ui/react-core/src/PhaseBannerText/index.d.ts +1 -1
  251. package/libs-ui/react-core/src/Radio/index.d.ts +5 -1
  252. package/libs-ui/react-core/src/RadioItem/index.d.ts +1 -1
  253. package/libs-ui/react-core/src/SectionBreak/index.d.ts +1 -1
  254. package/libs-ui/react-core/src/Select/index.d.ts +1 -1
  255. package/libs-ui/react-core/src/SelectOption/index.d.ts +1 -1
  256. package/libs-ui/react-core/src/SummaryList/index.d.ts +7 -1
  257. package/libs-ui/react-core/src/SummaryListItem/index.d.ts +1 -1
  258. package/libs-ui/react-core/src/SummaryListItemAction/index.d.ts +1 -1
  259. package/libs-ui/react-core/src/SummaryListItemKey/index.d.ts +1 -1
  260. package/libs-ui/react-core/src/SummaryListItemValue/index.d.ts +1 -1
  261. package/libs-ui/react-core/src/SvgIcon/index.d.ts +1 -1
  262. package/libs-ui/react-core/src/Table/index.d.ts +1 -1
  263. package/libs-ui/react-core/src/TableBody/index.d.ts +1 -1
  264. package/libs-ui/react-core/src/TableCaption/index.d.ts +1 -1
  265. package/libs-ui/react-core/src/TableContainer/index.d.ts +1 -1
  266. package/libs-ui/react-core/src/TableDataCell/index.d.ts +1 -1
  267. package/libs-ui/react-core/src/TableHead/index.d.ts +1 -1
  268. package/libs-ui/react-core/src/TableHeadCell/index.d.ts +1 -1
  269. package/libs-ui/react-core/src/TableNoDataRow/index.d.ts +1 -1
  270. package/libs-ui/react-core/src/TableRow/index.d.ts +1 -1
  271. package/libs-ui/react-core/src/Tabs/index.d.ts +1 -1
  272. package/libs-ui/react-core/src/TabsHeading/index.d.ts +1 -1
  273. package/libs-ui/react-core/src/TabsList/index.d.ts +1 -1
  274. package/libs-ui/react-core/src/TabsListItem/index.d.ts +1 -1
  275. package/libs-ui/react-core/src/TabsPanel/index.d.ts +1 -1
  276. package/libs-ui/react-core/src/TextArea/index.d.ts +1 -1
  277. package/libs-ui/react-core/src/TextInput/index.d.ts +1 -1
  278. package/libs-ui/react-core/src/VisuallyHidden/index.d.ts +1 -1
  279. package/libs-ui/react-core/src/WarningText/index.d.ts +1 -1
  280. package/package.json +3 -4
  281. package/types.js +5 -0
  282. package/utils.js +6 -4
  283. package/validators/index.js +181 -0
  284. package/validators/types.js +5 -0
  285. package/validators/utils/afm.js +45 -0
  286. package/validators/utils/file.js +62 -0
  287. package/validators/utils/iban.js +134 -0
  288. package/validators/utils/index.js +210 -0
  289. package/validators/utils/phone.js +144 -0
  290. package/validators/utils/postal_code.js +40 -0
  291. package/validators/utils/uuid4.js +30 -0
  292. package/validators/validators.spec.js +88 -0
  293. package/es/validators.js +0 -626
  294. package/esm/validators.js +0 -626
  295. package/libs/form/src/Field/ConditionalField.d.ts +0 -17
  296. package/libs/form/src/validators.d.ts +0 -14
  297. package/validators.js +0 -662
  298. package/validators.spec.js +0 -88
@@ -0,0 +1,123 @@
1
+ export function validateIban(value, countryCode) {
2
+ value = value.replace(/\s/g, '').replace(/-/g, '');
3
+
4
+ if (value.match(/^[0-9]*$/i)) {
5
+ // this is for greek iban without the country code
6
+ if (value.length !== 25) {
7
+ return false;
8
+ }
9
+ } else {
10
+ value = value.toUpperCase();
11
+
12
+ if (countryCode) {
13
+ if (!value.startsWith(countryCode.toUpperCase())) {
14
+ return false;
15
+ }
16
+
17
+ if (value.length === ibanCountryCodesLengths[countryCode.toUpperCase()]) {
18
+ return true;
19
+ }
20
+ }
21
+
22
+ if (value.length !== 27) {
23
+ // this is for greek iban
24
+ return false;
25
+ }
26
+ }
27
+
28
+ return true;
29
+ }
30
+ export var IBAN_VALIDATOR = function IBAN_VALIDATOR(field) {
31
+ var _field$extra;
32
+
33
+ var countryCode = field === null || field === void 0 ? void 0 : (_field$extra = field.extra) === null || _field$extra === void 0 ? void 0 : _field$extra.country;
34
+ return {
35
+ name: 'iban-validator',
36
+ message: 'form.error.iban',
37
+ test: function test(value) {
38
+ if (!value) {
39
+ return true;
40
+ }
41
+
42
+ return validateIban(value, countryCode);
43
+ }
44
+ };
45
+ };
46
+ var ibanCountryCodesLengths = {
47
+ AD: 24,
48
+ AT: 20,
49
+ AZ: 28,
50
+ BH: 22,
51
+ BY: 28,
52
+ BE: 16,
53
+ BA: 20,
54
+ BR: 29,
55
+ BG: 22,
56
+ CR: 22,
57
+ HR: 21,
58
+ CY: 28,
59
+ CZ: 24,
60
+ DK: 18,
61
+ DO: 28,
62
+ EG: 29,
63
+ SV: 28,
64
+ EE: 20,
65
+ FO: 18,
66
+ FI: 18,
67
+ FR: 27,
68
+ GE: 22,
69
+ DE: 22,
70
+ GI: 23,
71
+ GR: 27,
72
+ GL: 18,
73
+ GT: 28,
74
+ VA: 22,
75
+ HU: 28,
76
+ IS: 26,
77
+ IQ: 23,
78
+ IE: 22,
79
+ IL: 23,
80
+ IT: 27,
81
+ JO: 30,
82
+ KZ: 20,
83
+ XK: 20,
84
+ KW: 30,
85
+ LV: 21,
86
+ LB: 28,
87
+ LI: 21,
88
+ LT: 20,
89
+ LU: 20,
90
+ MT: 31,
91
+ MR: 27,
92
+ MU: 30,
93
+ MD: 24,
94
+ MC: 27,
95
+ ME: 22,
96
+ NL: 18,
97
+ MK: 19,
98
+ NO: 15,
99
+ PK: 24,
100
+ PS: 29,
101
+ PL: 28,
102
+ PT: 25,
103
+ QA: 29,
104
+ RO: 24,
105
+ LC: 32,
106
+ SM: 27,
107
+ ST: 25,
108
+ SA: 24,
109
+ RS: 22,
110
+ SC: 31,
111
+ SK: 24,
112
+ SI: 19,
113
+ ES: 24,
114
+ SE: 24,
115
+ CH: 21,
116
+ TL: 23,
117
+ TN: 24,
118
+ TR: 26,
119
+ UA: 29,
120
+ AE: 23,
121
+ GB: 22,
122
+ VG: 24
123
+ };
@@ -0,0 +1,105 @@
1
+ import _extends from "@babel/runtime/helpers/extends";
2
+ import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
3
+ import * as yup from 'yup';
4
+ export * from '@digigov/form/validators/utils/afm';
5
+ export * from '@digigov/form/validators/utils/file';
6
+ export * from '@digigov/form/validators/utils/iban';
7
+ export * from '@digigov/form/validators/utils/phone';
8
+ export * from '@digigov/form/validators/utils/postal_code';
9
+ export * from '@digigov/form/validators/utils/uuid4';
10
+ export function getYupField(field, yupTypeMap) {
11
+ var yupField = yupTypeMap[field.type] || yupTypeMap.string;
12
+ return yupField(field);
13
+ }
14
+ export function computeShape(fields, yupTypeMap, validatorRegistry) {
15
+ var fieldSchemas = {};
16
+ var objectFields = {};
17
+ fields.forEach(function (field) {
18
+ if (field.key.includes('.')) {
19
+ var _field$key$split = field.key.split(/\.(.+)/),
20
+ _field$key$split2 = _slicedToArray(_field$key$split, 2),
21
+ objectKey = _field$key$split2[0],
22
+ fieldKey = _field$key$split2[1];
23
+
24
+ if (!objectFields[objectKey]) {
25
+ objectFields[objectKey] = [];
26
+ }
27
+
28
+ objectFields[objectKey].push(_extends({}, field, {
29
+ key: fieldKey
30
+ }));
31
+ return;
32
+ }
33
+
34
+ var yupField = getYupField(field, yupTypeMap);
35
+
36
+ if (field.condition) {
37
+ for (var key in field.condition) {
38
+ var then = void 0,
39
+ otherwise = void 0;
40
+
41
+ if (field.condition[key].then) {
42
+ var _field$condition$key$, _field$condition$key$2;
43
+
44
+ if (((_field$condition$key$ = field.condition[key].then) === null || _field$condition$key$ === void 0 ? void 0 : _field$condition$key$.required) === false) {
45
+ then = yupField;
46
+ } else if (((_field$condition$key$2 = field.condition[key].then) === null || _field$condition$key$2 === void 0 ? void 0 : _field$condition$key$2.required) === true) {
47
+ then = yupField.required('form.error.required');
48
+ }
49
+ }
50
+
51
+ if (field.condition[key]["else"]) {
52
+ var _field$condition$key$3, _field$condition$key$4;
53
+
54
+ if (((_field$condition$key$3 = field.condition[key]["else"]) === null || _field$condition$key$3 === void 0 ? void 0 : _field$condition$key$3.required) === false) {
55
+ otherwise = yupField;
56
+ } else if (((_field$condition$key$4 = field.condition[key]["else"]) === null || _field$condition$key$4 === void 0 ? void 0 : _field$condition$key$4.required) === true) {
57
+ otherwise = yupField.required('form.error.required');
58
+ }
59
+ }
60
+
61
+ if (then || otherwise) {
62
+ yupField = yupField.when(key, {
63
+ is: field.condition[key].is,
64
+ then: then,
65
+ otherwise: otherwise
66
+ });
67
+ }
68
+ }
69
+ } else if (field.required) {
70
+ yupField = yupField.required('form.error.required');
71
+ }
72
+
73
+ if (validatorRegistry && field.type && validatorRegistry[field.type]) {
74
+ validatorRegistry[field.type].forEach(function (validator) {
75
+ yupField = yupField.test(validator);
76
+ });
77
+ }
78
+
79
+ if (field.validators) {
80
+ field.validators.forEach(function (validator) {
81
+ yupField = yupField.test(validator);
82
+ });
83
+ }
84
+
85
+ fieldSchemas[field.key] = yupField;
86
+ });
87
+
88
+ for (var objectKey in objectFields) {
89
+ fieldSchemas[objectKey] = getYupObjectShape(objectFields[objectKey], yupTypeMap, validatorRegistry);
90
+ }
91
+
92
+ return fieldSchemas;
93
+ }
94
+ export function getYupObjectShape( // eslint-disable-next-line @typescript-eslint/no-explicit-any
95
+ fields, yupTypeMap, validatorRegistry) {
96
+ if (!fields.current) {
97
+ var fieldSchemas = computeShape(fields, yupTypeMap, validatorRegistry);
98
+ return yup.object().shape(fieldSchemas);
99
+ }
100
+
101
+ return yup.lazy(function () {
102
+ var fieldSchemas = computeShape(Object.values(fields.current), yupTypeMap, validatorRegistry);
103
+ return yup.object().shape(fieldSchemas);
104
+ });
105
+ }
@@ -0,0 +1,122 @@
1
+ import * as gPhoneNumber from 'google-libphonenumber';
2
+ export function validatePhoneNumber(phoneNumber) {
3
+ var countries = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : ['gr'];
4
+ var typeOfPhoneNumber = arguments.length > 2 ? arguments[2] : undefined;
5
+ var phoneUtil = gPhoneNumber.PhoneNumberUtil.getInstance();
6
+
7
+ if (!countries || countries.length === 0) {
8
+ return true;
9
+ }
10
+
11
+ return countries.some(function (country) {
12
+ try {
13
+ var phone = phoneUtil.parse(phoneNumber, country.toUpperCase());
14
+
15
+ if (phoneUtil.isValidNumber(phone)) {
16
+ if (typeOfPhoneNumber) {
17
+ if (matchTypeOfPhoneNumber(phone, typeOfPhoneNumber, phoneUtil)) {
18
+ return true;
19
+ } else {
20
+ return false;
21
+ }
22
+ } else {
23
+ return true;
24
+ }
25
+ }
26
+
27
+ return false;
28
+ } catch (error) {
29
+ console.error(error);
30
+ return false;
31
+ }
32
+ });
33
+ }
34
+ var phoneNumberTypes = {
35
+ 0: 'landline',
36
+ 1: 'mobile',
37
+ 2: 'landline_or_mobile'
38
+ };
39
+ export function matchTypeOfPhoneNumber(phone, type, phoneUtil) {
40
+ try {
41
+ var phoneNumberType = phoneUtil.getNumberType(phone);
42
+ var numberType = phoneNumberTypes[phoneNumberType];
43
+
44
+ if (numberType === 'landline_or_mobile' || numberType === type) {
45
+ return true;
46
+ } else {
47
+ return false;
48
+ }
49
+ } catch (error) {
50
+ console.error(error);
51
+ return false;
52
+ }
53
+ }
54
+
55
+ function validateMobile(value) {
56
+ var phoneUtil = gPhoneNumber.PhoneNumberUtil.getInstance();
57
+ var origValue = value; // probably catch all the cases with a regex instead of gphonenumber
58
+
59
+ if (!value.match(/^((\+|00){0,1}\d{1,3}[- ]?)?\d{10}$/)) {
60
+ return false;
61
+ }
62
+
63
+ try {
64
+ var phone;
65
+
66
+ try {
67
+ phone = phoneUtil.parse(value);
68
+ } catch (err) {
69
+ try {
70
+ value = '+' + value;
71
+ phone = phoneUtil.parse(value);
72
+ } catch (err) {
73
+ value = '+30' + origValue;
74
+ phone = phoneUtil.parse(value);
75
+ }
76
+ }
77
+
78
+ return phoneUtil.isValidNumber(phone);
79
+ } catch (err) {
80
+ console.error(err);
81
+ return false;
82
+ }
83
+ }
84
+
85
+ export var MOBILE_PHONE_VALIDATOR = {
86
+ name: 'mobile-phone-validator',
87
+ message: 'form.error.mobile_phone',
88
+ test: function test(value) {
89
+ if (value) {
90
+ return validateMobile(value);
91
+ }
92
+
93
+ return true;
94
+ }
95
+ };
96
+ export var PHONE_NUMBER_VALIDATOR = function PHONE_NUMBER_VALIDATOR(field) {
97
+ var _field$extra, _field$extra2;
98
+
99
+ var countryCode = field === null || field === void 0 ? void 0 : (_field$extra = field.extra) === null || _field$extra === void 0 ? void 0 : _field$extra.countries;
100
+ var typeOfPhone = field === null || field === void 0 ? void 0 : (_field$extra2 = field.extra) === null || _field$extra2 === void 0 ? void 0 : _field$extra2.phoneType;
101
+ return {
102
+ name: 'phone-number-validator',
103
+ message: function message() {
104
+ if (typeOfPhone === 'mobile') {
105
+ return 'form.error.mobile_phone';
106
+ }
107
+
108
+ if (typeOfPhone === 'landline') {
109
+ return 'form.error.landline';
110
+ } else {
111
+ return 'form.error.phone_number';
112
+ }
113
+ },
114
+ test: function test(value) {
115
+ if (!value) {
116
+ return true;
117
+ }
118
+
119
+ return validatePhoneNumber(value, countryCode, typeOfPhone);
120
+ }
121
+ };
122
+ };
@@ -0,0 +1,29 @@
1
+ var CODE_REGEX = /^[12345678][0-9]{4}$/;
2
+ export function validatePostalCode(number, countries) {
3
+ if (!countries) {
4
+ return false;
5
+ } else {
6
+ if (countries.length === 1 && countries[0].toUpperCase() === 'GR') {
7
+ // Greek postal code must be 5 digits long and shouldn't start with 0 or 9.
8
+ return CODE_REGEX.test(number);
9
+ } else {
10
+ return true;
11
+ }
12
+ }
13
+ }
14
+ export var POSTALCODE_VALIDATOR = function POSTALCODE_VALIDATOR(field) {
15
+ var _field$extra;
16
+
17
+ var countryCode = field === null || field === void 0 ? void 0 : (_field$extra = field.extra) === null || _field$extra === void 0 ? void 0 : _field$extra.countries;
18
+ return {
19
+ name: 'postal-code-validator',
20
+ message: 'form.error.postalCode',
21
+ test: function test(value) {
22
+ if (!value) {
23
+ return true;
24
+ }
25
+
26
+ return validatePostalCode(value, countryCode);
27
+ }
28
+ };
29
+ };
@@ -0,0 +1,20 @@
1
+ var UUID4_PATTERN = /^[0-9A-F]{8}-[0-9A-F]{4}-[4][0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i;
2
+ export function validateUUID4(uuid4) {
3
+ if (uuid4.length !== 36) {
4
+ // This uuid4 should be 36 characters long
5
+ return false;
6
+ }
7
+
8
+ return UUID4_PATTERN.test(uuid4);
9
+ }
10
+ export var UUID4_VALIDATOR = {
11
+ name: 'uuid4-validator',
12
+ message: 'form.error.uuid4',
13
+ test: function test(value) {
14
+ if (value) {
15
+ return validateUUID4(value);
16
+ }
17
+
18
+ return true;
19
+ }
20
+ };
@@ -1,4 +1,4 @@
1
- import { validateUUID4, validateIban, validatePostalCode, validatePhoneNumber } from '@digigov/form/validators';
1
+ import { validateUUID4, validateIban, validatePostalCode, validatePhoneNumber } from '@digigov/form/validators/utils';
2
2
  it('validates wrong uuid4 for empty value', function () {
3
3
  expect(validateUUID4('')).toBe(false);
4
4
  });
package/index.js CHANGED
@@ -2,210 +2,27 @@
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
4
 
5
- var _typeof = require("@babel/runtime/helpers/typeof");
6
-
7
5
  Object.defineProperty(exports, "__esModule", {
8
6
  value: true
9
7
  });
10
- var _exportNames = {
11
- FormContext: true,
12
- FormBase: true,
13
- FormBuilder: true
14
- };
15
- exports["default"] = exports.FormContext = exports.FormBuilder = exports.FormBase = void 0;
16
-
17
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
18
-
19
- var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
20
-
21
- var _extends4 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
22
-
23
- var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
24
-
25
- var _react = _interopRequireWildcard(require("react"));
26
-
27
- var _reactHookForm = require("react-hook-form");
28
-
29
- var _utils = require("@digigov/form/utils");
30
-
31
- var _Grid = _interopRequireDefault(require("@material-ui/core/Grid"));
8
+ var _exportNames = {};
9
+ exports["default"] = void 0;
32
10
 
33
- var _validators = require("@digigov/form/validators");
11
+ var _internal = require("@digigov/form/internal");
34
12
 
35
- var _Fieldset = _interopRequireWildcard(require("@digigov/form/Fieldset"));
36
-
37
- Object.keys(_Fieldset).forEach(function (key) {
13
+ Object.keys(_internal).forEach(function (key) {
38
14
  if (key === "default" || key === "__esModule") return;
39
15
  if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
40
- if (key in exports && exports[key] === _Fieldset[key]) return;
16
+ if (key in exports && exports[key] === _internal[key]) return;
41
17
  Object.defineProperty(exports, key, {
42
18
  enumerable: true,
43
19
  get: function get() {
44
- return _Fieldset[key];
20
+ return _internal[key];
45
21
  }
46
22
  });
47
23
  });
48
24
 
49
- var _Field = _interopRequireWildcard(require("@digigov/form/Field"));
50
-
51
- Object.keys(_Field).forEach(function (key) {
52
- if (key === "default" || key === "__esModule") return;
53
- if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
54
- if (key in exports && exports[key] === _Field[key]) return;
55
- Object.defineProperty(exports, key, {
56
- enumerable: true,
57
- get: function get() {
58
- return _Field[key];
59
- }
60
- });
61
- });
62
- var _excluded = ["onSubmit", "children", "registerField", "fieldsMap", "fieldsetsMap", "resolver", "mode", "initial", "reValidateMode", "shouldFocusError", "criteriaMode", "componentRegistry"],
63
- _excluded2 = ["fields", "fieldsets", "initial", "onSubmit", "children", "reValidateMode", "mode", "shouldFocusError", "criteriaMode", "auto", "validatorRegistry", "componentRegistry"];
64
-
65
- function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
66
-
67
- function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
68
-
69
- var FormContext = /*#__PURE__*/(0, _react.createContext)({
70
- fieldsMap: {},
71
- fieldsetsMap: {}
72
- });
73
- exports.FormContext = FormContext;
74
-
75
- var FormBase = /*#__PURE__*/_react["default"].forwardRef(function FormBase(_ref, ref) {
76
- var onSubmit = _ref.onSubmit,
77
- children = _ref.children,
78
- registerField = _ref.registerField,
79
- fieldsMap = _ref.fieldsMap,
80
- fieldsetsMap = _ref.fieldsetsMap,
81
- resolver = _ref.resolver,
82
- mode = _ref.mode,
83
- initial = _ref.initial,
84
- reValidateMode = _ref.reValidateMode,
85
- shouldFocusError = _ref.shouldFocusError,
86
- criteriaMode = _ref.criteriaMode,
87
- componentRegistry = _ref.componentRegistry,
88
- props = (0, _objectWithoutProperties2["default"])(_ref, _excluded);
89
- var form = (0, _reactHookForm.useForm)({
90
- resolver: resolver,
91
- mode: mode,
92
- defaultValues: initial,
93
- reValidateMode: reValidateMode,
94
- shouldFocusError: shouldFocusError,
95
- criteriaMode: criteriaMode
96
- });
97
- var handleSubmit = (0, _react.useCallback)(function (data) {
98
- var errors = onSubmit && onSubmit(data);
99
-
100
- if (errors) {
101
- for (var key in errors) {
102
- form.setError(key, errors[key]);
103
- }
104
- }
105
- }, [onSubmit]);
106
- var ctx = {
107
- fieldsMap: fieldsMap,
108
- fieldsetsMap: fieldsetsMap,
109
- control: form.control,
110
- register: form.register,
111
- registerField: registerField,
112
- errors: form.errors,
113
- reset: form.reset,
114
- componentRegistry: componentRegistry
115
- };
116
- return /*#__PURE__*/_react["default"].createElement(FormContext.Provider, {
117
- value: ctx
118
- }, /*#__PURE__*/_react["default"].createElement("form", (0, _extends4["default"])({
119
- onSubmit: form.handleSubmit(handleSubmit),
120
- ref: ref
121
- }, props), /*#__PURE__*/_react["default"].createElement(_Grid["default"], {
122
- container: true
123
- }, /*#__PURE__*/_react["default"].createElement(_Grid["default"], {
124
- item: true,
125
- xs: 12
126
- }, children))));
127
- });
128
-
129
- exports.FormBase = FormBase;
130
-
131
- var FormBuilder = /*#__PURE__*/_react["default"].forwardRef(function FormBuilder(_ref2, ref) {
132
- var _ref2$fields = _ref2.fields,
133
- fields = _ref2$fields === void 0 ? [] : _ref2$fields,
134
- fieldsets = _ref2.fieldsets,
135
- _ref2$initial = _ref2.initial,
136
- initial = _ref2$initial === void 0 ? {} : _ref2$initial,
137
- onSubmit = _ref2.onSubmit,
138
- children = _ref2.children,
139
- _ref2$reValidateMode = _ref2.reValidateMode,
140
- reValidateMode = _ref2$reValidateMode === void 0 ? 'onSubmit' : _ref2$reValidateMode,
141
- _ref2$mode = _ref2.mode,
142
- mode = _ref2$mode === void 0 ? 'onSubmit' : _ref2$mode,
143
- _ref2$shouldFocusErro = _ref2.shouldFocusError,
144
- shouldFocusError = _ref2$shouldFocusErro === void 0 ? true : _ref2$shouldFocusErro,
145
- _ref2$criteriaMode = _ref2.criteriaMode,
146
- criteriaMode = _ref2$criteriaMode === void 0 ? 'firstError' : _ref2$criteriaMode,
147
- _ref2$auto = _ref2.auto,
148
- auto = _ref2$auto === void 0 ? false : _ref2$auto,
149
- validatorRegistry = _ref2.validatorRegistry,
150
- componentRegistry = _ref2.componentRegistry,
151
- props = (0, _objectWithoutProperties2["default"])(_ref2, _excluded2);
152
- var fieldsState = (0, _react.useRef)(fields);
153
- var setFieldsState = (0, _react.useCallback)(function (newFields) {
154
- fieldsState.current = newFields;
155
- }, []);
156
- var schema = (0, _validators.useValidationSchema)(fieldsState, validatorRegistry);
157
- var registerField = (0, _react.useCallback)(function (field) {
158
- setFieldsState([].concat((0, _toConsumableArray2["default"])(fieldsState.current), [field]));
159
- }, []);
160
- var resolver;
161
- var fieldsMap;
162
- var fieldsetsMap;
163
- var fieldChildren;
164
-
165
- if (schema) {
166
- resolver = (0, _utils.yupResolver)(schema);
167
- fieldsMap = fields ? fields.reduce(function (map, field) {
168
- return (0, _extends4["default"])({}, map, (0, _defineProperty2["default"])({}, field.key, field));
169
- }, {}) : {};
170
- fieldsetsMap = fieldsets && fieldsets.reduce(function (map, fieldset) {
171
- return (0, _extends4["default"])({}, map, (0, _defineProperty2["default"])({}, fieldset.key, fieldset));
172
- }, {});
173
-
174
- if (auto) {
175
- if (fieldsets) {
176
- fieldChildren = fieldsets.map(function (fieldset) {
177
- return /*#__PURE__*/_react["default"].createElement(_Fieldset["default"], {
178
- key: fieldset.key,
179
- name: fieldset.key
180
- });
181
- });
182
- } else if (fields) {
183
- fieldChildren = fields.map(function (field) {
184
- return /*#__PURE__*/_react["default"].createElement(_Field["default"], {
185
- key: field.key,
186
- name: field.key
187
- });
188
- });
189
- }
190
- }
191
- }
192
-
193
- return /*#__PURE__*/_react["default"].createElement(FormBase, (0, _extends4["default"])({
194
- resolver: resolver,
195
- fieldsetsMap: fieldsetsMap,
196
- fieldsMap: fieldsMap,
197
- registerField: registerField,
198
- initial: initial,
199
- reValidateMode: reValidateMode,
200
- mode: mode,
201
- shouldFocusError: shouldFocusError,
202
- criteriaMode: criteriaMode,
203
- onSubmit: onSubmit,
204
- componentRegistry: componentRegistry,
205
- ref: ref
206
- }, props), fieldChildren, children);
207
- });
25
+ var _FormBuilder = _interopRequireDefault(require("@digigov/form/FormBuilder"));
208
26
 
209
- exports.FormBuilder = FormBuilder;
210
- var _default = FormBuilder;
27
+ var _default = _FormBuilder["default"];
211
28
  exports["default"] = _default;
package/inputs/index.js CHANGED
@@ -11,6 +11,12 @@ Object.defineProperty(exports, "Checkboxes", {
11
11
  return _Checkboxes["default"];
12
12
  }
13
13
  });
14
+ Object.defineProperty(exports, "DateInput", {
15
+ enumerable: true,
16
+ get: function get() {
17
+ return _DateInput["default"];
18
+ }
19
+ });
14
20
  Object.defineProperty(exports, "FileInput", {
15
21
  enumerable: true,
16
22
  get: function get() {
@@ -42,14 +48,16 @@ Object.defineProperty(exports, "Select", {
42
48
  }
43
49
  });
44
50
 
45
- var _FileInput = _interopRequireDefault(require("@digigov/form/inputs/FileInput"));
51
+ var _Checkboxes = _interopRequireDefault(require("@digigov/form/inputs/Checkboxes"));
46
52
 
47
- var _Select = _interopRequireDefault(require("@digigov/form/inputs/Select"));
53
+ var _DateInput = _interopRequireDefault(require("@digigov/form/inputs/DateInput"));
48
54
 
49
- var _Checkboxes = _interopRequireDefault(require("@digigov/form/inputs/Checkboxes"));
55
+ var _FileInput = _interopRequireDefault(require("@digigov/form/inputs/FileInput"));
56
+
57
+ var _Input = _interopRequireDefault(require("@digigov/form/inputs/Input"));
50
58
 
51
59
  var _Label = _interopRequireDefault(require("@digigov/form/inputs/Label"));
52
60
 
53
- var _Input = _interopRequireDefault(require("@digigov/form/inputs/Input"));
61
+ var _Radio = _interopRequireDefault(require("@digigov/form/inputs/Radio"));
54
62
 
55
- var _Radio = _interopRequireDefault(require("@digigov/form/inputs/Radio"));
63
+ var _Select = _interopRequireDefault(require("@digigov/form/inputs/Select"));