@digigov/form 2.0.0-85c27c19 → 2.0.0-aefd0709

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 (314) hide show
  1. package/Field/FieldBase/index.js +1 -0
  2. package/Field/FieldBase.js.map +2 -2
  3. package/Field/FieldBaseContainer/index.js +2 -2
  4. package/Field/FieldBaseContainer.js.map +2 -2
  5. package/Field/FieldConditional/index.js +7 -3
  6. package/Field/FieldConditional.js.map +2 -2
  7. package/Field/index.js +5 -2
  8. package/Field/index.js.map +2 -2
  9. package/Field/types.d.ts +10 -8
  10. package/Field/utils/index.d.ts +1 -0
  11. package/Field/utils/index.js +18 -1
  12. package/Field/utils/index.js.map +2 -2
  13. package/FieldArray/index.d.ts +1 -0
  14. package/FieldArray/index.js +7 -6
  15. package/FieldArray/index.js.map +2 -2
  16. package/FieldObject/index.d.ts +2 -0
  17. package/FieldObject/index.js +9 -5
  18. package/FieldObject/index.js.map +2 -2
  19. package/Fieldset/index.d.ts +1 -1
  20. package/Fieldset/index.js +5 -5
  21. package/Fieldset/index.js.map +2 -2
  22. package/Fieldset/types.d.ts +2 -3
  23. package/FormBuilder/index.d.ts +8 -2
  24. package/FormBuilder/index.js +150 -6
  25. package/FormBuilder/index.js.map +3 -3
  26. package/FormContext.js.map +2 -2
  27. package/MultiplicityField/add-objects/index.js +11 -7
  28. package/MultiplicityField/add-objects.js.map +2 -2
  29. package/MultiplicityField/index.js +16 -12
  30. package/MultiplicityField/index.js.map +2 -2
  31. package/MultiplicityField/types.d.ts +1 -2
  32. package/Questions/Questions/index.js +5 -4
  33. package/Questions/Questions.js.map +2 -2
  34. package/Questions/QuestionsContext.d.ts +0 -1
  35. package/Questions/Step/StepArrayReview.js.map +2 -2
  36. package/Questions/Step/StepContext.d.ts +0 -1
  37. package/Questions/Step/StepTitle/index.js +4 -3
  38. package/Questions/Step/StepTitle.d.ts +1 -1
  39. package/Questions/Step/StepTitle.js.map +2 -2
  40. package/Questions/Step/types.d.ts +0 -1
  41. package/Questions/types.d.ts +0 -1
  42. package/cjs/Field/FieldBase/index.js +1 -0
  43. package/cjs/Field/FieldBase.js.map +2 -2
  44. package/cjs/Field/FieldBaseContainer/index.js +4 -4
  45. package/cjs/Field/FieldBaseContainer.js.map +3 -3
  46. package/cjs/Field/FieldConditional/index.js +7 -3
  47. package/cjs/Field/FieldConditional.js.map +2 -2
  48. package/cjs/Field/index.js +5 -2
  49. package/cjs/Field/index.js.map +2 -2
  50. package/cjs/Field/types.js.map +1 -1
  51. package/cjs/Field/utils/index.js +18 -0
  52. package/cjs/Field/utils/index.js.map +2 -2
  53. package/cjs/FieldArray/index.js +8 -7
  54. package/cjs/FieldArray/index.js.map +3 -3
  55. package/cjs/FieldObject/index.js +10 -6
  56. package/cjs/FieldObject/index.js.map +3 -3
  57. package/cjs/Fieldset/index.js +10 -10
  58. package/cjs/Fieldset/index.js.map +3 -3
  59. package/cjs/Fieldset/types.js.map +1 -1
  60. package/cjs/FormBuilder/index.js +165 -5
  61. package/cjs/FormBuilder/index.js.map +3 -3
  62. package/cjs/FormContext/index.js +2 -2
  63. package/cjs/FormContext.js.map +3 -3
  64. package/cjs/MultiplicityField/add-objects/index.js +15 -11
  65. package/cjs/MultiplicityField/add-objects.js.map +3 -3
  66. package/cjs/MultiplicityField/index.js +15 -16
  67. package/cjs/MultiplicityField/index.js.map +3 -3
  68. package/cjs/MultiplicityField/types.js.map +1 -1
  69. package/cjs/Questions/Questions/index.js +5 -4
  70. package/cjs/Questions/Questions.js.map +2 -2
  71. package/cjs/Questions/Step/StepArrayReview.js.map +2 -2
  72. package/cjs/Questions/Step/StepTitle/index.js +5 -5
  73. package/cjs/Questions/Step/StepTitle.js.map +3 -3
  74. package/cjs/index.js +11 -155
  75. package/cjs/index.js.map +4 -4
  76. package/cjs/inputs/AutoCompleteInput/__stories__/Default/index.js +1 -7
  77. package/cjs/inputs/AutoCompleteInput/__stories__/Default.js.map +2 -2
  78. package/cjs/inputs/AutoCompleteInput/__stories__/Multiple/index.js +1 -8
  79. package/cjs/inputs/AutoCompleteInput/__stories__/Multiple.js.map +2 -2
  80. package/cjs/inputs/AutoCompleteInput/index.js +10 -8
  81. package/cjs/inputs/AutoCompleteInput/index.js.map +3 -3
  82. package/cjs/inputs/Checkboxes/index.js +7 -9
  83. package/cjs/inputs/Checkboxes/index.js.map +3 -3
  84. package/cjs/inputs/DateInput/__stories__/Default/index.js +3 -8
  85. package/cjs/inputs/DateInput/__stories__/Default.js.map +2 -2
  86. package/cjs/inputs/DateInput/index.js +4 -5
  87. package/cjs/inputs/DateInput/index.js.map +3 -3
  88. package/cjs/inputs/FileInput/index.js +8 -9
  89. package/cjs/inputs/FileInput/index.js.map +3 -3
  90. package/cjs/inputs/ImageInput/ImageInput.stories/index.js +4 -4
  91. package/cjs/inputs/ImageInput/ImageInput.stories.js.map +2 -2
  92. package/cjs/inputs/ImageInput/__stories__/MaxSize/index.js +69 -0
  93. package/cjs/inputs/ImageInput/__stories__/MaxSize.js.map +7 -0
  94. package/cjs/inputs/ImageInput/__stories__/WithInvalidImageDimension/index.js +2 -1
  95. package/cjs/inputs/ImageInput/__stories__/WithInvalidImageDimension.js.map +2 -2
  96. package/cjs/inputs/ImageInput/index.js +9 -9
  97. package/cjs/inputs/ImageInput/index.js.map +3 -3
  98. package/cjs/inputs/Input/__stories__/LandlineNumber/index.js +1 -0
  99. package/cjs/inputs/Input/__stories__/LandlineNumber.js.map +2 -2
  100. package/cjs/inputs/Input/__stories__/MobilePhone/index.js +1 -0
  101. package/cjs/inputs/Input/__stories__/MobilePhone.js.map +2 -2
  102. package/cjs/inputs/Input/__stories__/PhoneNumber/index.js +1 -0
  103. package/cjs/inputs/Input/__stories__/PhoneNumber.js.map +2 -2
  104. package/cjs/inputs/Input/__stories__/PostalCode/index.js +1 -0
  105. package/cjs/inputs/Input/__stories__/PostalCode.js.map +2 -2
  106. package/cjs/inputs/Input/index.js +19 -6
  107. package/cjs/inputs/Input/index.js.map +3 -3
  108. package/cjs/inputs/Input/inputsInputScenarios.js.map +2 -2
  109. package/cjs/inputs/Label/index.js +3 -3
  110. package/cjs/inputs/Label/index.js.map +3 -3
  111. package/cjs/inputs/OtpInput/index.js.map +2 -2
  112. package/cjs/inputs/Radio/__stories__/Conditional.js.map +2 -2
  113. package/cjs/inputs/Radio/index.js +56 -10
  114. package/cjs/inputs/Radio/index.js.map +3 -3
  115. package/cjs/inputs/Select/index.js +3 -4
  116. package/cjs/inputs/Select/index.js.map +3 -3
  117. package/cjs/inputs/inputsScenarios/index.js +4 -11
  118. package/cjs/inputs/inputsScenarios.js.map +2 -2
  119. package/cjs/lazy/index.js +320 -59
  120. package/cjs/lazy.js.map +2 -2
  121. package/cjs/locales/el.js.map +1 -1
  122. package/cjs/registry/index.js +118 -38
  123. package/cjs/registry.js.map +2 -2
  124. package/cjs/types.js.map +1 -1
  125. package/cjs/utils/index.js +2 -1
  126. package/cjs/utils.js.map +2 -2
  127. package/cjs/validators/index.js +16 -66
  128. package/cjs/validators/index.js.map +3 -3
  129. package/cjs/validators/utils/date/index.js +138 -0
  130. package/cjs/validators/utils/date.js.map +7 -0
  131. package/cjs/validators/utils/file/index.js +1 -1
  132. package/cjs/validators/utils/file.js.map +2 -2
  133. package/cjs/validators/utils/index.js +3 -1
  134. package/cjs/validators/utils/index.js.map +2 -2
  135. package/cjs/validators/utils/phone.js.map +2 -2
  136. package/cjs/validators/utils/postal_code.js.map +1 -1
  137. package/cjs/validators/utils/uuid4.js.map +2 -2
  138. package/index.d.ts +5 -8
  139. package/index.js +9 -152
  140. package/index.js.map +4 -4
  141. package/inputs/AutoCompleteInput/__stories__/Default/index.js +1 -7
  142. package/inputs/AutoCompleteInput/__stories__/Default.js.map +2 -2
  143. package/inputs/AutoCompleteInput/__stories__/Multiple/index.js +1 -8
  144. package/inputs/AutoCompleteInput/__stories__/Multiple.js.map +2 -2
  145. package/inputs/AutoCompleteInput/index.d.ts +1 -1
  146. package/inputs/AutoCompleteInput/index.js +12 -8
  147. package/inputs/AutoCompleteInput/index.js.map +2 -2
  148. package/inputs/Checkboxes/index.d.ts +1 -1
  149. package/inputs/Checkboxes/index.js +8 -6
  150. package/inputs/Checkboxes/index.js.map +2 -2
  151. package/inputs/DateInput/__stories__/Default/index.js +3 -8
  152. package/inputs/DateInput/__stories__/Default.js.map +2 -2
  153. package/inputs/DateInput/index.d.ts +1 -2
  154. package/inputs/DateInput/index.js +6 -4
  155. package/inputs/DateInput/index.js.map +2 -2
  156. package/inputs/FileInput/index.js +6 -7
  157. package/inputs/FileInput/index.js.map +2 -2
  158. package/inputs/ImageInput/ImageInput.stories/index.js +2 -2
  159. package/inputs/ImageInput/ImageInput.stories.d.ts +1 -1
  160. package/inputs/ImageInput/ImageInput.stories.js.map +2 -2
  161. package/inputs/ImageInput/__stories__/MaxSize/index.js +36 -0
  162. package/inputs/ImageInput/__stories__/MaxSize/package.json +6 -0
  163. package/inputs/ImageInput/__stories__/MaxSize.d.ts +3 -0
  164. package/inputs/ImageInput/__stories__/MaxSize.js.map +7 -0
  165. package/inputs/ImageInput/__stories__/WithInvalidImageDimension/index.js +2 -1
  166. package/inputs/ImageInput/__stories__/WithInvalidImageDimension.js.map +2 -2
  167. package/inputs/ImageInput/index.js +8 -8
  168. package/inputs/ImageInput/index.js.map +2 -2
  169. package/inputs/Input/__stories__/LandlineNumber/index.js +1 -0
  170. package/inputs/Input/__stories__/LandlineNumber.js.map +2 -2
  171. package/inputs/Input/__stories__/MobilePhone/index.js +1 -0
  172. package/inputs/Input/__stories__/MobilePhone.js.map +2 -2
  173. package/inputs/Input/__stories__/PhoneNumber/index.js +1 -0
  174. package/inputs/Input/__stories__/PhoneNumber.js.map +2 -2
  175. package/inputs/Input/__stories__/PostalCode/index.js +1 -0
  176. package/inputs/Input/__stories__/PostalCode.js.map +2 -2
  177. package/inputs/Input/index.js +17 -4
  178. package/inputs/Input/index.js.map +3 -3
  179. package/inputs/Input/inputsInputScenarios.js.map +2 -2
  180. package/inputs/Label/index.d.ts +0 -2
  181. package/inputs/Label/index.js +2 -2
  182. package/inputs/Label/index.js.map +2 -2
  183. package/inputs/OtpInput/index.js.map +2 -2
  184. package/inputs/Radio/__stories__/Conditional.js.map +2 -2
  185. package/inputs/Radio/index.d.ts +5 -1
  186. package/inputs/Radio/index.js +57 -8
  187. package/inputs/Radio/index.js.map +2 -2
  188. package/inputs/Select/index.d.ts +1 -1
  189. package/inputs/Select/index.js +4 -2
  190. package/inputs/Select/index.js.map +2 -2
  191. package/inputs/inputsScenarios/index.js +4 -11
  192. package/inputs/inputsScenarios.d.ts +0 -42
  193. package/inputs/inputsScenarios.js.map +2 -2
  194. package/lazy/index.js +320 -59
  195. package/lazy.d.ts +17 -10
  196. package/lazy.js.map +2 -2
  197. package/locales/el.js.map +1 -1
  198. package/package.json +4 -4
  199. package/registry/index.js +118 -38
  200. package/registry.d.ts +1 -0
  201. package/registry.js.map +2 -2
  202. package/src/Field/FieldBase.tsx +1 -0
  203. package/src/Field/FieldBaseContainer.tsx +2 -2
  204. package/src/Field/FieldConditional.tsx +4 -0
  205. package/src/Field/index.tsx +4 -1
  206. package/src/Field/types.tsx +10 -8
  207. package/src/Field/utils/index.ts +18 -1
  208. package/src/FieldArray/index.test.tsx +14 -13
  209. package/src/FieldArray/index.tsx +9 -6
  210. package/src/FieldObject/index.tsx +8 -2
  211. package/src/Fieldset/index.tsx +5 -5
  212. package/src/Fieldset/types.tsx +2 -2
  213. package/src/FormBuilder/{FormBuilder.mdx → doc.mdx} +20 -33
  214. package/src/FormBuilder/index.test.tsx +11 -10
  215. package/src/FormBuilder/index.tsx +178 -7
  216. package/src/FormBuilder/scenarios.test.tsx +2 -2
  217. package/src/FormContext.tsx +1 -2
  218. package/src/MultiplicityField/add-objects.tsx +10 -8
  219. package/src/MultiplicityField/{MultiplicityField.mdx → doc.mdx} +12 -16
  220. package/src/MultiplicityField/index.test.tsx +26 -25
  221. package/src/MultiplicityField/index.tsx +15 -12
  222. package/src/MultiplicityField/types.ts +1 -2
  223. package/src/Questions/Questions.tsx +4 -4
  224. package/src/Questions/Step/StepArrayReview.tsx +1 -1
  225. package/src/Questions/Step/StepTitle.tsx +4 -3
  226. package/src/Questions/__snapshots__/index.spec.tsx.snap +8 -4
  227. package/src/Questions/{index.mdx → doc.mdx} +9 -12
  228. package/src/Questions/index.spec.tsx +6 -2
  229. package/src/Questions/index.test.tsx +11 -10
  230. package/src/create-simple-form.mdx +2 -6
  231. package/src/{index.mdx → doc.mdx} +4 -8
  232. package/src/index.ts +6 -0
  233. package/src/inputs/AutoCompleteInput/__stories__/Default.tsx +2 -10
  234. package/src/inputs/AutoCompleteInput/__stories__/Multiple.tsx +1 -8
  235. package/src/inputs/AutoCompleteInput/{index.mdx → doc.mdx} +2 -13
  236. package/src/inputs/AutoCompleteInput/index.test.tsx +14 -13
  237. package/src/inputs/AutoCompleteInput/index.tsx +36 -31
  238. package/src/inputs/Checkboxes/{index.mdx → doc.mdx} +5 -15
  239. package/src/inputs/Checkboxes/index.test.tsx +17 -16
  240. package/src/inputs/Checkboxes/index.tsx +10 -8
  241. package/src/inputs/DateInput/__stories__/Default.tsx +7 -12
  242. package/src/inputs/DateInput/{index.mdx → doc.mdx} +1 -8
  243. package/src/inputs/DateInput/index.test.tsx +11 -10
  244. package/src/inputs/DateInput/index.tsx +6 -4
  245. package/src/inputs/FileInput/{index.mdx → doc.mdx} +1 -5
  246. package/src/inputs/FileInput/index.test.tsx +11 -10
  247. package/src/inputs/FileInput/index.tsx +7 -8
  248. package/src/inputs/ImageInput/ImageInput.stories.js +1 -1
  249. package/src/inputs/ImageInput/__stories__/MaxSize.tsx +37 -0
  250. package/src/inputs/ImageInput/__stories__/WithInvalidImageDimension.tsx +2 -0
  251. package/src/inputs/ImageInput/doc.mdx +23 -0
  252. package/src/inputs/ImageInput/index.test.tsx +21 -16
  253. package/src/inputs/ImageInput/index.tsx +10 -15
  254. package/src/inputs/Input/__stories__/LandlineNumber.tsx +2 -1
  255. package/src/inputs/Input/__stories__/MobilePhone.tsx +1 -0
  256. package/src/inputs/Input/__stories__/PhoneNumber.tsx +1 -0
  257. package/src/inputs/Input/__stories__/PostalCode.tsx +1 -0
  258. package/src/inputs/Input/doc.mdx +56 -0
  259. package/src/inputs/Input/index.test.tsx +38 -37
  260. package/src/inputs/Input/index.tsx +32 -29
  261. package/src/inputs/Input/inputsInputScenarios.ts +244 -245
  262. package/src/inputs/Label/doc.mdx +14 -0
  263. package/src/inputs/Label/index.test.tsx +11 -10
  264. package/src/inputs/Label/index.tsx +2 -6
  265. package/src/inputs/OtpInput/{index.mdx → doc.mdx} +1 -8
  266. package/src/inputs/OtpInput/index.test.tsx +11 -10
  267. package/src/inputs/OtpInput/index.tsx +2 -1
  268. package/src/inputs/Radio/__stories__/Conditional.tsx +2 -1
  269. package/src/inputs/Radio/{index.mdx → doc.mdx} +5 -15
  270. package/src/inputs/Radio/index.test.tsx +17 -16
  271. package/src/inputs/Radio/index.tsx +76 -10
  272. package/src/inputs/Select/{index.mdx → doc.mdx} +1 -5
  273. package/src/inputs/Select/index.test.tsx +11 -10
  274. package/src/inputs/Select/index.tsx +5 -3
  275. package/src/inputs/inputsScenarios.ts +174 -181
  276. package/src/installation.mdx +2 -5
  277. package/src/lazy.js +322 -62
  278. package/src/locales/el.ts +1 -1
  279. package/src/registry.js +121 -45
  280. package/src/types.tsx +3 -2
  281. package/src/utils.ts +2 -2
  282. package/src/validators/index.ts +33 -71
  283. package/src/validators/utils/date.ts +107 -0
  284. package/src/validators/utils/file.ts +5 -3
  285. package/src/validators/utils/index.ts +1 -0
  286. package/src/validators/utils/phone.ts +1 -1
  287. package/src/validators/utils/postal_code.ts +1 -1
  288. package/src/validators/utils/uuid4.ts +2 -1
  289. package/src/validators/validators.spec.ts +3 -3
  290. package/types.d.ts +3 -3
  291. package/types.js.map +1 -1
  292. package/utils/index.js +2 -1
  293. package/utils.js.map +2 -2
  294. package/validators/index.js +20 -67
  295. package/validators/index.js.map +2 -2
  296. package/validators/utils/date/index.js +103 -0
  297. package/validators/utils/date/package.json +6 -0
  298. package/validators/utils/date.d.ts +9 -0
  299. package/validators/utils/date.js.map +7 -0
  300. package/validators/utils/file/index.js +1 -1
  301. package/validators/utils/file.js.map +2 -2
  302. package/validators/utils/index.d.ts +1 -0
  303. package/validators/utils/index.js +1 -0
  304. package/validators/utils/index.js.map +2 -2
  305. package/validators/utils/phone.d.ts +1 -1
  306. package/validators/utils/phone.js.map +2 -2
  307. package/validators/utils/postal_code.d.ts +1 -1
  308. package/validators/utils/postal_code.js.map +1 -1
  309. package/validators/utils/uuid4.js.map +2 -2
  310. package/src/index.tsx +0 -178
  311. package/src/inputs/ImageInput/index.mdx +0 -19
  312. package/src/inputs/Input/index.mdx +0 -95
  313. package/src/inputs/Label/index.mdx +0 -0
  314. /package/src/Field/{index.mdx → doc.mdx} +0 -0
