@digigov/form 0.7.1 → 0.8.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 (243) hide show
  1. package/CHANGELOG.md +8 -1
  2. package/Field/FieldBase.js +3 -11
  3. package/Field/FieldContainer.js +6 -3
  4. package/Field/index.js +37 -1
  5. package/Field/utils.js +17 -1
  6. package/FieldArray/FieldArray.stories.js +44 -0
  7. package/FieldArray/__stories__/Default.js +109 -0
  8. package/FieldArray/__stories__/WithExactLength.js +108 -0
  9. package/FieldArray/index.js +88 -0
  10. package/FieldObject/index.js +80 -0
  11. package/FormBuilder.js +22 -12
  12. package/MultiplicityField/MultiplicityField.stories.js +86 -0
  13. package/MultiplicityField/__stories__/Default.js +121 -0
  14. package/MultiplicityField/__stories__/WithExactLength.js +116 -0
  15. package/MultiplicityField/__stories__/WithMaxLength.js +119 -0
  16. package/MultiplicityField/__stories__/WithMinAndMaxLength.js +120 -0
  17. package/MultiplicityField/__stories__/WithMinLength.js +119 -0
  18. package/MultiplicityField/add-objects.js +180 -0
  19. package/MultiplicityField/index.js +146 -0
  20. package/es/Field/FieldBase.js +3 -11
  21. package/es/Field/FieldContainer.js +6 -3
  22. package/es/Field/index.js +35 -1
  23. package/es/Field/utils.js +17 -1
  24. package/es/FieldArray/FieldArray.stories.js +7 -0
  25. package/es/FieldArray/__stories__/Default.js +88 -0
  26. package/es/FieldArray/__stories__/WithExactLength.js +87 -0
  27. package/es/FieldArray/index.js +65 -0
  28. package/es/FieldObject/index.js +55 -0
  29. package/es/FormBuilder.js +22 -11
  30. package/es/MultiplicityField/MultiplicityField.stories.js +10 -0
  31. package/es/MultiplicityField/__stories__/Default.js +100 -0
  32. package/es/MultiplicityField/__stories__/WithExactLength.js +95 -0
  33. package/es/MultiplicityField/__stories__/WithMaxLength.js +98 -0
  34. package/es/MultiplicityField/__stories__/WithMinAndMaxLength.js +99 -0
  35. package/es/MultiplicityField/__stories__/WithMinLength.js +98 -0
  36. package/es/MultiplicityField/add-objects.js +156 -0
  37. package/es/MultiplicityField/index.js +116 -0
  38. package/es/inputs/Radio/index.js +8 -13
  39. package/es/internal.js +2 -0
  40. package/es/utils.js +61 -46
  41. package/es/validators/index.js +26 -10
  42. package/es/validators/utils/index.js +1 -19
  43. package/esm/Field/FieldBase.js +3 -11
  44. package/esm/Field/FieldContainer.js +6 -3
  45. package/esm/Field/index.js +35 -1
  46. package/esm/Field/utils.js +17 -1
  47. package/esm/FieldArray/FieldArray.stories.js +7 -0
  48. package/esm/FieldArray/__stories__/Default.js +88 -0
  49. package/esm/FieldArray/__stories__/WithExactLength.js +87 -0
  50. package/esm/FieldArray/index.js +65 -0
  51. package/esm/FieldObject/index.js +55 -0
  52. package/esm/FormBuilder.js +22 -11
  53. package/esm/MultiplicityField/MultiplicityField.stories.js +10 -0
  54. package/esm/MultiplicityField/__stories__/Default.js +100 -0
  55. package/esm/MultiplicityField/__stories__/WithExactLength.js +95 -0
  56. package/esm/MultiplicityField/__stories__/WithMaxLength.js +98 -0
  57. package/esm/MultiplicityField/__stories__/WithMinAndMaxLength.js +99 -0
  58. package/esm/MultiplicityField/__stories__/WithMinLength.js +98 -0
  59. package/esm/MultiplicityField/add-objects.js +156 -0
  60. package/esm/MultiplicityField/index.js +116 -0
  61. package/esm/index.js +1 -1
  62. package/esm/inputs/Radio/index.js +8 -13
  63. package/esm/internal.js +2 -0
  64. package/esm/utils.js +61 -46
  65. package/esm/validators/index.js +26 -10
  66. package/esm/validators/utils/index.js +1 -19
  67. package/inputs/Radio/index.js +8 -20
  68. package/internal.js +21 -0
  69. package/libs/form/src/Field/types.d.ts +21 -13
  70. package/libs/form/src/FieldArray/FieldArray.stories.d.ts +8 -0
  71. package/libs/form/src/FieldArray/__stories__/Default.d.ts +1 -0
  72. package/libs/form/src/FieldArray/__stories__/WithExactLength.d.ts +1 -0
  73. package/libs/form/src/FieldArray/index.d.ts +11 -0
  74. package/libs/form/src/FieldObject/index.d.ts +20 -0
  75. package/libs/form/src/MultiplicityField/MultiplicityField.stories.d.ts +11 -0
  76. package/libs/form/src/MultiplicityField/__stories__/Default.d.ts +1 -0
  77. package/libs/form/src/MultiplicityField/__stories__/WithExactLength.d.ts +1 -0
  78. package/libs/form/src/MultiplicityField/__stories__/WithMaxLength.d.ts +1 -0
  79. package/libs/form/src/MultiplicityField/__stories__/WithMinAndMaxLength.d.ts +1 -0
  80. package/libs/form/src/MultiplicityField/__stories__/WithMinLength.d.ts +1 -0
  81. package/libs/form/src/MultiplicityField/add-objects.d.ts +13 -0
  82. package/libs/form/src/MultiplicityField/index.d.ts +32 -0
  83. package/libs/form/src/inputs/Label/index.d.ts +1 -0
  84. package/libs/form/src/internal.d.ts +2 -0
  85. package/libs/form/src/types.d.ts +19 -11
  86. package/libs/form/src/utils.d.ts +8 -3
  87. package/libs/form/src/validators/index.d.ts +4 -3
  88. package/libs/form/src/validators/types.d.ts +1 -1
  89. package/libs/form/src/validators/utils/file.d.ts +3 -1
  90. package/libs/form/src/validators/utils/iban.d.ts +3 -1
  91. package/libs/form/src/validators/utils/index.d.ts +15 -3
  92. package/libs/form/src/validators/utils/phone.d.ts +3 -1
  93. package/libs/form/src/validators/utils/postal_code.d.ts +3 -1
  94. package/libs/ui/src/app/i18n.d.ts +2 -2
  95. package/libs/ui/src/core/Accordion/index.d.ts +3 -3
  96. package/libs/ui/src/core/Blockquote/index.d.ts +1 -1
  97. package/libs/ui/src/core/Button/BackButton.d.ts +1 -1
  98. package/libs/ui/src/core/Button/ButtonLink.d.ts +1 -1
  99. package/libs/ui/src/core/Button/index.d.ts +1 -1
  100. package/libs/ui/src/core/Divider/index.d.ts +1 -1
  101. package/libs/ui/src/locales/el.d.ts +6 -0
  102. package/libs/ui/src/typography/Caption/index.d.ts +1 -1
  103. package/libs-ui/react-core/src/Accordion/index.d.ts +1 -1
  104. package/libs-ui/react-core/src/AccordionControls/index.d.ts +1 -1
  105. package/libs-ui/react-core/src/AccordionSection/index.d.ts +1 -1
  106. package/libs-ui/react-core/src/AccordionSectionContent/index.d.ts +1 -1
  107. package/libs-ui/react-core/src/AccordionSectionHeader/index.d.ts +1 -1
  108. package/libs-ui/react-core/src/AccordionSectionSummary/index.d.ts +1 -1
  109. package/libs-ui/react-core/src/AccordionSectionSummaryHeading/index.d.ts +1 -1
  110. package/libs-ui/react-core/src/Aside/index.d.ts +10 -0
  111. package/libs-ui/react-core/src/BackLink/index.d.ts +1 -1
  112. package/libs-ui/react-core/src/Blockquote/index.d.ts +1 -1
  113. package/libs-ui/react-core/src/Bottom/index.d.ts +9 -0
  114. package/libs-ui/react-core/src/Breadcrumbs/index.d.ts +1 -1
  115. package/libs-ui/react-core/src/BreadcrumbsList/index.d.ts +1 -1
  116. package/libs-ui/react-core/src/BreadcrumbsListItem/index.d.ts +1 -1
  117. package/libs-ui/react-core/src/Button/index.d.ts +1 -1
  118. package/libs-ui/react-core/src/ButtonGroup/index.d.ts +1 -1
  119. package/libs-ui/react-core/src/ButtonLink/index.d.ts +1 -1
  120. package/libs-ui/react-core/src/CallToAction/index.d.ts +1 -1
  121. package/libs-ui/react-core/src/Card/index.d.ts +1 -1
  122. package/libs-ui/react-core/src/CardAction/index.d.ts +1 -1
  123. package/libs-ui/react-core/src/CardHeading/index.d.ts +1 -1
  124. package/libs-ui/react-core/src/CardText/index.d.ts +1 -1
  125. package/libs-ui/react-core/src/Checkbox/index.d.ts +1 -1
  126. package/libs-ui/react-core/src/CheckboxConditional/index.d.ts +11 -0
  127. package/libs-ui/react-core/src/CheckboxItem/index.d.ts +1 -1
  128. package/libs-ui/react-core/src/Confirmation/index.d.ts +1 -1
  129. package/libs-ui/react-core/src/ConfirmationBody/index.d.ts +1 -1
  130. package/libs-ui/react-core/src/ConfirmationTitle/index.d.ts +1 -1
  131. package/libs-ui/react-core/src/Container/index.d.ts +17 -0
  132. package/libs-ui/react-core/src/Copyright/index.d.ts +10 -0
  133. package/libs-ui/react-core/src/DateInput/index.d.ts +1 -1
  134. package/libs-ui/react-core/src/DateInputItem/index.d.ts +1 -1
  135. package/libs-ui/react-core/src/Details/index.d.ts +1 -1
  136. package/libs-ui/react-core/src/DetailsContent/index.d.ts +1 -1
  137. package/libs-ui/react-core/src/DetailsSummary/index.d.ts +1 -1
  138. package/libs-ui/react-core/src/ErrorMessage/index.d.ts +1 -1
  139. package/libs-ui/react-core/src/ErrorSummary/index.d.ts +1 -1
  140. package/libs-ui/react-core/src/Field/index.d.ts +1 -1
  141. package/libs-ui/react-core/src/Fieldset/index.d.ts +1 -1
  142. package/libs-ui/react-core/src/FieldsetLegend/index.d.ts +1 -1
  143. package/libs-ui/react-core/src/FileUpload/index.d.ts +1 -1
  144. package/libs-ui/react-core/src/Footer/index.d.ts +9 -0
  145. package/libs-ui/react-core/src/FooterContainer/index.d.ts +16 -0
  146. package/libs-ui/react-core/src/FooterContent/index.d.ts +10 -0
  147. package/libs-ui/react-core/src/FooterContentLogos/index.d.ts +11 -0
  148. package/libs-ui/react-core/src/FooterHeading/index.d.ts +15 -0
  149. package/libs-ui/react-core/src/FooterImage/index.d.ts +15 -0
  150. package/libs-ui/react-core/src/FooterInlineList/index.d.ts +11 -0
  151. package/libs-ui/react-core/src/FooterInlineListItem/index.d.ts +9 -0
  152. package/libs-ui/react-core/src/FooterLink/index.d.ts +13 -0
  153. package/libs-ui/react-core/src/FooterList/index.d.ts +15 -0
  154. package/libs-ui/react-core/src/FooterListItem/index.d.ts +10 -0
  155. package/libs-ui/react-core/src/FooterMeta/index.d.ts +11 -0
  156. package/libs-ui/react-core/src/FooterMetaItem/index.d.ts +14 -0
  157. package/libs-ui/react-core/src/FooterNavigation/index.d.ts +11 -0
  158. package/libs-ui/react-core/src/FooterSection/index.d.ts +11 -0
  159. package/libs-ui/react-core/src/Form/index.d.ts +1 -1
  160. package/libs-ui/react-core/src/GovGRFooter/index.d.ts +9 -0
  161. package/libs-ui/react-core/src/GovGRLogo/index.d.ts +9 -0
  162. package/libs-ui/react-core/src/Grid/index.d.ts +1 -1
  163. package/libs-ui/react-core/src/Header/index.d.ts +10 -0
  164. package/libs-ui/react-core/src/HeaderContent/index.d.ts +9 -0
  165. package/libs-ui/react-core/src/HeaderLogo/index.d.ts +21 -0
  166. package/libs-ui/react-core/src/HeaderSecondaryLogo/index.d.ts +21 -0
  167. package/libs-ui/react-core/src/HeaderSection/index.d.ts +9 -0
  168. package/libs-ui/react-core/src/HeaderSubtitle/index.d.ts +9 -0
  169. package/libs-ui/react-core/src/HeaderTitle/index.d.ts +13 -0
  170. package/libs-ui/react-core/src/Heading/index.d.ts +1 -1
  171. package/libs-ui/react-core/src/HeadingCaption/index.d.ts +1 -1
  172. package/libs-ui/react-core/src/HellenicRepublicLogo/index.d.ts +20 -0
  173. package/libs-ui/react-core/src/HellenicRepublicLogo/logo-el.d.ts +2 -0
  174. package/libs-ui/react-core/src/HellenicRepublicLogo/logo-en.d.ts +2 -0
  175. package/libs-ui/react-core/src/Hidden/index.d.ts +1 -1
  176. package/libs-ui/react-core/src/Hint/index.d.ts +1 -1
  177. package/libs-ui/react-core/src/Label/index.d.ts +1 -1
  178. package/libs-ui/react-core/src/LabelTitle/index.d.ts +1 -1
  179. package/libs-ui/react-core/src/Layout/index.d.ts +10 -0
  180. package/libs-ui/react-core/src/Link/index.d.ts +1 -1
  181. package/libs-ui/react-core/src/List/index.d.ts +1 -1
  182. package/libs-ui/react-core/src/ListItem/index.d.ts +1 -1
  183. package/libs-ui/react-core/src/Main/index.d.ts +9 -0
  184. package/libs-ui/react-core/src/Masthead/index.d.ts +9 -0
  185. package/libs-ui/react-core/src/MastheadBody/index.d.ts +9 -0
  186. package/libs-ui/react-core/src/NavHorizontal/index.d.ts +1 -1
  187. package/libs-ui/react-core/src/NavHorizontalList/index.d.ts +1 -1
  188. package/libs-ui/react-core/src/NavHorizontalListItem/index.d.ts +1 -1
  189. package/libs-ui/react-core/src/NavVertical/index.d.ts +1 -1
  190. package/libs-ui/react-core/src/NavVerticalItem/index.d.ts +1 -1
  191. package/libs-ui/react-core/src/NormalText/index.d.ts +1 -1
  192. package/libs-ui/react-core/src/NotificationBanner/index.d.ts +1 -1
  193. package/libs-ui/react-core/src/NotificationBannerContent/index.d.ts +1 -1
  194. package/libs-ui/react-core/src/NotificationBannerHeader/index.d.ts +1 -1
  195. package/libs-ui/react-core/src/NotificationBannerHeading/index.d.ts +1 -1
  196. package/libs-ui/react-core/src/NotificationBannerLink/index.d.ts +1 -1
  197. package/libs-ui/react-core/src/PageTitle/index.d.ts +9 -0
  198. package/libs-ui/react-core/src/PageTitleCaption/index.d.ts +14 -0
  199. package/libs-ui/react-core/src/PageTitleHeading/index.d.ts +13 -0
  200. package/libs-ui/react-core/src/PageTitleSection/index.d.ts +10 -0
  201. package/libs-ui/react-core/src/Paragraph/index.d.ts +1 -1
  202. package/libs-ui/react-core/src/PhaseBanner/index.d.ts +1 -1
  203. package/libs-ui/react-core/src/PhaseBannerHeaderContainer/index.d.ts +1 -1
  204. package/libs-ui/react-core/src/PhaseBannerTag/index.d.ts +1 -1
  205. package/libs-ui/react-core/src/PhaseBannerText/index.d.ts +1 -1
  206. package/libs-ui/react-core/src/Radio/index.d.ts +1 -1
  207. package/libs-ui/react-core/src/RadioConditional/index.d.ts +11 -0
  208. package/libs-ui/react-core/src/RadioItem/index.d.ts +1 -1
  209. package/libs-ui/react-core/src/SectionBreak/index.d.ts +1 -1
  210. package/libs-ui/react-core/src/Select/index.d.ts +1 -1
  211. package/libs-ui/react-core/src/SelectOption/index.d.ts +1 -1
  212. package/libs-ui/react-core/src/ServiceBadge/index.d.ts +11 -0
  213. package/libs-ui/react-core/src/SkipLink/index.d.ts +1 -1
  214. package/libs-ui/react-core/src/SummaryList/index.d.ts +1 -1
  215. package/libs-ui/react-core/src/SummaryListItem/index.d.ts +1 -1
  216. package/libs-ui/react-core/src/SummaryListItemAction/index.d.ts +1 -1
  217. package/libs-ui/react-core/src/SummaryListItemKey/index.d.ts +1 -1
  218. package/libs-ui/react-core/src/SummaryListItemValue/index.d.ts +1 -1
  219. package/libs-ui/react-core/src/SvgIcon/index.d.ts +1 -1
  220. package/libs-ui/react-core/src/Table/index.d.ts +1 -1
  221. package/libs-ui/react-core/src/TableBody/index.d.ts +1 -1
  222. package/libs-ui/react-core/src/TableCaption/index.d.ts +1 -1
  223. package/libs-ui/react-core/src/TableContainer/index.d.ts +1 -1
  224. package/libs-ui/react-core/src/TableDataCell/index.d.ts +1 -1
  225. package/libs-ui/react-core/src/TableHead/index.d.ts +1 -1
  226. package/libs-ui/react-core/src/TableHeadCell/index.d.ts +1 -1
  227. package/libs-ui/react-core/src/TableNoDataRow/index.d.ts +1 -1
  228. package/libs-ui/react-core/src/TableRow/index.d.ts +1 -1
  229. package/libs-ui/react-core/src/Tabs/index.d.ts +1 -1
  230. package/libs-ui/react-core/src/TabsHeading/index.d.ts +1 -1
  231. package/libs-ui/react-core/src/TabsList/index.d.ts +1 -1
  232. package/libs-ui/react-core/src/TabsListItem/index.d.ts +1 -1
  233. package/libs-ui/react-core/src/TabsPanel/index.d.ts +1 -1
  234. package/libs-ui/react-core/src/TextArea/index.d.ts +1 -1
  235. package/libs-ui/react-core/src/TextInput/index.d.ts +1 -1
  236. package/libs-ui/react-core/src/Top/index.d.ts +9 -0
  237. package/libs-ui/react-core/src/VisuallyHidden/index.d.ts +1 -1
  238. package/libs-ui/react-core/src/WarningText/index.d.ts +1 -1
  239. package/libs-ui/react-core/src/index.d.ts +141 -0
  240. package/package.json +6 -5
  241. package/utils.js +61 -47
  242. package/validators/index.js +26 -10
  243. package/validators/utils/index.js +1 -23
