@digigov/form 0.7.1 → 0.8.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (203) hide show
  1. package/CHANGELOG.md +26 -1
  2. package/Field/FieldBase.js +4 -14
  3. package/Field/FieldConditional.js +4 -0
  4. package/Field/FieldContainer.js +6 -3
  5. package/Field/index.js +39 -1
  6. package/Field/utils.js +19 -1
  7. package/FieldArray/FieldArray.stories.js +44 -0
  8. package/FieldArray/__stories__/Default.js +109 -0
  9. package/FieldArray/__stories__/WithExactLength.js +108 -0
  10. package/FieldArray/index.js +84 -0
  11. package/FieldObject/index.js +84 -0
  12. package/Form.stories.js +25 -0
  13. package/FormBuilder.js +22 -12
  14. package/MultiplicityField/MultiplicityField.stories.js +86 -0
  15. package/MultiplicityField/__stories__/Default.js +121 -0
  16. package/MultiplicityField/__stories__/WithExactLength.js +116 -0
  17. package/MultiplicityField/__stories__/WithMaxLength.js +119 -0
  18. package/MultiplicityField/__stories__/WithMinAndMaxLength.js +120 -0
  19. package/MultiplicityField/__stories__/WithMinLength.js +119 -0
  20. package/MultiplicityField/add-objects.js +182 -0
  21. package/MultiplicityField/index.js +142 -0
  22. package/__stories__/IntField.js +60 -0
  23. package/es/Field/FieldBase.js +4 -14
  24. package/es/Field/FieldConditional.js +4 -0
  25. package/es/Field/FieldContainer.js +6 -3
  26. package/es/Field/index.js +37 -1
  27. package/es/Field/utils.js +19 -1
  28. package/es/FieldArray/FieldArray.stories.js +7 -0
  29. package/es/FieldArray/__stories__/Default.js +88 -0
  30. package/es/FieldArray/__stories__/WithExactLength.js +87 -0
  31. package/es/FieldArray/index.js +62 -0
  32. package/es/FieldObject/index.js +59 -0
  33. package/es/Form.stories.js +4 -0
  34. package/es/FormBuilder.js +22 -11
  35. package/es/MultiplicityField/MultiplicityField.stories.js +10 -0
  36. package/es/MultiplicityField/__stories__/Default.js +100 -0
  37. package/es/MultiplicityField/__stories__/WithExactLength.js +95 -0
  38. package/es/MultiplicityField/__stories__/WithMaxLength.js +98 -0
  39. package/es/MultiplicityField/__stories__/WithMinAndMaxLength.js +99 -0
  40. package/es/MultiplicityField/__stories__/WithMinLength.js +98 -0
  41. package/es/MultiplicityField/add-objects.js +158 -0
  42. package/es/MultiplicityField/index.js +113 -0
  43. package/es/__stories__/IntField.js +40 -0
  44. package/es/inputs/FileInput/FileInput.stories.js +6 -0
  45. package/es/inputs/FileInput/__stories__/Default.js +23 -0
  46. package/es/inputs/FileInput/index.js +33 -23
  47. package/es/inputs/Input/index.js +1 -1
  48. package/es/inputs/Radio/index.js +8 -13
  49. package/es/internal.js +2 -0
  50. package/es/utils.js +61 -46
  51. package/es/validators/index.js +31 -11
  52. package/es/validators/utils/index.js +1 -19
  53. package/es/validators/utils/int.js +20 -0
  54. package/es/validators/utils/number.js +16 -0
  55. package/esm/Field/FieldBase.js +4 -14
  56. package/esm/Field/FieldConditional.js +4 -0
  57. package/esm/Field/FieldContainer.js +6 -3
  58. package/esm/Field/index.js +37 -1
  59. package/esm/Field/utils.js +19 -1
  60. package/esm/FieldArray/FieldArray.stories.js +7 -0
  61. package/esm/FieldArray/__stories__/Default.js +88 -0
  62. package/esm/FieldArray/__stories__/WithExactLength.js +87 -0
  63. package/esm/FieldArray/index.js +62 -0
  64. package/esm/FieldObject/index.js +59 -0
  65. package/esm/Form.stories.js +4 -0
  66. package/esm/FormBuilder.js +22 -11
  67. package/esm/MultiplicityField/MultiplicityField.stories.js +10 -0
  68. package/esm/MultiplicityField/__stories__/Default.js +100 -0
  69. package/esm/MultiplicityField/__stories__/WithExactLength.js +95 -0
  70. package/esm/MultiplicityField/__stories__/WithMaxLength.js +98 -0
  71. package/esm/MultiplicityField/__stories__/WithMinAndMaxLength.js +99 -0
  72. package/esm/MultiplicityField/__stories__/WithMinLength.js +98 -0
  73. package/esm/MultiplicityField/add-objects.js +158 -0
  74. package/esm/MultiplicityField/index.js +113 -0
  75. package/esm/__stories__/IntField.js +40 -0
  76. package/esm/index.js +1 -1
  77. package/esm/inputs/FileInput/FileInput.stories.js +6 -0
  78. package/esm/inputs/FileInput/__stories__/Default.js +23 -0
  79. package/esm/inputs/FileInput/index.js +33 -23
  80. package/esm/inputs/Input/index.js +1 -1
  81. package/esm/inputs/Radio/index.js +8 -13
  82. package/esm/internal.js +2 -0
  83. package/esm/utils.js +61 -46
  84. package/esm/validators/index.js +31 -11
  85. package/esm/validators/utils/index.js +1 -19
  86. package/esm/validators/utils/int.js +20 -0
  87. package/esm/validators/utils/number.js +16 -0
  88. package/inputs/FileInput/FileInput.stories.js +30 -0
  89. package/inputs/FileInput/__stories__/Default.js +43 -0
  90. package/inputs/FileInput/index.js +37 -23
  91. package/inputs/Input/index.js +1 -1
  92. package/inputs/Radio/index.js +8 -20
  93. package/internal.js +21 -0
  94. package/libs/form/src/Field/types.d.ts +24 -13
  95. package/libs/form/src/FieldArray/FieldArray.stories.d.ts +8 -0
  96. package/libs/form/src/FieldArray/__stories__/Default.d.ts +1 -0
  97. package/libs/form/src/FieldArray/__stories__/WithExactLength.d.ts +1 -0
  98. package/libs/form/src/FieldArray/index.d.ts +11 -0
  99. package/libs/form/src/FieldObject/index.d.ts +22 -0
  100. package/libs/form/src/Form.stories.d.ts +5 -0
  101. package/libs/form/src/MultiplicityField/MultiplicityField.stories.d.ts +11 -0
  102. package/libs/form/src/MultiplicityField/__stories__/Default.d.ts +1 -0
  103. package/libs/form/src/MultiplicityField/__stories__/WithExactLength.d.ts +1 -0
  104. package/libs/form/src/MultiplicityField/__stories__/WithMaxLength.d.ts +1 -0
  105. package/libs/form/src/MultiplicityField/__stories__/WithMinAndMaxLength.d.ts +1 -0
  106. package/libs/form/src/MultiplicityField/__stories__/WithMinLength.d.ts +1 -0
  107. package/libs/form/src/MultiplicityField/add-objects.d.ts +13 -0
  108. package/libs/form/src/MultiplicityField/index.d.ts +32 -0
  109. package/libs/form/src/__stories__/IntField.d.ts +1 -0
  110. package/libs/form/src/inputs/FileInput/FileInput.stories.d.ts +7 -0
  111. package/libs/form/src/inputs/FileInput/__stories__/Default.d.ts +2 -0
  112. package/libs/form/src/inputs/Label/index.d.ts +1 -0
  113. package/libs/form/src/internal.d.ts +2 -0
  114. package/libs/form/src/types.d.ts +20 -12
  115. package/libs/form/src/utils.d.ts +8 -3
  116. package/libs/form/src/validators/index.d.ts +4 -3
  117. package/libs/form/src/validators/types.d.ts +1 -1
  118. package/libs/form/src/validators/utils/file.d.ts +3 -1
  119. package/libs/form/src/validators/utils/iban.d.ts +3 -1
  120. package/libs/form/src/validators/utils/index.d.ts +15 -3
  121. package/libs/form/src/validators/utils/int.d.ts +3 -0
  122. package/libs/form/src/validators/utils/number.d.ts +3 -0
  123. package/libs/form/src/validators/utils/phone.d.ts +3 -1
  124. package/libs/form/src/validators/utils/postal_code.d.ts +3 -1
  125. package/libs/ui/src/app/i18n.d.ts +2 -2
  126. package/libs/ui/src/core/Button/BackButton.d.ts +1 -1
  127. package/libs/ui/src/core/Button/ButtonLink.d.ts +1 -1
  128. package/libs/ui/src/core/Button/index.d.ts +1 -1
  129. package/libs/ui/src/core/List/ListItemContent.d.ts +0 -1
  130. package/libs/ui/src/core/List/ListItemIcon.d.ts +1 -3
  131. package/libs/ui/src/core/List/ListItemText.d.ts +0 -1
  132. package/libs/ui/src/core/List/ListItemTitle.d.ts +0 -1
  133. package/libs/ui/src/locales/el.d.ts +8 -1
  134. package/libs-ui/react-core/src/Aside/index.d.ts +10 -0
  135. package/libs-ui/react-core/src/BackLink/index.d.ts +1 -1
  136. package/libs-ui/react-core/src/Bottom/index.d.ts +9 -0
  137. package/libs-ui/react-core/src/BreadcrumbsList/index.d.ts +1 -1
  138. package/libs-ui/react-core/src/Button/index.d.ts +1 -1
  139. package/libs-ui/react-core/src/ButtonLink/index.d.ts +1 -1
  140. package/libs-ui/react-core/src/CallToAction/index.d.ts +1 -1
  141. package/libs-ui/react-core/src/CheckboxConditional/index.d.ts +11 -0
  142. package/libs-ui/react-core/src/CheckboxItem/index.d.ts +1 -1
  143. package/libs-ui/react-core/src/Container/index.d.ts +17 -0
  144. package/libs-ui/react-core/src/Copyright/index.d.ts +10 -0
  145. package/libs-ui/react-core/src/DateInputItem/index.d.ts +1 -1
  146. package/libs-ui/react-core/src/FileUpload/index.d.ts +9 -1
  147. package/libs-ui/react-core/src/Footer/index.d.ts +9 -0
  148. package/libs-ui/react-core/src/FooterContainer/index.d.ts +16 -0
  149. package/libs-ui/react-core/src/FooterContent/index.d.ts +10 -0
  150. package/libs-ui/react-core/src/FooterContentLogos/index.d.ts +11 -0
  151. package/libs-ui/react-core/src/FooterHeading/index.d.ts +15 -0
  152. package/libs-ui/react-core/src/FooterImage/index.d.ts +15 -0
  153. package/libs-ui/react-core/src/FooterInlineList/index.d.ts +11 -0
  154. package/libs-ui/react-core/src/FooterInlineListItem/index.d.ts +9 -0
  155. package/libs-ui/react-core/src/FooterLink/index.d.ts +13 -0
  156. package/libs-ui/react-core/src/FooterList/index.d.ts +15 -0
  157. package/libs-ui/react-core/src/FooterListItem/index.d.ts +10 -0
  158. package/libs-ui/react-core/src/FooterMeta/index.d.ts +11 -0
  159. package/libs-ui/react-core/src/FooterMetaItem/index.d.ts +14 -0
  160. package/libs-ui/react-core/src/FooterNavigation/index.d.ts +11 -0
  161. package/libs-ui/react-core/src/FooterSection/index.d.ts +11 -0
  162. package/libs-ui/react-core/src/GovGRFooter/index.d.ts +9 -0
  163. package/libs-ui/react-core/src/GovGRLogo/govgr-logo-base64.d.ts +2 -0
  164. package/libs-ui/react-core/src/GovGRLogo/index.d.ts +9 -0
  165. package/libs-ui/react-core/src/Header/index.d.ts +10 -0
  166. package/libs-ui/react-core/src/HeaderContent/index.d.ts +9 -0
  167. package/libs-ui/react-core/src/HeaderLogo/index.d.ts +21 -0
  168. package/libs-ui/react-core/src/HeaderSecondaryLogo/index.d.ts +21 -0
  169. package/libs-ui/react-core/src/HeaderSection/index.d.ts +9 -0
  170. package/libs-ui/react-core/src/HeaderSubtitle/index.d.ts +9 -0
  171. package/libs-ui/react-core/src/HeaderTitle/index.d.ts +13 -0
  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/Layout/index.d.ts +10 -0
  176. package/libs-ui/react-core/src/Link/index.d.ts +1 -1
  177. package/libs-ui/react-core/src/List/index.d.ts +1 -1
  178. package/libs-ui/react-core/src/Main/index.d.ts +9 -0
  179. package/libs-ui/react-core/src/Masthead/index.d.ts +9 -0
  180. package/libs-ui/react-core/src/MastheadBody/index.d.ts +9 -0
  181. package/libs-ui/react-core/src/NavHorizontalListItem/index.d.ts +1 -1
  182. package/libs-ui/react-core/src/NavVerticalItem/index.d.ts +1 -1
  183. package/libs-ui/react-core/src/NotificationBannerLink/index.d.ts +1 -1
  184. package/libs-ui/react-core/src/PageTitle/index.d.ts +9 -0
  185. package/libs-ui/react-core/src/PageTitleCaption/index.d.ts +14 -0
  186. package/libs-ui/react-core/src/PageTitleHeading/index.d.ts +13 -0
  187. package/libs-ui/react-core/src/PageTitleSection/index.d.ts +10 -0
  188. package/libs-ui/react-core/src/RadioConditional/index.d.ts +11 -0
  189. package/libs-ui/react-core/src/RadioItem/index.d.ts +1 -1
  190. package/libs-ui/react-core/src/ServiceBadge/index.d.ts +11 -0
  191. package/libs-ui/react-core/src/SkipLink/index.d.ts +1 -1
  192. package/libs-ui/react-core/src/SvgIcon/index.d.ts +1 -1
  193. package/libs-ui/react-core/src/Table/index.d.ts +1 -1
  194. package/libs-ui/react-core/src/TabsListItem/index.d.ts +1 -1
  195. package/libs-ui/react-core/src/TextInput/index.d.ts +1 -1
  196. package/libs-ui/react-core/src/Top/index.d.ts +9 -0
  197. package/libs-ui/react-core/src/index.d.ts +141 -0
  198. package/package.json +7 -6
  199. package/utils.js +61 -47
  200. package/validators/index.js +33 -11
  201. package/validators/utils/index.js +1 -23
  202. package/validators/utils/int.js +31 -0
  203. package/validators/utils/number.js +27 -0
