@digigov/form 2.0.0-13876dba → 2.0.0-16da9467

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 (233) hide show
  1. package/Field/FieldBase/index.js +7 -3
  2. package/Field/FieldBase.js.map +2 -2
  3. package/Field/FieldBaseContainer/index.js +37 -18
  4. package/Field/FieldBaseContainer.d.ts +1 -1
  5. package/Field/FieldBaseContainer.js.map +2 -2
  6. package/Field/FieldConditional/index.js +4 -0
  7. package/Field/FieldConditional.js.map +2 -2
  8. package/Field/index.js +10 -4
  9. package/Field/index.js.map +2 -2
  10. package/Field/types.d.ts +10 -3
  11. package/Field/utils/index.js +3 -1
  12. package/Field/utils/index.js.map +2 -2
  13. package/Field/utils/useField/index.js +8 -1
  14. package/Field/utils/useField.js.map +2 -2
  15. package/FieldArray/FormDialog/index.js +314 -196
  16. package/FieldArray/FormDialog.d.ts +20 -7
  17. package/FieldArray/FormDialog.js.map +3 -3
  18. package/FieldArray/index.d.ts +1 -0
  19. package/FieldArray/index.js +32 -8
  20. package/FieldArray/index.js.map +2 -2
  21. package/FieldObject/index.d.ts +3 -0
  22. package/FieldObject/index.js +25 -14
  23. package/FieldObject/index.js.map +2 -2
  24. package/FormBuilder/index.d.ts +1 -1
  25. package/FormBuilder/index.js +11 -7
  26. package/FormBuilder/index.js.map +2 -2
  27. package/FormContext/index.js +6 -2
  28. package/FormContext.d.ts +1 -0
  29. package/FormContext.js.map +2 -2
  30. package/MultiplicityField/add-objects/index.js +2 -0
  31. package/MultiplicityField/add-objects.js.map +2 -2
  32. package/MultiplicityField/index.js +4 -1
  33. package/MultiplicityField/index.js.map +2 -2
  34. package/MultiplicityField/types.d.ts +1 -0
  35. package/cjs/Field/FieldBase/index.js +7 -3
  36. package/cjs/Field/FieldBase.js.map +2 -2
  37. package/cjs/Field/FieldBaseContainer/index.js +36 -17
  38. package/cjs/Field/FieldBaseContainer.js.map +3 -3
  39. package/cjs/Field/FieldConditional/index.js +4 -0
  40. package/cjs/Field/FieldConditional.js.map +2 -2
  41. package/cjs/Field/index.js +10 -4
  42. package/cjs/Field/index.js.map +2 -2
  43. package/cjs/Field/types.js.map +1 -1
  44. package/cjs/Field/utils/index.js +3 -1
  45. package/cjs/Field/utils/index.js.map +2 -2
  46. package/cjs/Field/utils/useField/index.js +8 -1
  47. package/cjs/Field/utils/useField.js.map +2 -2
  48. package/cjs/FieldArray/FormDialog/index.js +309 -194
  49. package/cjs/FieldArray/FormDialog.js.map +3 -3
  50. package/cjs/FieldArray/index.js +31 -7
  51. package/cjs/FieldArray/index.js.map +2 -2
  52. package/cjs/FieldObject/index.js +25 -14
  53. package/cjs/FieldObject/index.js.map +2 -2
  54. package/cjs/FormBuilder/index.js +11 -7
  55. package/cjs/FormBuilder/index.js.map +2 -2
  56. package/cjs/FormContext/index.js +7 -2
  57. package/cjs/FormContext.js.map +2 -2
  58. package/cjs/MultiplicityField/add-objects/index.js +2 -0
  59. package/cjs/MultiplicityField/add-objects.js.map +2 -2
  60. package/cjs/MultiplicityField/index.js +4 -1
  61. package/cjs/MultiplicityField/index.js.map +2 -2
  62. package/cjs/MultiplicityField/types.js.map +1 -1
  63. package/cjs/inputs/Checkboxes/index.js +2 -2
  64. package/cjs/inputs/Checkboxes/index.js.map +2 -2
  65. package/cjs/inputs/DateInput/index.js +41 -14
  66. package/cjs/inputs/DateInput/index.js.map +2 -2
  67. package/cjs/inputs/DateTimeInput/index.js +68 -34
  68. package/cjs/inputs/DateTimeInput/index.js.map +2 -2
  69. package/cjs/inputs/FileInput/index.js +52 -29
  70. package/cjs/inputs/FileInput/index.js.map +2 -2
  71. package/cjs/inputs/ImageInput/__stories__/logo.d/index.js +1 -0
  72. package/cjs/inputs/ImageInput/__stories__/logo.d.js.map +7 -0
  73. package/cjs/inputs/ImageInput/index.js +41 -10
  74. package/cjs/inputs/ImageInput/index.js.map +2 -2
  75. package/cjs/inputs/Input/index.js +4 -4
  76. package/cjs/inputs/Input/index.js.map +2 -2
  77. package/cjs/inputs/Select/index.js +4 -3
  78. package/cjs/inputs/Select/index.js.map +2 -2
  79. package/cjs/inputs/inputsScenarios/index.js +2 -2
  80. package/cjs/inputs/inputsScenarios.js.map +2 -2
  81. package/cjs/lazy/index.js +2 -1
  82. package/cjs/lazy.js.map +2 -2
  83. package/cjs/registry/index.js +4 -4
  84. package/cjs/registry.js.map +2 -2
  85. package/cjs/types.js.map +1 -1
  86. package/cjs/utils/index.js +20 -6
  87. package/cjs/utils.js.map +2 -2
  88. package/cjs/validators/index.js +11 -6
  89. package/cjs/validators/index.js.map +2 -2
  90. package/cjs/validators/utils/amka/index.js +60 -0
  91. package/cjs/validators/utils/amka.js.map +7 -0
  92. package/cjs/validators/utils/date/index.js +26 -3
  93. package/cjs/validators/utils/date.js.map +2 -2
  94. package/cjs/validators/utils/datetime/index.js +118 -24
  95. package/cjs/validators/utils/datetime.js.map +2 -2
  96. package/cjs/validators/utils/file/index.js +30 -17
  97. package/cjs/validators/utils/file.js.map +2 -2
  98. package/cjs/validators/utils/index.js +5 -1
  99. package/cjs/validators/utils/index.js.map +2 -2
  100. package/index.js +1 -1
  101. package/inputs/Checkboxes/index.js +2 -2
  102. package/inputs/Checkboxes/index.js.map +2 -2
  103. package/inputs/DateInput/DateInput.stories.d.ts +4 -0
  104. package/inputs/DateInput/__stories__/WithDefaultValue.d.ts +3 -0
  105. package/inputs/DateInput/__stories__/WithInitialValue.d.ts +3 -0
  106. package/inputs/DateInput/__stories__/WithWrongDefaultValue.d.ts +3 -0
  107. package/inputs/DateInput/__stories__/WithWrongInitialValue.d.ts +3 -0
  108. package/inputs/DateInput/index.js +42 -15
  109. package/inputs/DateInput/index.js.map +2 -2
  110. package/inputs/DateTimeInput/DateTimeInput.stories.d.ts +8 -3
  111. package/inputs/DateTimeInput/__stories__/WithDefaultValue.d.ts +3 -0
  112. package/inputs/DateTimeInput/__stories__/WithInitialValue.d.ts +3 -0
  113. package/inputs/DateTimeInput/__stories__/WithWrongDefaultValue.d.ts +3 -0
  114. package/inputs/DateTimeInput/__stories__/WithWrongInitialValue.d.ts +3 -0
  115. package/inputs/DateTimeInput/index.js +69 -35
  116. package/inputs/DateTimeInput/index.js.map +2 -2
  117. package/inputs/FileInput/FileInput.stories.d.ts +1 -0
  118. package/inputs/FileInput/__stories__/WithBorderAndLink.d.ts +3 -0
  119. package/inputs/FileInput/index.d.ts +11 -4
  120. package/inputs/FileInput/index.js +57 -31
  121. package/inputs/FileInput/index.js.map +2 -2
  122. package/inputs/ImageInput/ImageInput.stories.d.ts +2 -1
  123. package/inputs/ImageInput/__stories__/WithInitialValues.d.ts +3 -0
  124. package/inputs/ImageInput/__stories__/logo.d/index.js +1 -0
  125. package/inputs/ImageInput/__stories__/logo.d/package.json +6 -0
  126. package/inputs/ImageInput/__stories__/logo.d.js.map +7 -0
  127. package/inputs/ImageInput/index.d.ts +9 -1
  128. package/inputs/ImageInput/index.js +42 -11
  129. package/inputs/ImageInput/index.js.map +2 -2
  130. package/inputs/Input/Input.stories.d.ts +2 -0
  131. package/inputs/Input/__stories__/AMKA.d.ts +3 -0
  132. package/inputs/Input/__stories__/Email.d.ts +3 -0
  133. package/inputs/Input/index.d.ts +2 -1
  134. package/inputs/Input/index.js +4 -4
  135. package/inputs/Input/index.js.map +2 -2
  136. package/inputs/Select/index.d.ts +2 -1
  137. package/inputs/Select/index.js +4 -3
  138. package/inputs/Select/index.js.map +2 -2
  139. package/inputs/inputsScenarios/index.js +2 -2
  140. package/inputs/inputsScenarios.d.ts +1 -1
  141. package/inputs/inputsScenarios.js.map +2 -2
  142. package/lazy/index.js +2 -1
  143. package/package.json +8 -8
  144. package/registry/index.js +4 -4
  145. package/src/Field/FieldBase.tsx +6 -2
  146. package/src/Field/FieldBaseContainer.tsx +68 -48
  147. package/src/Field/FieldConditional.tsx +4 -0
  148. package/src/Field/index.tsx +15 -5
  149. package/src/Field/types.tsx +11 -3
  150. package/src/Field/utils/index.ts +2 -0
  151. package/src/Field/utils/useField.ts +9 -1
  152. package/src/FieldArray/FormDialog.tsx +430 -243
  153. package/src/FieldArray/__stories__/WithModal.tsx +3 -2
  154. package/src/FieldArray/index.tsx +53 -30
  155. package/src/FieldObject/index.tsx +29 -16
  156. package/src/FormBuilder/index.tsx +12 -7
  157. package/src/FormBuilder/scenarios.test.tsx +763 -5
  158. package/src/FormContext.tsx +5 -1
  159. package/src/MultiplicityField/add-objects.tsx +2 -0
  160. package/src/MultiplicityField/index.tsx +3 -0
  161. package/src/MultiplicityField/types.ts +1 -0
  162. package/src/inputs/Checkboxes/index.tsx +2 -6
  163. package/src/inputs/DateInput/DateInput.stories.js +4 -0
  164. package/src/inputs/DateInput/__stories__/WithDefaultValue.tsx +26 -0
  165. package/src/inputs/DateInput/__stories__/WithInitialValue.tsx +28 -0
  166. package/src/inputs/DateInput/__stories__/WithWrongDefaultValue.tsx +26 -0
  167. package/src/inputs/DateInput/__stories__/WithWrongInitialValue.tsx +28 -0
  168. package/src/inputs/DateInput/index.test.tsx +16 -0
  169. package/src/inputs/DateInput/index.tsx +46 -14
  170. package/src/inputs/DateTimeInput/DateTimeInput.stories.js +9 -6
  171. package/src/inputs/DateTimeInput/__stories__/WithDefaultValue.tsx +26 -0
  172. package/src/inputs/DateTimeInput/__stories__/WithInitialValue.tsx +28 -0
  173. package/src/inputs/DateTimeInput/__stories__/WithWrongDefaultValue.tsx +26 -0
  174. package/src/inputs/DateTimeInput/__stories__/WithWrongInitialValue.tsx +28 -0
  175. package/src/inputs/DateTimeInput/index.test.tsx +16 -0
  176. package/src/inputs/DateTimeInput/index.tsx +73 -34
  177. package/src/inputs/FileInput/FileInput.stories.js +1 -0
  178. package/src/inputs/FileInput/__stories__/WithBorderAndLink.tsx +34 -0
  179. package/src/inputs/FileInput/index.test.tsx +4 -0
  180. package/src/inputs/FileInput/index.tsx +90 -48
  181. package/src/inputs/ImageInput/ImageInput.stories.js +2 -1
  182. package/src/inputs/ImageInput/__stories__/MaxSize.tsx +2 -1
  183. package/src/inputs/ImageInput/__stories__/WithInitialValues.tsx +45 -0
  184. package/src/inputs/ImageInput/__stories__/logo.d.ts +4 -0
  185. package/src/inputs/ImageInput/__stories__/logo.png +0 -0
  186. package/src/inputs/ImageInput/index.test.tsx +21 -17
  187. package/src/inputs/ImageInput/index.tsx +100 -48
  188. package/src/inputs/Input/Input.stories.js +2 -0
  189. package/src/inputs/Input/__stories__/AMKA.tsx +23 -0
  190. package/src/inputs/Input/__stories__/Email.tsx +23 -0
  191. package/src/inputs/Input/index.test.tsx +8 -0
  192. package/src/inputs/Input/index.tsx +5 -3
  193. package/src/inputs/Select/index.tsx +7 -4
  194. package/src/inputs/inputsScenarios.ts +2 -2
  195. package/src/lazy.js +2 -1
  196. package/src/registry.js +4 -4
  197. package/src/types.tsx +2 -1
  198. package/src/utils.ts +27 -6
  199. package/src/validators/index.ts +17 -6
  200. package/src/validators/utils/amka.ts +39 -0
  201. package/src/validators/utils/date.ts +28 -4
  202. package/src/validators/utils/datetime.ts +121 -29
  203. package/src/validators/utils/file.ts +33 -19
  204. package/src/validators/utils/index.ts +4 -1
  205. package/types.d.ts +2 -1
  206. package/types.js.map +1 -1
  207. package/utils/index.js +20 -6
  208. package/utils.d.ts +2 -0
  209. package/utils.js.map +2 -2
  210. package/validators/index.d.ts +1 -1
  211. package/validators/index.js +12 -6
  212. package/validators/index.js.map +2 -2
  213. package/validators/utils/amka/index.js +36 -0
  214. package/{inputs/Input/inputsInputScenarios → validators/utils/amka}/package.json +1 -1
  215. package/validators/utils/amka.d.ts +6 -0
  216. package/validators/utils/amka.js.map +7 -0
  217. package/validators/utils/date/index.js +26 -3
  218. package/validators/utils/date.d.ts +1 -1
  219. package/validators/utils/date.js.map +2 -2
  220. package/validators/utils/datetime/index.js +118 -24
  221. package/validators/utils/datetime.d.ts +1 -1
  222. package/validators/utils/datetime.js.map +2 -2
  223. package/validators/utils/file/index.js +30 -17
  224. package/validators/utils/file.js.map +2 -2
  225. package/validators/utils/index.d.ts +1 -0
  226. package/validators/utils/index.js +4 -1
  227. package/validators/utils/index.js.map +2 -2
  228. package/cjs/inputs/Input/inputsInputScenarios/index.js +0 -439
  229. package/cjs/inputs/Input/inputsInputScenarios.js.map +0 -7
  230. package/inputs/Input/inputsInputScenarios/index.js +0 -406
  231. package/inputs/Input/inputsInputScenarios.d.ts +0 -57
  232. package/inputs/Input/inputsInputScenarios.js.map +0 -7
  233. package/src/inputs/Input/inputsInputScenarios.ts +0 -404