@@ -33,10 +33,26 @@ export var getYUPTypeMap = function getYUPTypeMap() {
33
33
  if (_typeof(field.extra.of) === 'object') {
34
34
  // else if the field is an object then it is a scalar type
35
35
  // eg. number, string etc.
36
- return yup.array().of(yupTypeMap[field.extra.of.type](field.extra.of)); // .min(field.extra.min)
37
- // .max(field.extra.max)
38
- // .length(field.extra.length)
39
- // .required(field.required);
36
+ var arrayValidator = yup.array().of(yupTypeMap[field.extra.of.type](field.extra.of)).required(field.required);
37
+ if (field.extra.length) arrayValidator = arrayValidator.length(field.extra.length, {
38
+ key: 'form.error.array.length',
39
+ context: {
40
+ length: field.extra.length
41
+ }
42
+ });
43
+ if (field.extra.min) arrayValidator = arrayValidator.min(field.extra.min, {
44
+ key: 'form.error.array.min',
45
+ context: {
46
+ min: field.extra.min
47
+ }
48
+ });
49
+ if (field.extra.max) arrayValidator = arrayValidator.max(field.extra.max, {
50
+ key: 'form.error.array.max',
51
+ context: {
52
+ max: field.extra.max
53
+ }
54
+ });
55
+ return arrayValidator; // .required(field.required)
40
56
  } else if (typeof field.extra.of === 'string') {
41
57
  return yup.array().of(yupTypeMap[field.extra.of]());
42
58
  } else {
@@ -77,8 +93,8 @@ export var getYUPTypeMap = function getYUPTypeMap() {
77
93
  date: function date(field) {
78
94
  var simpleDate = yup.string().nullable(true).test('date', 'form.error.date.invalid', function (value) {
79
95
  if (!value) return true;
80
- value = getDate(value);
81
- return value.isValid();
96
+ var date = getDate(value);
97
+ return date.isValid();
82
98
  });
83
99
  var params = field.extra || {};
84
100
 
@@ -104,8 +120,8 @@ export var getYUPTypeMap = function getYUPTypeMap() {
104
120
  },
105
121
  test: function test(value) {
106
122
  if (!value) return true;
107
- value = getDate(value);
108
- var isValid = +value.toDate() < +maxDate;
123
+ var date = getDate(value);
124
+ var isValid = +date.toDate() < +maxDate;
109
125
  return isValid;
110
126
  }
111
127
  });
@@ -134,8 +150,8 @@ export var getYUPTypeMap = function getYUPTypeMap() {
134
150
  },
135
151
  test: function test(value) {
136
152
  if (!value) return true;
137
- value = getDate(value);
138
- var isValid = +value.toDate() > +minDate;
153
+ var date = getDate(value);
154
+ var isValid = +date.toDate() > +minDate;
139
155
  return isValid;
140
156
  }
141
157
  });