@@ -0,0 +1,103 @@
1
+ import dayjs from "dayjs";
2
+ import customParseFormat from "dayjs/plugin/customParseFormat";
3
+ dayjs.extend(customParseFormat);
4
+ const VALID_DATE_FORMATS = ["DD/MM/YYYY"];
5
+ const DATE_CACHE = {};
6
+ const getDate = (v) => {
7
+ return DATE_CACHE[v] ? DATE_CACHE[v] : dayjs(v, VALID_DATE_FORMATS, true);
8
+ };
9
+ const checkPartialDate = (value) => {
10
+ console.log("value.split('/')", value.split("/"));
11
+ const [day, month, year] = value.split("/");
12
+ if (day && !month && !year) {
13
+ return "form.error.date.invalid_month_year";
14
+ }
15
+ if (!day && month && !year) {
16
+ return "form.error.date.invalid_day_year";
17
+ }
18
+ if (!day && !month && year) {
19
+ return "form.error.date.invalid_day_month";
20
+ }
21
+ if (day && month && !year) {
22
+ return "form.error.date.invalid_year";
23
+ }
24
+ if (day && !month && year) {
25
+ return "form.error.date.invalid_month";
26
+ }
27
+ if (!day && month && year) {
28
+ return "form.error.date.invalid_day";
29
+ } else {
30
+ return "form.error.date.invalid";
31
+ }
32
+ };
33
+ const LATER_THAN_VALIDATOR = (field) => {
34
+ let minDate;
35
+ const params = field.extra || {};
36
+ if (params.min === "now") {
37
+ const today = /* @__PURE__ */ new Date();
38
+ minDate = new Date(today);
39
+ } else {
40
+ minDate = getDate(params.min).toDate();
41
+ }
42
+ const minPreviousDate = new Date(minDate);
43
+ minPreviousDate.setDate(minDate.getDate() - 1);
44
+ return {
45
+ name: "later-than",
46
+ message: {
47
+ key: "form.error.date.later_than",
48
+ context: {
49
+ minDate: minPreviousDate.toLocaleDateString()
50
+ }
51
+ },
52
+ test: function(value) {
53
+ if (!value) return true;
54
+ const date = getDate(value);
55
+ const isValid = +date.toDate() > +minDate;
56
+ return isValid;
57
+ }
58
+ };
59
+ };
60
+ const EARLIER_THAN_VALIDATOR = (field) => {
61
+ let maxDate;
62
+ const params = field.extra || {};
63
+ if (params.max === "now") {
64
+ const today = /* @__PURE__ */ new Date();
65
+ maxDate = new Date(today);
66
+ } else {
67
+ maxDate = getDate(params.max).toDate();
68
+ }
69
+ const maxNextDate = new Date(maxDate);
70
+ maxNextDate.setDate(maxDate.getDate() + 1);
71
+ return {
72
+ name: "earlier-than",
73
+ message: {
74
+ key: "form.error.date.earlier_than",
75
+ context: {
76
+ maxDate: maxNextDate.toLocaleDateString()
77
+ }
78
+ },
79
+ test: function(value) {
80
+ if (!value) return true;
81
+ const date = getDate(value);
82
+ const isValid = +date.toDate() < +maxDate;
83
+ return isValid;
84
+ }
85
+ };
86
+ };
87
+ const DATE_VALIDATOR = {
88
+ name: "date-validator",
89
+ message: (v) => {
90
+ return checkPartialDate(v.value);
91
+ },
92
+ test: function(value) {
93
+ if (!value) return true;
94
+ const date = getDate(value);
95
+ return date.isValid();
96
+ }
97
+ };
98
+ export {
99
+ DATE_VALIDATOR,
100
+ EARLIER_THAN_VALIDATOR,
101
+ LATER_THAN_VALIDATOR
102
+ };
103
+ //# sourceMappingURL=date.js.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "sideEffects": false,
3
+ "module": "./index.js",
4
+ "types": "./index.d.ts",
5
+ "main": "../../../cjs/validators/utils/date/index.js"
6
+ }
@@ -0,0 +1,9 @@
1
+ import { FieldSpec } from '@digigov/form/types';
2
+ import { ValidatorSchema } from '@digigov/form/validators/types';
3
+ export declare const LATER_THAN_VALIDATOR: (field: FieldSpec) => ValidatorSchema;
4
+ export declare const EARLIER_THAN_VALIDATOR: (field: FieldSpec) => ValidatorSchema;
5
+ export declare const DATE_VALIDATOR: {
6
+ name: string;
7
+ message: (v: any) => string;
8
+ test: (value: string) => any;
9
+ };
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/validators/utils/date.ts"],
4
+ "sourcesContent": ["import dayjs from 'dayjs';\nimport customParseFormat from 'dayjs/plugin/customParseFormat';\nimport { FieldSpec } from '@digigov/form/types';\nimport { ValidatorSchema } from '@digigov/form/validators/types';\n\ndayjs.extend(customParseFormat);\n\nconst VALID_DATE_FORMATS = ['DD/MM/YYYY'];\nconst DATE_CACHE = {};\n\nconst getDate = (v: string) => {\n return DATE_CACHE[v] ? DATE_CACHE[v] : dayjs(v, VALID_DATE_FORMATS, true);\n};\n\n// Function to check partial date completion\nconst checkPartialDate = (value: string) => {\n console.log(\"value.split('/')\", value.split('/'));\n const [day, month, year] = value.split('/');\n if (day && !month && !year) {\n return 'form.error.date.invalid_month_year';\n }\n if (!day && month && !year) {\n return 'form.error.date.invalid_day_year';\n }\n if (!day && !month && year) {\n return 'form.error.date.invalid_day_month';\n }\n if (day && month && !year) {\n return 'form.error.date.invalid_year';\n }\n if (day && !month && year) {\n return 'form.error.date.invalid_month';\n }\n if (!day && month && year) {\n return 'form.error.date.invalid_day';\n } else {\n return 'form.error.date.invalid';\n }\n};\n\nexport const LATER_THAN_VALIDATOR = (field: FieldSpec): ValidatorSchema => {\n let minDate;\n const params = field.extra || {};\n if (params.min === 'now') {\n const today = new Date();\n minDate = new Date(today);\n } else {\n minDate = getDate(params.min).toDate();\n }\n const minPreviousDate = new Date(minDate);\n minPreviousDate.setDate(minDate.getDate() - 1);\n return {\n name: 'later-than',\n message: {\n key: 'form.error.date.later_than',\n context: {\n minDate: minPreviousDate.toLocaleDateString(),\n },\n },\n test: function (value: string) {\n if (!value) return true;\n const date = getDate(value);\n const isValid = +date.toDate() > +minDate;\n return isValid;\n },\n };\n};\n\nexport const EARLIER_THAN_VALIDATOR = (field: FieldSpec): ValidatorSchema => {\n let maxDate;\n const params = field.extra || {};\n if (params.max === 'now') {\n const today = new Date();\n maxDate = new Date(today);\n } else {\n maxDate = getDate(params.max).toDate();\n }\n const maxNextDate = new Date(maxDate);\n maxNextDate.setDate(maxDate.getDate() + 1);\n return {\n name: 'earlier-than',\n message: {\n key: 'form.error.date.earlier_than',\n context: {\n maxDate: maxNextDate.toLocaleDateString(),\n },\n },\n test: function (value: string) {\n if (!value) return true;\n const date = getDate(value);\n const isValid = +date.toDate() < +maxDate;\n return isValid;\n },\n };\n};\n\nexport const DATE_VALIDATOR = {\n name: 'date-validator',\n message: (v): string => {\n return checkPartialDate(v.value);\n },\n test: function (value: string) {\n if (!value) return true;\n const date = getDate(value);\n return date.isValid();\n },\n};\n"],
5
+ "mappings": "AAAA,OAAO,WAAW;AAClB,OAAO,uBAAuB;AAI9B,MAAM,OAAO,iBAAiB;AAE9B,MAAM,qBAAqB,CAAC,YAAY;AACxC,MAAM,aAAa,CAAC;AAEpB,MAAM,UAAU,CAAC,MAAc;AAC7B,SAAO,WAAW,CAAC,IAAI,WAAW,CAAC,IAAI,MAAM,GAAG,oBAAoB,IAAI;AAC1E;AAGA,MAAM,mBAAmB,CAAC,UAAkB;AAC1C,UAAQ,IAAI,oBAAoB,MAAM,MAAM,GAAG,CAAC;AAChD,QAAM,CAAC,KAAK,OAAO,IAAI,IAAI,MAAM,MAAM,GAAG;AAC1C,MAAI,OAAO,CAAC,SAAS,CAAC,MAAM;AAC1B,WAAO;AAAA,EACT;AACA,MAAI,CAAC,OAAO,SAAS,CAAC,MAAM;AAC1B,WAAO;AAAA,EACT;AACA,MAAI,CAAC,OAAO,CAAC,SAAS,MAAM;AAC1B,WAAO;AAAA,EACT;AACA,MAAI,OAAO,SAAS,CAAC,MAAM;AACzB,WAAO;AAAA,EACT;AACA,MAAI,OAAO,CAAC,SAAS,MAAM;AACzB,WAAO;AAAA,EACT;AACA,MAAI,CAAC,OAAO,SAAS,MAAM;AACzB,WAAO;AAAA,EACT,OAAO;AACL,WAAO;AAAA,EACT;AACF;AAEO,MAAM,uBAAuB,CAAC,UAAsC;AACzE,MAAI;AACJ,QAAM,SAAS,MAAM,SAAS,CAAC;AAC/B,MAAI,OAAO,QAAQ,OAAO;AACxB,UAAM,QAAQ,oBAAI,KAAK;AACvB,cAAU,IAAI,KAAK,KAAK;AAAA,EAC1B,OAAO;AACL,cAAU,QAAQ,OAAO,GAAG,EAAE,OAAO;AAAA,EACvC;AACA,QAAM,kBAAkB,IAAI,KAAK,OAAO;AACxC,kBAAgB,QAAQ,QAAQ,QAAQ,IAAI,CAAC;AAC7C,SAAO;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,MACP,KAAK;AAAA,MACL,SAAS;AAAA,QACP,SAAS,gBAAgB,mBAAmB;AAAA,MAC9C;AAAA,IACF;AAAA,IACA,MAAM,SAAU,OAAe;AAC7B,UAAI,CAAC,MAAO,QAAO;AACnB,YAAM,OAAO,QAAQ,KAAK;AAC1B,YAAM,UAAU,CAAC,KAAK,OAAO,IAAI,CAAC;AAClC,aAAO;AAAA,IACT;AAAA,EACF;AACF;AAEO,MAAM,yBAAyB,CAAC,UAAsC;AAC3E,MAAI;AACJ,QAAM,SAAS,MAAM,SAAS,CAAC;AAC/B,MAAI,OAAO,QAAQ,OAAO;AACxB,UAAM,QAAQ,oBAAI,KAAK;AACvB,cAAU,IAAI,KAAK,KAAK;AAAA,EAC1B,OAAO;AACL,cAAU,QAAQ,OAAO,GAAG,EAAE,OAAO;AAAA,EACvC;AACA,QAAM,cAAc,IAAI,KAAK,OAAO;AACpC,cAAY,QAAQ,QAAQ,QAAQ,IAAI,CAAC;AACzC,SAAO;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,MACP,KAAK;AAAA,MACL,SAAS;AAAA,QACP,SAAS,YAAY,mBAAmB;AAAA,MAC1C;AAAA,IACF;AAAA,IACA,MAAM,SAAU,OAAe;AAC7B,UAAI,CAAC,MAAO,QAAO;AACnB,YAAM,OAAO,QAAQ,KAAK;AAC1B,YAAM,UAAU,CAAC,KAAK,OAAO,IAAI,CAAC;AAClC,aAAO;AAAA,IACT;AAAA,EACF;AACF;AAEO,MAAM,iBAAiB;AAAA,EAC5B,MAAM;AAAA,EACN,SAAS,CAAC,MAAc;AACtB,WAAO,iBAAiB,EAAE,KAAK;AAAA,EACjC;AAAA,EACA,MAAM,SAAU,OAAe;AAC7B,QAAI,CAAC,MAAO,QAAO;AACnB,UAAM,OAAO,QAAQ,KAAK;AAC1B,WAAO,KAAK,QAAQ;AAAA,EACtB;AACF;",
6
+ "names": []
7
+ }
@@ -2,7 +2,7 @@ const DEFAULT_FILE_MAX_SIZE = 1e7;
2
2
  const FILE_MAX_SIZE_VALIDATOR = (field) => ({
3
3
  name: "file-max-size-validator",
4
4
  message: {
5
- key: "form.error.file_size",
5
+ key: field.type === "file" ? "form.error.file_size" : "form.error.image_size",
6
6
  context: {
7
7
  maxSizeToMb: (field?.extra?.limit.maxSize || DEFAULT_FILE_MAX_SIZE) / 1e6
8
8
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/validators/utils/file.ts"],
4
- "sourcesContent": ["import { FieldSpec } from '@digigov/form/types';\nimport { ValidatorSchema } from '@digigov/form/validators/types';\n\nconst DEFAULT_FILE_MAX_SIZE = 10000000;\n\nexport const FILE_MAX_SIZE_VALIDATOR = (field: FieldSpec): ValidatorSchema => ({\n name: 'file-max-size-validator',\n message: {\n key: 'form.error.file_size',\n context: {\n maxSizeToMb: (field?.extra?.limit.maxSize || DEFAULT_FILE_MAX_SIZE) / 1000000,\n },\n },\n test: (value: File[]): boolean => {\n if (value) {\n for (const file of value) {\n const maxSize = field?.extra?.limit?.maxSize || DEFAULT_FILE_MAX_SIZE\n if (file.size > maxSize) {\n return false;\n }\n }\n }\n return true;\n },\n});\n"],
5
- "mappings": "AAGA,MAAM,wBAAwB;AAEvB,MAAM,0BAA0B,CAAC,WAAuC;AAAA,EAC7E,MAAM;AAAA,EACN,SAAS;AAAA,IACP,KAAK;AAAA,IACL,SAAS;AAAA,MACP,cAAc,OAAO,OAAO,MAAM,WAAW,yBAAyB;AAAA,IACxE;AAAA,EACF;AAAA,EACA,MAAM,CAAC,UAA2B;AAChC,QAAI,OAAO;AACT,iBAAW,QAAQ,OAAO;AACxB,cAAM,UAAU,OAAO,OAAO,OAAO,WAAW;AAChD,YAAI,KAAK,OAAO,SAAS;AACvB,iBAAO;AAAA,QACT;AAAA,MACF;AAAA,IACF;AACA,WAAO;AAAA,EACT;AACF;",
4
+ "sourcesContent": ["import { FieldSpec } from '@digigov/form/types';\nimport { ValidatorSchema } from '@digigov/form/validators/types';\n\nconst DEFAULT_FILE_MAX_SIZE = 10000000;\n\nexport const FILE_MAX_SIZE_VALIDATOR = (field: FieldSpec): ValidatorSchema => ({\n name: 'file-max-size-validator',\n message: {\n key:\n field.type === 'file' ? 'form.error.file_size' : 'form.error.image_size',\n context: {\n maxSizeToMb:\n (field?.extra?.limit.maxSize || DEFAULT_FILE_MAX_SIZE) / 1000000,\n },\n },\n test: (value: File[]): boolean => {\n if (value) {\n for (const file of value) {\n const maxSize = field?.extra?.limit?.maxSize || DEFAULT_FILE_MAX_SIZE;\n if (file.size > maxSize) {\n return false;\n }\n }\n }\n return true;\n },\n});\n"],
5
+ "mappings": "AAGA,MAAM,wBAAwB;AAEvB,MAAM,0BAA0B,CAAC,WAAuC;AAAA,EAC7E,MAAM;AAAA,EACN,SAAS;AAAA,IACP,KACE,MAAM,SAAS,SAAS,yBAAyB;AAAA,IACnD,SAAS;AAAA,MACP,cACG,OAAO,OAAO,MAAM,WAAW,yBAAyB;AAAA,IAC7D;AAAA,EACF;AAAA,EACA,MAAM,CAAC,UAA2B;AAChC,QAAI,OAAO;AACT,iBAAW,QAAQ,OAAO;AACxB,cAAM,UAAU,OAAO,OAAO,OAAO,WAAW;AAChD,YAAI,KAAK,OAAO,SAAS;AACvB,iBAAO;AAAA,QACT;AAAA,MACF;AAAA,IACF;AACA,WAAO;AAAA,EACT;AACF;",
6
6
  "names": []
7
7
  }
@@ -10,6 +10,7 @@ export * from '@digigov/form/validators/utils/phone';
10
10
  export * from '@digigov/form/validators/utils/postal_code';
11
11
  export * from '@digigov/form/validators/utils/uuid4';
12
12
  export * from '@digigov/form/validators/utils/text_limit';
13
+ export * from '@digigov/form/validators/utils/date';
13
14
  export declare function getYupField(field: FieldSpec, yupTypeMap: Record<string, any>): any;
14
15
  export declare function computeShape(fields: FieldSpec[], yupTypeMap: Record<string, ValidatorSchema>, validatorRegistry: Record<string, ValidatorSchema[]> | undefined): {};
15
16
  export declare function getYupObjectShape(fields: FieldSpec[] | any, yupTypeMap: Record<string, any>, validatorRegistry?: Record<string, ValidatorSchema[]>): yup.ObjectSchema<{
@@ -8,6 +8,7 @@ export * from "@digigov/form/validators/utils/phone";
8
8
  export * from "@digigov/form/validators/utils/postal_code";
9
9
  export * from "@digigov/form/validators/utils/uuid4";
10
10
  export * from "@digigov/form/validators/utils/text_limit";
11
+ export * from "@digigov/form/validators/utils/date";
11
12
  function getYupField(field, yupTypeMap) {
12
13
  const yupField = yupTypeMap[field?.type || "string"] || yupTypeMap["string"];
13
14
  return yupField(field);
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/validators/utils/index.ts"],
4
- "sourcesContent": ["import * as yup from 'yup';\nimport { FieldSpec } from '@digigov/form/types';\nimport { ValidatorSchema } from '@digigov/form/validators/types';\n\nexport * from '@digigov/form/validators/utils/afm';\nexport * from '@digigov/form/validators/utils/file';\nexport * from '@digigov/form/validators/utils/iban';\nexport * from '@digigov/form/validators/utils/otp';\nexport * from '@digigov/form/validators/utils/image';\nexport * from '@digigov/form/validators/utils/phone';\nexport * from '@digigov/form/validators/utils/postal_code';\nexport * from '@digigov/form/validators/utils/uuid4';\nexport * from '@digigov/form/validators/utils/text_limit';\n\nexport function getYupField(field: FieldSpec, yupTypeMap: Record<string, any>) {\n const yupField = yupTypeMap[field?.type || 'string'] || yupTypeMap['string'];\n return yupField(field);\n}\nexport function computeShape(\n fields: FieldSpec[],\n yupTypeMap: Record<string, ValidatorSchema>,\n validatorRegistry: Record<string, ValidatorSchema[]> | undefined\n) {\n const fieldSchemas = {};\n const objectFields: Record<string, FieldSpec[]> = {};\n fields.forEach((field) => {\n let yupField = getYupField(field, yupTypeMap);\n if (field.condition) {\n for (const key in field.condition) {\n let then: any, otherwise: any;\n if (field.condition[key].then) {\n if (field.condition[key].then?.required === false) {\n then = yupField.nullable();\n } else if (field.condition[key].then?.required === true) {\n then = yupField.nullable().required('form.error.required');\n }\n }\n if (field.condition[key].else) {\n if (field.condition[key].else?.required === false) {\n otherwise = yupField.nullable();\n } else if (field.condition[key].else?.required === true) {\n otherwise = yupField.nullable().required('form.error.required');\n }\n }\n if (then || otherwise) {\n yupField = yupField.when(key, {\n is: (val) => {\n //@ts-ignore\n const is = field.condition[key].is;\n if (is === val || (Array.isArray(val) && val.includes(is))) {\n return true;\n } else {\n return false;\n }\n },\n then,\n otherwise,\n });\n }\n }\n } else if (field.required) {\n yupField = yupField.nullable().required('form.error.required');\n }\n if (validatorRegistry && field.type && validatorRegistry[field.type]) {\n validatorRegistry[field.type].forEach((validator: any) => {\n yupField = yupField.test(validator);\n });\n }\n if (field.validators) {\n field.validators.forEach((validator) => {\n yupField = yupField.test(validator);\n });\n }\n fieldSchemas[field.key] = yupField;\n });\n for (const objectKey in objectFields) {\n fieldSchemas[objectKey] = getYupObjectShape(\n objectFields[objectKey],\n yupTypeMap,\n validatorRegistry\n );\n }\n return fieldSchemas;\n}\n\nexport function getYupObjectShape(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n fields: FieldSpec[] | any,\n yupTypeMap: Record<string, any>,\n validatorRegistry?: Record<string, ValidatorSchema[]>\n) {\n if (!fields.current) {\n const fieldSchemas = computeShape(fields, yupTypeMap, validatorRegistry);\n return yup.object().shape(fieldSchemas);\n }\n\n return yup.lazy(function () {\n const fieldSchemas = computeShape(\n Object.values(fields.current),\n yupTypeMap,\n validatorRegistry\n );\n return yup.object().shape(fieldSchemas);\n });\n}\n"],
5
- "mappings": "AAAA,YAAY,SAAS;AAIrB,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AAEP,SAAS,YAAY,OAAkB,YAAiC;AAC7E,QAAM,WAAW,WAAW,OAAO,QAAQ,QAAQ,KAAK,WAAW,QAAQ;AAC3E,SAAO,SAAS,KAAK;AACvB;AACO,SAAS,aACd,QACA,YACA,mBACA;AACA,QAAM,eAAe,CAAC;AACtB,QAAM,eAA4C,CAAC;AACnD,SAAO,QAAQ,CAAC,UAAU;AACxB,QAAI,WAAW,YAAY,OAAO,UAAU;AAC5C,QAAI,MAAM,WAAW;AACnB,iBAAW,OAAO,MAAM,WAAW;AACjC,YAAI,MAAW;AACf,YAAI,MAAM,UAAU,GAAG,EAAE,MAAM;AAC7B,cAAI,MAAM,UAAU,GAAG,EAAE,MAAM,aAAa,OAAO;AACjD,mBAAO,SAAS,SAAS;AAAA,UAC3B,WAAW,MAAM,UAAU,GAAG,EAAE,MAAM,aAAa,MAAM;AACvD,mBAAO,SAAS,SAAS,EAAE,SAAS,qBAAqB;AAAA,UAC3D;AAAA,QACF;AACA,YAAI,MAAM,UAAU,GAAG,EAAE,MAAM;AAC7B,cAAI,MAAM,UAAU,GAAG,EAAE,MAAM,aAAa,OAAO;AACjD,wBAAY,SAAS,SAAS;AAAA,UAChC,WAAW,MAAM,UAAU,GAAG,EAAE,MAAM,aAAa,MAAM;AACvD,wBAAY,SAAS,SAAS,EAAE,SAAS,qBAAqB;AAAA,UAChE;AAAA,QACF;AACA,YAAI,QAAQ,WAAW;AACrB,qBAAW,SAAS,KAAK,KAAK;AAAA,YAC5B,IAAI,CAAC,QAAQ;AAEX,oBAAM,KAAK,MAAM,UAAU,GAAG,EAAE;AAChC,kBAAI,OAAO,OAAQ,MAAM,QAAQ,GAAG,KAAK,IAAI,SAAS,EAAE,GAAI;AAC1D,uBAAO;AAAA,cACT,OAAO;AACL,uBAAO;AAAA,cACT;AAAA,YACF;AAAA,YACA;AAAA,YACA;AAAA,UACF,CAAC;AAAA,QACH;AAAA,MACF;AAAA,IACF,WAAW,MAAM,UAAU;AACzB,iBAAW,SAAS,SAAS,EAAE,SAAS,qBAAqB;AAAA,IAC/D;AACA,QAAI,qBAAqB,MAAM,QAAQ,kBAAkB,MAAM,IAAI,GAAG;AACpE,wBAAkB,MAAM,IAAI,EAAE,QAAQ,CAAC,cAAmB;AACxD,mBAAW,SAAS,KAAK,SAAS;AAAA,MACpC,CAAC;AAAA,IACH;AACA,QAAI,MAAM,YAAY;AACpB,YAAM,WAAW,QAAQ,CAAC,cAAc;AACtC,mBAAW,SAAS,KAAK,SAAS;AAAA,MACpC,CAAC;AAAA,IACH;AACA,iBAAa,MAAM,GAAG,IAAI;AAAA,EAC5B,CAAC;AACD,aAAW,aAAa,cAAc;AACpC,iBAAa,SAAS,IAAI;AAAA,MACxB,aAAa,SAAS;AAAA,MACtB;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACA,SAAO;AACT;AAEO,SAAS,kBAEd,QACA,YACA,mBACA;AACA,MAAI,CAAC,OAAO,SAAS;AACnB,UAAM,eAAe,aAAa,QAAQ,YAAY,iBAAiB;AACvE,WAAO,IAAI,OAAO,EAAE,MAAM,YAAY;AAAA,EACxC;AAEA,SAAO,IAAI,KAAK,WAAY;AAC1B,UAAM,eAAe;AAAA,MACnB,OAAO,OAAO,OAAO,OAAO;AAAA,MAC5B;AAAA,MACA;AAAA,IACF;AACA,WAAO,IAAI,OAAO,EAAE,MAAM,YAAY;AAAA,EACxC,CAAC;AACH;",
4
+ "sourcesContent": ["import * as yup from 'yup';\nimport { FieldSpec } from '@digigov/form/types';\nimport { ValidatorSchema } from '@digigov/form/validators/types';\n\nexport * from '@digigov/form/validators/utils/afm';\nexport * from '@digigov/form/validators/utils/file';\nexport * from '@digigov/form/validators/utils/iban';\nexport * from '@digigov/form/validators/utils/otp';\nexport * from '@digigov/form/validators/utils/image';\nexport * from '@digigov/form/validators/utils/phone';\nexport * from '@digigov/form/validators/utils/postal_code';\nexport * from '@digigov/form/validators/utils/uuid4';\nexport * from '@digigov/form/validators/utils/text_limit';\nexport * from '@digigov/form/validators/utils/date';\n\nexport function getYupField(field: FieldSpec, yupTypeMap: Record<string, any>) {\n const yupField = yupTypeMap[field?.type || 'string'] || yupTypeMap['string'];\n return yupField(field);\n}\nexport function computeShape(\n fields: FieldSpec[],\n yupTypeMap: Record<string, ValidatorSchema>,\n validatorRegistry: Record<string, ValidatorSchema[]> | undefined\n) {\n const fieldSchemas = {};\n const objectFields: Record<string, FieldSpec[]> = {};\n fields.forEach((field) => {\n let yupField = getYupField(field, yupTypeMap);\n if (field.condition) {\n for (const key in field.condition) {\n let then: any, otherwise: any;\n if (field.condition[key].then) {\n if (field.condition[key].then?.required === false) {\n then = yupField.nullable();\n } else if (field.condition[key].then?.required === true) {\n then = yupField.nullable().required('form.error.required');\n }\n }\n if (field.condition[key].else) {\n if (field.condition[key].else?.required === false) {\n otherwise = yupField.nullable();\n } else if (field.condition[key].else?.required === true) {\n otherwise = yupField.nullable().required('form.error.required');\n }\n }\n if (then || otherwise) {\n yupField = yupField.when(key, {\n is: (val) => {\n //@ts-ignore\n const is = field.condition[key].is;\n if (is === val || (Array.isArray(val) && val.includes(is))) {\n return true;\n } else {\n return false;\n }\n },\n then,\n otherwise,\n });\n }\n }\n } else if (field.required) {\n yupField = yupField.nullable().required('form.error.required');\n }\n if (validatorRegistry && field.type && validatorRegistry[field.type]) {\n validatorRegistry[field.type].forEach((validator: any) => {\n yupField = yupField.test(validator);\n });\n }\n if (field.validators) {\n field.validators.forEach((validator) => {\n yupField = yupField.test(validator);\n });\n }\n fieldSchemas[field.key] = yupField;\n });\n for (const objectKey in objectFields) {\n fieldSchemas[objectKey] = getYupObjectShape(\n objectFields[objectKey],\n yupTypeMap,\n validatorRegistry\n );\n }\n return fieldSchemas;\n}\n\nexport function getYupObjectShape(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n fields: FieldSpec[] | any,\n yupTypeMap: Record<string, any>,\n validatorRegistry?: Record<string, ValidatorSchema[]>\n) {\n if (!fields.current) {\n const fieldSchemas = computeShape(fields, yupTypeMap, validatorRegistry);\n return yup.object().shape(fieldSchemas);\n }\n\n return yup.lazy(function () {\n const fieldSchemas = computeShape(\n Object.values(fields.current),\n yupTypeMap,\n validatorRegistry\n );\n return yup.object().shape(fieldSchemas);\n });\n}\n"],
5
+ "mappings": "AAAA,YAAY,SAAS;AAIrB,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AAEP,SAAS,YAAY,OAAkB,YAAiC;AAC7E,QAAM,WAAW,WAAW,OAAO,QAAQ,QAAQ,KAAK,WAAW,QAAQ;AAC3E,SAAO,SAAS,KAAK;AACvB;AACO,SAAS,aACd,QACA,YACA,mBACA;AACA,QAAM,eAAe,CAAC;AACtB,QAAM,eAA4C,CAAC;AACnD,SAAO,QAAQ,CAAC,UAAU;AACxB,QAAI,WAAW,YAAY,OAAO,UAAU;AAC5C,QAAI,MAAM,WAAW;AACnB,iBAAW,OAAO,MAAM,WAAW;AACjC,YAAI,MAAW;AACf,YAAI,MAAM,UAAU,GAAG,EAAE,MAAM;AAC7B,cAAI,MAAM,UAAU,GAAG,EAAE,MAAM,aAAa,OAAO;AACjD,mBAAO,SAAS,SAAS;AAAA,UAC3B,WAAW,MAAM,UAAU,GAAG,EAAE,MAAM,aAAa,MAAM;AACvD,mBAAO,SAAS,SAAS,EAAE,SAAS,qBAAqB;AAAA,UAC3D;AAAA,QACF;AACA,YAAI,MAAM,UAAU,GAAG,EAAE,MAAM;AAC7B,cAAI,MAAM,UAAU,GAAG,EAAE,MAAM,aAAa,OAAO;AACjD,wBAAY,SAAS,SAAS;AAAA,UAChC,WAAW,MAAM,UAAU,GAAG,EAAE,MAAM,aAAa,MAAM;AACvD,wBAAY,SAAS,SAAS,EAAE,SAAS,qBAAqB;AAAA,UAChE;AAAA,QACF;AACA,YAAI,QAAQ,WAAW;AACrB,qBAAW,SAAS,KAAK,KAAK;AAAA,YAC5B,IAAI,CAAC,QAAQ;AAEX,oBAAM,KAAK,MAAM,UAAU,GAAG,EAAE;AAChC,kBAAI,OAAO,OAAQ,MAAM,QAAQ,GAAG,KAAK,IAAI,SAAS,EAAE,GAAI;AAC1D,uBAAO;AAAA,cACT,OAAO;AACL,uBAAO;AAAA,cACT;AAAA,YACF;AAAA,YACA;AAAA,YACA;AAAA,UACF,CAAC;AAAA,QACH;AAAA,MACF;AAAA,IACF,WAAW,MAAM,UAAU;AACzB,iBAAW,SAAS,SAAS,EAAE,SAAS,qBAAqB;AAAA,IAC/D;AACA,QAAI,qBAAqB,MAAM,QAAQ,kBAAkB,MAAM,IAAI,GAAG;AACpE,wBAAkB,MAAM,IAAI,EAAE,QAAQ,CAAC,cAAmB;AACxD,mBAAW,SAAS,KAAK,SAAS;AAAA,MACpC,CAAC;AAAA,IACH;AACA,QAAI,MAAM,YAAY;AACpB,YAAM,WAAW,QAAQ,CAAC,cAAc;AACtC,mBAAW,SAAS,KAAK,SAAS;AAAA,MACpC,CAAC;AAAA,IACH;AACA,iBAAa,MAAM,GAAG,IAAI;AAAA,EAC5B,CAAC;AACD,aAAW,aAAa,cAAc;AACpC,iBAAa,SAAS,IAAI;AAAA,MACxB,aAAa,SAAS;AAAA,MACtB;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACA,SAAO;AACT;AAEO,SAAS,kBAEd,QACA,YACA,mBACA;AACA,MAAI,CAAC,OAAO,SAAS;AACnB,UAAM,eAAe,aAAa,QAAQ,YAAY,iBAAiB;AACvE,WAAO,IAAI,OAAO,EAAE,MAAM,YAAY;AAAA,EACxC;AAEA,SAAO,IAAI,KAAK,WAAY;AAC1B,UAAM,eAAe;AAAA,MACnB,OAAO,OAAO,OAAO,OAAO;AAAA,MAC5B;AAAA,MACA;AAAA,IACF;AACA,WAAO,IAAI,OAAO,EAAE,MAAM,YAAY;AAAA,EACxC,CAAC;AACH;",
6
6
  "names": []
7
7
  }
@@ -2,7 +2,7 @@ import { FieldSpec } from '@digigov/form/types';
2
2
  import { ValidatorSchema } from '@digigov/form/validators/types';
3
3
  export type PhoneNumberType = 'landline' | 'mobile' | null;
4
4
  export declare function discoverPhoneType(phoneNumber: string, config: any): string;
5
- export declare function validatePhoneNumber(phoneNumber: string, countries?: Array<string>, typeOfPhoneNumber?: PhoneNumberType): boolean;
5
+ export declare function validatePhoneNumber(phoneNumber: string, countries?: string[], typeOfPhoneNumber?: PhoneNumberType): boolean;
6
6
  export declare const MOBILE_PHONE_VALIDATOR: {
7
7
  name: string;
8
8
  message: string;
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/validators/utils/phone.ts"],
4
- "sourcesContent": ["import { FieldSpec } from '@digigov/form/types';\nimport { ValidatorSchema } from '@digigov/form/validators/types';\n\nexport type PhoneNumberType = 'landline' | 'mobile' | null;\n// add more countries from here libphonenumber-js/metadata.full.json\nconst countryPhoneData = {\n GR: [\n '30',\n '00',\n '5005000\\\\d{3}|8\\\\d{9,11}|(?:[269]\\\\d|70)\\\\d{8}',\n [10, 11, 12],\n [\n ['(\\\\d{2})(\\\\d{4})(\\\\d{4})', '$1 $2 $3', ['21|7']],\n [\n '(\\\\d{4})(\\\\d{6})',\n '$1 $2',\n ['2(?:2|3[2-57-9]|4[2-469]|5[2-59]|6[2-9]|7[2-69]|8[2-49])|5'],\n ],\n ['(\\\\d{3})(\\\\d{3})(\\\\d{4})', '$1 $2 $3', ['[2689]']],\n ['(\\\\d{3})(\\\\d{3,4})(\\\\d{5})', '$1 $2 $3', ['8']],\n ],\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n [\n [\n '2(?:1\\\\d\\\\d|2(?:2[1-46-9]|[36][1-8]|4[1-7]|5[1-4]|7[1-5]|[89][1-9])|3(?:1\\\\d|2[1-57]|[35][1-3]|4[13]|7[1-7]|8[124-6]|9[1-79])|4(?:1\\\\d|2[1-8]|3[1-4]|4[13-5]|6[1-578]|9[1-5])|5(?:1\\\\d|[29][1-4]|3[1-5]|4[124]|5[1-6])|6(?:1\\\\d|[269][1-6]|3[1245]|4[1-7]|5[13-9]|7[14]|8[1-5])|7(?:1\\\\d|2[1-5]|3[1-6]|4[1-7]|5[1-57]|6[135]|9[125-7])|8(?:1\\\\d|2[1-5]|[34][1-4]|9[1-57]))\\\\d{6}',\n [10],\n ],\n ['68[57-9]\\\\d{7}|(?:69|94)\\\\d{8}', [10]],\n ['800\\\\d{7,9}'],\n ['90[19]\\\\d{7}', [10]],\n ['70\\\\d{8}', [10]],\n 0,\n ['5005000\\\\d{3}', [10]],\n 0,\n 0,\n ['8(?:0[16]|12|[27]5|50)\\\\d{7}', [10]],\n ],\n ],\n};\n\nfunction expandPhoneNumberStructure(compressed) {\n const countries = Object.keys(compressed);\n const expanded: any = {};\n for (const country of countries) {\n expanded[country] = {\n fixedLine: {\n possibleLengths: {\n _national: compressed[country][3].map(String),\n },\n nationalNumberPattern: compressed[country][11][0][0],\n },\n mobile: {\n nationalNumberPattern: compressed[country][11][1][0],\n },\n tollFree: {\n nationalNumberPattern: compressed[country][11][2][0],\n },\n premiumRate: {\n nationalNumberPattern: compressed[country][11][3][0],\n },\n sharedCost: {\n nationalNumberPattern: compressed[country][11][9][0],\n },\n personalNumber: {\n nationalNumberPattern: compressed[country][11][4][0],\n },\n uan: {\n nationalNumberPattern: compressed[country][11][6][0],\n },\n id: country,\n countryCode: compressed[country][0],\n internationalPrefix: compressed[country][1],\n };\n }\n return expanded;\n}\nconst PHONENUMBER_SPEC = expandPhoneNumberStructure(countryPhoneData);\nexport function discoverPhoneType(phoneNumber: string, config: any): string {\n const cleanNumber = phoneNumber\n .replace(/\\D/g, '')\n .replace(/\\s/g, '')\n .replace(/^\\+/, '')\n .replace(new RegExp('^' + config.internationalPrefix, ''), '')\n .replace(new RegExp('^' + config.countryCode, ''), '');\n const categories = {\n landline: config.fixedLine,\n mobile: config.mobile,\n 'toll-free': config.tollFree,\n 'premium-rate': config.premiumRate,\n };\n\n for (const [categoryName, categoryDetails] of Object.entries(categories)) {\n const pattern = new RegExp(\n '^(' + categoryDetails.nationalNumberPattern.replace(/\\s/g, '') + ')$',\n ''\n );\n if (cleanNumber.match(pattern)) {\n return categoryName; // Returns the category name if the number matches the pattern\n }\n }\n\n // If no category matches, return 'Unknown'\n return 'unknown';\n}\nfunction getNumberType(phoneNumber: string, country: string) {\n const spec = PHONENUMBER_SPEC[country.toUpperCase()];\n if (!spec) {\n throw new Error(`Country ${country} is not supported`);\n }\n const type = discoverPhoneType(phoneNumber, spec);\n return type;\n}\n\nfunction isPhoneNumberValid(\n phoneNumber: string,\n countries: string[],\n types = ['mobile', 'landline']\n) {\n return countries.some((country) => {\n const numberType = getNumberType(phoneNumber, country);\n if (numberType && types.includes(numberType)) {\n return true;\n }\n return false;\n });\n}\nfunction isNumberOfType(phoneNumber: string, country: string, type: string) {\n const numberType = getNumberType(phoneNumber, country);\n if (numberType === type) {\n return true;\n }\n return false;\n}\nexport function validatePhoneNumber(\n phoneNumber: string,\n countries: Array<string> = ['gr'],\n typeOfPhoneNumber?: PhoneNumberType\n): boolean {\n if (!countries || countries.length === 0) {\n return true;\n }\n return isPhoneNumberValid(\n phoneNumber,\n countries,\n typeOfPhoneNumber ? [typeOfPhoneNumber] : undefined\n );\n}\n\nfunction validateMobile(value): boolean {\n return isNumberOfType(value, 'gr', 'mobile');\n}\n\nexport const MOBILE_PHONE_VALIDATOR = {\n name: 'mobile-phone-validator',\n message: 'form.error.mobile_phone',\n test: (value): boolean => {\n if (value) {\n return validateMobile(value);\n }\n return true;\n },\n};\n\nexport const PHONE_NUMBER_VALIDATOR = (field: FieldSpec): ValidatorSchema => {\n const countryCodes = field?.extra?.countries;\n const typeOfPhone: PhoneNumberType | null = field?.extra?.phoneType;\n return {\n name: 'phone-number-validator',\n message: (): string => {\n if (typeOfPhone === 'mobile') {\n return 'form.error.mobile_phone';\n }\n if (typeOfPhone === 'landline') {\n return 'form.error.landline';\n } else {\n return 'form.error.phone_number';\n }\n },\n test: (value: string): boolean => {\n if (!value) {\n return true;\n }\n return validatePhoneNumber(value, countryCodes, typeOfPhone);\n },\n };\n};\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { FieldSpec } from '@digigov/form/types';\nimport { ValidatorSchema } from '@digigov/form/validators/types';\n\nexport type PhoneNumberType = 'landline' | 'mobile' | null;\n// add more countries from here libphonenumber-js/metadata.full.json\nconst countryPhoneData = {\n GR: [\n '30',\n '00',\n '5005000\\\\d{3}|8\\\\d{9,11}|(?:[269]\\\\d|70)\\\\d{8}',\n [10, 11, 12],\n [\n ['(\\\\d{2})(\\\\d{4})(\\\\d{4})', '$1 $2 $3', ['21|7']],\n [\n '(\\\\d{4})(\\\\d{6})',\n '$1 $2',\n ['2(?:2|3[2-57-9]|4[2-469]|5[2-59]|6[2-9]|7[2-69]|8[2-49])|5'],\n ],\n ['(\\\\d{3})(\\\\d{3})(\\\\d{4})', '$1 $2 $3', ['[2689]']],\n ['(\\\\d{3})(\\\\d{3,4})(\\\\d{5})', '$1 $2 $3', ['8']],\n ],\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n [\n [\n '2(?:1\\\\d\\\\d|2(?:2[1-46-9]|[36][1-8]|4[1-7]|5[1-4]|7[1-5]|[89][1-9])|3(?:1\\\\d|2[1-57]|[35][1-3]|4[13]|7[1-7]|8[124-6]|9[1-79])|4(?:1\\\\d|2[1-8]|3[1-4]|4[13-5]|6[1-578]|9[1-5])|5(?:1\\\\d|[29][1-4]|3[1-5]|4[124]|5[1-6])|6(?:1\\\\d|[269][1-6]|3[1245]|4[1-7]|5[13-9]|7[14]|8[1-5])|7(?:1\\\\d|2[1-5]|3[1-6]|4[1-7]|5[1-57]|6[135]|9[125-7])|8(?:1\\\\d|2[1-5]|[34][1-4]|9[1-57]))\\\\d{6}',\n [10],\n ],\n ['68[57-9]\\\\d{7}|(?:69|94)\\\\d{8}', [10]],\n ['800\\\\d{7,9}'],\n ['90[19]\\\\d{7}', [10]],\n ['70\\\\d{8}', [10]],\n 0,\n ['5005000\\\\d{3}', [10]],\n 0,\n 0,\n ['8(?:0[16]|12|[27]5|50)\\\\d{7}', [10]],\n ],\n ],\n};\n\nfunction expandPhoneNumberStructure(compressed) {\n const countries = Object.keys(compressed);\n const expanded: any = {};\n for (const country of countries) {\n expanded[country] = {\n fixedLine: {\n possibleLengths: {\n _national: compressed[country][3].map(String),\n },\n nationalNumberPattern: compressed[country][11][0][0],\n },\n mobile: {\n nationalNumberPattern: compressed[country][11][1][0],\n },\n tollFree: {\n nationalNumberPattern: compressed[country][11][2][0],\n },\n premiumRate: {\n nationalNumberPattern: compressed[country][11][3][0],\n },\n sharedCost: {\n nationalNumberPattern: compressed[country][11][9][0],\n },\n personalNumber: {\n nationalNumberPattern: compressed[country][11][4][0],\n },\n uan: {\n nationalNumberPattern: compressed[country][11][6][0],\n },\n id: country,\n countryCode: compressed[country][0],\n internationalPrefix: compressed[country][1],\n };\n }\n return expanded;\n}\nconst PHONENUMBER_SPEC = expandPhoneNumberStructure(countryPhoneData);\nexport function discoverPhoneType(phoneNumber: string, config: any): string {\n const cleanNumber = phoneNumber\n .replace(/\\D/g, '')\n .replace(/\\s/g, '')\n .replace(/^\\+/, '')\n .replace(new RegExp('^' + config.internationalPrefix, ''), '')\n .replace(new RegExp('^' + config.countryCode, ''), '');\n const categories = {\n landline: config.fixedLine,\n mobile: config.mobile,\n 'toll-free': config.tollFree,\n 'premium-rate': config.premiumRate,\n };\n\n for (const [categoryName, categoryDetails] of Object.entries(categories)) {\n const pattern = new RegExp(\n '^(' + categoryDetails.nationalNumberPattern.replace(/\\s/g, '') + ')$',\n ''\n );\n if (cleanNumber.match(pattern)) {\n return categoryName; // Returns the category name if the number matches the pattern\n }\n }\n\n // If no category matches, return 'Unknown'\n return 'unknown';\n}\nfunction getNumberType(phoneNumber: string, country: string) {\n const spec = PHONENUMBER_SPEC[country.toUpperCase()];\n if (!spec) {\n throw new Error(`Country ${country} is not supported`);\n }\n const type = discoverPhoneType(phoneNumber, spec);\n return type;\n}\n\nfunction isPhoneNumberValid(\n phoneNumber: string,\n countries: string[],\n types = ['mobile', 'landline']\n) {\n return countries.some((country) => {\n const numberType = getNumberType(phoneNumber, country);\n if (numberType && types.includes(numberType)) {\n return true;\n }\n return false;\n });\n}\nfunction isNumberOfType(phoneNumber: string, country: string, type: string) {\n const numberType = getNumberType(phoneNumber, country);\n if (numberType === type) {\n return true;\n }\n return false;\n}\nexport function validatePhoneNumber(\n phoneNumber: string,\n countries: string[] = ['gr'],\n typeOfPhoneNumber?: PhoneNumberType\n): boolean {\n if (!countries || countries.length === 0) {\n return true;\n }\n return isPhoneNumberValid(\n phoneNumber,\n countries,\n typeOfPhoneNumber ? [typeOfPhoneNumber] : undefined\n );\n}\n\nfunction validateMobile(value): boolean {\n return isNumberOfType(value, 'gr', 'mobile');\n}\n\nexport const MOBILE_PHONE_VALIDATOR = {\n name: 'mobile-phone-validator',\n message: 'form.error.mobile_phone',\n test: (value): boolean => {\n if (value) {\n return validateMobile(value);\n }\n return true;\n },\n};\n\nexport const PHONE_NUMBER_VALIDATOR = (field: FieldSpec): ValidatorSchema => {\n const countryCodes = field?.extra?.countries;\n const typeOfPhone: PhoneNumberType | null = field?.extra?.phoneType;\n return {\n name: 'phone-number-validator',\n message: (): string => {\n if (typeOfPhone === 'mobile') {\n return 'form.error.mobile_phone';\n }\n if (typeOfPhone === 'landline') {\n return 'form.error.landline';\n } else {\n return 'form.error.phone_number';\n }\n },\n test: (value: string): boolean => {\n if (!value) {\n return true;\n }\n return validatePhoneNumber(value, countryCodes, typeOfPhone);\n },\n };\n};\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -1,4 +1,4 @@
1
1
  import { FieldSpec } from '@digigov/form/types';
2
2
  import { ValidatorSchema } from '@digigov/form/validators/types';
3
- export declare function validatePostalCode(number: string, countries: Array<string>): boolean;
3
+ export declare function validatePostalCode(number: string, countries: string[]): boolean;
4
4
  export declare const POSTALCODE_VALIDATOR: (field: FieldSpec) => ValidatorSchema;
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/validators/utils/postal_code.ts"],
4
- "sourcesContent": ["import { FieldSpec } from '@digigov/form/types';\nimport { ValidatorSchema } from '@digigov/form/validators/types';\n\nconst CODE_REGEX = /^[12345678][0-9]{4}$/;\nexport function validatePostalCode(\n number: string,\n countries: Array<string>\n): boolean {\n if (!countries) {\n return false;\n } else {\n if (countries.length === 1 && countries[0].toUpperCase() === 'GR') {\n // Greek postal code must be 5 digits long and shouldn't start with 0 or 9.\n return CODE_REGEX.test(number);\n } else {\n return true;\n }\n }\n}\n\nexport const POSTALCODE_VALIDATOR = (field: FieldSpec): ValidatorSchema => {\n const countryCode = field?.extra?.countries;\n return {\n name: 'postal-code-validator',\n message: 'form.error.postalCode',\n test: (value: string): boolean => {\n if (!value) {\n return true;\n }\n return validatePostalCode(value, countryCode);\n },\n };\n};\n"],
4
+ "sourcesContent": ["import { FieldSpec } from '@digigov/form/types';\nimport { ValidatorSchema } from '@digigov/form/validators/types';\n\nconst CODE_REGEX = /^[12345678][0-9]{4}$/;\nexport function validatePostalCode(\n number: string,\n countries: string[]\n): boolean {\n if (!countries) {\n return false;\n } else {\n if (countries.length === 1 && countries[0].toUpperCase() === 'GR') {\n // Greek postal code must be 5 digits long and shouldn't start with 0 or 9.\n return CODE_REGEX.test(number);\n } else {\n return true;\n }\n }\n}\n\nexport const POSTALCODE_VALIDATOR = (field: FieldSpec): ValidatorSchema => {\n const countryCode = field?.extra?.countries;\n return {\n name: 'postal-code-validator',\n message: 'form.error.postalCode',\n test: (value: string): boolean => {\n if (!value) {\n return true;\n }\n return validatePostalCode(value, countryCode);\n },\n };\n};\n"],
5
5
  "mappings": "AAGA,MAAM,aAAa;AACZ,SAAS,mBACd,QACA,WACS;AACT,MAAI,CAAC,WAAW;AACd,WAAO;AAAA,EACT,OAAO;AACL,QAAI,UAAU,WAAW,KAAK,UAAU,CAAC,EAAE,YAAY,MAAM,MAAM;AAEjE,aAAO,WAAW,KAAK,MAAM;AAAA,IAC/B,OAAO;AACL,aAAO;AAAA,IACT;AAAA,EACF;AACF;AAEO,MAAM,uBAAuB,CAAC,UAAsC;AACzE,QAAM,cAAc,OAAO,OAAO;AAClC,SAAO;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IACT,MAAM,CAAC,UAA2B;AAChC,UAAI,CAAC,OAAO;AACV,eAAO;AAAA,MACT;AACA,aAAO,mBAAmB,OAAO,WAAW;AAAA,IAC9C;AAAA,EACF;AACF;",
6
6
  "names": []
7
7
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/validators/utils/uuid4.ts"],
4
- "sourcesContent": ["const 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;\n\nexport function validateUUID4(uuid4: string): boolean {\n if (uuid4.length !== 36) {\n // This uuid4 should be 36 characters long\n return false;\n }\n\n return UUID4_PATTERN.test(uuid4);\n}\n\nexport const UUID4_VALIDATOR = {\n name: 'uuid4-validator',\n message: 'form.error.uuid4',\n test: (value): boolean => {\n if (value) {\n return validateUUID4(value);\n }\n return true;\n },\n};\n"],
5
- "mappings": "AAAA,MAAM,gBAAgB;AAEf,SAAS,cAAc,OAAwB;AACpD,MAAI,MAAM,WAAW,IAAI;AAEvB,WAAO;AAAA,EACT;AAEA,SAAO,cAAc,KAAK,KAAK;AACjC;AAEO,MAAM,kBAAkB;AAAA,EAC7B,MAAM;AAAA,EACN,SAAS;AAAA,EACT,MAAM,CAAC,UAAmB;AACxB,QAAI,OAAO;AACT,aAAO,cAAc,KAAK;AAAA,IAC5B;AACA,WAAO;AAAA,EACT;AACF;",
4
+ "sourcesContent": ["const UUID4_PATTERN =\n /^[0-9A-F]{8}-[0-9A-F]{4}-[4][0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i;\n\nexport function validateUUID4(uuid4: string): boolean {\n if (uuid4.length !== 36) {\n // This uuid4 should be 36 characters long\n return false;\n }\n\n return UUID4_PATTERN.test(uuid4);\n}\n\nexport const UUID4_VALIDATOR = {\n name: 'uuid4-validator',\n message: 'form.error.uuid4',\n test: (value): boolean => {\n if (value) {\n return validateUUID4(value);\n }\n return true;\n },\n};\n"],
5
+ "mappings": "AAAA,MAAM,gBACJ;AAEK,SAAS,cAAc,OAAwB;AACpD,MAAI,MAAM,WAAW,IAAI;AAEvB,WAAO;AAAA,EACT;AAEA,SAAO,cAAc,KAAK,KAAK;AACjC;AAEO,MAAM,kBAAkB;AAAA,EAC7B,MAAM;AAAA,EACN,SAAS;AAAA,EACT,MAAM,CAAC,UAAmB;AACxB,QAAI,OAAO;AACT,aAAO,cAAc,KAAK;AAAA,IAC5B;AACA,WAAO;AAAA,EACT;AACF;",
6
6
  "names": []
7
7
  }
package/src/index.tsx DELETED
@@ -1,178 +0,0 @@
1
- /* eslint-disable @typescript-eslint/no-explicit-any */
2
- import React, { useCallback, useContext, useRef } from 'react';
3
- import { useForm } from 'react-hook-form';
4
- import Field from '@digigov/form/Field';
5
- import Fieldset from '@digigov/form/Fieldset';
6
- import { FormContext } from '@digigov/form/FormContext';
7
- import { FormBaseProps, FormData, FormBuilderProps } from '@digigov/form/types';
8
- import { yupResolver } from '@digigov/form/utils';
9
- import { useValidationSchema } from '@digigov/form/validators';
10
- import { Form } from '@digigov/react-core/Form';
11
- import { Button } from '@digigov/ui/form/Button';
12
-
13
- const FormBase = React.forwardRef(function FormBase(
14
- {
15
- onSubmit,
16
- children,
17
- registerField,
18
- fieldsMap,
19
- fieldsetsMap,
20
- resolver,
21
- mode,
22
- initial,
23
- reValidateMode,
24
- shouldFocusError,
25
- criteriaMode,
26
- componentRegistry,
27
- grid,
28
- ...props
29
- }: FormBaseProps,
30
- ref: React.Ref<HTMLFormElement>
31
- ) {
32
- const form = useForm({
33
- resolver,
34
- mode,
35
- defaultValues: initial,
36
- reValidateMode,
37
- shouldFocusError,
38
- criteriaMode,
39
- });
40
-
41
- const handleSubmit = useCallback(
42
- (data: FormData): void => {
43
- onSubmit && onSubmit(data);
44
- },
45
- [onSubmit]
46
- );
47
- const submit = form.handleSubmit(handleSubmit);
48
-
49
- const ctx = {
50
- fieldsMap,
51
- fieldsetsMap,
52
- control: form.control,
53
- register: form.register,
54
- watch: form.watch,
55
- resetField: form.resetField,
56
- registerField: registerField,
57
- errors: form.formState.errors,
58
- formState: form.formState,
59
- reset: form.reset,
60
- trigger: form.trigger,
61
- getFieldState: form.getFieldState,
62
- setValue: form.setValue,
63
- clearErrors: form.clearErrors,
64
- getValues: form.getValues,
65
- unregister: form.unregister,
66
- componentRegistry,
67
- setError: form.setError,
68
- formRef: ref,
69
- submit,
70
- };
71
- return (
72
- <FormContext.Provider value={ctx}>
73
- <Form grid={grid} onSubmit={submit} ref={ref} {...props}>
74
- {children}
75
- </Form>
76
- </FormContext.Provider>
77
- );
78
- });
79
-
80
- const useFormContext = () => {
81
- return useContext(FormContext);
82
- };
83
- const useFormValues = () => {
84
- const ctx = useFormContext();
85
- return ctx.getValues();
86
- };
87
- const FormBuilder = React.forwardRef(function FormBuilder(
88
- {
89
- fields = [],
90
- fieldsets,
91
- initial = {},
92
- onSubmit,
93
- children,
94
- reValidateMode = 'onSubmit',
95
- mode = 'onSubmit',
96
- shouldFocusError = true,
97
- criteriaMode = 'all',
98
- auto = false,
99
- validatorRegistry,
100
- componentRegistry,
101
- grid = false,
102
- ...props
103
- }: FormBuilderProps,
104
- ref: React.Ref<HTMLFormElement>
105
- ): React.ReactElement {
106
- const fieldsState = useRef(fields);
107
- const setFieldsState = useCallback((newFields) => {
108
- fieldsState.current = newFields;
109
- }, []);
110
- const schema = useValidationSchema(fieldsState, validatorRegistry);
111
- const registerField = useCallback((field) => {
112
- const fieldIndex = fieldsState.current.findIndex(
113
- (f) => f.key === field.key
114
- );
115
- if (fieldIndex > -1) {
116
- fieldsState.current[fieldIndex] = field;
117
- } else {
118
- fieldsState.current.push(field);
119
- }
120
- setFieldsState(fieldsState.current);
121
- }, []);
122
- let resolver;
123
- let fieldsMap;
124
- let fieldsetsMap;
125
- let fieldChildren;
126
- if (schema) {
127
- resolver = yupResolver(schema);
128
- fieldsMap = fields
129
- ? fields.reduce((map, field) => ({ ...map, [field.key]: field }), {})
130
- : {};
131
- fieldsetsMap =
132
- fieldsets &&
133
- fieldsets.reduce(
134
- (map, fieldset) => ({ ...map, [fieldset.key]: fieldset }),
135
- {}
136
- );
137
-
138
- if (auto) {
139
- if (fieldsets) {
140
- fieldChildren = fieldsets.map((fieldset) => (
141
- <Fieldset key={fieldset.key} />
142
- ));
143
- } else if (fields) {
144
- fieldChildren = fields.map((field) => (
145
- <Field key={field.key} name={field.key} />
146
- ));
147
- }
148
- }
149
- }
150
- return (
151
- <FormBase
152
- resolver={resolver}
153
- fieldsetsMap={fieldsetsMap}
154
- fieldsMap={fieldsMap}
155
- registerField={registerField}
156
- initial={initial}
157
- reValidateMode={reValidateMode}
158
- mode={mode}
159
- shouldFocusError={shouldFocusError}
160
- criteriaMode={criteriaMode}
161
- onSubmit={onSubmit}
162
- componentRegistry={componentRegistry}
163
- ref={ref}
164
- grid={grid}
165
- {...props}
166
- >
167
- {fieldChildren}
168
- {auto && <Button type="submit">Συνέχεια</Button>}
169
- {children}
170
- </FormBase>
171
- );
172
- });
173
-
174
- export { FormBase, useFormContext, useFormValues, FormBuilder };
175
-
176
- export * from '@digigov/form/internal';
177
-
178
- export default FormBuilder;
@@ -1,19 +0,0 @@
1
- ---
2
- title: Image Input
3
- ---
4
-
5
- # Image input
6
-
7
-
8
-
9
- Input element of type `image` defines an image as a submit button, i.e. submit buttons that take the form of an image rather than text.
10
-
11
- ## How to use
12
-
13
- ### Default
14
-
15
- <Story
16
- packageName="@digigov/form"
17
- component="inputs/ImageInput"
18
- story="Default.tsx"
19
- />
@@ -1,95 +0,0 @@
1
- ---
2
- title: Input
3
- ---
4
-
5
- # Input
6
-
7
-
8
-
9
- The input element of type `string` is used to create interactive controls for web-based forms in order to accept data from the user;
10
- a wide variety of types of input data and control widgets are available, depending on the device and user agent. The input element is one of the most powerful and complex in all of HTML due to the sheer number of combinations of input types and attributes.
11
-
12
- ## How to use
13
-
14
- ### String
15
-
16
- <Story
17
- packageName="@digigov/form"
18
- component="inputs/Input"
19
- story="String.tsx"
20
- />
21
-
22
- ### Boolean
23
-
24
- <Story
25
- packageName="@digigov/form"
26
- component="inputs/Input"
27
- story="Boolean.tsx"
28
- />
29
- ### AFM
30
-
31
- <Story
32
- packageName="@digigov/form"
33
- component="inputs/Input"
34
- story="AFM.tsx"
35
- />
36
-
37
- ### IBAN
38
-
39
- <Story
40
- packageName="@digigov/form"
41
- component="inputs/Input"
42
- story="IBAN.tsx"
43
- />
44
-
45
- ### Integer
46
-
47
- <Story
48
- packageName="@digigov/form"
49
- component="inputs/Input"
50
- story="Integer.tsx"
51
- />
52
-
53
- ### Landline number
54
-
55
- <Story
56
- packageName="@digigov/form"
57
- component="inputs/Input"
58
- story="LandlineNumber.tsx"
59
- />
60
-
61
- ### Mobile phone
62
-
63
- <Story
64
- packageName="@digigov/form"
65
- component="inputs/Input"
66
- story="MobilePhone.tsx"
67
- />
68
-
69
- ### Phone number
70
-
71
- <Story
72
- packageName="@digigov/form"
73
- component="inputs/Input"
74
- story="PhoneNumber.tsx"
75
- />
76
-
77
- ### Postal code
78
-
79
- <Story
80
- packageName="@digigov/form"
81
- component="inputs/Input"
82
- story="PostalCode.tsx"
83
- />
84
-
85
- ### Text with character limit
86
-
87
- <Story
88
- packageName="@digigov/form"
89
- component="inputs/Input"
90
- story="TextWithLimit.tsx"
91
- />
92
-
93
-
94
-
95
-
File without changes
File without changes