@@ -22,6 +22,8 @@ const fields = [
22
22
  secondary: 'Οι συνυπογράφοντες είναι άνθρωποι σαν και εμάς',
23
23
  },
24
24
  extra: {
25
+ noIndex: true,
26
+ border: false,
25
27
  variant: 'dialog',
26
28
  noHeader: false,
27
29
  label: {
@@ -149,11 +151,10 @@ export const WithModal = (_: any) => (
149
151
  <FormBuilder
150
152
  onSubmit={(data) => {
151
153
  console.log(data);
154
+ window.alert('Submit success');
152
155
  }}
153
156
  >
154
- <Field name="string" {...fields[0]} />
155
157
  <Field name="multiplicity" {...fields[1]} />
156
- <Field name="arrayofafm" {...fields[2]} />
157
158
  <Button>Συνέχεια</Button>
158
159
  </FormBuilder>
159
160
  );
@@ -1,4 +1,4 @@
1
- import React from 'react';
1
+ import React, { useEffect, useRef } from 'react';
2
2
  import { ErrorOption, useFieldArray, UseFormReturn } from 'react-hook-form';
3
3
  import { FieldBaseContainer } from '@digigov/form/Field/FieldBaseContainer';
4
4
  import { FieldProps } from '@digigov/form/Field/types';
@@ -7,7 +7,6 @@ import { FieldObject } from '@digigov/form/FieldObject';
7
7
  import { FieldsetLabel, Fieldset } from '@digigov/form/Fieldset';
8
8
  import { Card } from '@digigov/ui/content/Card';
9
9
  import { Button } from '@digigov/ui/form/Button';
10
- import { Hint } from '@digigov/ui/typography/Hint';
11
10
 
12
11
  export interface FieldArrayProps extends FieldProps {
13
12
  control: UseFormReturn['control'];
@@ -19,6 +18,7 @@ export interface FieldArrayProps extends FieldProps {
19
18
  getValues: UseFormReturn['getValues'];
20
19
  setValue: UseFormReturn['setValue'];
21
20
  reset: UseFormReturn['reset'];
21
+ resetField?: UseFormReturn['resetField'];
22
22
  Field: React.FC<FieldProps>;
23
23
  }
24
24
  export const FieldArray: React.FC<FieldArrayProps> = ({
@@ -33,36 +33,55 @@ export const FieldArray: React.FC<FieldArrayProps> = ({
33
33
  setValue,
34
34
  layout,
35
35
  reset,
36
+ resetField,
36
37
  label,
37
38
  Field,
38
39
  ...customField
39
40
  }) => {
40
- const { fields, append, remove } = useFieldArray({
41
+ const { append, remove } = useFieldArray({
41
42
  control,
42
43
  name,
43
44
  });
45
+ const fields = getValues(name) || [];
46
+
47
+ /** The ref of the FieldBaseContainer. */
48
+ const containerRef = useRef<HTMLFieldSetElement | null>(null);
49
+
50
+ const { errors } = formState;
51
+
52
+ // Focus the fieldset when there are errors related to this field array
53
+ useEffect(() => {
54
+ if (!containerRef.current) return;
55
+ const fieldErrors = Object.keys(errors);
56
+ // no errors
57
+ if (!fieldErrors.length) return;
58
+
59
+ if (
60
+ // Check if there are errors related to the current field array
61
+ fieldErrors.some((key) => {
62
+ const fieldArrayName = key.split('.')[0];
63
+ return fieldArrayName === name;
64
+ })
65
+ ) {
66
+ if (containerRef.current && errors[name]) {
67
+ containerRef.current.focus();
68
+ }
69
+ }
70
+ }, [errors, name]);
44
71
 
45
72
  return (
46
73
  <FieldBaseContainer
47
74
  label={label}
48
75
  layout={layout}
49
- error={
50
- formState.isSubmitted &&
51
- !formState.isSubmitting &&
52
- error?.message &&
53
- error
54
- ? error
55
- : undefined
56
- }
76
+ register={register}
77
+ ref={containerRef}
78
+ error={error?.message && error ? error : undefined}
57
79
  hasError={formState.isSubmitted && !formState.isSubmitting && !!error}
58
80
  wrapper="fieldset"
59
81
  name={name}
82
+ labelSize={customField.extra?.labelSize}
83
+ controlled={true}
60
84
  >
61
- {fields.length === 0 && (
62
- <Hint {...customField.extra?.label.object?.nothing_added_props}>
63
- {customField.extra?.label.object?.nothing_added}
64
- </Hint>
65
- )}
66
85
  {customField.extra?.variant === 'dialog' ? (
67
86
  <FormDialog
68
87
  name={name}
@@ -78,6 +97,8 @@ export const FieldArray: React.FC<FieldArrayProps> = ({
78
97
  label={label}
79
98
  Field={Field}
80
99
  reset={reset}
100
+ resetField={resetField}
101
+ sortable={customField.extra.sortable}
81
102
  {...customField}
82
103
  />
83
104
  ) : (
@@ -85,7 +106,7 @@ export const FieldArray: React.FC<FieldArrayProps> = ({
85
106
  {fields.map((field, index) => (
86
107
  <Card
87
108
  variant={customField.extra?.border ? 'border' : 'divider'}
88
- key={field.id}
109
+ key={field.id || index}
89
110
  >
90
111
  <Fieldset>
91
112
  <FieldsetLabel>
@@ -114,19 +135,21 @@ export const FieldArray: React.FC<FieldArrayProps> = ({
114
135
  </Fieldset>
115
136
  </Card>
116
137
  ))}
117
- <Button
118
- type="button"
119
- name={`${name}-add-object`}
120
- color="secondary"
121
- variant={customField.extra?.label.object?.addButtonVariant}
122
- onClick={(ev) => {
123
- ev.preventDefault();
124
- append({});
125
- }}
126
- disabled={!customField?.editable}
127
- >
128
- {customField.extra?.label.object?.add}
129
- </Button>
138
+ {customField.editable && (
139
+ <Button
140
+ type="button"
141
+ name={`${name}-add-object`}
142
+ color="secondary"
143
+ variant={customField.extra?.label.object?.addButtonVariant}
144
+ onClick={(ev) => {
145
+ ev.preventDefault();
146
+ append({});
147
+ }}
148
+ disabled={!customField?.editable}
149
+ >
150
+ {customField.extra?.label.object?.add}
151
+ </Button>
152
+ )}
130
153
  </>
131
154
  )}
132
155
  </FieldBaseContainer>
@@ -1,7 +1,7 @@
1
1
  import React, { useMemo } from 'react';
2
2
  import { ErrorOption, UseFormReturn } from 'react-hook-form';
3
3
  import { FieldBase } from '@digigov/form/Field/FieldBase';
4
- import { CalculatedField, FieldProps } from '@digigov/form/Field/types';
4
+ import { FieldProps, CalculatedField } from '@digigov/form/Field/types';
5
5
  import {
6
6
  FIELD_COMPONENTS,
7
7
  ALTERNATIVE_COMPONENTS,
@@ -16,6 +16,7 @@ export interface FieldObjectProps extends Omit<FieldProps, 'key'> {
16
16
  control: UseFormReturn['control'];
17
17
  register: UseFormReturn['register'];
18
18
  reset: UseFormReturn['reset'];
19
+ resetField: UseFormReturn['resetField'];
19
20
  formState: UseFormReturn['formState'];
20
21
  error?: ErrorOption;
21
22
  defaultValue?: undefined;
@@ -29,6 +30,7 @@ export const FieldObject: React.FC<FieldObjectProps> = ({
29
30
  control,
30
31
  register,
31
32
  reset,
33
+ resetField,
32
34
  formState,
33
35
  error,
34
36
  defaultValue,
@@ -53,10 +55,11 @@ export const FieldObject: React.FC<FieldObjectProps> = ({
53
55
  control={control}
54
56
  register={register}
55
57
  reset={reset}
58
+ resetField={resetField}
56
59
  field={field}
57
60
  error={error && error[field.key]}
58
61
  formState={formState}
59
- defaultValue={defaultValue}
62
+ defaultValue={defaultValue?.[field.key] || undefined}
60
63
  Field={Field}
61
64
  />
62
65
  ))}
@@ -65,15 +68,16 @@ export const FieldObject: React.FC<FieldObjectProps> = ({
65
68
  };
66
69
 
67
70
  export interface FieldObjectItemProps {
71
+ key: string;
68
72
  name: string;
69
73
  field: FieldSpec;
70
74
  control: UseFormReturn['control'];
71
75
  register: UseFormReturn['register'];
72
76
  reset: UseFormReturn['reset'];
77
+ resetField: UseFormReturn['resetField'];
73
78
  formState: UseFormReturn['formState'];
74
79
  error?: ErrorOption;
75
80
  children?: React.ReactNode;
76
- // defaultValue?: FormData | undefined;
77
81
  defaultValue?: undefined;
78
82
  Field: React.FC<FieldProps>;
79
83
  }
@@ -86,6 +90,7 @@ const FieldObjectItem: React.FC<FieldObjectItemProps> = ({
86
90
  control,
87
91
  formState,
88
92
  reset,
93
+ resetField,
89
94
  register,
90
95
  defaultValue,
91
96
  Field,
@@ -95,19 +100,27 @@ const FieldObjectItem: React.FC<FieldObjectItemProps> = ({
95
100
  calculateField(children, field, FIELD_COMPONENTS, ALTERNATIVE_COMPONENTS),
96
101
  [field]
97
102
  );
98
- const customError = error ? error : formState?.errors[name];
99
- return (
100
- <FieldBase
101
- {...calculatedField}
102
- name={name}
103
- Field={Field}
104
- control={control}
105
- reset={reset}
106
- register={register}
107
- error={customError}
108
- defaultValue={defaultValue}
109
- />
110
- );
103
+ if (Field) {
104
+ if (!field.type) {
105
+ field.type = 'string';
106
+ }
107
+ return <Field {...field} name={name} />;
108
+ } else {
109
+ const customError = error ? error : formState?.errors[name];
110
+ return (
111
+ <FieldBase
112
+ {...calculatedField}
113
+ name={name}
114
+ Field={Field}
115
+ control={control}
116
+ reset={reset}
117
+ resetField={resetField}
118
+ register={register}
119
+ error={customError}
120
+ defaultValue={defaultValue}
121
+ />
122
+ );
123
+ }
111
124
  };
112
125
 
113
126
  export default FieldObject;
@@ -1,10 +1,10 @@
1
- import React, { useCallback, useContext, useRef } from 'react';
1
+ import React, { useCallback, useEffect, useRef } from 'react';
2
2
  import { useForm } from 'react-hook-form';
3
3
  import { Field } from '@digigov/form/Field';
4
4
  import { ErrorGroup } from '@digigov/form/Field/ErrorGroup';
5
5
  import { CONTROLLED_FIELD_COMPONENTS } from '@digigov/form/Field/utils';
6
6
  import { FieldsetWithContext } from '@digigov/form/Fieldset/FieldsetWithContext';
7
- import { FormContext } from '@digigov/form/FormContext';
7
+ import { FormContext, useFormContext } from '@digigov/form/FormContext';
8
8
  import { FormBaseProps, FormData, FormBuilderProps } from '@digigov/form/types';
9
9
  import { yupResolver } from '@digigov/form/utils';
10
10
  import { useValidationSchema } from '@digigov/form/validators';
@@ -23,10 +23,11 @@ const FormBase = React.forwardRef(function FormBase(
23
23
  mode,
24
24
  initial,
25
25
  reValidateMode,
26
- shouldFocusError,
26
+ shouldFocusError = true,
27
27
  criteriaMode,
28
28
  componentRegistry,
29
29
  grid,
30
+ errors,
30
31
  ...props
31
32
  }: FormBaseProps,
32
33
  ref: React.Ref<HTMLFormElement>
@@ -43,12 +44,18 @@ const FormBase = React.forwardRef(function FormBase(
43
44
  const handleSubmit = useCallback(
44
45
  (data: FormData): void => {
45
46
  if (onSubmit) {
46
- form.reset(data);
47
47
  onSubmit(data);
48
48
  }
49
49
  },
50
50
  [onSubmit]
51
51
  );
52
+ useEffect(() => {
53
+ if (errors) {
54
+ for (const fieldName in errors) {
55
+ form.setError(fieldName, errors[fieldName]);
56
+ }
57
+ }
58
+ }, [errors]);
52
59
  const submit = form.handleSubmit(handleSubmit);
53
60
  const ctx = {
54
61
  fieldsMap,
@@ -72,6 +79,7 @@ const FormBase = React.forwardRef(function FormBase(
72
79
  formRef: ref,
73
80
  submit,
74
81
  };
82
+
75
83
  return (
76
84
  <FormContext.Provider value={ctx}>
77
85
  <Form grid={grid} onSubmit={submit} ref={ref} {...props}>
@@ -118,9 +126,6 @@ const groupFieldsByLayout = (fields) => {
118
126
  return sizes;
119
127
  }, {});
120
128
  };
121
- const useFormContext = () => {
122
- return useContext(FormContext);
123
- };
124
129
  const useFormValues = () => {
125
130
  const ctx = useFormContext();
126
131
  return ctx.getValues();