@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
@@ -1,60 +1,80 @@
1
- import React from 'react';
1
+ import React, { ComponentRef } from 'react';
2
2
  import { FieldContainerProps } from '@digigov/form/Field/types';
3
3
  import Label from '@digigov/form/inputs/Label';
4
4
  import { ErrorMessage } from '@digigov/react-core/ErrorMessage';
5
5
  import FieldContainer from '@digigov/react-core/FieldContainer';
6
- import CoreFieldset from '@digigov/react-core/Fieldset';
6
+ import Fieldset from '@digigov/react-core/Fieldset';
7
7
  import FieldsetLegend from '@digigov/react-core/FieldsetLegend';
8
8
  import LabelContainer from '@digigov/react-core/LabelContainer';
9
9
  import { useTranslation } from '@digigov/ui/i18n';
10
10
  import { Hint } from '@digigov/ui/typography/Hint';
11
11
 
12
- export const FieldBaseContainer: React.FC<FieldContainerProps> = ({
13
- name,
14
- wrapper,
15
- label,
16
- children,
17
- error,
18
- hasError,
19
- layout,
20
- }) => {
21
- const { t } = useTranslation();
22
- const errorMessage = error?.message.key
23
- ? error.message.key
24
- : error?.message || '';
25
- const errorContext = error?.message.context || {};
26
- if (wrapper === 'fieldset') {
27
- return (
28
- <FieldContainer error={hasError} {...layout}>
29
- <CoreFieldset>
30
- <FieldsetLegend size="sm">{label && label.primary}</FieldsetLegend>
31
- {label && label.secondary && <Hint>{t(label.secondary)}</Hint>}
32
- {error && (
33
- <ErrorMessage id={`${name}-error`}>
34
- {t(errorMessage, errorContext)}
35
- </ErrorMessage>
36
- )}
37
- {children}
38
- {label && label.hint && <Hint size="sm">{label.hint}</Hint>}
39
- </CoreFieldset>
40
- </FieldContainer>
41
- );
42
- } else {
43
- return (
44
- <FieldContainer error={hasError} {...layout}>
45
- <LabelContainer>
46
- {label && <Label label={label} />}
47
- {error && (
48
- <ErrorMessage id={`${name}-error`}>
49
- {t(errorMessage, errorContext)}
50
- </ErrorMessage>
51
- )}
52
- {children}
53
- {label && label.hint && <Hint size="sm">{label.hint}</Hint>}
54
- </LabelContainer>
55
- </FieldContainer>
56
- );
12
+ export const FieldBaseContainer = React.forwardRef<
13
+ ComponentRef<typeof Fieldset>,
14
+ FieldContainerProps
15
+ >(
16
+ (
17
+ {
18
+ name,
19
+ wrapper,
20
+ label,
21
+ children,
22
+ error,
23
+ hasError,
24
+ layout,
25
+ controlled,
26
+ labelSize = 'sm',
27
+ },
28
+ ref
29
+ ) => {
30
+ const { t } = useTranslation();
31
+ const errorMessage = error?.message.key
32
+ ? error.message.key
33
+ : error?.message || '';
34
+ const errorContext = error?.message.context || {};
35
+ if (wrapper === 'fieldset') {
36
+ return (
37
+ <FieldContainer error={hasError} {...layout}>
38
+ <Fieldset
39
+ ref={ref}
40
+ className="outline-none"
41
+ {...(controlled && {
42
+ tabIndex: -1,
43
+ })}
44
+ >
45
+ <FieldsetLegend size={labelSize}>
46
+ {label && label.primary}
47
+ </FieldsetLegend>
48
+ {label && label.secondary && <Hint>{t(label.secondary)}</Hint>}
49
+ {error && (
50
+ <ErrorMessage id={`${name}-error`}>
51
+ {t(errorMessage, errorContext)}
52
+ </ErrorMessage>
53
+ )}
54
+ {children}
55
+ {label && label.hint && <Hint size="sm">{label.hint}</Hint>}
56
+ </Fieldset>
57
+ </FieldContainer>
58
+ );
59
+ } else {
60
+ return (
61
+ <FieldContainer error={hasError} {...layout}>
62
+ <LabelContainer>
63
+ {label && <Label label={label} />}
64
+ {error && (
65
+ <ErrorMessage id={`${name}-error`}>
66
+ {t(errorMessage, errorContext)}
67
+ </ErrorMessage>
68
+ )}
69
+ {children}
70
+ {label && label.hint && <Hint size="sm">{label.hint}</Hint>}
71
+ </LabelContainer>
72
+ </FieldContainer>
73
+ );
74
+ }
57
75
  }
58
- };
76
+ );
77
+
78
+ FieldBaseContainer.displayName = 'FieldBaseContainer';
59
79
 
60
80
  export default FieldBaseContainer;
@@ -13,6 +13,7 @@ const ChildFieldMemo = React.memo(
13
13
  field,
14
14
  control,
15
15
  reset,
16
+ resetField,
16
17
  register,
17
18
  error,
18
19
  Field,
@@ -27,6 +28,7 @@ const ChildFieldMemo = React.memo(
27
28
  Field={Field}
28
29
  name={newField.key}
29
30
  reset={reset}
31
+ resetField={resetField}
30
32
  control={control}
31
33
  register={register}
32
34
  error={error}
@@ -54,6 +56,7 @@ export const FieldConditional: React.FC<FieldConditionalProps> = ({
54
56
  field,
55
57
  register,
56
58
  reset,
59
+ resetField,
57
60
  error,
58
61
  Field,
59
62
  }) => {
@@ -76,6 +79,7 @@ export const FieldConditional: React.FC<FieldConditionalProps> = ({
76
79
  control={control}
77
80
  register={register}
78
81
  reset={reset}
82
+ resetField={resetField}
79
83
  error={error}
80
84
  Field={Field}
81
85
  />
@@ -16,7 +16,6 @@ import FieldArray from '@digigov/form/FieldArray';
16
16
  import Multiplicity from '@digigov/form/MultiplicityField';
17
17
  export const Field: React.FC<FieldProps> = ({
18
18
  name,
19
- disabled,
20
19
  children,
21
20
  ...customField
22
21
  }) => {
@@ -25,6 +24,7 @@ export const Field: React.FC<FieldProps> = ({
25
24
  control,
26
25
  register,
27
26
  reset,
27
+ resetField,
28
28
  error,
29
29
  componentRegistry,
30
30
  formState,
@@ -47,12 +47,12 @@ export const Field: React.FC<FieldProps> = ({
47
47
  ),
48
48
  [field]
49
49
  );
50
-
51
50
  if (calculatedField.condition) {
52
51
  return (
53
52
  <FieldConditional
54
53
  control={control}
55
54
  reset={reset}
55
+ resetField={resetField}
56
56
  register={register}
57
57
  field={calculatedField as FieldWithCondition}
58
58
  error={error}
@@ -68,12 +68,15 @@ export const Field: React.FC<FieldProps> = ({
68
68
  trigger={trigger}
69
69
  register={register}
70
70
  clearErrors={clearErrors}
71
- error={error}
71
+ error={
72
+ formState.isSubmitted && !formState.isSubmitting ? error : undefined
73
+ }
72
74
  getValues={getValues}
73
75
  setValue={setValue}
74
76
  formState={formState}
75
77
  Field={Field}
76
78
  reset={reset}
79
+ resetField={resetField}
77
80
  {...calculatedField}
78
81
  />
79
82
  );
@@ -94,20 +97,27 @@ export const Field: React.FC<FieldProps> = ({
94
97
  setValue={setValue}
95
98
  getValues={getValues}
96
99
  unregister={unregister}
100
+ resetField={resetField}
97
101
  Field={Field}
98
102
  {...calculatedField}
99
103
  />
100
104
  );
101
105
  }
106
+ const editable =
107
+ customField.editable === false || customField.disabled === true
108
+ ? false
109
+ : true;
110
+ const customError = error ? error : formState?.errors[name];
102
111
  return (
103
112
  <FieldBase
104
113
  {...calculatedField}
114
+ editable={editable}
105
115
  name={name}
106
- disabled={disabled}
107
116
  control={control}
108
117
  register={register}
109
118
  reset={reset}
110
- error={error}
119
+ error={customError}
120
+ resetField={resetField}
111
121
  Field={Field}
112
122
  />
113
123
  );
@@ -1,6 +1,7 @@
1
1
  import React from 'react';
2
2
  import { ErrorOption, UseFormReturn, UseFormProps } from 'react-hook-form';
3
3
  import { ValidatorSchema } from '@digigov/form/validators/types';
4
+ import { FieldsetLegendProps } from '@digigov/ui/form/FieldContainer';
4
5
  import { GridProps } from '@digigov/ui/layouts/Grid';
5
6
 
6
7
  export interface FieldLabelProps {
@@ -25,6 +26,7 @@ export interface FieldSpec {
25
26
  | 'datetime'
26
27
  | 'otp'
27
28
  | 'afm'
29
+ | 'amka'
28
30
  | 'iban'
29
31
  | 'file'
30
32
  | 'image'
@@ -45,7 +47,7 @@ export interface FieldSpec {
45
47
  variant?: 'inline' | 'dialog';
46
48
  required?: boolean;
47
49
  enabled?: boolean;
48
- disabled?: boolean;
50
+ disabled?: boolean; // TODO: keep disabled or editable
49
51
  layout?: Record<
50
52
  string,
51
53
  | GridProps['xs']
@@ -80,6 +82,7 @@ export interface FieldConditionalProps {
80
82
  control: UseFormReturn['control'];
81
83
  register: UseFormReturn['register'];
82
84
  reset: UseFormReturn['reset'];
85
+ resetField?: UseFormReturn['resetField'];
83
86
  error?: ErrorOption;
84
87
  Field: React.FC<FieldProps>;
85
88
  }
@@ -93,12 +96,15 @@ export interface FieldComponentItem {
93
96
 
94
97
  export interface FieldContainerProps {
95
98
  name?: FieldSpec['key'];
99
+ register: FieldBaseProps['register'];
96
100
  layout?: FieldSpec['layout'];
97
101
  label?: FieldSpec['label'];
98
102
  error?: ErrorOption | Record<string, any>;
99
103
  hasError?: boolean;
100
104
  children?: React.ReactNode;
105
+ controlled?: boolean;
101
106
  wrapper?: FieldSpec['wrapper'];
107
+ labelSize?: FieldsetLegendProps['size'];
102
108
  }
103
109
 
104
110
  export type FieldComponentRegistry = Record<string, FieldComponentItem>;
@@ -117,7 +123,7 @@ export interface ControlledFieldProps {
117
123
  error?: boolean;
118
124
  name?: string;
119
125
  disabled?: boolean;
120
- Field: React.FC<FieldProps>;
126
+ Field?: React.FC<FieldProps>;
121
127
  }
122
128
 
123
129
  export interface UncontrolledFieldProps {
@@ -145,7 +151,8 @@ export interface FieldBaseProps extends CalculatedField {
145
151
  control: UseFormReturn['control'];
146
152
  register: UseFormReturn['register'];
147
153
  reset: UseFormReturn['reset'];
148
- Field: React.FC<FieldProps>;
154
+ resetField?: UseFormReturn['resetField'];
155
+ Field?: React.FC<FieldProps>;
149
156
  }
150
157
 
151
158
  export interface FieldProps extends FieldSpec {
@@ -158,6 +165,7 @@ export interface UseFieldProps {
158
165
  control: FieldBaseProps['control'];
159
166
  register: FieldBaseProps['register'];
160
167
  reset: FieldBaseProps['reset'];
168
+ resetField: FieldBaseProps['resetField'];
161
169
  watch: UseFormReturn['watch'];
162
170
  formState: UseFormReturn['formState'];
163
171
  getFieldState: UseFormReturn['getFieldState'];
@@ -20,10 +20,12 @@ export const FIELD_COMPONENTS: FieldComponentRegistry = {
20
20
  file: {
21
21
  wrapper: 'fieldset',
22
22
  component: FileInput,
23
+ // controlled: true,
23
24
  },
24
25
  image: {
25
26
  wrapper: 'fieldset',
26
27
  component: ImageInput,
28
+ controlled: true,
27
29
  },
28
30
  date: {
29
31
  wrapper: 'fieldset',
@@ -11,6 +11,7 @@ export const useField = (
11
11
  control,
12
12
  register,
13
13
  reset,
14
+ resetField,
14
15
  trigger,
15
16
  clearErrors,
16
17
  errors,
@@ -30,11 +31,17 @@ export const useField = (
30
31
  `);
31
32
  }
32
33
  let error = errors[name];
33
- const nameIndexRegex = name.match(/^(.*?)\.(\d+)$/);
34
+
35
+ const nameIndexRegex = name.match(/^\[*(.*?)\.(\d+)\]*$/);
34
36
  if (nameIndexRegex) {
35
37
  const [, fieldArrayName, indexStr] = nameIndexRegex;
36
38
  error = errors[fieldArrayName]?.[Number(indexStr)];
37
39
  }
40
+ const nestedNameIndexRegex = name.match(/^\[*(.*?)\.(\d+)\.(.*?)\]*$/);
41
+ if (nestedNameIndexRegex) {
42
+ const [, fieldArrayName, indexStr, fieldItemName] = nestedNameIndexRegex;
43
+ error = errors[fieldArrayName]?.[Number(indexStr)]?.[fieldItemName];
44
+ }
38
45
  useMemo(
39
46
  () => customField?.type && registerField({ ...customField, key: name }),
40
47
  [customField, name, registerField]
@@ -44,6 +51,7 @@ export const useField = (
44
51
  control,
45
52
  register,
46
53
  reset,
54
+ resetField,
47
55
  trigger,
48
56
  watch,
49
57
  componentRegistry,