@digigov/form 2.0.0-85c27c19 → 2.0.0-aefd0709
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Field/FieldBase/index.js +1 -0
- package/Field/FieldBase.js.map +2 -2
- package/Field/FieldBaseContainer/index.js +2 -2
- package/Field/FieldBaseContainer.js.map +2 -2
- package/Field/FieldConditional/index.js +7 -3
- package/Field/FieldConditional.js.map +2 -2
- package/Field/index.js +5 -2
- package/Field/index.js.map +2 -2
- package/Field/types.d.ts +10 -8
- package/Field/utils/index.d.ts +1 -0
- package/Field/utils/index.js +18 -1
- package/Field/utils/index.js.map +2 -2
- package/FieldArray/index.d.ts +1 -0
- package/FieldArray/index.js +7 -6
- package/FieldArray/index.js.map +2 -2
- package/FieldObject/index.d.ts +2 -0
- package/FieldObject/index.js +9 -5
- package/FieldObject/index.js.map +2 -2
- package/Fieldset/index.d.ts +1 -1
- package/Fieldset/index.js +5 -5
- package/Fieldset/index.js.map +2 -2
- package/Fieldset/types.d.ts +2 -3
- package/FormBuilder/index.d.ts +8 -2
- package/FormBuilder/index.js +150 -6
- package/FormBuilder/index.js.map +3 -3
- package/FormContext.js.map +2 -2
- package/MultiplicityField/add-objects/index.js +11 -7
- package/MultiplicityField/add-objects.js.map +2 -2
- package/MultiplicityField/index.js +16 -12
- package/MultiplicityField/index.js.map +2 -2
- package/MultiplicityField/types.d.ts +1 -2
- package/Questions/Questions/index.js +5 -4
- package/Questions/Questions.js.map +2 -2
- package/Questions/QuestionsContext.d.ts +0 -1
- package/Questions/Step/StepArrayReview.js.map +2 -2
- package/Questions/Step/StepContext.d.ts +0 -1
- package/Questions/Step/StepTitle/index.js +4 -3
- package/Questions/Step/StepTitle.d.ts +1 -1
- package/Questions/Step/StepTitle.js.map +2 -2
- package/Questions/Step/types.d.ts +0 -1
- package/Questions/types.d.ts +0 -1
- package/cjs/Field/FieldBase/index.js +1 -0
- package/cjs/Field/FieldBase.js.map +2 -2
- package/cjs/Field/FieldBaseContainer/index.js +4 -4
- package/cjs/Field/FieldBaseContainer.js.map +3 -3
- package/cjs/Field/FieldConditional/index.js +7 -3
- package/cjs/Field/FieldConditional.js.map +2 -2
- package/cjs/Field/index.js +5 -2
- package/cjs/Field/index.js.map +2 -2
- package/cjs/Field/types.js.map +1 -1
- package/cjs/Field/utils/index.js +18 -0
- package/cjs/Field/utils/index.js.map +2 -2
- package/cjs/FieldArray/index.js +8 -7
- package/cjs/FieldArray/index.js.map +3 -3
- package/cjs/FieldObject/index.js +10 -6
- package/cjs/FieldObject/index.js.map +3 -3
- package/cjs/Fieldset/index.js +10 -10
- package/cjs/Fieldset/index.js.map +3 -3
- package/cjs/Fieldset/types.js.map +1 -1
- package/cjs/FormBuilder/index.js +165 -5
- package/cjs/FormBuilder/index.js.map +3 -3
- package/cjs/FormContext/index.js +2 -2
- package/cjs/FormContext.js.map +3 -3
- package/cjs/MultiplicityField/add-objects/index.js +15 -11
- package/cjs/MultiplicityField/add-objects.js.map +3 -3
- package/cjs/MultiplicityField/index.js +15 -16
- package/cjs/MultiplicityField/index.js.map +3 -3
- package/cjs/MultiplicityField/types.js.map +1 -1
- package/cjs/Questions/Questions/index.js +5 -4
- package/cjs/Questions/Questions.js.map +2 -2
- package/cjs/Questions/Step/StepArrayReview.js.map +2 -2
- package/cjs/Questions/Step/StepTitle/index.js +5 -5
- package/cjs/Questions/Step/StepTitle.js.map +3 -3
- package/cjs/index.js +11 -155
- package/cjs/index.js.map +4 -4
- package/cjs/inputs/AutoCompleteInput/__stories__/Default/index.js +1 -7
- package/cjs/inputs/AutoCompleteInput/__stories__/Default.js.map +2 -2
- package/cjs/inputs/AutoCompleteInput/__stories__/Multiple/index.js +1 -8
- package/cjs/inputs/AutoCompleteInput/__stories__/Multiple.js.map +2 -2
- package/cjs/inputs/AutoCompleteInput/index.js +10 -8
- package/cjs/inputs/AutoCompleteInput/index.js.map +3 -3
- package/cjs/inputs/Checkboxes/index.js +7 -9
- package/cjs/inputs/Checkboxes/index.js.map +3 -3
- package/cjs/inputs/DateInput/__stories__/Default/index.js +3 -8
- package/cjs/inputs/DateInput/__stories__/Default.js.map +2 -2
- package/cjs/inputs/DateInput/index.js +4 -5
- package/cjs/inputs/DateInput/index.js.map +3 -3
- package/cjs/inputs/FileInput/index.js +8 -9
- package/cjs/inputs/FileInput/index.js.map +3 -3
- package/cjs/inputs/ImageInput/ImageInput.stories/index.js +4 -4
- package/cjs/inputs/ImageInput/ImageInput.stories.js.map +2 -2
- package/cjs/inputs/ImageInput/__stories__/MaxSize/index.js +69 -0
- package/cjs/inputs/ImageInput/__stories__/MaxSize.js.map +7 -0
- package/cjs/inputs/ImageInput/__stories__/WithInvalidImageDimension/index.js +2 -1
- package/cjs/inputs/ImageInput/__stories__/WithInvalidImageDimension.js.map +2 -2
- package/cjs/inputs/ImageInput/index.js +9 -9
- package/cjs/inputs/ImageInput/index.js.map +3 -3
- package/cjs/inputs/Input/__stories__/LandlineNumber/index.js +1 -0
- package/cjs/inputs/Input/__stories__/LandlineNumber.js.map +2 -2
- package/cjs/inputs/Input/__stories__/MobilePhone/index.js +1 -0
- package/cjs/inputs/Input/__stories__/MobilePhone.js.map +2 -2
- package/cjs/inputs/Input/__stories__/PhoneNumber/index.js +1 -0
- package/cjs/inputs/Input/__stories__/PhoneNumber.js.map +2 -2
- package/cjs/inputs/Input/__stories__/PostalCode/index.js +1 -0
- package/cjs/inputs/Input/__stories__/PostalCode.js.map +2 -2
- package/cjs/inputs/Input/index.js +19 -6
- package/cjs/inputs/Input/index.js.map +3 -3
- package/cjs/inputs/Input/inputsInputScenarios.js.map +2 -2
- package/cjs/inputs/Label/index.js +3 -3
- package/cjs/inputs/Label/index.js.map +3 -3
- package/cjs/inputs/OtpInput/index.js.map +2 -2
- package/cjs/inputs/Radio/__stories__/Conditional.js.map +2 -2
- package/cjs/inputs/Radio/index.js +56 -10
- package/cjs/inputs/Radio/index.js.map +3 -3
- package/cjs/inputs/Select/index.js +3 -4
- package/cjs/inputs/Select/index.js.map +3 -3
- package/cjs/inputs/inputsScenarios/index.js +4 -11
- package/cjs/inputs/inputsScenarios.js.map +2 -2
- package/cjs/lazy/index.js +320 -59
- package/cjs/lazy.js.map +2 -2
- package/cjs/locales/el.js.map +1 -1
- package/cjs/registry/index.js +118 -38
- package/cjs/registry.js.map +2 -2
- package/cjs/types.js.map +1 -1
- package/cjs/utils/index.js +2 -1
- package/cjs/utils.js.map +2 -2
- package/cjs/validators/index.js +16 -66
- package/cjs/validators/index.js.map +3 -3
- package/cjs/validators/utils/date/index.js +138 -0
- package/cjs/validators/utils/date.js.map +7 -0
- package/cjs/validators/utils/file/index.js +1 -1
- package/cjs/validators/utils/file.js.map +2 -2
- package/cjs/validators/utils/index.js +3 -1
- package/cjs/validators/utils/index.js.map +2 -2
- package/cjs/validators/utils/phone.js.map +2 -2
- package/cjs/validators/utils/postal_code.js.map +1 -1
- package/cjs/validators/utils/uuid4.js.map +2 -2
- package/index.d.ts +5 -8
- package/index.js +9 -152
- package/index.js.map +4 -4
- package/inputs/AutoCompleteInput/__stories__/Default/index.js +1 -7
- package/inputs/AutoCompleteInput/__stories__/Default.js.map +2 -2
- package/inputs/AutoCompleteInput/__stories__/Multiple/index.js +1 -8
- package/inputs/AutoCompleteInput/__stories__/Multiple.js.map +2 -2
- package/inputs/AutoCompleteInput/index.d.ts +1 -1
- package/inputs/AutoCompleteInput/index.js +12 -8
- package/inputs/AutoCompleteInput/index.js.map +2 -2
- package/inputs/Checkboxes/index.d.ts +1 -1
- package/inputs/Checkboxes/index.js +8 -6
- package/inputs/Checkboxes/index.js.map +2 -2
- package/inputs/DateInput/__stories__/Default/index.js +3 -8
- package/inputs/DateInput/__stories__/Default.js.map +2 -2
- package/inputs/DateInput/index.d.ts +1 -2
- package/inputs/DateInput/index.js +6 -4
- package/inputs/DateInput/index.js.map +2 -2
- package/inputs/FileInput/index.js +6 -7
- package/inputs/FileInput/index.js.map +2 -2
- package/inputs/ImageInput/ImageInput.stories/index.js +2 -2
- package/inputs/ImageInput/ImageInput.stories.d.ts +1 -1
- package/inputs/ImageInput/ImageInput.stories.js.map +2 -2
- package/inputs/ImageInput/__stories__/MaxSize/index.js +36 -0
- package/inputs/ImageInput/__stories__/MaxSize/package.json +6 -0
- package/inputs/ImageInput/__stories__/MaxSize.d.ts +3 -0
- package/inputs/ImageInput/__stories__/MaxSize.js.map +7 -0
- package/inputs/ImageInput/__stories__/WithInvalidImageDimension/index.js +2 -1
- package/inputs/ImageInput/__stories__/WithInvalidImageDimension.js.map +2 -2
- package/inputs/ImageInput/index.js +8 -8
- package/inputs/ImageInput/index.js.map +2 -2
- package/inputs/Input/__stories__/LandlineNumber/index.js +1 -0
- package/inputs/Input/__stories__/LandlineNumber.js.map +2 -2
- package/inputs/Input/__stories__/MobilePhone/index.js +1 -0
- package/inputs/Input/__stories__/MobilePhone.js.map +2 -2
- package/inputs/Input/__stories__/PhoneNumber/index.js +1 -0
- package/inputs/Input/__stories__/PhoneNumber.js.map +2 -2
- package/inputs/Input/__stories__/PostalCode/index.js +1 -0
- package/inputs/Input/__stories__/PostalCode.js.map +2 -2
- package/inputs/Input/index.js +17 -4
- package/inputs/Input/index.js.map +3 -3
- package/inputs/Input/inputsInputScenarios.js.map +2 -2
- package/inputs/Label/index.d.ts +0 -2
- package/inputs/Label/index.js +2 -2
- package/inputs/Label/index.js.map +2 -2
- package/inputs/OtpInput/index.js.map +2 -2
- package/inputs/Radio/__stories__/Conditional.js.map +2 -2
- package/inputs/Radio/index.d.ts +5 -1
- package/inputs/Radio/index.js +57 -8
- package/inputs/Radio/index.js.map +2 -2
- package/inputs/Select/index.d.ts +1 -1
- package/inputs/Select/index.js +4 -2
- package/inputs/Select/index.js.map +2 -2
- package/inputs/inputsScenarios/index.js +4 -11
- package/inputs/inputsScenarios.d.ts +0 -42
- package/inputs/inputsScenarios.js.map +2 -2
- package/lazy/index.js +320 -59
- package/lazy.d.ts +17 -10
- package/lazy.js.map +2 -2
- package/locales/el.js.map +1 -1
- package/package.json +4 -4
- package/registry/index.js +118 -38
- package/registry.d.ts +1 -0
- package/registry.js.map +2 -2
- package/src/Field/FieldBase.tsx +1 -0
- package/src/Field/FieldBaseContainer.tsx +2 -2
- package/src/Field/FieldConditional.tsx +4 -0
- package/src/Field/index.tsx +4 -1
- package/src/Field/types.tsx +10 -8
- package/src/Field/utils/index.ts +18 -1
- package/src/FieldArray/index.test.tsx +14 -13
- package/src/FieldArray/index.tsx +9 -6
- package/src/FieldObject/index.tsx +8 -2
- package/src/Fieldset/index.tsx +5 -5
- package/src/Fieldset/types.tsx +2 -2
- package/src/FormBuilder/{FormBuilder.mdx → doc.mdx} +20 -33
- package/src/FormBuilder/index.test.tsx +11 -10
- package/src/FormBuilder/index.tsx +178 -7
- package/src/FormBuilder/scenarios.test.tsx +2 -2
- package/src/FormContext.tsx +1 -2
- package/src/MultiplicityField/add-objects.tsx +10 -8
- package/src/MultiplicityField/{MultiplicityField.mdx → doc.mdx} +12 -16
- package/src/MultiplicityField/index.test.tsx +26 -25
- package/src/MultiplicityField/index.tsx +15 -12
- package/src/MultiplicityField/types.ts +1 -2
- package/src/Questions/Questions.tsx +4 -4
- package/src/Questions/Step/StepArrayReview.tsx +1 -1
- package/src/Questions/Step/StepTitle.tsx +4 -3
- package/src/Questions/__snapshots__/index.spec.tsx.snap +8 -4
- package/src/Questions/{index.mdx → doc.mdx} +9 -12
- package/src/Questions/index.spec.tsx +6 -2
- package/src/Questions/index.test.tsx +11 -10
- package/src/create-simple-form.mdx +2 -6
- package/src/{index.mdx → doc.mdx} +4 -8
- package/src/index.ts +6 -0
- package/src/inputs/AutoCompleteInput/__stories__/Default.tsx +2 -10
- package/src/inputs/AutoCompleteInput/__stories__/Multiple.tsx +1 -8
- package/src/inputs/AutoCompleteInput/{index.mdx → doc.mdx} +2 -13
- package/src/inputs/AutoCompleteInput/index.test.tsx +14 -13
- package/src/inputs/AutoCompleteInput/index.tsx +36 -31
- package/src/inputs/Checkboxes/{index.mdx → doc.mdx} +5 -15
- package/src/inputs/Checkboxes/index.test.tsx +17 -16
- package/src/inputs/Checkboxes/index.tsx +10 -8
- package/src/inputs/DateInput/__stories__/Default.tsx +7 -12
- package/src/inputs/DateInput/{index.mdx → doc.mdx} +1 -8
- package/src/inputs/DateInput/index.test.tsx +11 -10
- package/src/inputs/DateInput/index.tsx +6 -4
- package/src/inputs/FileInput/{index.mdx → doc.mdx} +1 -5
- package/src/inputs/FileInput/index.test.tsx +11 -10
- package/src/inputs/FileInput/index.tsx +7 -8
- package/src/inputs/ImageInput/ImageInput.stories.js +1 -1
- package/src/inputs/ImageInput/__stories__/MaxSize.tsx +37 -0
- package/src/inputs/ImageInput/__stories__/WithInvalidImageDimension.tsx +2 -0
- package/src/inputs/ImageInput/doc.mdx +23 -0
- package/src/inputs/ImageInput/index.test.tsx +21 -16
- package/src/inputs/ImageInput/index.tsx +10 -15
- package/src/inputs/Input/__stories__/LandlineNumber.tsx +2 -1
- package/src/inputs/Input/__stories__/MobilePhone.tsx +1 -0
- package/src/inputs/Input/__stories__/PhoneNumber.tsx +1 -0
- package/src/inputs/Input/__stories__/PostalCode.tsx +1 -0
- package/src/inputs/Input/doc.mdx +56 -0
- package/src/inputs/Input/index.test.tsx +38 -37
- package/src/inputs/Input/index.tsx +32 -29
- package/src/inputs/Input/inputsInputScenarios.ts +244 -245
- package/src/inputs/Label/doc.mdx +14 -0
- package/src/inputs/Label/index.test.tsx +11 -10
- package/src/inputs/Label/index.tsx +2 -6
- package/src/inputs/OtpInput/{index.mdx → doc.mdx} +1 -8
- package/src/inputs/OtpInput/index.test.tsx +11 -10
- package/src/inputs/OtpInput/index.tsx +2 -1
- package/src/inputs/Radio/__stories__/Conditional.tsx +2 -1
- package/src/inputs/Radio/{index.mdx → doc.mdx} +5 -15
- package/src/inputs/Radio/index.test.tsx +17 -16
- package/src/inputs/Radio/index.tsx +76 -10
- package/src/inputs/Select/{index.mdx → doc.mdx} +1 -5
- package/src/inputs/Select/index.test.tsx +11 -10
- package/src/inputs/Select/index.tsx +5 -3
- package/src/inputs/inputsScenarios.ts +174 -181
- package/src/installation.mdx +2 -5
- package/src/lazy.js +322 -62
- package/src/locales/el.ts +1 -1
- package/src/registry.js +121 -45
- package/src/types.tsx +3 -2
- package/src/utils.ts +2 -2
- package/src/validators/index.ts +33 -71
- package/src/validators/utils/date.ts +107 -0
- package/src/validators/utils/file.ts +5 -3
- package/src/validators/utils/index.ts +1 -0
- package/src/validators/utils/phone.ts +1 -1
- package/src/validators/utils/postal_code.ts +1 -1
- package/src/validators/utils/uuid4.ts +2 -1
- package/src/validators/validators.spec.ts +3 -3
- package/types.d.ts +3 -3
- package/types.js.map +1 -1
- package/utils/index.js +2 -1
- package/utils.js.map +2 -2
- package/validators/index.js +20 -67
- package/validators/index.js.map +2 -2
- package/validators/utils/date/index.js +103 -0
- package/validators/utils/date/package.json +6 -0
- package/validators/utils/date.d.ts +9 -0
- package/validators/utils/date.js.map +7 -0
- package/validators/utils/file/index.js +1 -1
- package/validators/utils/file.js.map +2 -2
- package/validators/utils/index.d.ts +1 -0
- package/validators/utils/index.js +1 -0
- package/validators/utils/index.js.map +2 -2
- package/validators/utils/phone.d.ts +1 -1
- package/validators/utils/phone.js.map +2 -2
- package/validators/utils/postal_code.d.ts +1 -1
- package/validators/utils/postal_code.js.map +1 -1
- package/validators/utils/uuid4.js.map +2 -2
- package/src/index.tsx +0 -178
- package/src/inputs/ImageInput/index.mdx +0 -19
- package/src/inputs/Input/index.mdx +0 -95
- package/src/inputs/Label/index.mdx +0 -0
- /package/src/Field/{index.mdx → doc.mdx} +0 -0
package/src/Field/index.tsx
CHANGED
|
@@ -56,6 +56,7 @@ export const Field: React.FC<FieldProps> = ({
|
|
|
56
56
|
register={register}
|
|
57
57
|
field={calculatedField as FieldWithCondition}
|
|
58
58
|
error={error}
|
|
59
|
+
Field={Field}
|
|
59
60
|
/>
|
|
60
61
|
);
|
|
61
62
|
}
|
|
@@ -67,6 +68,7 @@ export const Field: React.FC<FieldProps> = ({
|
|
|
67
68
|
register={register}
|
|
68
69
|
error={error}
|
|
69
70
|
formState={formState}
|
|
71
|
+
Field={Field}
|
|
70
72
|
{...calculatedField}
|
|
71
73
|
/>
|
|
72
74
|
);
|
|
@@ -87,6 +89,7 @@ export const Field: React.FC<FieldProps> = ({
|
|
|
87
89
|
setValue={setValue}
|
|
88
90
|
getValues={getValues}
|
|
89
91
|
unregister={unregister}
|
|
92
|
+
Field={Field}
|
|
90
93
|
{...calculatedField}
|
|
91
94
|
/>
|
|
92
95
|
);
|
|
@@ -100,7 +103,7 @@ export const Field: React.FC<FieldProps> = ({
|
|
|
100
103
|
register={register}
|
|
101
104
|
reset={reset}
|
|
102
105
|
error={error}
|
|
103
|
-
|
|
106
|
+
Field={Field}
|
|
104
107
|
/>
|
|
105
108
|
);
|
|
106
109
|
};
|
package/src/Field/types.tsx
CHANGED
|
@@ -3,10 +3,10 @@ import { ErrorOption, UseFormReturn, UseFormProps } from 'react-hook-form';
|
|
|
3
3
|
import { ValidatorSchema } from '@digigov/form/validators/types';
|
|
4
4
|
import { GridProps } from '@digigov/ui/layouts/Grid';
|
|
5
5
|
|
|
6
|
-
export
|
|
6
|
+
export interface FieldLabelProps {
|
|
7
7
|
primary?: string;
|
|
8
8
|
secondary?: string;
|
|
9
|
-
}
|
|
9
|
+
}
|
|
10
10
|
|
|
11
11
|
export interface FieldSpec {
|
|
12
12
|
key: string; // !TODO rename key to name;
|
|
@@ -31,13 +31,12 @@ export interface FieldSpec {
|
|
|
31
31
|
| 'array'
|
|
32
32
|
| 'object';
|
|
33
33
|
component?: any;
|
|
34
|
+
autoComplete?: string;
|
|
34
35
|
maxLength?: number;
|
|
35
36
|
condition?: Record<string, FieldCondition>;
|
|
36
37
|
controlled?: boolean;
|
|
37
38
|
label?: FieldLabelProps;
|
|
38
|
-
extra?:
|
|
39
|
-
[key: string]: any;
|
|
40
|
-
};
|
|
39
|
+
extra?: Record<string, any>;
|
|
41
40
|
editable?: boolean;
|
|
42
41
|
required?: boolean;
|
|
43
42
|
enabled?: boolean;
|
|
@@ -77,14 +76,15 @@ export interface FieldConditionalProps {
|
|
|
77
76
|
register: UseFormReturn['register'];
|
|
78
77
|
reset: UseFormReturn['reset'];
|
|
79
78
|
error?: ErrorOption;
|
|
79
|
+
Field: React.FC<FieldProps>;
|
|
80
80
|
}
|
|
81
81
|
|
|
82
|
-
export
|
|
82
|
+
export interface FieldComponentItem {
|
|
83
83
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
84
84
|
component: any;
|
|
85
85
|
controlled?: boolean;
|
|
86
86
|
wrapper?: FieldSpec['wrapper'];
|
|
87
|
-
}
|
|
87
|
+
}
|
|
88
88
|
|
|
89
89
|
export interface FieldContainerProps {
|
|
90
90
|
name?: FieldSpec['key'];
|
|
@@ -111,6 +111,7 @@ export interface ControlledFieldProps {
|
|
|
111
111
|
error?: boolean;
|
|
112
112
|
name?: string;
|
|
113
113
|
disabled?: boolean;
|
|
114
|
+
Field: React.FC<FieldProps>;
|
|
114
115
|
}
|
|
115
116
|
|
|
116
117
|
export interface UncontrolledFieldProps {
|
|
@@ -121,6 +122,7 @@ export interface UncontrolledFieldProps {
|
|
|
121
122
|
extra?: Record<string, never>;
|
|
122
123
|
type?: string;
|
|
123
124
|
disabled?: boolean;
|
|
125
|
+
Field: React.FC<FieldProps>;
|
|
124
126
|
}
|
|
125
127
|
|
|
126
128
|
export interface CalculatedField extends OmittedFieldSpec {
|
|
@@ -137,7 +139,7 @@ export interface FieldBaseProps extends CalculatedField {
|
|
|
137
139
|
control: UseFormReturn['control'];
|
|
138
140
|
register: UseFormReturn['register'];
|
|
139
141
|
reset: UseFormReturn['reset'];
|
|
140
|
-
|
|
142
|
+
Field: React.FC<FieldProps>;
|
|
141
143
|
}
|
|
142
144
|
|
|
143
145
|
export interface FieldProps extends FieldSpec {
|
package/src/Field/utils/index.ts
CHANGED
|
@@ -6,7 +6,7 @@ import FileInput from '@digigov/form/inputs/FileInput';
|
|
|
6
6
|
import ImageInput from '@digigov/form/inputs/ImageInput';
|
|
7
7
|
import Input from '@digigov/form/inputs/Input';
|
|
8
8
|
import OtpInput from '@digigov/form/inputs/OtpInput';
|
|
9
|
-
import Radio from '@digigov/form/inputs/Radio';
|
|
9
|
+
import Radio, { ControlledRadioButtonsGroup } from '@digigov/form/inputs/Radio';
|
|
10
10
|
import Select from '@digigov/form/inputs/Select';
|
|
11
11
|
|
|
12
12
|
export const FIELD_COMPONENTS: FieldComponentRegistry = {
|
|
@@ -57,3 +57,20 @@ export const ALTERNATIVE_COMPONENTS: FieldComponentRegistry = {
|
|
|
57
57
|
wrapper: 'fieldset',
|
|
58
58
|
},
|
|
59
59
|
};
|
|
60
|
+
|
|
61
|
+
export const CONTROLLED_FIELD_COMPONENTS: FieldComponentRegistry = {
|
|
62
|
+
...FIELD_COMPONENTS,
|
|
63
|
+
'choice:single': {
|
|
64
|
+
wrapper: 'fieldset',
|
|
65
|
+
controlled: true,
|
|
66
|
+
component: ControlledRadioButtonsGroup,
|
|
67
|
+
},
|
|
68
|
+
text: {
|
|
69
|
+
component: Input,
|
|
70
|
+
controlled: true,
|
|
71
|
+
},
|
|
72
|
+
string: {
|
|
73
|
+
component: Input,
|
|
74
|
+
controlled: true,
|
|
75
|
+
},
|
|
76
|
+
};
|
|
@@ -1,24 +1,25 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { test, expect } from '@playwright/experimental-ct-react';
|
|
3
|
-
import TestVariant from '@digigov/ui/utils/TestVariant'
|
|
4
3
|
import { Default } from '@digigov/form/FieldArray/__stories__/Default';
|
|
5
4
|
import { WithExactLength } from '@digigov/form/FieldArray/__stories__/WithExactLength';
|
|
5
|
+
import TestVariant from '@digigov/ui/utils/TestVariant';
|
|
6
6
|
|
|
7
7
|
test('renders the All FieldArray variants', async ({ mount, page }) => {
|
|
8
8
|
await mount(
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
</
|
|
17
|
-
|
|
18
|
-
)
|
|
9
|
+
<div>
|
|
10
|
+
<TestVariant title="Default">
|
|
11
|
+
<Default />
|
|
12
|
+
</TestVariant>
|
|
13
|
+
<TestVariant title="WithExactLength">
|
|
14
|
+
<WithExactLength />
|
|
15
|
+
</TestVariant>
|
|
16
|
+
</div>
|
|
17
|
+
);
|
|
19
18
|
await page.evaluate(() => document.fonts.ready);
|
|
20
19
|
|
|
21
|
-
const screenshot = await page.screenshot({
|
|
20
|
+
const screenshot = await page.screenshot({
|
|
21
|
+
fullPage: true,
|
|
22
|
+
animations: 'disabled',
|
|
23
|
+
});
|
|
22
24
|
expect(screenshot).toMatchSnapshot();
|
|
23
25
|
});
|
|
24
|
-
|
package/src/FieldArray/index.tsx
CHANGED
|
@@ -1,18 +1,19 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { ErrorOption, useFieldArray, UseFormReturn } from 'react-hook-form';
|
|
3
|
-
import
|
|
3
|
+
import { FieldBaseContainer } from '@digigov/form/Field/FieldBaseContainer';
|
|
4
4
|
import { FieldProps } from '@digigov/form/Field/types';
|
|
5
|
-
import FieldObject from '@digigov/form/FieldObject';
|
|
6
|
-
import { FieldsetLabel } from '@digigov/form/Fieldset';
|
|
7
|
-
import Fieldset from '@digigov/react-core/Fieldset';
|
|
5
|
+
import { FieldObject } from '@digigov/form/FieldObject';
|
|
6
|
+
import { FieldsetLabel, Fieldset } from '@digigov/form/Fieldset';
|
|
8
7
|
import { Card } from '@digigov/ui/content/Card';
|
|
9
8
|
import { Button } from '@digigov/ui/form/Button';
|
|
10
9
|
import { Hint } from '@digigov/ui/typography/Hint';
|
|
10
|
+
|
|
11
11
|
export interface FieldArrayProps extends FieldProps {
|
|
12
12
|
control: UseFormReturn['control'];
|
|
13
13
|
register: UseFormReturn['register'];
|
|
14
14
|
formState: UseFormReturn['formState'];
|
|
15
15
|
error?: ErrorOption;
|
|
16
|
+
Field: React.FC<FieldProps>;
|
|
16
17
|
}
|
|
17
18
|
export const FieldArray: React.FC<FieldArrayProps> = ({
|
|
18
19
|
name,
|
|
@@ -22,6 +23,7 @@ export const FieldArray: React.FC<FieldArrayProps> = ({
|
|
|
22
23
|
error,
|
|
23
24
|
layout,
|
|
24
25
|
label,
|
|
26
|
+
Field,
|
|
25
27
|
...customField
|
|
26
28
|
}) => {
|
|
27
29
|
const { fields, append, remove } = useFieldArray({
|
|
@@ -30,7 +32,7 @@ export const FieldArray: React.FC<FieldArrayProps> = ({
|
|
|
30
32
|
});
|
|
31
33
|
|
|
32
34
|
return (
|
|
33
|
-
<
|
|
35
|
+
<FieldBaseContainer
|
|
34
36
|
label={label}
|
|
35
37
|
layout={layout}
|
|
36
38
|
error={
|
|
@@ -60,6 +62,7 @@ export const FieldArray: React.FC<FieldArrayProps> = ({
|
|
|
60
62
|
register={register}
|
|
61
63
|
control={control}
|
|
62
64
|
{...customField.extra?.of}
|
|
65
|
+
Field={Field}
|
|
63
66
|
/>
|
|
64
67
|
<Button
|
|
65
68
|
name={`${name}-object-remove`}
|
|
@@ -84,7 +87,7 @@ export const FieldArray: React.FC<FieldArrayProps> = ({
|
|
|
84
87
|
>
|
|
85
88
|
{customField.extra?.label.object?.add}
|
|
86
89
|
</Button>
|
|
87
|
-
</
|
|
90
|
+
</FieldBaseContainer>
|
|
88
91
|
);
|
|
89
92
|
};
|
|
90
93
|
|
|
@@ -7,9 +7,9 @@ import {
|
|
|
7
7
|
ALTERNATIVE_COMPONENTS,
|
|
8
8
|
} from '@digigov/form/Field/utils';
|
|
9
9
|
import { calculateField } from '@digigov/form/Field/utils/calculateField';
|
|
10
|
-
import Fieldset,
|
|
10
|
+
import { Fieldset, FieldsetCaption } from '@digigov/form/Fieldset';
|
|
11
11
|
import { FieldSpec } from '@digigov/form/types';
|
|
12
|
-
import { FieldsetLegend } from '@digigov/
|
|
12
|
+
import { FieldsetLegend } from '@digigov/ui/form/FieldContainer';
|
|
13
13
|
import { useTranslation } from '@digigov/ui/i18n';
|
|
14
14
|
|
|
15
15
|
export interface FieldObjectProps extends Omit<FieldProps, 'key'> {
|
|
@@ -18,6 +18,7 @@ export interface FieldObjectProps extends Omit<FieldProps, 'key'> {
|
|
|
18
18
|
reset: UseFormReturn['reset'];
|
|
19
19
|
formState: UseFormReturn['formState'];
|
|
20
20
|
error?: ErrorOption;
|
|
21
|
+
Field: React.FC<FieldProps>;
|
|
21
22
|
}
|
|
22
23
|
|
|
23
24
|
export const FieldObject: React.FC<FieldObjectProps> = ({
|
|
@@ -29,6 +30,7 @@ export const FieldObject: React.FC<FieldObjectProps> = ({
|
|
|
29
30
|
reset,
|
|
30
31
|
formState,
|
|
31
32
|
error,
|
|
33
|
+
Field,
|
|
32
34
|
}) => {
|
|
33
35
|
const { t } = useTranslation();
|
|
34
36
|
|
|
@@ -50,6 +52,7 @@ export const FieldObject: React.FC<FieldObjectProps> = ({
|
|
|
50
52
|
field={field}
|
|
51
53
|
error={error && error[field.key]}
|
|
52
54
|
formState={formState}
|
|
55
|
+
Field={Field}
|
|
53
56
|
/>
|
|
54
57
|
))}
|
|
55
58
|
</Fieldset>
|
|
@@ -65,6 +68,7 @@ export interface FieldObjectItemProps {
|
|
|
65
68
|
formState: UseFormReturn['formState'];
|
|
66
69
|
error?: ErrorOption;
|
|
67
70
|
children?: React.ReactNode;
|
|
71
|
+
Field: React.FC<FieldProps>;
|
|
68
72
|
}
|
|
69
73
|
|
|
70
74
|
const FieldObjectItem: React.FC<FieldObjectItemProps> = ({
|
|
@@ -76,6 +80,7 @@ const FieldObjectItem: React.FC<FieldObjectItemProps> = ({
|
|
|
76
80
|
formState,
|
|
77
81
|
reset,
|
|
78
82
|
register,
|
|
83
|
+
Field,
|
|
79
84
|
}) => {
|
|
80
85
|
const calculatedField: CalculatedField = useMemo(
|
|
81
86
|
() =>
|
|
@@ -88,6 +93,7 @@ const FieldObjectItem: React.FC<FieldObjectItemProps> = ({
|
|
|
88
93
|
<FieldBase
|
|
89
94
|
{...calculatedField}
|
|
90
95
|
name={name}
|
|
96
|
+
Field={Field}
|
|
91
97
|
control={control}
|
|
92
98
|
reset={reset}
|
|
93
99
|
register={register}
|
package/src/Fieldset/index.tsx
CHANGED
|
@@ -4,11 +4,11 @@ import {
|
|
|
4
4
|
FieldsetCaptionProps,
|
|
5
5
|
FieldsetBodyProps,
|
|
6
6
|
} from '@digigov/form/Fieldset/types';
|
|
7
|
-
import Fieldset from '@digigov/react-core/Fieldset';
|
|
8
|
-
import FieldsetLegend from '@digigov/
|
|
9
|
-
import
|
|
10
|
-
import
|
|
11
|
-
import NormalText from '@digigov/ui/typography/NormalText';
|
|
7
|
+
import { Fieldset } from '@digigov/react-core/Fieldset';
|
|
8
|
+
import { FieldsetLegend } from '@digigov/ui/form/FieldContainer';
|
|
9
|
+
import { Grid } from '@digigov/ui/layouts/Grid';
|
|
10
|
+
import { Hint } from '@digigov/ui/typography/Hint';
|
|
11
|
+
import { NormalText } from '@digigov/ui/typography/NormalText';
|
|
12
12
|
|
|
13
13
|
export const FieldsetLabel: React.FC<FieldsetLabelProps> = ({
|
|
14
14
|
children,
|
package/src/Fieldset/types.tsx
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { FieldsetLegendProps } from '@digigov/
|
|
2
|
-
import { HintProps } from '@digigov/
|
|
1
|
+
import { FieldsetLegendProps } from '@digigov/ui/form/FieldContainer';
|
|
2
|
+
import { HintProps } from '@digigov/ui/typography/Hint';
|
|
3
3
|
|
|
4
4
|
export interface FieldsetLabelProps extends FieldsetLegendProps {}
|
|
5
5
|
export interface FieldsetCaptionProps extends HintProps {}
|
|
@@ -8,11 +8,8 @@ sidebar_label: FormBuilder
|
|
|
8
8
|
|
|
9
9
|
`stepForm` component:
|
|
10
10
|
|
|
11
|
-
<
|
|
12
|
-
|
|
13
|
-
component="FormBuilder"
|
|
14
|
-
story="Default.tsx"
|
|
15
|
-
/>
|
|
11
|
+
<code src="@digigov/form/FormBuilder/__stories__/Default.tsx" />
|
|
12
|
+
|
|
16
13
|
|
|
17
14
|
### Importing and using FormBuilder Component
|
|
18
15
|
|
|
@@ -34,18 +31,14 @@ import BasicLayout, {
|
|
|
34
31
|
import {FormBuilder} from '@digigov/form';
|
|
35
32
|
|
|
36
33
|
export default function MyComponent({ props }) {
|
|
37
|
-
|
|
38
34
|
return (
|
|
39
35
|
<BasicLayout>
|
|
40
|
-
|
|
41
|
-
.
|
|
36
|
+
/* code */
|
|
42
37
|
<Container>
|
|
43
38
|
<Main>
|
|
44
|
-
|
|
45
|
-
.
|
|
39
|
+
/* code */
|
|
46
40
|
<FormBuilder></FormBuilder>
|
|
47
|
-
|
|
48
|
-
.
|
|
41
|
+
/* code */
|
|
49
42
|
</Main>
|
|
50
43
|
</Container>
|
|
51
44
|
<Bottom>
|
|
@@ -54,7 +47,6 @@ export default function MyComponent({ props }) {
|
|
|
54
47
|
</BasicLayout>
|
|
55
48
|
);
|
|
56
49
|
}
|
|
57
|
-
}
|
|
58
50
|
```
|
|
59
51
|
|
|
60
52
|
### Props
|
|
@@ -83,7 +75,7 @@ Below are demostrated some examples for each type of field
|
|
|
83
75
|
|
|
84
76
|
The examples above are implemented by using the code below
|
|
85
77
|
|
|
86
|
-
```
|
|
78
|
+
```jsx
|
|
87
79
|
import React, { useState } from 'react';
|
|
88
80
|
import BasicLayout, {
|
|
89
81
|
Top,
|
|
@@ -91,7 +83,7 @@ import BasicLayout, {
|
|
|
91
83
|
Main,
|
|
92
84
|
Bottom,
|
|
93
85
|
} from '@digigov/ui/layouts/Basic';
|
|
94
|
-
import Header, { HeaderTitle } from '@digigov/ui/app/Header';
|
|
86
|
+
import Header, { HeaderTitle, HeaderContent, HeaderSection } from '@digigov/ui/app/Header';
|
|
95
87
|
import GovGRLogo from '@digigov/ui/govgr/GovGRLogo';
|
|
96
88
|
import GovGRFooter from '@digigov/ui/govgr/Footer';
|
|
97
89
|
import Button from '@digigov/ui/form/Button';
|
|
@@ -99,8 +91,9 @@ import PageTitleContainer, {
|
|
|
99
91
|
PageTitleCaption,
|
|
100
92
|
PageTitleHeading,
|
|
101
93
|
} from '@digigov/ui/app/PageTitleContainer';
|
|
102
|
-
import
|
|
103
|
-
import FormBuilder, { Fieldset,
|
|
94
|
+
import BackLink from '@digigov/ui/navigation/BackLink';
|
|
95
|
+
import FormBuilder, { Fieldset, Field } from '@digigov/form';
|
|
96
|
+
import { FieldsetLabel } from '@digigov/form/Fieldset';
|
|
104
97
|
import { useTranslation } from '@digigov/ui/i18n';
|
|
105
98
|
|
|
106
99
|
const FIELDS = [
|
|
@@ -203,30 +196,24 @@ const initialValues = {
|
|
|
203
196
|
string: 'default content',
|
|
204
197
|
};
|
|
205
198
|
|
|
206
|
-
const useStyles = makeStyles(
|
|
207
|
-
{
|
|
208
|
-
top: { minHeight: '75px' },
|
|
209
|
-
main: {},
|
|
210
|
-
side: {},
|
|
211
|
-
},
|
|
212
|
-
{ name: 'MuiSite' }
|
|
213
|
-
);
|
|
214
|
-
|
|
215
199
|
export default function Index() {
|
|
216
|
-
const styles = useStyles();
|
|
217
200
|
const [data, setData] = useState(null);
|
|
218
201
|
const { t } = useTranslation();
|
|
219
202
|
return (
|
|
220
203
|
<BasicLayout>
|
|
221
|
-
<Top
|
|
204
|
+
<Top>
|
|
222
205
|
<Header>
|
|
223
|
-
<
|
|
224
|
-
|
|
206
|
+
<HeaderContent>
|
|
207
|
+
<HeaderSection>
|
|
208
|
+
<GovGRLogo />
|
|
209
|
+
<HeaderTitle>Service name</HeaderTitle>
|
|
210
|
+
</HeaderSection>
|
|
211
|
+
</HeaderContent>
|
|
225
212
|
</Header>
|
|
226
213
|
</Top>
|
|
227
214
|
<Container>
|
|
228
|
-
<Main
|
|
229
|
-
<
|
|
215
|
+
<Main>
|
|
216
|
+
<BackLink>Back</BackLink>
|
|
230
217
|
<PageTitleContainer>
|
|
231
218
|
<PageTitleCaption>Before we start</PageTitleCaption>
|
|
232
219
|
<PageTitleHeading>Submit a form</PageTitleHeading>
|
|
@@ -237,7 +224,7 @@ export default function Index() {
|
|
|
237
224
|
initial={initialValues}
|
|
238
225
|
>
|
|
239
226
|
<Fieldset>
|
|
240
|
-
<FieldsetLabel>This is a fieldset</FieldsetLabel>
|
|
227
|
+
<FieldsetLabel size="lg">This is a fieldset</FieldsetLabel>
|
|
241
228
|
{FIELDS.map((field) => (
|
|
242
229
|
<Field key={field.key} name={field.key} />
|
|
243
230
|
))}
|
|
@@ -1,20 +1,21 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { test, expect } from '@playwright/experimental-ct-react';
|
|
3
|
-
import TestVariant from '@digigov/ui/utils/TestVariant'
|
|
4
3
|
import { Default } from '@digigov/form/FormBuilder/__stories__/Default';
|
|
4
|
+
import TestVariant from '@digigov/ui/utils/TestVariant';
|
|
5
5
|
|
|
6
6
|
test('renders the All FormBuilder variants', async ({ mount, page }) => {
|
|
7
7
|
await mount(
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
</
|
|
13
|
-
|
|
14
|
-
)
|
|
8
|
+
<div>
|
|
9
|
+
<TestVariant title="Default">
|
|
10
|
+
<Default />
|
|
11
|
+
</TestVariant>
|
|
12
|
+
</div>
|
|
13
|
+
);
|
|
15
14
|
await page.evaluate(() => document.fonts.ready);
|
|
16
15
|
|
|
17
|
-
const screenshot = await page.screenshot({
|
|
16
|
+
const screenshot = await page.screenshot({
|
|
17
|
+
fullPage: true,
|
|
18
|
+
animations: 'disabled',
|
|
19
|
+
});
|
|
18
20
|
expect(screenshot).toMatchSnapshot();
|
|
19
21
|
});
|
|
20
|
-
|
|
@@ -1,8 +1,179 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
} from '@digigov/form';
|
|
7
|
-
|
|
1
|
+
import React, { useCallback, useContext, useRef } from 'react';
|
|
2
|
+
import { useForm } from 'react-hook-form';
|
|
3
|
+
import { Field } from '@digigov/form/Field';
|
|
4
|
+
import { CONTROLLED_FIELD_COMPONENTS } from '@digigov/form/Field/utils';
|
|
5
|
+
import { Fieldset } from '@digigov/form/Fieldset';
|
|
6
|
+
import { FormContext } from '@digigov/form/FormContext';
|
|
7
|
+
import { FormBaseProps, FormData, FormBuilderProps } from '@digigov/form/types';
|
|
8
|
+
import { yupResolver } from '@digigov/form/utils';
|
|
9
|
+
import { useValidationSchema } from '@digigov/form/validators';
|
|
10
|
+
import { Button } from '@digigov/ui/form/Button';
|
|
11
|
+
import { Form } from '@digigov/ui/form/Form';
|
|
12
|
+
|
|
13
|
+
const FormBase = React.forwardRef(function FormBase(
|
|
14
|
+
{
|
|
15
|
+
onSubmit,
|
|
16
|
+
children,
|
|
17
|
+
registerField,
|
|
18
|
+
fieldsMap,
|
|
19
|
+
fieldsetsMap,
|
|
20
|
+
resolver,
|
|
21
|
+
mode,
|
|
22
|
+
initial,
|
|
23
|
+
reValidateMode,
|
|
24
|
+
shouldFocusError,
|
|
25
|
+
criteriaMode,
|
|
26
|
+
componentRegistry,
|
|
27
|
+
grid,
|
|
28
|
+
...props
|
|
29
|
+
}: FormBaseProps,
|
|
30
|
+
ref: React.Ref<HTMLFormElement>
|
|
31
|
+
) {
|
|
32
|
+
const form = useForm({
|
|
33
|
+
resolver,
|
|
34
|
+
mode,
|
|
35
|
+
defaultValues: initial,
|
|
36
|
+
reValidateMode,
|
|
37
|
+
shouldFocusError,
|
|
38
|
+
criteriaMode,
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
const handleSubmit = useCallback(
|
|
42
|
+
(data: FormData): void => {
|
|
43
|
+
if (onSubmit) onSubmit(data);
|
|
44
|
+
},
|
|
45
|
+
[onSubmit]
|
|
46
|
+
);
|
|
47
|
+
const submit = form.handleSubmit(handleSubmit);
|
|
48
|
+
const ctx = {
|
|
49
|
+
fieldsMap,
|
|
50
|
+
fieldsetsMap,
|
|
51
|
+
control: form.control,
|
|
52
|
+
register: form.register,
|
|
53
|
+
watch: form.watch,
|
|
54
|
+
resetField: form.resetField,
|
|
55
|
+
registerField: registerField,
|
|
56
|
+
errors: form.formState.errors,
|
|
57
|
+
formState: form.formState,
|
|
58
|
+
reset: form.reset,
|
|
59
|
+
trigger: form.trigger,
|
|
60
|
+
getFieldState: form.getFieldState,
|
|
61
|
+
setValue: form.setValue,
|
|
62
|
+
clearErrors: form.clearErrors,
|
|
63
|
+
getValues: form.getValues,
|
|
64
|
+
unregister: form.unregister,
|
|
65
|
+
componentRegistry,
|
|
66
|
+
setError: form.setError,
|
|
67
|
+
formRef: ref,
|
|
68
|
+
submit,
|
|
69
|
+
};
|
|
70
|
+
return (
|
|
71
|
+
<FormContext.Provider value={ctx}>
|
|
72
|
+
<Form grid={grid} onSubmit={submit} ref={ref} {...props}>
|
|
73
|
+
{children}
|
|
74
|
+
</Form>
|
|
75
|
+
</FormContext.Provider>
|
|
76
|
+
);
|
|
77
|
+
});
|
|
78
|
+
|
|
79
|
+
const useFormContext = () => {
|
|
80
|
+
return useContext(FormContext);
|
|
81
|
+
};
|
|
82
|
+
const useFormValues = () => {
|
|
83
|
+
const ctx = useFormContext();
|
|
84
|
+
return ctx.getValues();
|
|
85
|
+
};
|
|
86
|
+
const FormBuilder = React.forwardRef(function FormBuilder(
|
|
87
|
+
{
|
|
88
|
+
fields = [],
|
|
89
|
+
fieldsets,
|
|
90
|
+
initial = {},
|
|
91
|
+
onSubmit,
|
|
92
|
+
children,
|
|
93
|
+
reValidateMode = 'onSubmit',
|
|
94
|
+
mode = 'onSubmit',
|
|
95
|
+
shouldFocusError = true,
|
|
96
|
+
criteriaMode = 'all',
|
|
97
|
+
auto = false,
|
|
98
|
+
validatorRegistry,
|
|
99
|
+
componentRegistry,
|
|
100
|
+
grid = false,
|
|
101
|
+
...props
|
|
102
|
+
}: FormBuilderProps,
|
|
103
|
+
ref: React.Ref<HTMLFormElement>
|
|
104
|
+
): React.ReactElement {
|
|
105
|
+
const fieldsState = useRef(fields);
|
|
106
|
+
const setFieldsState = useCallback((newFields) => {
|
|
107
|
+
fieldsState.current = newFields;
|
|
108
|
+
}, []);
|
|
109
|
+
const schema = useValidationSchema(fieldsState, validatorRegistry);
|
|
110
|
+
const registerField = useCallback((field) => {
|
|
111
|
+
const fieldIndex = fieldsState.current.findIndex(
|
|
112
|
+
(f) => f.key === field.key
|
|
113
|
+
);
|
|
114
|
+
if (fieldIndex > -1) {
|
|
115
|
+
fieldsState.current[fieldIndex] = field;
|
|
116
|
+
} else {
|
|
117
|
+
fieldsState.current.push(field);
|
|
118
|
+
}
|
|
119
|
+
setFieldsState(fieldsState.current);
|
|
120
|
+
}, []);
|
|
121
|
+
let resolver;
|
|
122
|
+
let fieldsMap;
|
|
123
|
+
let fieldsetsMap;
|
|
124
|
+
let fieldChildren;
|
|
125
|
+
if (schema) {
|
|
126
|
+
resolver = yupResolver(schema);
|
|
127
|
+
fieldsMap = fields
|
|
128
|
+
? fields.reduce((map, field) => ({ ...map, [field.key]: field }), {})
|
|
129
|
+
: {};
|
|
130
|
+
fieldsetsMap =
|
|
131
|
+
fieldsets &&
|
|
132
|
+
fieldsets.reduce(
|
|
133
|
+
(map, fieldset) => ({ ...map, [fieldset.key]: fieldset }),
|
|
134
|
+
{}
|
|
135
|
+
);
|
|
136
|
+
|
|
137
|
+
if (auto) {
|
|
138
|
+
if (fieldsets) {
|
|
139
|
+
fieldChildren = fieldsets.map((fieldset) => (
|
|
140
|
+
<Fieldset key={fieldset.key} />
|
|
141
|
+
));
|
|
142
|
+
} else if (fields) {
|
|
143
|
+
fieldChildren = fields.map((field) => (
|
|
144
|
+
<Field key={field.key} name={field.key} />
|
|
145
|
+
));
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
return (
|
|
150
|
+
<FormBase
|
|
151
|
+
resolver={resolver}
|
|
152
|
+
fieldsetsMap={fieldsetsMap}
|
|
153
|
+
fieldsMap={fieldsMap}
|
|
154
|
+
registerField={registerField}
|
|
155
|
+
initial={initial}
|
|
156
|
+
reValidateMode={reValidateMode}
|
|
157
|
+
mode={mode}
|
|
158
|
+
shouldFocusError={shouldFocusError}
|
|
159
|
+
criteriaMode={criteriaMode}
|
|
160
|
+
onSubmit={onSubmit}
|
|
161
|
+
componentRegistry={componentRegistry}
|
|
162
|
+
ref={ref}
|
|
163
|
+
grid={grid}
|
|
164
|
+
{...props}
|
|
165
|
+
>
|
|
166
|
+
{fieldChildren}
|
|
167
|
+
{auto && <Button type="submit">Συνέχεια</Button>}
|
|
168
|
+
{children}
|
|
169
|
+
</FormBase>
|
|
170
|
+
);
|
|
171
|
+
});
|
|
172
|
+
export const ControlledFormBuilder = (props) => {
|
|
173
|
+
return (
|
|
174
|
+
<FormBuilder {...props} componentRegistry={CONTROLLED_FIELD_COMPONENTS} />
|
|
175
|
+
);
|
|
176
|
+
};
|
|
8
177
|
export default FormBuilder;
|
|
178
|
+
|
|
179
|
+
export { useFormContext, useFormValues, FormBase };
|
|
@@ -589,7 +589,7 @@ const generateScenarios = (
|
|
|
589
589
|
};
|
|
590
590
|
scenarioFill.push(finalScenarioFill);
|
|
591
591
|
for (const multiplicityField of fillTemplate?.value?.of?.extra
|
|
592
|
-
?.fields) {
|
|
592
|
+
?.fields ?? []) {
|
|
593
593
|
scenarioExpect.push({
|
|
594
594
|
type: 'success',
|
|
595
595
|
fieldKey: `${fillTemplate.fieldKey}\\.${i}\\.${multiplicityField.fieldKey}`,
|
|
@@ -1120,7 +1120,7 @@ const inputsScenarios = [
|
|
|
1120
1120
|
args: {
|
|
1121
1121
|
maxSizeToMb: 0.0003,
|
|
1122
1122
|
},
|
|
1123
|
-
text: el.form.error.
|
|
1123
|
+
text: el.form.error.image_size,
|
|
1124
1124
|
},
|
|
1125
1125
|
{
|
|
1126
1126
|
type: 'error',
|
package/src/FormContext.tsx
CHANGED