@digigov/form 0.10.8 → 0.10.10
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/CHANGELOG.md +8 -1
- package/Form.stories.playwright.json +0 -72
- package/FormBuilder/FormBuilder.mdx +1 -1
- package/MultiplicityField/__stories__/PreviewDisplay.js +6 -6
- package/Questions/__stories__/Default.js +2 -2
- package/Questions/index.mdx +1 -1
- package/es/Form.stories.playwright.json +0 -72
- package/es/FormBuilder/FormBuilder.mdx +1 -1
- package/es/MultiplicityField/__stories__/PreviewDisplay.js +6 -6
- package/es/Questions/__stories__/Default.js +1 -1
- package/es/Questions/index.mdx +1 -1
- package/esm/Form.stories.playwright.json +0 -72
- package/esm/FormBuilder/FormBuilder.mdx +1 -1
- package/esm/MultiplicityField/__stories__/PreviewDisplay.js +6 -6
- package/esm/Questions/__stories__/Default.js +1 -1
- package/esm/Questions/index.mdx +1 -1
- package/esm/index.js +1 -1
- package/package.json +4 -4
- package/src/Field/FieldBase.tsx +99 -0
- package/src/Field/FieldBaseContainer.tsx +57 -0
- package/src/Field/FieldConditional.tsx +75 -0
- package/src/Field/index.mdx +6 -0
- package/src/Field/index.tsx +92 -0
- package/src/Field/types.tsx +102 -0
- package/src/Field/utils.ts +164 -0
- package/src/FieldArray/FieldArray.stories.js +8 -0
- package/src/FieldArray/FieldArray.stories.playwright.json +353 -0
- package/src/FieldArray/__stories__/Default.tsx +95 -0
- package/src/FieldArray/__stories__/WithExactLength.tsx +95 -0
- package/src/FieldArray/index.tsx +83 -0
- package/src/FieldObject/index.tsx +92 -0
- package/src/Fieldset/FieldsetWithContext.tsx +41 -0
- package/src/Fieldset/index.tsx +40 -0
- package/src/Fieldset/types.tsx +6 -0
- package/src/Form.stories.js +5 -0
- package/src/Form.stories.playwright.json +71 -0
- package/src/FormBuilder/FormBuilder.mdx +271 -0
- package/src/FormBuilder/FormBuilder.stories.js +7 -0
- package/src/FormBuilder/FormBuilder.stories.playwright.json +52 -0
- package/src/FormBuilder/FormBuilder.tsx +165 -0
- package/src/FormBuilder/__stories__/Default.tsx +23 -0
- package/src/FormBuilder/index.tsx +3 -0
- package/src/FormContext.tsx +8 -0
- package/src/MultiplicityField/MultiplicityField.mdx +580 -0
- package/src/MultiplicityField/MultiplicityField.stories.js +12 -0
- package/src/MultiplicityField/MultiplicityField.stories.playwright.json +1370 -0
- package/src/MultiplicityField/__stories__/Default.tsx +100 -0
- package/src/MultiplicityField/__stories__/PreviewDisplay.tsx +160 -0
- package/src/MultiplicityField/__stories__/WithExactLength.tsx +99 -0
- package/src/MultiplicityField/__stories__/WithMaxLength.tsx +102 -0
- package/src/MultiplicityField/__stories__/WithMinAndMaxLength.tsx +103 -0
- package/src/MultiplicityField/__stories__/WithMinLength.tsx +102 -0
- package/src/MultiplicityField/add-objects.tsx +186 -0
- package/src/MultiplicityField/index.tsx +166 -0
- package/src/Questions/Questions.stories.js +7 -0
- package/src/Questions/Questions.tsx +74 -0
- package/src/Questions/QuestionsContext.tsx +9 -0
- package/src/Questions/Step/ReviewStep.tsx +63 -0
- package/src/Questions/Step/Step.tsx +67 -0
- package/src/Questions/Step/StepArrayReview.tsx +68 -0
- package/src/Questions/Step/StepContext.tsx +21 -0
- package/src/Questions/Step/StepDescription.tsx +33 -0
- package/src/Questions/Step/StepForm.tsx +60 -0
- package/src/Questions/Step/StepQuote.tsx +8 -0
- package/src/Questions/Step/StepTitle.tsx +60 -0
- package/src/Questions/Step/getAddMoreFields.tsx +28 -0
- package/src/Questions/Step/index.ts +13 -0
- package/src/Questions/Step/types.tsx +32 -0
- package/src/Questions/__snapshots__/index.spec.tsx.snap +887 -0
- package/src/Questions/__stories__/Default.tsx +130 -0
- package/src/Questions/getNextStep.tsx +24 -0
- package/src/Questions/index.mdx +418 -0
- package/src/Questions/index.spec.tsx +72 -0
- package/src/Questions/index.tsx +5 -0
- package/src/Questions/types.tsx +25 -0
- package/src/__stories__/AutoCompleteField.tsx +45 -0
- package/src/__stories__/IntField.tsx +38 -0
- package/src/create-simple-form.mdx +518 -0
- package/src/index.mdx +44 -0
- package/src/index.ts +3 -0
- package/src/inputs/AutoComplete/index.tsx +85 -0
- package/src/inputs/Checkboxes/Checkboxes.stories.js +7 -0
- package/src/inputs/Checkboxes/Checkboxes.stories.playwright.json +69 -0
- package/src/inputs/Checkboxes/__stories__/Default.tsx +39 -0
- package/src/inputs/Checkboxes/index.mdx +0 -0
- package/src/inputs/Checkboxes/index.tsx +77 -0
- package/src/inputs/DateInput/DateInput.stories.js +7 -0
- package/src/inputs/DateInput/DateInput.stories.playwright.json +72 -0
- package/src/inputs/DateInput/__stories__/Default.tsx +41 -0
- package/src/inputs/DateInput/index.tsx +130 -0
- package/src/inputs/FileInput/FileInput.stories.js +7 -0
- package/src/inputs/FileInput/FileInput.stories.playwright.json +75 -0
- package/src/inputs/FileInput/__stories__/Default.tsx +23 -0
- package/src/inputs/FileInput/index.tsx +76 -0
- package/src/inputs/Input/Input.stories.js +14 -0
- package/src/inputs/Input/Input.stories.playwright.json +376 -0
- package/src/inputs/Input/__stories__/AFM.tsx +24 -0
- package/src/inputs/Input/__stories__/Boolean.tsx +26 -0
- package/src/inputs/Input/__stories__/Default.tsx +25 -0
- package/src/inputs/Input/__stories__/IBAN.tsx +26 -0
- package/src/inputs/Input/__stories__/Integer.tsx +25 -0
- package/src/inputs/Input/__stories__/MobilePhone.tsx +24 -0
- package/src/inputs/Input/__stories__/PhoneNumber.tsx +24 -0
- package/src/inputs/Input/__stories__/PostalCode.tsx +25 -0
- package/src/inputs/Input/index.mdx +8 -0
- package/src/inputs/Input/index.tsx +62 -0
- package/src/inputs/Label/Label.stories.js +7 -0
- package/src/inputs/Label/Label.stories.playwright.json +40 -0
- package/src/inputs/Label/__stories__/Default.tsx +28 -0
- package/src/inputs/Label/index.mdx +0 -0
- package/src/inputs/Label/index.tsx +44 -0
- package/src/inputs/Radio/Radio.stories.js +7 -0
- package/src/inputs/Radio/Radio.stories.playwright.json +57 -0
- package/src/inputs/Radio/__stories__/Default.tsx +42 -0
- package/src/inputs/Radio/index.mdx +0 -0
- package/src/inputs/Radio/index.tsx +57 -0
- package/src/inputs/Select/Select.stories.js +7 -0
- package/src/inputs/Select/Select.stories.playwright.json +22 -0
- package/src/inputs/Select/__stories__/Default.tsx +47 -0
- package/src/inputs/Select/index.tsx +37 -0
- package/src/inputs/index.ts +7 -0
- package/src/installation.mdx +72 -0
- package/src/internal.ts +34 -0
- package/src/registry.js +134 -0
- package/src/types.tsx +110 -0
- package/src/utils.ts +78 -0
- package/src/validators/index.ts +203 -0
- package/src/validators/types.ts +2 -0
- package/src/validators/utils/afm.ts +37 -0
- package/src/validators/utils/file.ts +25 -0
- package/src/validators/utils/iban.ts +119 -0
- package/src/validators/utils/index.ts +94 -0
- package/src/validators/utils/int.ts +22 -0
- package/src/validators/utils/number.ts +18 -0
- package/src/validators/utils/phone.ts +120 -0
- package/src/validators/utils/postal_code.ts +33 -0
- package/src/validators/utils/uuid4.ts +21 -0
- package/src/validators/validators.spec.ts +122 -0
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
2
|
+
import React, { useCallback, useRef } from 'react';
|
|
3
|
+
import { useForm } from 'react-hook-form';
|
|
4
|
+
import { yupResolver } from '@digigov/form/utils';
|
|
5
|
+
import { useValidationSchema } from '@digigov/form/validators';
|
|
6
|
+
import Fieldset from '@digigov/form/Fieldset';
|
|
7
|
+
import Field from '@digigov/form/Field';
|
|
8
|
+
import { FormBaseProps, FormData, FormBuilderProps } from '@digigov/form/types';
|
|
9
|
+
import { FormContext } from '@digigov/form/FormContext';
|
|
10
|
+
import { Form } from '@digigov/react-core/Form';
|
|
11
|
+
|
|
12
|
+
export const FormBase = React.forwardRef(function FormBase(
|
|
13
|
+
{
|
|
14
|
+
onSubmit,
|
|
15
|
+
children,
|
|
16
|
+
registerField,
|
|
17
|
+
fieldsMap,
|
|
18
|
+
fieldsetsMap,
|
|
19
|
+
resolver,
|
|
20
|
+
mode,
|
|
21
|
+
initial,
|
|
22
|
+
reValidateMode,
|
|
23
|
+
shouldFocusError,
|
|
24
|
+
criteriaMode,
|
|
25
|
+
componentRegistry,
|
|
26
|
+
grid,
|
|
27
|
+
...props
|
|
28
|
+
}: FormBaseProps,
|
|
29
|
+
ref: React.Ref<HTMLFormElement>
|
|
30
|
+
) {
|
|
31
|
+
const form = useForm({
|
|
32
|
+
resolver,
|
|
33
|
+
mode,
|
|
34
|
+
defaultValues: initial,
|
|
35
|
+
reValidateMode,
|
|
36
|
+
shouldFocusError,
|
|
37
|
+
criteriaMode,
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
const handleSubmit = useCallback(
|
|
41
|
+
(data: FormData): void => {
|
|
42
|
+
onSubmit && onSubmit(data);
|
|
43
|
+
},
|
|
44
|
+
[onSubmit]
|
|
45
|
+
);
|
|
46
|
+
|
|
47
|
+
const ctx = {
|
|
48
|
+
fieldsMap,
|
|
49
|
+
fieldsetsMap,
|
|
50
|
+
control: form.control,
|
|
51
|
+
register: form.register,
|
|
52
|
+
watch: form.watch,
|
|
53
|
+
registerField: registerField,
|
|
54
|
+
errors: form.formState.errors,
|
|
55
|
+
formState: form.formState,
|
|
56
|
+
reset: form.reset,
|
|
57
|
+
trigger: form.trigger,
|
|
58
|
+
getFieldState: form.getFieldState,
|
|
59
|
+
setValue: form.setValue,
|
|
60
|
+
clearErrors: form.clearErrors,
|
|
61
|
+
getValues: form.getValues,
|
|
62
|
+
unregister: form.unregister,
|
|
63
|
+
componentRegistry,
|
|
64
|
+
};
|
|
65
|
+
return (
|
|
66
|
+
<FormContext.Provider value={ctx}>
|
|
67
|
+
<Form
|
|
68
|
+
grid={grid}
|
|
69
|
+
onSubmit={form.handleSubmit(handleSubmit)}
|
|
70
|
+
ref={ref}
|
|
71
|
+
{...props}
|
|
72
|
+
>
|
|
73
|
+
{children}
|
|
74
|
+
</Form>
|
|
75
|
+
</FormContext.Provider>
|
|
76
|
+
);
|
|
77
|
+
});
|
|
78
|
+
|
|
79
|
+
export const FormBuilder = React.forwardRef(function FormBuilder(
|
|
80
|
+
{
|
|
81
|
+
fields = [],
|
|
82
|
+
fieldsets,
|
|
83
|
+
initial = {},
|
|
84
|
+
onSubmit,
|
|
85
|
+
children,
|
|
86
|
+
reValidateMode = 'onSubmit',
|
|
87
|
+
mode = 'onSubmit',
|
|
88
|
+
shouldFocusError = true,
|
|
89
|
+
criteriaMode = 'all',
|
|
90
|
+
auto = false,
|
|
91
|
+
validatorRegistry,
|
|
92
|
+
componentRegistry,
|
|
93
|
+
grid = false,
|
|
94
|
+
...props
|
|
95
|
+
}: FormBuilderProps,
|
|
96
|
+
ref: React.Ref<HTMLFormElement>
|
|
97
|
+
): React.ReactElement {
|
|
98
|
+
const fieldsState = useRef(fields);
|
|
99
|
+
const setFieldsState = useCallback((newFields) => {
|
|
100
|
+
fieldsState.current = newFields;
|
|
101
|
+
}, []);
|
|
102
|
+
const schema = useValidationSchema(fieldsState, validatorRegistry);
|
|
103
|
+
const registerField = useCallback((field) => {
|
|
104
|
+
const fieldIndex = fieldsState.current.findIndex(
|
|
105
|
+
(f) => f.key === field.key
|
|
106
|
+
);
|
|
107
|
+
if (fieldIndex > -1) {
|
|
108
|
+
fieldsState.current[fieldIndex] = field;
|
|
109
|
+
} else {
|
|
110
|
+
fieldsState.current.push(field);
|
|
111
|
+
}
|
|
112
|
+
setFieldsState(fieldsState.current);
|
|
113
|
+
}, []);
|
|
114
|
+
let resolver;
|
|
115
|
+
let fieldsMap;
|
|
116
|
+
let fieldsetsMap;
|
|
117
|
+
let fieldChildren;
|
|
118
|
+
if (schema) {
|
|
119
|
+
resolver = yupResolver(schema);
|
|
120
|
+
fieldsMap = fields
|
|
121
|
+
? fields.reduce((map, field) => ({ ...map, [field.key]: field }), {})
|
|
122
|
+
: {};
|
|
123
|
+
fieldsetsMap =
|
|
124
|
+
fieldsets &&
|
|
125
|
+
fieldsets.reduce(
|
|
126
|
+
(map, fieldset) => ({ ...map, [fieldset.key]: fieldset }),
|
|
127
|
+
{}
|
|
128
|
+
);
|
|
129
|
+
|
|
130
|
+
if (auto) {
|
|
131
|
+
if (fieldsets) {
|
|
132
|
+
fieldChildren = fieldsets.map((fieldset) => (
|
|
133
|
+
<Fieldset key={fieldset.key} />
|
|
134
|
+
));
|
|
135
|
+
} else if (fields) {
|
|
136
|
+
fieldChildren = fields.map((field) => (
|
|
137
|
+
<Field key={field.key} name={field.key} />
|
|
138
|
+
));
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
return (
|
|
143
|
+
<FormBase
|
|
144
|
+
resolver={resolver}
|
|
145
|
+
fieldsetsMap={fieldsetsMap}
|
|
146
|
+
fieldsMap={fieldsMap}
|
|
147
|
+
registerField={registerField}
|
|
148
|
+
initial={initial}
|
|
149
|
+
reValidateMode={reValidateMode}
|
|
150
|
+
mode={mode}
|
|
151
|
+
shouldFocusError={shouldFocusError}
|
|
152
|
+
criteriaMode={criteriaMode}
|
|
153
|
+
onSubmit={onSubmit}
|
|
154
|
+
componentRegistry={componentRegistry}
|
|
155
|
+
ref={ref}
|
|
156
|
+
grid={grid}
|
|
157
|
+
{...props}
|
|
158
|
+
>
|
|
159
|
+
{fieldChildren}
|
|
160
|
+
{children}
|
|
161
|
+
</FormBase>
|
|
162
|
+
);
|
|
163
|
+
});
|
|
164
|
+
|
|
165
|
+
export default FormBuilder;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import FormBuilder, { Field } from '@digigov/form';
|
|
3
|
+
import { Button } from '@digigov/ui/core';
|
|
4
|
+
|
|
5
|
+
export const Default = () => (
|
|
6
|
+
<FormBuilder
|
|
7
|
+
onSubmit={(data) => {
|
|
8
|
+
debugger;
|
|
9
|
+
console.log(data);
|
|
10
|
+
}}
|
|
11
|
+
>
|
|
12
|
+
<Field
|
|
13
|
+
key="business-title"
|
|
14
|
+
name="business-title"
|
|
15
|
+
type="string"
|
|
16
|
+
label={{ primary: 'Όνομα επιχείρησης' }}
|
|
17
|
+
required
|
|
18
|
+
/>
|
|
19
|
+
<Button type="submit">Συνέχεια</Button>
|
|
20
|
+
</FormBuilder>
|
|
21
|
+
);
|
|
22
|
+
|
|
23
|
+
export default Default;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { createContext } from 'react';
|
|
3
|
+
import { FormContextProps } from '@digigov/form/types';
|
|
4
|
+
|
|
5
|
+
export const FormContext: React.Context<FormContextProps> = createContext({
|
|
6
|
+
fieldsMap: {},
|
|
7
|
+
fieldsetsMap: {},
|
|
8
|
+
} as FormContextProps);
|