package/es/Field/index.js CHANGED
@@ -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,
@@ -14,8 +16,15 @@ export var Field = function Field(_ref) {
14
16
  field = _useField.field,
15
17
  control = _useField.control,
16
18
  register = _useField.register,
19
+ reset = _useField.reset,
17
20
  error = _useField.error,
18
- componentRegistry = _useField.componentRegistry;
21
+ componentRegistry = _useField.componentRegistry,
22
+ formState = _useField.formState,
23
+ setValue = _useField.setValue,
24
+ getValues = _useField.getValues,
25
+ unregister = _useField.unregister,
26
+ trigger = _useField.trigger,
27
+ clearErrors = _useField.clearErrors;
19
28
 
20
29
  var calculatedField = useMemo(function () {
21
30
  return calculateField(children, field, componentRegistry);
@@ -24,16 +33,43 @@ export var Field = function Field(_ref) {
24
33
  if (calculatedField.condition) {
25
34
  return /*#__PURE__*/React.createElement(FieldConditional, {
26
35
  control: control,
36
+ reset: reset,
27
37
  register: register,
28
38
  field: calculatedField,
29
39
  error: error
30
40
  });
31
41
  }
32
42
 
43
+ if (calculatedField.type === 'array' && calculatedField.multiplicity) {
44
+ calculatedField.name = name;
45
+ return /*#__PURE__*/React.createElement(Multiplicity, _extends({
46
+ control: control,
47
+ register: register,
48
+ trigger: trigger,
49
+ clearErrors: clearErrors,
50
+ error: error,
51
+ formState: formState,
52
+ setValue: setValue,
53
+ getValues: getValues,
54
+ unregister: unregister
55
+ }, calculatedField));
56
+ }
57
+
58
+ if (calculatedField.type === 'array') {
59
+ calculatedField.name = name;
60
+ return /*#__PURE__*/React.createElement(FieldArray, _extends({
61
+ control: control,
62
+ register: register,
63
+ error: error,
64
+ formState: formState
65
+ }, calculatedField));
66
+ }
67
+
33
68
  return /*#__PURE__*/React.createElement(FieldBase, _extends({}, calculatedField, {
34
69
  name: name,
35
70
  control: control,
36
71
  register: register,
72
+ reset: reset,
37
73
  error: error
38
74
  }));
39
75
  };
package/es/Field/utils.js CHANGED
@@ -80,9 +80,18 @@ export var useField = function useField(name, customField) {
80
80
  fieldsMap = _useContext.fieldsMap,
81
81
  control = _useContext.control,
82
82
  register = _useContext.register,
83
+ reset = _useContext.reset,
84
+ trigger = _useContext.trigger,
85
+ clearErrors = _useContext.clearErrors,
83
86
  errors = _useContext.errors,
84
87
  registerField = _useContext.registerField,
85
- componentRegistry = _useContext.componentRegistry;
88
+ watch = _useContext.watch,
89
+ componentRegistry = _useContext.componentRegistry,
90
+ getFieldState = _useContext.getFieldState,
91
+ setValue = _useContext.setValue,
92
+ getValues = _useContext.getValues,
93
+ unregister = _useContext.unregister,
94
+ formState = _useContext.formState;
86
95
 
87
96
  useMemo(function () {
88
97
  return (customField === null || customField === void 0 ? void 0 : customField.type) && registerField(_extends({}, customField, {
@@ -93,7 +102,16 @@ export var useField = function useField(name, customField) {
93
102
  field: customField || fieldsMap[name],
94
103
  control: control,
95
104
  register: register,
105
+ reset: reset,
106
+ trigger: trigger,
107
+ watch: watch,
96
108
  componentRegistry: componentRegistry,
109
+ getFieldState: getFieldState,
110
+ setValue: setValue,
111
+ clearErrors: clearErrors,
112
+ getValues: getValues,
113
+ unregister: unregister,
114
+ formState: formState,
97
115
  error: errors[name]
98
116
  };
99
117
  };
@@ -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,62 @@
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 { useFieldArray } from 'react-hook-form';
6
+ import FieldObject from '@digigov/form/FieldObject';
7
+ import { Button, Card } from '@digigov/ui/core';
8
+ import { FieldsetLabel } from '@digigov/form/Fieldset';
9
+ import Fieldset from '@digigov/react-core/Fieldset';
10
+ import FieldContainer from '@digigov/form/Field/FieldContainer';
11
+ export var FieldArray = function FieldArray(_ref) {
12
+ var name = _ref.name,
13
+ register = _ref.register,
14
+ control = _ref.control,
15
+ formState = _ref.formState,
16
+ error = _ref.error,
17
+ layout = _ref.layout,
18
+ label = _ref.label,
19
+ customField = _objectWithoutProperties(_ref, _excluded);
20
+
21
+ var _useFieldArray = useFieldArray({
22
+ control: control,
23
+ name: name
24
+ }),
25
+ fields = _useFieldArray.fields,
26
+ append = _useFieldArray.append,
27
+ remove = _useFieldArray.remove;
28
+
29
+ return /*#__PURE__*/React.createElement(FieldContainer, {
30
+ label: label,
31
+ layout: layout,
32
+ error: formState.isSubmitted && !formState.isSubmitting && error !== null && error !== void 0 && error.message && error ? error : undefined,
33
+ wrapper: "fieldset",
34
+ name: name
35
+ }, fields.map(function (field, index) {
36
+ var _customField$extra;
37
+
38
+ return /*#__PURE__*/React.createElement(Card, {
39
+ variant: "border",
40
+ key: field.id
41
+ }, /*#__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({
42
+ name: "".concat(name, ".").concat(index),
43
+ error: Array.isArray(error) && error[index],
44
+ register: register,
45
+ control: control
46
+ }, (_customField$extra = customField.extra) === null || _customField$extra === void 0 ? void 0 : _customField$extra.of)), /*#__PURE__*/React.createElement(Button, {
47
+ type: "button",
48
+ color: "warning",
49
+ onClick: function onClick() {
50
+ return remove(index);
51
+ }
52
+ }, "Remove")));
53
+ }), /*#__PURE__*/React.createElement(Button, {
54
+ type: "button",
55
+ color: "secondary",
56
+ onClick: function onClick(ev) {
57
+ ev.preventDefault();
58
+ append({});
59
+ }
60
+ }, "\u03A0\u03C1\u03BF\u03C3\u03B8\u03AE\u03BA\u03B7 \u03C3\u03C5\u03BD\u03C5\u03C0\u03BF\u03B3\u03C1\u03AC\u03C6\u03BF\u03BD\u03C4\u03B1"));
61
+ };
62
+ export default FieldArray;
@@ -0,0 +1,59 @@
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
+ reset = _ref.reset,
16
+ formState = _ref.formState;
17
+
18
+ var _useTranslation = useTranslation(),
19
+ t = _useTranslation.t;
20
+
21
+ return /*#__PURE__*/React.createElement(Fieldset, null, (label === null || label === void 0 ? void 0 : label.primary) && /*#__PURE__*/React.createElement(FieldsetLegend, {
22
+ size: "s"
23
+ }, 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) {
24
+ return /*#__PURE__*/React.createElement(FieldObjectItem, {
25
+ key: "".concat(name, ".").concat(field.key),
26
+ name: "".concat(name, ".").concat(field.key),
27
+ control: control,
28
+ register: register,
29
+ reset: reset,
30
+ field: field,
31
+ error: error && error[field.key],
32
+ formState: formState
33
+ });
34
+ }));
35
+ };
36
+
37
+ var FieldObjectItem = function FieldObjectItem(_ref2) {
38
+ var name = _ref2.name,
39
+ children = _ref2.children,
40
+ field = _ref2.field,
41
+ error = _ref2.error,
42
+ control = _ref2.control,
43
+ formState = _ref2.formState,
44
+ reset = _ref2.reset,
45
+ register = _ref2.register;
46
+ var calculatedField = useMemo(function () {
47
+ return calculateField(children, field);
48
+ }, [field]);
49
+ var customError = error ? error : formState === null || formState === void 0 ? void 0 : formState.errors[name];
50
+ return /*#__PURE__*/React.createElement(FieldBase, _extends({}, calculatedField, {
51
+ name: name,
52
+ control: control,
53
+ reset: reset,
54
+ register: register,
55
+ error: customError
56
+ }));
57
+ };
58
+
59
+ export default FieldObject;
@@ -0,0 +1,4 @@
1
+ export default {
2
+ title: 'Digigov Form'
3
+ };
4
+ export * from '@digigov/form/__stories__/IntField';
package/es/FormBuilder.js CHANGED
@@ -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';
@@ -0,0 +1,100 @@
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
+ multiplicity: true,
16
+ label: {
17
+ primary: 'Συνυπογράφοντες',
18
+ secondary: 'Οι συνυπογράφοντες είναι άνθρωποι σαν και εμάς'
19
+ },
20
+ extra: {
21
+ border: true,
22
+ label: {
23
+ object: {
24
+ title: 'Συνυπογράφοντας',
25
+ title_added: 'Οι συνυπογράφοντες που έχετε προσθέσει',
26
+ add: 'Προσθήκη',
27
+ "delete": 'Αφαίρεση συνυπογράφοντος'
28
+ },
29
+ question: {
30
+ title: 'Θέλετε να προσθέσετε επιπλέον συνυπογράφοντες;',
31
+ objectLabel: {
32
+ primary: 'Προσθήκη νέου συνυπογράφοντα',
33
+ secondary: 'Συμπληρώστε τα στοιχεία και μετά πατήστε «Προσθήκη»'
34
+ },
35
+ yes: 'Ναι',
36
+ no: 'Όχι'
37
+ }
38
+ },
39
+ of: {
40
+ type: 'object',
41
+ label: {
42
+ primary: 'Στοιχεία συνυπογράφοντα',
43
+ secondary: 'Δείτε και αλλάξτε τα στοιχεία του συνυπογράφοντα'
44
+ },
45
+ extra: {
46
+ fields: [{
47
+ key: 'afm',
48
+ type: 'afm',
49
+ required: true,
50
+ label: {
51
+ primary: 'ΑΦΜ'
52
+ }
53
+ }, {
54
+ key: 'firstName',
55
+ required: true,
56
+ type: 'string',
57
+ label: {
58
+ primary: 'Όνομα'
59
+ }
60
+ }, {
61
+ key: 'lastName',
62
+ required: true,
63
+ type: 'string',
64
+ label: {
65
+ primary: 'Επώνυμο'
66
+ }
67
+ }]
68
+ }
69
+ }
70
+ }
71
+ }, {
72
+ key: 'phonenumber',
73
+ type: 'phone_number',
74
+ required: true,
75
+ label: {
76
+ primary: 'Πεδίο 2',
77
+ secondary: 'Το multiplicity field είναι ένα πεδίο οπότε φαίνεται και είναι μέρος της φόρμας'
78
+ }
79
+ }];
80
+
81
+ var _ref = /*#__PURE__*/React.createElement(Button, {
82
+ type: "submit"
83
+ }, "\u03A3\u03C5\u03BD\u03AD\u03C7\u03B5\u03B9\u03B1");
84
+
85
+ export var Default = function Default() {
86
+ return /*#__PURE__*/React.createElement(Suspense, {
87
+ fallback: "loading"
88
+ }, /*#__PURE__*/React.createElement(FormBuilder, {
89
+ onSubmit: function onSubmit(data) {
90
+ debugger;
91
+ console.log(data);
92
+ }
93
+ }, /*#__PURE__*/React.createElement(Field, _extends({
94
+ name: "string"
95
+ }, fields[0])), /*#__PURE__*/React.createElement(Field, _extends({
96
+ name: "multiplicity"
97
+ }, fields[1])), /*#__PURE__*/React.createElement(Field, _extends({
98
+ name: "phonenumber"
99
+ }, fields[2])), _ref));
100
+ };