@@ -1,5 +1,3 @@
1
- import _extends from "@babel/runtime/helpers/extends";
2
- import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
3
1
  import * as yup from 'yup';
4
2
  export * from '@digigov/form/validators/utils/afm';
5
3
  export * from '@digigov/form/validators/utils/file';
@@ -8,29 +6,13 @@ export * from '@digigov/form/validators/utils/phone';
8
6
  export * from '@digigov/form/validators/utils/postal_code';
9
7
  export * from '@digigov/form/validators/utils/uuid4';
10
8
  export function getYupField(field, yupTypeMap) {
11
- var yupField = yupTypeMap[field.type] || yupTypeMap.string;
9
+ var yupField = yupTypeMap[(field === null || field === void 0 ? void 0 : field.type) || 'string'] || yupTypeMap['string'];
12
10
  return yupField(field);
13
11
  }
14
12
  export function computeShape(fields, yupTypeMap, validatorRegistry) {
15
13
  var fieldSchemas = {};
16
14
  var objectFields = {};
17
15
  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
16
  var yupField = getYupField(field, yupTypeMap);
35
17
 
36
18
  if (field.condition) {
@@ -40,14 +40,8 @@ export var FieldBase = function FieldBase(props) {
40
40
  control: control,
41
41
  name: name,
42
42
  render: function render(_ref) {
43
- var onChange = _ref.onChange,
44
- onBlur = _ref.onBlur,
45
- value = _ref.value;
46
- return /*#__PURE__*/React.createElement(Component, _extends({
47
- name: name,
48
- onChange: onChange,
49
- onBlur: onBlur,
50
- value: value,
43
+ var field = _ref.field;
44
+ return /*#__PURE__*/React.createElement(Component, _extends({}, field, {
51
45
  defaultValue: defaultValue,
52
46
  extra: extra,
53
47
  error: !!error,
@@ -67,9 +61,7 @@ export var FieldBase = function FieldBase(props) {
67
61
  error: error,
68
62
  wrapper: wrapper,
69
63
  name: name
70
- }, Component !== null && Component !== void 0 && Component.render ? /*#__PURE__*/React.createElement(Component, _extends({
71
- name: name,
72
- ref: register,
64
+ }, Component !== null && Component !== void 0 && Component.render ? /*#__PURE__*/React.createElement(Component, _extends({}, register(name), {
73
65
  control: control,
74
66
  error: !!error,
75
67
  extra: extra,
@@ -19,14 +19,17 @@ export var FieldContainer = function FieldContainer(_ref) {
19
19
  var _useTranslation = useTranslation(),
20
20
  t = _useTranslation.t;
21
21
 
22
+ var errorMessage = error !== null && error !== void 0 && error.message.key ? error.message.key : (error === null || error === void 0 ? void 0 : error.message) || '';
23
+ var errorContext = (error === null || error === void 0 ? void 0 : error.message.context) || {};
24
+
22
25
  if (wrapper === 'fieldset') {
23
26
  return /*#__PURE__*/React.createElement(CoreField, _extends({
24
27
  error: !!error
25
28
  }, layout), /*#__PURE__*/React.createElement(CoreFieldset, null, /*#__PURE__*/React.createElement(FieldsetLegend, {
26
29
  size: "s"
27
- }, label && label.primary, label && label.secondary && /*#__PURE__*/React.createElement(Hint, null, t(label.secondary)), error && /*#__PURE__*/React.createElement(ErrorMessage, {
30
+ }, label && label.primary), label && label.secondary && /*#__PURE__*/React.createElement(Hint, null, t(label.secondary)), error && /*#__PURE__*/React.createElement(ErrorMessage, {
28
31
  id: "".concat(name, "-error")
29
- }, t((error === null || error === void 0 ? void 0 : error.message) || ''))), children));
32
+ }, t(errorMessage, errorContext)), children));
30
33
  } else {
31
34
  return /*#__PURE__*/React.createElement(CoreField, _extends({
32
35
  error: !!error
@@ -34,7 +37,7 @@ export var FieldContainer = function FieldContainer(_ref) {
34
37
  label: label
35
38
  }), error && /*#__PURE__*/React.createElement(ErrorMessage, {
36
39
  id: "".concat(name, "-error")
37
- }, t((error === null || error === void 0 ? void 0 : error.message) || '')), children));
40
+ }, t(errorMessage, errorContext)), children));
38
41
  }
39
42
  };
40
43
  export default FieldContainer;
@@ -5,6 +5,8 @@ import React, { useMemo } from 'react';
5
5
  import { FieldBase } from '@digigov/form/Field/FieldBase';
6
6
  import FieldConditional from '@digigov/form/Field/FieldConditional';
7
7
  import { useField, calculateField } from '@digigov/form/Field/utils';
8
+ import FieldArray from '@digigov/form/FieldArray';
9
+ import Multiplicity from '@digigov/form/MultiplicityField';
8
10
  export var Field = function Field(_ref) {
9
11
  var name = _ref.name,
10
12
  children = _ref.children,
@@ -15,7 +17,13 @@ export var Field = function Field(_ref) {
15
17
  control = _useField.control,
16
18
  register = _useField.register,
17
19
  error = _useField.error,
18
- componentRegistry = _useField.componentRegistry;
20
+ componentRegistry = _useField.componentRegistry,
21
+ formState = _useField.formState,
22
+ setValue = _useField.setValue,
23
+ getValues = _useField.getValues,
24
+ unregister = _useField.unregister,
25
+ trigger = _useField.trigger,
26
+ clearErrors = _useField.clearErrors;
19
27
 
20
28
  var calculatedField = useMemo(function () {
21
29
  return calculateField(children, field, componentRegistry);
@@ -30,6 +38,32 @@ export var Field = function Field(_ref) {
30
38
  });
31
39
  }
32
40
 
41
+ if (calculatedField.type === 'array' && calculatedField.multiplicity) {
42
+ // if (error) debugger;
43
+ calculatedField.name = name;
44
+ return /*#__PURE__*/React.createElement(Multiplicity, _extends({
45
+ control: control,
46
+ register: register,
47
+ trigger: trigger,
48
+ clearErrors: clearErrors,
49
+ error: error,
50
+ formState: formState,
51
+ setValue: setValue,
52
+ getValues: getValues,
53
+ unregister: unregister
54
+ }, calculatedField));
55
+ }
56
+
57
+ if (calculatedField.type === 'array') {
58
+ calculatedField.name = name;
59
+ return /*#__PURE__*/React.createElement(FieldArray, _extends({
60
+ control: control,
61
+ register: register,
62
+ error: error,
63
+ formState: formState
64
+ }, calculatedField));
65
+ }
66
+
33
67
  return /*#__PURE__*/React.createElement(FieldBase, _extends({}, calculatedField, {
34
68
  name: name,
35
69
  control: control,
@@ -80,9 +80,17 @@ export var useField = function useField(name, customField) {
80
80
  fieldsMap = _useContext.fieldsMap,
81
81
  control = _useContext.control,
82
82
  register = _useContext.register,
83
+ trigger = _useContext.trigger,
84
+ clearErrors = _useContext.clearErrors,
83
85
  errors = _useContext.errors,
84
86
  registerField = _useContext.registerField,
85
- componentRegistry = _useContext.componentRegistry;
87
+ watch = _useContext.watch,
88
+ componentRegistry = _useContext.componentRegistry,
89
+ getFieldState = _useContext.getFieldState,
90
+ setValue = _useContext.setValue,
91
+ getValues = _useContext.getValues,
92
+ unregister = _useContext.unregister,
93
+ formState = _useContext.formState;
86
94
 
87
95
  useMemo(function () {
88
96
  return (customField === null || customField === void 0 ? void 0 : customField.type) && registerField(_extends({}, customField, {
@@ -93,7 +101,15 @@ export var useField = function useField(name, customField) {
93
101
  field: customField || fieldsMap[name],
94
102
  control: control,
95
103
  register: register,
104
+ trigger: trigger,
105
+ watch: watch,
96
106
  componentRegistry: componentRegistry,
107
+ getFieldState: getFieldState,
108
+ setValue: setValue,
109
+ clearErrors: clearErrors,
110
+ getValues: getValues,
111
+ unregister: unregister,
112
+ formState: formState,
97
113
  error: errors[name]
98
114
  };
99
115
  };
@@ -0,0 +1,7 @@
1
+ import FieldArray from '@digigov/form/FieldArray';
2
+ export default {
3
+ title: 'Digigov Form/FieldArray',
4
+ component: FieldArray
5
+ };
6
+ export * from '@digigov/form/FieldArray/__stories__/Default';
7
+ export * from '@digigov/form/FieldArray/__stories__/WithExactLength';
@@ -0,0 +1,88 @@
1
+ import _extends from "@babel/runtime/helpers/extends";
2
+ import React, { Suspense } from 'react';
3
+ import FormBuilder, { Field } from '@digigov/form';
4
+ import { Button } from '@digigov/ui/core';
5
+ var fields = [{
6
+ key: 'string',
7
+ type: 'string',
8
+ label: {
9
+ primary: 'Πεδίο 1',
10
+ secondary: 'Το multiplicity field είναι ένα πεδίο οπότε φαίνεται και είναι μέρος της φόρμας'
11
+ }
12
+ }, {
13
+ key: 'multiplicity',
14
+ type: 'array',
15
+ label: {
16
+ primary: 'Συνυπογράφοντες',
17
+ secondary: 'Οι συνυπογράφοντες είναι άνθρωποι σαν και εμάς'
18
+ },
19
+ extra: {
20
+ label: {
21
+ question: {
22
+ title: 'Θέλετε να προσθέσετε επιπλέον συνυπογράφοντες;',
23
+ yes: 'Ναι',
24
+ no: 'Όχι'
25
+ },
26
+ edit: 'Επεξεργασία',
27
+ add: 'Προσθέστε τα στοιχεία του επόμενου συνυπογράφοντα',
28
+ "delete": 'Αφαίρεση συνυπογράφοντος',
29
+ save: 'Αποθήκευση'
30
+ },
31
+ min: 2,
32
+ max: 4,
33
+ of: {
34
+ type: 'object',
35
+ extra: {
36
+ fields: [{
37
+ key: 'afm',
38
+ type: 'afm',
39
+ required: true,
40
+ label: {
41
+ primary: 'ΑΦΜ'
42
+ }
43
+ }, {
44
+ key: 'firstName',
45
+ required: true,
46
+ type: 'string',
47
+ label: {
48
+ primary: 'Όνομα'
49
+ }
50
+ }, {
51
+ key: 'lastName',
52
+ required: true,
53
+ type: 'string',
54
+ label: {
55
+ primary: 'Επώνυμο'
56
+ }
57
+ }]
58
+ }
59
+ }
60
+ }
61
+ }, {
62
+ key: 'phonenumber',
63
+ type: 'phone_number',
64
+ required: true,
65
+ label: {
66
+ primary: 'Πεδίο 2',
67
+ secondary: 'Το multiplicity field είναι ένα πεδίο οπότε φαίνεται και είναι μέρος της φόρμας'
68
+ }
69
+ }];
70
+
71
+ var _ref = /*#__PURE__*/React.createElement(Button, null, "\u03A3\u03C5\u03BD\u03AD\u03C7\u03B5\u03B9\u03B1");
72
+
73
+ export var Default = function Default() {
74
+ return /*#__PURE__*/React.createElement(Suspense, {
75
+ fallback: "loading"
76
+ }, /*#__PURE__*/React.createElement(FormBuilder, {
77
+ onSubmit: function onSubmit(data) {
78
+ debugger;
79
+ console.log(data);
80
+ }
81
+ }, /*#__PURE__*/React.createElement(Field, _extends({
82
+ name: "string"
83
+ }, fields[0])), /*#__PURE__*/React.createElement(Field, _extends({
84
+ name: "multiplicity"
85
+ }, fields[1])), /*#__PURE__*/React.createElement(Field, _extends({
86
+ name: "phonenumber"
87
+ }, fields[2])), _ref));
88
+ };
@@ -0,0 +1,87 @@
1
+ import _extends from "@babel/runtime/helpers/extends";
2
+ import React, { Suspense } from 'react';
3
+ import FormBuilder, { Field } from '@digigov/form';
4
+ import { Button } from '@digigov/ui/core';
5
+ var fields = [{
6
+ key: 'string',
7
+ type: 'string',
8
+ label: {
9
+ primary: 'Πεδίο 1',
10
+ secondary: 'Το multiplicity field είναι ένα πεδίο οπότε φαίνεται και είναι μέρος της φόρμας'
11
+ }
12
+ }, {
13
+ key: 'multiplicity',
14
+ type: 'array',
15
+ label: {
16
+ primary: 'Συνυπογράφοντες',
17
+ secondary: 'Οι συνυπογράφοντες είναι άνθρωποι σαν και εμάς'
18
+ },
19
+ extra: {
20
+ label: {
21
+ question: {
22
+ title: 'Θέλετε να προσθέσετε επιπλέον συνυπογράφοντες;',
23
+ yes: 'Ναι',
24
+ no: 'Όχι'
25
+ },
26
+ edit: 'Επεξεργασία',
27
+ add: 'Προσθέστε τα στοιχεία του επόμενου συνυπογράφοντα',
28
+ "delete": 'Αφαίρεση συνυπογράφοντος',
29
+ save: 'Αποθήκευση'
30
+ },
31
+ length: 2,
32
+ of: {
33
+ type: 'object',
34
+ extra: {
35
+ fields: [{
36
+ key: 'afm',
37
+ type: 'afm',
38
+ required: true,
39
+ label: {
40
+ primary: 'ΑΦΜ'
41
+ }
42
+ }, {
43
+ key: 'firstName',
44
+ required: true,
45
+ type: 'string',
46
+ label: {
47
+ primary: 'Όνομα'
48
+ }
49
+ }, {
50
+ key: 'lastName',
51
+ required: true,
52
+ type: 'string',
53
+ label: {
54
+ primary: 'Επώνυμο'
55
+ }
56
+ }]
57
+ }
58
+ }
59
+ }
60
+ }, {
61
+ key: 'phonenumber',
62
+ type: 'phone_number',
63
+ required: true,
64
+ label: {
65
+ primary: 'Πεδίο 2',
66
+ secondary: 'Το multiplicity field είναι ένα πεδίο οπότε φαίνεται και είναι μέρος της φόρμας'
67
+ }
68
+ }];
69
+
70
+ var _ref = /*#__PURE__*/React.createElement(Button, null, "\u03A3\u03C5\u03BD\u03AD\u03C7\u03B5\u03B9\u03B1");
71
+
72
+ export var WithExactLength = function WithExactLength() {
73
+ return /*#__PURE__*/React.createElement(Suspense, {
74
+ fallback: "loading"
75
+ }, /*#__PURE__*/React.createElement(FormBuilder, {
76
+ onSubmit: function onSubmit(data) {
77
+ debugger;
78
+ console.log(data);
79
+ }
80
+ }, /*#__PURE__*/React.createElement(Field, _extends({
81
+ name: "string"
82
+ }, fields[0])), /*#__PURE__*/React.createElement(Field, _extends({
83
+ name: "multiplicity"
84
+ }, fields[1])), /*#__PURE__*/React.createElement(Field, _extends({
85
+ name: "phonenumber"
86
+ }, fields[2])), _ref));
87
+ };
@@ -0,0 +1,65 @@
1
+ import _extends from "@babel/runtime/helpers/extends";
2
+ import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";
3
+ var _excluded = ["name", "register", "control", "formState", "error", "layout", "label"];
4
+ import React from 'react';
5
+ import { DevTool } from '@hookform/devtools';
6
+ import { useFieldArray } from 'react-hook-form';
7
+ import FieldObject from '@digigov/form/FieldObject';
8
+ import { Button, Card } from '@digigov/ui/core';
9
+ import { FieldsetLabel } from '@digigov/form/Fieldset';
10
+ import Fieldset from '@digigov/react-core/Fieldset';
11
+ import FieldContainer from '@digigov/form/Field/FieldContainer';
12
+ export var FieldArray = function FieldArray(_ref) {
13
+ var name = _ref.name,
14
+ register = _ref.register,
15
+ control = _ref.control,
16
+ formState = _ref.formState,
17
+ error = _ref.error,
18
+ layout = _ref.layout,
19
+ label = _ref.label,
20
+ customField = _objectWithoutProperties(_ref, _excluded);
21
+
22
+ var _useFieldArray = useFieldArray({
23
+ control: control,
24
+ name: name
25
+ }),
26
+ fields = _useFieldArray.fields,
27
+ append = _useFieldArray.append,
28
+ remove = _useFieldArray.remove;
29
+
30
+ return /*#__PURE__*/React.createElement(FieldContainer, {
31
+ label: label,
32
+ layout: layout,
33
+ error: formState.isSubmitted && !formState.isSubmitting && error !== null && error !== void 0 && error.message && error ? error : undefined,
34
+ wrapper: "fieldset",
35
+ name: name
36
+ }, /*#__PURE__*/React.createElement(DevTool, {
37
+ control: control
38
+ }), fields.map(function (field, index) {
39
+ var _customField$extra;
40
+
41
+ return /*#__PURE__*/React.createElement(Card, {
42
+ variant: "border",
43
+ key: field.id
44
+ }, /*#__PURE__*/React.createElement(Fieldset, null, /*#__PURE__*/React.createElement(FieldsetLabel, null, "\u03A3\u03C5\u03BD\u03C5\u03C0\u03BF\u03B3\u03C1\u03AC\u03C6\u03BF\u03BD\u03C4\u03B1\u03C2 ", index + 1), /*#__PURE__*/React.createElement(FieldObject, _extends({
45
+ name: "".concat(name, ".").concat(index),
46
+ error: Array.isArray(error) && error[index],
47
+ register: register,
48
+ control: control
49
+ }, (_customField$extra = customField.extra) === null || _customField$extra === void 0 ? void 0 : _customField$extra.of)), /*#__PURE__*/React.createElement(Button, {
50
+ type: "button",
51
+ color: "warning",
52
+ onClick: function onClick() {
53
+ return remove(index);
54
+ }
55
+ }, "Remove")));
56
+ }), /*#__PURE__*/React.createElement(Button, {
57
+ type: "button",
58
+ color: "secondary",
59
+ onClick: function onClick(ev) {
60
+ ev.preventDefault();
61
+ append({});
62
+ }
63
+ }, "\u03A0\u03C1\u03BF\u03C3\u03B8\u03AE\u03BA\u03B7 \u03C3\u03C5\u03BD\u03C5\u03C0\u03BF\u03B3\u03C1\u03AC\u03C6\u03BF\u03BD\u03C4\u03B1"));
64
+ };
65
+ export default FieldArray;
@@ -0,0 +1,55 @@
1
+ import _extends from "@babel/runtime/helpers/extends";
2
+ import React, { useMemo } from 'react';
3
+ import Fieldset, { FieldsetCaption } from '@digigov/form/Fieldset';
4
+ import { useTranslation } from '@digigov/ui/app/i18n';
5
+ import { FieldBase } from '@digigov/form/Field/FieldBase';
6
+ import { calculateField } from '@digigov/form/Field/utils';
7
+ import { FieldsetLegend } from '@digigov/react-core';
8
+ export var FieldObject = function FieldObject(_ref) {
9
+ var name = _ref.name,
10
+ label = _ref.label,
11
+ extra = _ref.extra,
12
+ error = _ref.error,
13
+ control = _ref.control,
14
+ register = _ref.register,
15
+ formState = _ref.formState;
16
+
17
+ var _useTranslation = useTranslation(),
18
+ t = _useTranslation.t;
19
+
20
+ return /*#__PURE__*/React.createElement(Fieldset, null, (label === null || label === void 0 ? void 0 : label.primary) && /*#__PURE__*/React.createElement(FieldsetLegend, {
21
+ size: "s"
22
+ }, t(label.primary)), (label === null || label === void 0 ? void 0 : label.secondary) && /*#__PURE__*/React.createElement(FieldsetCaption, null, t(label.secondary)), extra === null || extra === void 0 ? void 0 : extra.fields.map(function (field) {
23
+ return /*#__PURE__*/React.createElement(FieldObjectItem, {
24
+ key: "".concat(name, ".").concat(field.key),
25
+ name: "".concat(name, ".").concat(field.key),
26
+ control: control,
27
+ register: register,
28
+ field: field,
29
+ error: error && error[field.key],
30
+ formState: formState
31
+ });
32
+ }));
33
+ };
34
+
35
+ var FieldObjectItem = function FieldObjectItem(_ref2) {
36
+ var name = _ref2.name,
37
+ children = _ref2.children,
38
+ field = _ref2.field,
39
+ error = _ref2.error,
40
+ control = _ref2.control,
41
+ formState = _ref2.formState,
42
+ register = _ref2.register;
43
+ var calculatedField = useMemo(function () {
44
+ return calculateField(children, field);
45
+ }, [field]);
46
+ var customError = error ? error : formState === null || formState === void 0 ? void 0 : formState.errors[name];
47
+ return /*#__PURE__*/React.createElement(FieldBase, _extends({}, calculatedField, {
48
+ name: name,
49
+ control: control,
50
+ register: register,
51
+ error: customError
52
+ }));
53
+ };
54
+
55
+ export default FieldObject;
@@ -1,5 +1,4 @@
1
1
  import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
- import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
3
2
  import _extends from "@babel/runtime/helpers/extends";
4
3
  import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";
5
4
  var _excluded = ["onSubmit", "children", "registerField", "fieldsMap", "fieldsetsMap", "resolver", "mode", "initial", "reValidateMode", "shouldFocusError", "criteriaMode", "componentRegistry", "grid"],
@@ -39,22 +38,24 @@ export var FormBase = /*#__PURE__*/React.forwardRef(function FormBase(_ref, ref)
39
38
  criteriaMode: criteriaMode
40
39
  });
41
40
  var handleSubmit = useCallback(function (data) {
42
- var errors = onSubmit && onSubmit(data);
43
-
44
- if (errors) {
45
- for (var key in errors) {
46
- form.setError(key, errors[key]);
47
- }
48
- }
41
+ onSubmit && onSubmit(data);
49
42
  }, [onSubmit]);
50
43
  var ctx = {
51
44
  fieldsMap: fieldsMap,
52
45
  fieldsetsMap: fieldsetsMap,
53
46
  control: form.control,
54
47
  register: form.register,
48
+ watch: form.watch,
55
49
  registerField: registerField,
56
- errors: form.errors,
50
+ errors: form.formState.errors,
51
+ formState: form.formState,
57
52
  reset: form.reset,
53
+ trigger: form.trigger,
54
+ getFieldState: form.getFieldState,
55
+ setValue: form.setValue,
56
+ clearErrors: form.clearErrors,
57
+ getValues: form.getValues,
58
+ unregister: form.unregister,
58
59
  componentRegistry: componentRegistry
59
60
  };
60
61
  return /*#__PURE__*/React.createElement(FormContext.Provider, {
@@ -80,7 +81,7 @@ export var FormBuilder = /*#__PURE__*/React.forwardRef(function FormBuilder(_ref
80
81
  _ref2$shouldFocusErro = _ref2.shouldFocusError,
81
82
  shouldFocusError = _ref2$shouldFocusErro === void 0 ? true : _ref2$shouldFocusErro,
82
83
  _ref2$criteriaMode = _ref2.criteriaMode,
83
- criteriaMode = _ref2$criteriaMode === void 0 ? 'firstError' : _ref2$criteriaMode,
84
+ criteriaMode = _ref2$criteriaMode === void 0 ? 'all' : _ref2$criteriaMode,
84
85
  _ref2$auto = _ref2.auto,
85
86
  auto = _ref2$auto === void 0 ? false : _ref2$auto,
86
87
  validatorRegistry = _ref2.validatorRegistry,
@@ -95,7 +96,17 @@ export var FormBuilder = /*#__PURE__*/React.forwardRef(function FormBuilder(_ref
95
96
  }, []);
96
97
  var schema = useValidationSchema(fieldsState, validatorRegistry);
97
98
  var registerField = useCallback(function (field) {
98
- setFieldsState([].concat(_toConsumableArray(fieldsState.current), [field]));
99
+ var fieldIndex = fieldsState.current.findIndex(function (f) {
100
+ return f.key === field.key;
101
+ });
102
+
103
+ if (fieldIndex > -1) {
104
+ fieldsState.current[fieldIndex] = field;
105
+ } else {
106
+ fieldsState.current.push(field);
107
+ }
108
+
109
+ setFieldsState(fieldsState.current);
99
110
  }, []);
100
111
  var resolver;
101
112
  var fieldsMap;
@@ -0,0 +1,10 @@
1
+ import MultiplicityField from '@digigov/form/MultiplicityField';
2
+ export default {
3
+ title: 'Digigov Form/MultiplicityField',
4
+ component: MultiplicityField
5
+ };
6
+ export * from '@digigov/form/MultiplicityField/__stories__/Default';
7
+ export * from '@digigov/form/MultiplicityField/__stories__/WithMinLength';
8
+ export * from '@digigov/form/MultiplicityField/__stories__/WithMaxLength';
9
+ export * from '@digigov/form/MultiplicityField/__stories__/WithMinAndMaxLength';
10
+ export * from '@digigov/form/MultiplicityField/__stories__/WithExactLength';