@digigov/form 2.0.0-8e254888 → 2.0.0-a402a664
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 +6 -2
- package/Field/FieldBase.js.map +2 -2
- package/Field/FieldBaseContainer/index.js +5 -3
- package/Field/FieldBaseContainer.js.map +2 -2
- package/Field/FieldConditional/index.js +4 -0
- package/Field/FieldConditional.js.map +2 -2
- package/Field/index.js +10 -4
- package/Field/index.js.map +2 -2
- package/Field/types.d.ts +11 -3
- package/Field/utils/index.js +3 -1
- package/Field/utils/index.js.map +2 -2
- package/Field/utils/useField/index.js +8 -1
- package/Field/utils/useField.js.map +2 -2
- package/FieldArray/FormDialog/index.js +314 -196
- package/FieldArray/FormDialog.d.ts +20 -7
- package/FieldArray/FormDialog.js.map +3 -3
- package/FieldArray/__stories__/Default.d.ts +1 -1
- package/FieldArray/__stories__/WithExactLength.d.ts +1 -1
- package/FieldArray/__stories__/WithModal.d.ts +1 -1
- package/FieldArray/index.d.ts +1 -0
- package/FieldArray/index.js +12 -7
- package/FieldArray/index.js.map +2 -2
- package/FieldObject/index.d.ts +3 -0
- package/FieldObject/index.js +26 -15
- package/FieldObject/index.js.map +2 -2
- package/FormBuilder/FormBuilder.stories.d.ts +2 -0
- package/FormBuilder/__stories__/AutoErrorGrouping.d.ts +1 -1
- package/FormBuilder/__stories__/Default.d.ts +1 -1
- package/FormBuilder/__stories__/ErrorGrouping.d.ts +1 -1
- package/FormBuilder/index.d.ts +1 -1
- package/FormBuilder/index.js +11 -6
- package/FormBuilder/index.js.map +2 -2
- package/FormContext/index.js +6 -2
- package/FormContext.d.ts +1 -0
- package/FormContext.js.map +2 -2
- package/MultiplicityField/MultiplicityField.stories.d.ts +2 -0
- package/MultiplicityField/__stories__/Default.d.ts +1 -1
- package/MultiplicityField/__stories__/PreviewDisplay.d.ts +1 -1
- package/MultiplicityField/__stories__/WithExactLength.d.ts +1 -1
- package/MultiplicityField/__stories__/WithMaxLength.d.ts +1 -1
- package/MultiplicityField/__stories__/WithMinAndMaxLength.d.ts +1 -1
- package/MultiplicityField/__stories__/WithMinLength.d.ts +1 -1
- package/MultiplicityField/add-objects/index.js +2 -0
- package/MultiplicityField/add-objects.js.map +2 -2
- package/MultiplicityField/index.js +4 -1
- package/MultiplicityField/index.js.map +2 -2
- package/MultiplicityField/types.d.ts +1 -0
- package/Questions/Questions.stories.d.ts +2 -0
- package/Questions/__stories__/Default.d.ts +1 -1
- package/cjs/Field/FieldBase/index.js +6 -2
- package/cjs/Field/FieldBase.js.map +2 -2
- package/cjs/Field/FieldBaseContainer/index.js +4 -2
- package/cjs/Field/FieldBaseContainer.js.map +3 -3
- package/cjs/Field/FieldConditional/index.js +4 -0
- package/cjs/Field/FieldConditional.js.map +2 -2
- package/cjs/Field/index.js +10 -4
- package/cjs/Field/index.js.map +2 -2
- package/cjs/Field/types.js.map +1 -1
- package/cjs/Field/utils/index.js +3 -1
- package/cjs/Field/utils/index.js.map +2 -2
- package/cjs/Field/utils/useField/index.js +8 -1
- package/cjs/Field/utils/useField.js.map +2 -2
- package/cjs/FieldArray/FormDialog/index.js +309 -194
- package/cjs/FieldArray/FormDialog.js.map +3 -3
- package/cjs/FieldArray/index.js +12 -7
- package/cjs/FieldArray/index.js.map +2 -2
- package/cjs/FieldObject/index.js +26 -15
- package/cjs/FieldObject/index.js.map +2 -2
- package/cjs/FormBuilder/index.js +11 -6
- package/cjs/FormBuilder/index.js.map +2 -2
- package/cjs/FormContext/index.js +7 -2
- package/cjs/FormContext.js.map +2 -2
- package/cjs/MultiplicityField/add-objects/index.js +2 -0
- package/cjs/MultiplicityField/add-objects.js.map +2 -2
- package/cjs/MultiplicityField/index.js +4 -1
- package/cjs/MultiplicityField/index.js.map +2 -2
- package/cjs/MultiplicityField/types.js.map +1 -1
- package/cjs/inputs/Checkboxes/index.js +1 -1
- package/cjs/inputs/Checkboxes/index.js.map +2 -2
- package/cjs/inputs/DateInput/index.js +20 -8
- package/cjs/inputs/DateInput/index.js.map +2 -2
- package/cjs/inputs/DateTimeInput/index.js +23 -10
- package/cjs/inputs/DateTimeInput/index.js.map +2 -2
- package/cjs/inputs/FileInput/index.js +26 -21
- package/cjs/inputs/FileInput/index.js.map +2 -2
- package/cjs/inputs/ImageInput/__stories__/logo.d/index.js +1 -0
- package/cjs/inputs/ImageInput/__stories__/logo.d.js.map +7 -0
- package/cjs/inputs/ImageInput/index.js +41 -10
- package/cjs/inputs/ImageInput/index.js.map +2 -2
- package/cjs/inputs/Input/index.js +4 -4
- package/cjs/inputs/Input/index.js.map +2 -2
- package/cjs/inputs/Select/index.js +4 -3
- package/cjs/inputs/Select/index.js.map +2 -2
- package/cjs/inputs/inputsScenarios/index.js +2 -2
- package/cjs/inputs/inputsScenarios.js.map +2 -2
- package/cjs/lazy/index.js +2 -1
- package/cjs/lazy.js.map +2 -2
- package/cjs/registry/index.js +8 -8
- package/cjs/registry.js.map +2 -2
- package/cjs/types.js.map +1 -1
- package/cjs/utils/index.js +20 -6
- package/cjs/utils.js.map +2 -2
- package/cjs/validators/index.js +10 -5
- package/cjs/validators/index.js.map +2 -2
- package/cjs/validators/utils/amka/index.js +60 -0
- package/cjs/validators/utils/amka.js.map +7 -0
- package/cjs/validators/utils/file/index.js +30 -17
- package/cjs/validators/utils/file.js.map +2 -2
- package/cjs/validators/utils/index.js +5 -1
- package/cjs/validators/utils/index.js.map +2 -2
- package/index.js +1 -1
- package/inputs/AutoCompleteInput/AutoComplete.stories.d.ts +2 -0
- package/inputs/AutoCompleteInput/__stories__/Default.d.ts +1 -1
- package/inputs/AutoCompleteInput/__stories__/Multiple.d.ts +1 -1
- package/inputs/Checkboxes/Checkboxes.stories.d.ts +2 -0
- package/inputs/Checkboxes/__stories__/Conditional.d.ts +1 -1
- package/inputs/Checkboxes/__stories__/Default.d.ts +1 -1
- package/inputs/Checkboxes/__stories__/WithDivider.d.ts +1 -1
- package/inputs/Checkboxes/index.js +1 -1
- package/inputs/Checkboxes/index.js.map +2 -2
- package/inputs/DateInput/DateInput.stories.d.ts +2 -0
- package/inputs/DateInput/__stories__/Default.d.ts +1 -1
- package/inputs/DateInput/index.js +20 -8
- package/inputs/DateInput/index.js.map +2 -2
- package/inputs/DateTimeInput/DateTimeInput.stories.d.ts +2 -0
- package/inputs/DateTimeInput/__stories__/Default.d.ts +1 -1
- package/inputs/DateTimeInput/index.js +23 -10
- package/inputs/DateTimeInput/index.js.map +2 -2
- package/inputs/FileInput/FileInput.stories.d.ts +3 -0
- package/inputs/FileInput/__stories__/Default.d.ts +1 -1
- package/inputs/FileInput/__stories__/WithBorderAndLink.d.ts +3 -0
- package/inputs/FileInput/index.d.ts +6 -3
- package/inputs/FileInput/index.js +31 -23
- package/inputs/FileInput/index.js.map +2 -2
- package/inputs/ImageInput/ImageInput.stories.d.ts +4 -1
- package/inputs/ImageInput/__stories__/Default.d.ts +1 -1
- package/inputs/ImageInput/__stories__/MaxSize.d.ts +1 -1
- package/inputs/ImageInput/__stories__/WithInitialValues.d.ts +3 -0
- package/inputs/ImageInput/__stories__/WithInvalidImageDimension.d.ts +1 -1
- package/inputs/ImageInput/__stories__/logo.d/index.js +1 -0
- package/inputs/ImageInput/__stories__/logo.d/package.json +6 -0
- package/inputs/ImageInput/__stories__/logo.d.js.map +7 -0
- package/inputs/ImageInput/index.d.ts +9 -1
- package/inputs/ImageInput/index.js +42 -11
- package/inputs/ImageInput/index.js.map +2 -2
- package/inputs/Input/Input.stories.d.ts +4 -0
- package/inputs/Input/__stories__/AFM.d.ts +1 -1
- package/inputs/Input/__stories__/AMKA.d.ts +3 -0
- package/inputs/Input/__stories__/Boolean.d.ts +1 -1
- package/inputs/Input/__stories__/Email.d.ts +3 -0
- package/inputs/Input/__stories__/IBAN.d.ts +1 -1
- package/inputs/Input/__stories__/Integer.d.ts +1 -1
- package/inputs/Input/__stories__/LandlineNumber.d.ts +1 -1
- package/inputs/Input/__stories__/MobilePhone.d.ts +1 -1
- package/inputs/Input/__stories__/PhoneNumber.d.ts +1 -1
- package/inputs/Input/__stories__/PostalCode.d.ts +1 -1
- package/inputs/Input/__stories__/String.d.ts +1 -1
- package/inputs/Input/__stories__/StringWithTrimValidation.d.ts +1 -1
- package/inputs/Input/__stories__/TextWithLimit.d.ts +1 -1
- package/inputs/Input/index.d.ts +2 -1
- package/inputs/Input/index.js +4 -4
- package/inputs/Input/index.js.map +2 -2
- package/inputs/Label/Label.stories.d.ts +2 -0
- package/inputs/Label/__stories__/Default.d.ts +1 -1
- package/inputs/OtpInput/OtpInput.stories.d.ts +2 -0
- package/inputs/OtpInput/__stories__/Default.d.ts +1 -1
- package/inputs/Radio/Radio.stories.d.ts +2 -0
- package/inputs/Radio/__stories__/Conditional.d.ts +1 -1
- package/inputs/Radio/__stories__/Default.d.ts +1 -1
- package/inputs/Radio/__stories__/WithDivider.d.ts +1 -1
- package/inputs/Select/Select.stories.d.ts +2 -0
- package/inputs/Select/__stories__/Default.d.ts +1 -1
- package/inputs/Select/index.d.ts +2 -1
- package/inputs/Select/index.js +4 -3
- package/inputs/Select/index.js.map +2 -2
- package/inputs/inputsScenarios/index.js +2 -2
- package/inputs/inputsScenarios.d.ts +1 -1
- package/inputs/inputsScenarios.js.map +2 -2
- package/lazy/index.js +2 -1
- package/package.json +8 -8
- package/registry/index.js +8 -8
- package/src/Field/FieldBase.tsx +5 -1
- package/src/Field/FieldBaseContainer.tsx +8 -4
- package/src/Field/FieldConditional.tsx +4 -0
- package/src/Field/doc.mdx +202 -1
- package/src/Field/index.tsx +15 -5
- package/src/Field/types.tsx +12 -3
- package/src/Field/utils/index.ts +2 -0
- package/src/Field/utils/useField.ts +9 -1
- package/src/FieldArray/FormDialog.tsx +430 -243
- package/src/FieldArray/__stories__/Default.tsx +1 -1
- package/src/FieldArray/__stories__/WithExactLength.tsx +1 -1
- package/src/FieldArray/__stories__/WithModal.tsx +4 -3
- package/src/FieldArray/index.test.tsx +4 -0
- package/src/FieldArray/index.tsx +26 -30
- package/src/FieldObject/index.tsx +33 -18
- package/src/FormBuilder/FormBuilder.stories.js +3 -0
- package/src/FormBuilder/__stories__/AutoErrorGrouping.tsx +1 -1
- package/src/FormBuilder/__stories__/Default.tsx +1 -1
- package/src/FormBuilder/__stories__/ErrorGrouping.tsx +1 -1
- package/src/FormBuilder/doc.mdx +9 -4
- package/src/FormBuilder/index.test.tsx +4 -0
- package/src/FormBuilder/index.tsx +12 -6
- package/src/FormBuilder/interaction.test.tsx +8 -0
- package/src/FormBuilder/scenarios.test.tsx +7 -7
- package/src/FormContext.tsx +5 -1
- package/src/MultiplicityField/MultiplicityField.stories.js +3 -0
- package/src/MultiplicityField/__stories__/Default.tsx +1 -1
- package/src/MultiplicityField/__stories__/PreviewDisplay.tsx +1 -1
- package/src/MultiplicityField/__stories__/WithExactLength.tsx +1 -1
- package/src/MultiplicityField/__stories__/WithMaxLength.tsx +1 -1
- package/src/MultiplicityField/__stories__/WithMinAndMaxLength.tsx +1 -1
- package/src/MultiplicityField/__stories__/WithMinLength.tsx +1 -1
- package/src/MultiplicityField/add-objects.tsx +2 -0
- package/src/MultiplicityField/doc.mdx +101 -83
- package/src/MultiplicityField/index.test.tsx +4 -0
- package/src/MultiplicityField/index.tsx +3 -0
- package/src/MultiplicityField/types.ts +1 -0
- package/src/Questions/Questions.stories.js +3 -0
- package/src/Questions/__snapshots__/index.spec.tsx.snap +2 -1
- package/src/Questions/__stories__/Default.tsx +1 -1
- package/src/Questions/doc.mdx +21 -41
- package/src/Questions/index.test.tsx +4 -0
- package/src/doc.mdx +26 -11
- package/src/inputs/AutoCompleteInput/AutoComplete.stories.js +3 -0
- package/src/inputs/AutoCompleteInput/__stories__/Default.tsx +1 -1
- package/src/inputs/AutoCompleteInput/__stories__/Multiple.tsx +1 -1
- package/src/inputs/AutoCompleteInput/index.test.tsx +4 -0
- package/src/inputs/Checkboxes/Checkboxes.stories.js +3 -0
- package/src/inputs/Checkboxes/__stories__/Conditional.tsx +1 -1
- package/src/inputs/Checkboxes/__stories__/Default.tsx +1 -1
- package/src/inputs/Checkboxes/__stories__/WithDivider.tsx +1 -1
- package/src/inputs/Checkboxes/index.test.tsx +4 -0
- package/src/inputs/Checkboxes/index.tsx +1 -1
- package/src/inputs/DateInput/DateInput.stories.js +3 -0
- package/src/inputs/DateInput/__stories__/Default.tsx +1 -1
- package/src/inputs/DateInput/index.test.tsx +4 -0
- package/src/inputs/DateInput/index.tsx +21 -7
- package/src/inputs/DateTimeInput/DateTimeInput.stories.js +3 -0
- package/src/inputs/DateTimeInput/__stories__/Default.tsx +1 -1
- package/src/inputs/DateTimeInput/index.test.tsx +4 -0
- package/src/inputs/DateTimeInput/index.tsx +24 -9
- package/src/inputs/FileInput/FileInput.stories.js +4 -0
- package/src/inputs/FileInput/__stories__/Default.tsx +1 -1
- package/src/inputs/FileInput/__stories__/WithBorderAndLink.tsx +34 -0
- package/src/inputs/FileInput/index.test.tsx +8 -0
- package/src/inputs/FileInput/index.tsx +41 -30
- package/src/inputs/ImageInput/ImageInput.stories.js +5 -1
- package/src/inputs/ImageInput/__stories__/Default.tsx +1 -1
- package/src/inputs/ImageInput/__stories__/MaxSize.tsx +3 -2
- package/src/inputs/ImageInput/__stories__/{WithInvalidImageSize.tsx → WithInitialValues.tsx} +12 -3
- package/src/inputs/ImageInput/__stories__/WithInvalidImageDimension.tsx +1 -1
- package/src/inputs/ImageInput/__stories__/logo.d.ts +4 -0
- package/src/inputs/ImageInput/__stories__/logo.png +0 -0
- package/src/inputs/ImageInput/index.test.tsx +8 -4
- package/src/inputs/ImageInput/index.tsx +100 -48
- package/src/inputs/Input/Input.stories.js +5 -0
- package/src/inputs/Input/__stories__/AFM.tsx +1 -1
- package/src/inputs/Input/__stories__/AMKA.tsx +23 -0
- package/src/inputs/Input/__stories__/Boolean.tsx +1 -1
- package/src/inputs/Input/__stories__/Email.tsx +23 -0
- package/src/inputs/Input/__stories__/IBAN.tsx +1 -1
- package/src/inputs/Input/__stories__/Integer.tsx +1 -1
- package/src/inputs/Input/__stories__/LandlineNumber.tsx +1 -1
- package/src/inputs/Input/__stories__/MobilePhone.tsx +1 -1
- package/src/inputs/Input/__stories__/PhoneNumber.tsx +1 -1
- package/src/inputs/Input/__stories__/PostalCode.tsx +1 -1
- package/src/inputs/Input/__stories__/String.tsx +1 -1
- package/src/inputs/Input/__stories__/StringWithTrimValidation.tsx +1 -1
- package/src/inputs/Input/__stories__/TextWithLimit.tsx +1 -1
- package/src/inputs/Input/index.test.tsx +12 -0
- package/src/inputs/Input/index.tsx +5 -3
- package/src/inputs/Label/Label.stories.js +3 -0
- package/src/inputs/Label/__stories__/Default.tsx +1 -1
- package/src/inputs/Label/index.test.tsx +4 -0
- package/src/inputs/OtpInput/OtpInput.stories.js +3 -0
- package/src/inputs/OtpInput/__stories__/Default.tsx +1 -1
- package/src/inputs/OtpInput/index.test.tsx +4 -0
- package/src/inputs/Radio/Radio.stories.js +3 -0
- package/src/inputs/Radio/__stories__/Conditional.tsx +1 -1
- package/src/inputs/Radio/__stories__/Default.tsx +1 -1
- package/src/inputs/Radio/__stories__/WithDivider.tsx +1 -1
- package/src/inputs/Radio/index.test.tsx +4 -0
- package/src/inputs/Select/Select.stories.js +3 -0
- package/src/inputs/Select/__stories__/Default.tsx +1 -1
- package/src/inputs/Select/index.test.tsx +4 -0
- package/src/inputs/Select/index.tsx +7 -4
- package/src/inputs/inputsScenarios.ts +2 -2
- package/src/lazy.js +2 -1
- package/src/registry.js +8 -8
- package/src/types.tsx +2 -1
- package/src/utils.ts +27 -6
- package/src/validators/index.ts +16 -5
- package/src/validators/utils/amka.ts +39 -0
- package/src/validators/utils/file.ts +33 -19
- package/src/validators/utils/index.ts +4 -1
- package/types.d.ts +2 -1
- package/types.js.map +1 -1
- package/utils/index.js +20 -6
- package/utils.d.ts +2 -0
- package/utils.js.map +2 -2
- package/validators/index.d.ts +1 -1
- package/validators/index.js +11 -5
- package/validators/index.js.map +2 -2
- package/validators/utils/amka/index.js +36 -0
- package/{inputs/Input/inputsInputScenarios → validators/utils/amka}/package.json +1 -1
- package/validators/utils/amka.d.ts +6 -0
- package/validators/utils/amka.js.map +7 -0
- package/validators/utils/file/index.js +30 -17
- package/validators/utils/file.js.map +2 -2
- package/validators/utils/index.d.ts +1 -0
- package/validators/utils/index.js +4 -1
- package/validators/utils/index.js.map +2 -2
- package/cjs/inputs/Input/inputsInputScenarios/index.js +0 -439
- package/cjs/inputs/Input/inputsInputScenarios.js.map +0 -7
- package/inputs/ImageInput/__stories__/WithInvalidImageSize.d.ts +0 -3
- package/inputs/Input/inputsInputScenarios/index.js +0 -406
- package/inputs/Input/inputsInputScenarios.d.ts +0 -57
- package/inputs/Input/inputsInputScenarios.js.map +0 -7
- package/src/inputs/Input/inputsInputScenarios.ts +0 -404
|
@@ -2,7 +2,7 @@ import React from 'react';
|
|
|
2
2
|
import FormBuilder, { Field } from '@digigov/form';
|
|
3
3
|
import { Button } from '@digigov/ui/form/Button';
|
|
4
4
|
|
|
5
|
-
export const PostalCode = () => (
|
|
5
|
+
export const PostalCode = (_: any) => (
|
|
6
6
|
<FormBuilder
|
|
7
7
|
onSubmit={(data) => {
|
|
8
8
|
console.log(data);
|
|
@@ -2,7 +2,7 @@ import React from 'react';
|
|
|
2
2
|
import FormBuilder, { Field } from '@digigov/form';
|
|
3
3
|
import { Button } from '@digigov/ui/form/Button';
|
|
4
4
|
|
|
5
|
-
export const StringWithTrimValidation = () => (
|
|
5
|
+
export const StringWithTrimValidation = (_: any) => (
|
|
6
6
|
<FormBuilder
|
|
7
7
|
onSubmit={(data) => {
|
|
8
8
|
console.log(data);
|
|
@@ -2,7 +2,7 @@ import React from 'react';
|
|
|
2
2
|
import FormBuilder, { Field } from '@digigov/form';
|
|
3
3
|
import { Button } from '@digigov/ui/form';
|
|
4
4
|
|
|
5
|
-
export const TextWithLimit = () => (
|
|
5
|
+
export const TextWithLimit = (_: any) => (
|
|
6
6
|
<FormBuilder
|
|
7
7
|
onSubmit={(data) => {
|
|
8
8
|
console.log(data);
|
|
@@ -2,7 +2,9 @@ import React from 'react';
|
|
|
2
2
|
import { test, expect } from '@playwright/experimental-ct-react';
|
|
3
3
|
import TestVariant from '@digigov/ui/utils/TestVariant'
|
|
4
4
|
import { AFM } from '@digigov/form/inputs/Input/__stories__/AFM';
|
|
5
|
+
import { AMKA } from '@digigov/form/inputs/Input/__stories__/AMKA';
|
|
5
6
|
import { Boolean } from '@digigov/form/inputs/Input/__stories__/Boolean';
|
|
7
|
+
import { Email } from '@digigov/form/inputs/Input/__stories__/Email';
|
|
6
8
|
import { IBAN } from '@digigov/form/inputs/Input/__stories__/IBAN';
|
|
7
9
|
import { Integer } from '@digigov/form/inputs/Input/__stories__/Integer';
|
|
8
10
|
import { LandlineNumber } from '@digigov/form/inputs/Input/__stories__/LandlineNumber';
|
|
@@ -20,9 +22,15 @@ test('renders the All Input variants', async ({ mount, page }) => {
|
|
|
20
22
|
<TestVariant title="AFM">
|
|
21
23
|
<AFM />
|
|
22
24
|
</TestVariant>
|
|
25
|
+
<TestVariant title="AMKA">
|
|
26
|
+
<AMKA />
|
|
27
|
+
</TestVariant>
|
|
23
28
|
<TestVariant title="Boolean">
|
|
24
29
|
<Boolean />
|
|
25
30
|
</TestVariant>
|
|
31
|
+
<TestVariant title="Email">
|
|
32
|
+
<Email />
|
|
33
|
+
</TestVariant>
|
|
26
34
|
<TestVariant title="IBAN">
|
|
27
35
|
<IBAN />
|
|
28
36
|
</TestVariant>
|
|
@@ -54,6 +62,10 @@ test('renders the All Input variants', async ({ mount, page }) => {
|
|
|
54
62
|
)
|
|
55
63
|
await page.evaluate(() => document.fonts.ready);
|
|
56
64
|
|
|
65
|
+
// Move the mouse to the top-left corner to avoid random hover issues
|
|
66
|
+
await page.mouse.move(0, 0);
|
|
67
|
+
|
|
68
|
+
|
|
57
69
|
const screenshot = await page.screenshot({ fullPage: true, animations: 'disabled' });
|
|
58
70
|
expect(screenshot).toMatchSnapshot();
|
|
59
71
|
});
|
|
@@ -8,12 +8,14 @@ import { Hint } from '@digigov/ui/typography/Hint';
|
|
|
8
8
|
|
|
9
9
|
const TYPES_MAP = {
|
|
10
10
|
string: 'text',
|
|
11
|
+
password: 'password',
|
|
11
12
|
int: 'text',
|
|
12
13
|
text: 'text',
|
|
13
14
|
date: 'date',
|
|
14
15
|
};
|
|
15
16
|
|
|
16
|
-
export interface InputProps
|
|
17
|
+
export interface InputProps
|
|
18
|
+
extends Omit<UncontrolledFieldProps, 'extra' | 'Field'> {
|
|
17
19
|
extra?: {
|
|
18
20
|
fullWidth?: boolean;
|
|
19
21
|
multiline?: boolean;
|
|
@@ -25,10 +27,12 @@ export interface InputProps extends Omit<UncontrolledFieldProps, 'extra'> {
|
|
|
25
27
|
max?: number;
|
|
26
28
|
};
|
|
27
29
|
};
|
|
30
|
+
Field?: UncontrolledFieldProps['Field'];
|
|
28
31
|
}
|
|
29
32
|
|
|
30
33
|
export const Input: React.ExoticComponent<InputProps> = React.forwardRef(
|
|
31
34
|
function WrappedInput({ name, control, type, extra, ...props }, ref: never) {
|
|
35
|
+
delete props['Field'];
|
|
32
36
|
// eslint-disable-next-line prefer-const
|
|
33
37
|
let { multiline = false, rows, limit } = extra || {};
|
|
34
38
|
const { className } = extra || {};
|
|
@@ -75,7 +79,6 @@ export const Input: React.ExoticComponent<InputProps> = React.forwardRef(
|
|
|
75
79
|
reset: undefined,
|
|
76
80
|
required: undefined,
|
|
77
81
|
type: fieldType,
|
|
78
|
-
Field: undefined,
|
|
79
82
|
}}
|
|
80
83
|
/>
|
|
81
84
|
{limit?.max && (
|
|
@@ -103,7 +106,6 @@ export const Input: React.ExoticComponent<InputProps> = React.forwardRef(
|
|
|
103
106
|
...props,
|
|
104
107
|
reset: undefined,
|
|
105
108
|
required: undefined,
|
|
106
|
-
Field: undefined,
|
|
107
109
|
}}
|
|
108
110
|
/>
|
|
109
111
|
);
|
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
import Label from '@digigov/form/inputs/Label';
|
|
2
|
+
import doc from './doc.mdx?raw';
|
|
2
3
|
export default {
|
|
3
4
|
title: 'Digigov Form/inputs/Label',
|
|
4
5
|
component: Label,
|
|
6
|
+
tags: ['autodocs'],
|
|
7
|
+
markdown: doc,
|
|
5
8
|
displayName: 'Label',
|
|
6
9
|
};
|
|
7
10
|
export { Default } from '@digigov/form/inputs/Label/__stories__/Default';
|
|
@@ -4,7 +4,7 @@ import Field from '@digigov/form/Field';
|
|
|
4
4
|
import Label from '@digigov/form/inputs/Label';
|
|
5
5
|
import { Button } from '@digigov/ui/form/Button';
|
|
6
6
|
|
|
7
|
-
export const Default = () => (
|
|
7
|
+
export const Default = (_: any) => (
|
|
8
8
|
<FormBuilder
|
|
9
9
|
onSubmit={(data) => {
|
|
10
10
|
console.log(data);
|
|
@@ -14,6 +14,10 @@ test('renders the All Label variants', async ({ mount, page }) => {
|
|
|
14
14
|
)
|
|
15
15
|
await page.evaluate(() => document.fonts.ready);
|
|
16
16
|
|
|
17
|
+
// Move the mouse to the top-left corner to avoid random hover issues
|
|
18
|
+
await page.mouse.move(0, 0);
|
|
19
|
+
|
|
20
|
+
|
|
17
21
|
const screenshot = await page.screenshot({ fullPage: true, animations: 'disabled' });
|
|
18
22
|
expect(screenshot).toMatchSnapshot();
|
|
19
23
|
});
|
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
import OtpInput from '@digigov/form/inputs/OtpInput';
|
|
2
|
+
import doc from './doc.mdx?raw';
|
|
2
3
|
export default {
|
|
3
4
|
title: 'Digigov Form/inputs/OtpInput',
|
|
4
5
|
component: OtpInput,
|
|
6
|
+
tags: ['autodocs'],
|
|
7
|
+
markdown: doc,
|
|
5
8
|
displayName: 'OtpInput',
|
|
6
9
|
};
|
|
7
10
|
export { Default } from '@digigov/form/inputs/OtpInput/__stories__/Default';
|
|
@@ -14,6 +14,10 @@ test('renders the All OtpInput variants', async ({ mount, page }) => {
|
|
|
14
14
|
)
|
|
15
15
|
await page.evaluate(() => document.fonts.ready);
|
|
16
16
|
|
|
17
|
+
// Move the mouse to the top-left corner to avoid random hover issues
|
|
18
|
+
await page.mouse.move(0, 0);
|
|
19
|
+
|
|
20
|
+
|
|
17
21
|
const screenshot = await page.screenshot({ fullPage: true, animations: 'disabled' });
|
|
18
22
|
expect(screenshot).toMatchSnapshot();
|
|
19
23
|
});
|
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
import Radio from '@digigov/form/inputs/Radio';
|
|
2
|
+
import doc from './doc.mdx?raw';
|
|
2
3
|
export default {
|
|
3
4
|
title: 'Digigov Form/inputs/Radio',
|
|
4
5
|
component: Radio,
|
|
6
|
+
tags: ['autodocs'],
|
|
7
|
+
markdown: doc,
|
|
5
8
|
displayName: 'Radio',
|
|
6
9
|
};
|
|
7
10
|
export { Default } from '@digigov/form/inputs/Radio/__stories__/Default';
|
|
@@ -2,7 +2,7 @@ import React from 'react';
|
|
|
2
2
|
import FormBuilder, { Field } from '@digigov/form';
|
|
3
3
|
import { Button } from '@digigov/ui/form/Button';
|
|
4
4
|
|
|
5
|
-
export const WithDivider = () => (
|
|
5
|
+
export const WithDivider = (_: any) => (
|
|
6
6
|
<FormBuilder
|
|
7
7
|
onSubmit={(data) => {
|
|
8
8
|
console.log(data);
|
|
@@ -22,6 +22,10 @@ test('renders the All Radio variants', async ({ mount, page }) => {
|
|
|
22
22
|
)
|
|
23
23
|
await page.evaluate(() => document.fonts.ready);
|
|
24
24
|
|
|
25
|
+
// Move the mouse to the top-left corner to avoid random hover issues
|
|
26
|
+
await page.mouse.move(0, 0);
|
|
27
|
+
|
|
28
|
+
|
|
25
29
|
const screenshot = await page.screenshot({ fullPage: true, animations: 'disabled' });
|
|
26
30
|
expect(screenshot).toMatchSnapshot();
|
|
27
31
|
});
|
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
import Select from '@digigov/form/inputs/Select';
|
|
2
|
+
import doc from './doc.mdx?raw';
|
|
2
3
|
export default {
|
|
3
4
|
title: 'Digigov Form/inputs/Select',
|
|
4
5
|
component: Select,
|
|
6
|
+
tags: ['autodocs'],
|
|
7
|
+
markdown: doc,
|
|
5
8
|
displayName: 'Select',
|
|
6
9
|
};
|
|
7
10
|
export { Default } from '@digigov/form/inputs/Select/__stories__/Default';
|
|
@@ -14,6 +14,10 @@ test('renders the All Select variants', async ({ mount, page }) => {
|
|
|
14
14
|
)
|
|
15
15
|
await page.evaluate(() => document.fonts.ready);
|
|
16
16
|
|
|
17
|
+
// Move the mouse to the top-left corner to avoid random hover issues
|
|
18
|
+
await page.mouse.move(0, 0);
|
|
19
|
+
|
|
20
|
+
|
|
17
21
|
const screenshot = await page.screenshot({ fullPage: true, animations: 'disabled' });
|
|
18
22
|
expect(screenshot).toMatchSnapshot();
|
|
19
23
|
});
|
|
@@ -6,11 +6,13 @@ import {
|
|
|
6
6
|
SelectOption,
|
|
7
7
|
} from '@digigov/ui/form/SelectContainer';
|
|
8
8
|
|
|
9
|
-
export interface SelectProps
|
|
9
|
+
export interface SelectProps
|
|
10
|
+
extends Omit<UncontrolledFieldProps, 'extra' | 'Field'> {
|
|
10
11
|
extra: {
|
|
11
12
|
className?: string;
|
|
12
13
|
options: FieldOptionProps[];
|
|
13
14
|
};
|
|
15
|
+
Field?: UncontrolledFieldProps['Field'];
|
|
14
16
|
}
|
|
15
17
|
|
|
16
18
|
export const Select: React.ExoticComponent<SelectProps> = React.forwardRef(
|
|
@@ -18,6 +20,7 @@ export const Select: React.ExoticComponent<SelectProps> = React.forwardRef(
|
|
|
18
20
|
{ name, extra: { options, className }, disabled, ...props },
|
|
19
21
|
ref: never
|
|
20
22
|
) {
|
|
23
|
+
delete props.Field;
|
|
21
24
|
return (
|
|
22
25
|
<SelectContainer
|
|
23
26
|
className={className}
|
|
@@ -28,12 +31,12 @@ export const Select: React.ExoticComponent<SelectProps> = React.forwardRef(
|
|
|
28
31
|
{...{
|
|
29
32
|
...props,
|
|
30
33
|
reset: undefined,
|
|
34
|
+
error: undefined,
|
|
31
35
|
required: undefined,
|
|
32
|
-
Field: undefined,
|
|
33
36
|
}}
|
|
34
37
|
>
|
|
35
|
-
{options.map(({ value, label }) => (
|
|
36
|
-
<SelectOption key={
|
|
38
|
+
{options.map(({ value, label }, index) => (
|
|
39
|
+
<SelectOption key={index} value={value}>
|
|
37
40
|
{label && label.primary ? label.primary : value}
|
|
38
41
|
</SelectOption>
|
|
39
42
|
))}
|
|
@@ -432,7 +432,7 @@ export const scenarios = [
|
|
|
432
432
|
type: 'error',
|
|
433
433
|
fieldKey: 'image',
|
|
434
434
|
args: {
|
|
435
|
-
|
|
435
|
+
maxSize: 0.0003,
|
|
436
436
|
},
|
|
437
437
|
text: el.form.error.file_size,
|
|
438
438
|
},
|
|
@@ -440,7 +440,7 @@ export const scenarios = [
|
|
|
440
440
|
type: 'error',
|
|
441
441
|
fieldKey: 'file',
|
|
442
442
|
args: {
|
|
443
|
-
|
|
443
|
+
maxSize: 0.0003,
|
|
444
444
|
},
|
|
445
445
|
text: el.form.error.file_size,
|
|
446
446
|
},
|
package/src/lazy.js
CHANGED
|
@@ -9,12 +9,12 @@ export default {
|
|
|
9
9
|
'FieldBase': lazy(() => import('@digigov/form/Field/FieldBase').then((module) => ({ default: module['FieldBase'] }))),
|
|
10
10
|
'FieldBaseContainer': lazy(() => import('@digigov/form/Field/FieldBaseContainer').then((module) => ({ default: module['FieldBaseContainer'] }))),
|
|
11
11
|
'FieldConditional': lazy(() => import('@digigov/form/Field/FieldConditional').then((module) => ({ default: module['FieldConditional'] }))),
|
|
12
|
-
'FieldObject': lazy(() => import('@digigov/form/FieldObject').then((module) => ({ default: module['FieldObject'] }))),
|
|
13
12
|
'FormDialog': lazy(() => import('@digigov/form/FieldArray/FormDialog').then((module) => ({ default: module['FormDialog'] }))),
|
|
14
13
|
'ArrayItemModal': lazy(() => import('@digigov/form/FieldArray/FormDialog').then((module) => ({ default: module['ArrayItemModal'] }))),
|
|
15
14
|
'ArrayItemHeader': lazy(() => import('@digigov/form/FieldArray/FormDialog').then((module) => ({ default: module['ArrayItemHeader'] }))),
|
|
16
15
|
'ArrayItemDisplay': lazy(() => import('@digigov/form/FieldArray/FormDialog').then((module) => ({ default: module['ArrayItemDisplay'] }))),
|
|
17
16
|
'FieldArray': lazy(() => import('@digigov/form/FieldArray').then((module) => ({ default: module['FieldArray'] }))),
|
|
17
|
+
'FieldObject': lazy(() => import('@digigov/form/FieldObject').then((module) => ({ default: module['FieldObject'] }))),
|
|
18
18
|
'FieldsetWithContext': lazy(() => import('@digigov/form/Fieldset/FieldsetWithContext').then((module) => ({ default: module['FieldsetWithContext'] }))),
|
|
19
19
|
'FieldsetLabel': lazy(() => import('@digigov/form/Fieldset').then((module) => ({ default: module['FieldsetLabel'] }))),
|
|
20
20
|
'FieldsetCaption': lazy(() => import('@digigov/form/Fieldset').then((module) => ({ default: module['FieldsetCaption'] }))),
|
|
@@ -57,6 +57,7 @@ export default {
|
|
|
57
57
|
'RadioButtonsGroup': lazy(() => import('@digigov/form/inputs/Radio').then((module) => ({ default: module['RadioButtonsGroup'] }))),
|
|
58
58
|
'ControlledRadioButtonsGroup': lazy(() => import('@digigov/form/inputs/Radio').then((module) => ({ default: module['ControlledRadioButtonsGroup'] }))),
|
|
59
59
|
'AFM_VALIDATOR': lazy(() => import('@digigov/form/validators/utils').then((module) => ({ default: module['AFM_VALIDATOR'] }))),
|
|
60
|
+
'AMKA_VALIDATOR': lazy(() => import('@digigov/form/validators/utils').then((module) => ({ default: module['AMKA_VALIDATOR'] }))),
|
|
60
61
|
'LATER_THAN_VALIDATOR': lazy(() => import('@digigov/form/validators/utils').then((module) => ({ default: module['LATER_THAN_VALIDATOR'] }))),
|
|
61
62
|
'EARLIER_THAN_VALIDATOR': lazy(() => import('@digigov/form/validators/utils').then((module) => ({ default: module['EARLIER_THAN_VALIDATOR'] }))),
|
|
62
63
|
'DATE_VALIDATOR': lazy(() => import('@digigov/form/validators/utils').then((module) => ({ default: module['DATE_VALIDATOR'] }))),
|
package/src/registry.js
CHANGED
|
@@ -10,9 +10,9 @@ import * as _digigov_form_Field_FieldBaseContainer from "@digigov/form/Field/Fie
|
|
|
10
10
|
import * as _digigov_form_Field_FieldConditional from "@digigov/form/Field/FieldConditional";
|
|
11
11
|
import * as _digigov_form_Field from "@digigov/form/Field";
|
|
12
12
|
import * as _digigov_form_Field_types from "@digigov/form/Field/types";
|
|
13
|
-
import * as _digigov_form_FieldObject from "@digigov/form/FieldObject";
|
|
14
13
|
import * as _digigov_form_FieldArray_FormDialog from "@digigov/form/FieldArray/FormDialog";
|
|
15
14
|
import * as _digigov_form_FieldArray from "@digigov/form/FieldArray";
|
|
15
|
+
import * as _digigov_form_FieldObject from "@digigov/form/FieldObject";
|
|
16
16
|
import * as _digigov_form_Fieldset_FieldsetWithContext from "@digigov/form/Fieldset/FieldsetWithContext";
|
|
17
17
|
import * as _digigov_form_Fieldset from "@digigov/form/Fieldset";
|
|
18
18
|
import * as _digigov_form_Fieldset_types from "@digigov/form/Fieldset/types";
|
|
@@ -45,19 +45,19 @@ import * as _digigov_form_Questions_Step_StepTitle from "@digigov/form/Questions
|
|
|
45
45
|
import * as _digigov_form_Questions_Step_getAddMoreFields from "@digigov/form/Questions/Step/getAddMoreFields";
|
|
46
46
|
import * as _digigov_form_Questions_Step from "@digigov/form/Questions/Step";
|
|
47
47
|
import * as _digigov_form_Questions_Step_types from "@digigov/form/Questions/Step/types";
|
|
48
|
-
import * as _digigov_form_inputs_AutoCompleteInput from "@digigov/form/inputs/AutoCompleteInput";
|
|
49
48
|
import * as _digigov_form_inputs_Checkboxes from "@digigov/form/inputs/Checkboxes";
|
|
49
|
+
import * as _digigov_form_inputs_AutoCompleteInput from "@digigov/form/inputs/AutoCompleteInput";
|
|
50
50
|
import * as _digigov_form_inputs_DateInput from "@digigov/form/inputs/DateInput";
|
|
51
|
-
import * as _digigov_form_inputs_FileInput from "@digigov/form/inputs/FileInput";
|
|
52
51
|
import * as _digigov_form_inputs_DateTimeInput from "@digigov/form/inputs/DateTimeInput";
|
|
52
|
+
import * as _digigov_form_inputs_FileInput from "@digigov/form/inputs/FileInput";
|
|
53
53
|
import * as _digigov_form_inputs_ImageInput from "@digigov/form/inputs/ImageInput";
|
|
54
54
|
import * as _digigov_form_inputs_Input from "@digigov/form/inputs/Input";
|
|
55
|
-
import * as _digigov_form_inputs_Input_inputsInputScenarios from "@digigov/form/inputs/Input/inputsInputScenarios";
|
|
56
55
|
import * as _digigov_form_inputs_Label from "@digigov/form/inputs/Label";
|
|
57
56
|
import * as _digigov_form_inputs_OtpInput from "@digigov/form/inputs/OtpInput";
|
|
58
57
|
import * as _digigov_form_inputs_Radio from "@digigov/form/inputs/Radio";
|
|
59
58
|
import * as _digigov_form_inputs_Select from "@digigov/form/inputs/Select";
|
|
60
59
|
import * as _digigov_form_validators_utils_afm from "@digigov/form/validators/utils/afm";
|
|
60
|
+
import * as _digigov_form_validators_utils_amka from "@digigov/form/validators/utils/amka";
|
|
61
61
|
import * as _digigov_form_validators_utils_date from "@digigov/form/validators/utils/date";
|
|
62
62
|
import * as _digigov_form_validators_utils_datetime from "@digigov/form/validators/utils/datetime";
|
|
63
63
|
import * as _digigov_form_validators_utils_file from "@digigov/form/validators/utils/file";
|
|
@@ -101,9 +101,9 @@ export default {
|
|
|
101
101
|
'@digigov/form/Field/FieldConditional': lazyImport(_digigov_form_Field_FieldConditional),
|
|
102
102
|
'@digigov/form/Field': lazyImport(_digigov_form_Field),
|
|
103
103
|
'@digigov/form/Field/types': lazyImport(_digigov_form_Field_types),
|
|
104
|
-
'@digigov/form/FieldObject': lazyImport(_digigov_form_FieldObject),
|
|
105
104
|
'@digigov/form/FieldArray/FormDialog': lazyImport(_digigov_form_FieldArray_FormDialog),
|
|
106
105
|
'@digigov/form/FieldArray': lazyImport(_digigov_form_FieldArray),
|
|
106
|
+
'@digigov/form/FieldObject': lazyImport(_digigov_form_FieldObject),
|
|
107
107
|
'@digigov/form/Fieldset/FieldsetWithContext': lazyImport(_digigov_form_Fieldset_FieldsetWithContext),
|
|
108
108
|
'@digigov/form/Fieldset': lazyImport(_digigov_form_Fieldset),
|
|
109
109
|
'@digigov/form/Fieldset/types': lazyImport(_digigov_form_Fieldset_types),
|
|
@@ -136,19 +136,19 @@ export default {
|
|
|
136
136
|
'@digigov/form/Questions/Step/getAddMoreFields': lazyImport(_digigov_form_Questions_Step_getAddMoreFields),
|
|
137
137
|
'@digigov/form/Questions/Step': lazyImport(_digigov_form_Questions_Step),
|
|
138
138
|
'@digigov/form/Questions/Step/types': lazyImport(_digigov_form_Questions_Step_types),
|
|
139
|
-
'@digigov/form/inputs/AutoCompleteInput': lazyImport(_digigov_form_inputs_AutoCompleteInput),
|
|
140
139
|
'@digigov/form/inputs/Checkboxes': lazyImport(_digigov_form_inputs_Checkboxes),
|
|
140
|
+
'@digigov/form/inputs/AutoCompleteInput': lazyImport(_digigov_form_inputs_AutoCompleteInput),
|
|
141
141
|
'@digigov/form/inputs/DateInput': lazyImport(_digigov_form_inputs_DateInput),
|
|
142
|
-
'@digigov/form/inputs/FileInput': lazyImport(_digigov_form_inputs_FileInput),
|
|
143
142
|
'@digigov/form/inputs/DateTimeInput': lazyImport(_digigov_form_inputs_DateTimeInput),
|
|
143
|
+
'@digigov/form/inputs/FileInput': lazyImport(_digigov_form_inputs_FileInput),
|
|
144
144
|
'@digigov/form/inputs/ImageInput': lazyImport(_digigov_form_inputs_ImageInput),
|
|
145
145
|
'@digigov/form/inputs/Input': lazyImport(_digigov_form_inputs_Input),
|
|
146
|
-
'@digigov/form/inputs/Input/inputsInputScenarios': lazyImport(_digigov_form_inputs_Input_inputsInputScenarios),
|
|
147
146
|
'@digigov/form/inputs/Label': lazyImport(_digigov_form_inputs_Label),
|
|
148
147
|
'@digigov/form/inputs/OtpInput': lazyImport(_digigov_form_inputs_OtpInput),
|
|
149
148
|
'@digigov/form/inputs/Radio': lazyImport(_digigov_form_inputs_Radio),
|
|
150
149
|
'@digigov/form/inputs/Select': lazyImport(_digigov_form_inputs_Select),
|
|
151
150
|
'@digigov/form/validators/utils/afm': lazyImport(_digigov_form_validators_utils_afm),
|
|
151
|
+
'@digigov/form/validators/utils/amka': lazyImport(_digigov_form_validators_utils_amka),
|
|
152
152
|
'@digigov/form/validators/utils/date': lazyImport(_digigov_form_validators_utils_date),
|
|
153
153
|
'@digigov/form/validators/utils/datetime': lazyImport(_digigov_form_validators_utils_datetime),
|
|
154
154
|
'@digigov/form/validators/utils/file': lazyImport(_digigov_form_validators_utils_file),
|
package/src/types.tsx
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { UseFormReturn, UseFormProps } from 'react-hook-form';
|
|
1
|
+
import { UseFormReturn, UseFormProps, ErrorOption } from 'react-hook-form';
|
|
2
2
|
import {
|
|
3
3
|
FieldComponentRegistry,
|
|
4
4
|
FieldLabelProps,
|
|
@@ -54,6 +54,7 @@ export interface FormBuilderProps {
|
|
|
54
54
|
componentRegistry?: FieldComponentRegistry;
|
|
55
55
|
grid?: boolean;
|
|
56
56
|
controlledFieldsOnly?: boolean;
|
|
57
|
+
errors?: ErrorOption;
|
|
57
58
|
}
|
|
58
59
|
|
|
59
60
|
export interface FormBaseProps
|
package/src/utils.ts
CHANGED
|
@@ -13,6 +13,7 @@ const parseErrorSchema = (
|
|
|
13
13
|
return (error.inner || []).reduce<Record<string, FieldError>>(
|
|
14
14
|
(previous, error) => {
|
|
15
15
|
error.path = error.path?.replace(/\[([0-9]+)\]/g, '.$1');
|
|
16
|
+
// error.path = error.path?.replace(/\["(.*?)"\]/g, '$1');
|
|
16
17
|
if (!previous[error.path!]) {
|
|
17
18
|
previous[error.path!] = { message: error.message, type: error.type! };
|
|
18
19
|
}
|
|
@@ -37,6 +38,26 @@ const parseErrorSchema = (
|
|
|
37
38
|
{}
|
|
38
39
|
);
|
|
39
40
|
};
|
|
41
|
+
function isPlainObject(obj) {
|
|
42
|
+
return (
|
|
43
|
+
typeof obj === 'object' &&
|
|
44
|
+
obj !== null &&
|
|
45
|
+
Object.prototype.toString.call(obj) === '[object Object]'
|
|
46
|
+
);
|
|
47
|
+
}
|
|
48
|
+
function flattenObject(obj, prefix = '') {
|
|
49
|
+
return Object.keys(obj).reduce((acc, key) => {
|
|
50
|
+
const prefixedKey = prefix ? `${prefix}.${key}` : key;
|
|
51
|
+
|
|
52
|
+
if (isPlainObject(obj[key])) {
|
|
53
|
+
Object.assign(acc, flattenObject(obj[key], prefixedKey));
|
|
54
|
+
} else {
|
|
55
|
+
acc[prefixedKey] = obj[key];
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
return acc;
|
|
59
|
+
}, {});
|
|
60
|
+
}
|
|
40
61
|
|
|
41
62
|
export const yupResolver =
|
|
42
63
|
(schema: any, schemaOptions: any = {}, resolverOptions: any = {}) =>
|
|
@@ -51,7 +72,7 @@ export const yupResolver =
|
|
|
51
72
|
const result = await schema[
|
|
52
73
|
resolverOptions.mode === 'sync' ? 'validateSync' : 'validate'
|
|
53
74
|
](
|
|
54
|
-
values,
|
|
75
|
+
flattenObject(values),
|
|
55
76
|
Object.assign({ abortEarly: false }, schemaOptions, { context })
|
|
56
77
|
);
|
|
57
78
|
|
|
@@ -67,13 +88,13 @@ export const yupResolver =
|
|
|
67
88
|
throw e;
|
|
68
89
|
}
|
|
69
90
|
|
|
70
|
-
const parsed = parseErrorSchema(
|
|
71
|
-
e,
|
|
72
|
-
!options.shouldUseNativeValidation && options.criteriaMode === 'all'
|
|
73
|
-
);
|
|
74
91
|
return {
|
|
75
92
|
values: {},
|
|
76
|
-
errors:
|
|
93
|
+
errors: parseErrorSchema(
|
|
94
|
+
e,
|
|
95
|
+
!options.shouldUseNativeValidation && options.criteriaMode === 'all'
|
|
96
|
+
),
|
|
97
|
+
options,
|
|
77
98
|
};
|
|
78
99
|
}
|
|
79
100
|
};
|
package/src/validators/index.ts
CHANGED
|
@@ -11,6 +11,7 @@ import { ValidatorSchema } from '@digigov/form/validators/types';
|
|
|
11
11
|
import {
|
|
12
12
|
getYupObjectShape,
|
|
13
13
|
AFM_VALIDATOR,
|
|
14
|
+
AMKA_VALIDATOR,
|
|
14
15
|
FILE_MAX_SIZE_VALIDATOR,
|
|
15
16
|
IBAN_VALIDATOR,
|
|
16
17
|
OTP_VALIDATOR,
|
|
@@ -30,13 +31,15 @@ import {
|
|
|
30
31
|
import { INT_VALIDATOR } from '@digigov/form/validators/utils/int';
|
|
31
32
|
import { NUMBER_VALIDATOR } from '@digigov/form/validators/utils/number';
|
|
32
33
|
|
|
33
|
-
export const getYUPTypeMap = (
|
|
34
|
+
export const getYUPTypeMap = (
|
|
35
|
+
validatorRegistry?: Record<string, any>
|
|
36
|
+
): Record<string, any> => {
|
|
34
37
|
const yupTypeMap = {
|
|
35
38
|
file: (field): MixedSchema => {
|
|
36
39
|
return yup
|
|
37
40
|
.mixed()
|
|
38
41
|
.transform((value) => {
|
|
39
|
-
if (!value.length) {
|
|
42
|
+
if (!value || value.length === 0) {
|
|
40
43
|
return null;
|
|
41
44
|
}
|
|
42
45
|
return value;
|
|
@@ -81,10 +84,13 @@ export const getYUPTypeMap = (): Record<string, any> => {
|
|
|
81
84
|
if (typeof field.extra.of === 'object') {
|
|
82
85
|
// else if the field is an object then it is a scalar type
|
|
83
86
|
// eg. number, string etc.
|
|
87
|
+
if (field.required) {
|
|
88
|
+
field.extra.min = 1;
|
|
89
|
+
}
|
|
84
90
|
let arrayValidator = yup
|
|
85
91
|
.array()
|
|
86
|
-
.
|
|
87
|
-
.
|
|
92
|
+
.nullable()
|
|
93
|
+
.of(yupTypeMap[field.extra.of.type](field.extra.of));
|
|
88
94
|
if (field.extra.length)
|
|
89
95
|
arrayValidator = arrayValidator.length(field.extra.length, {
|
|
90
96
|
key: 'form.error.array.length',
|
|
@@ -133,6 +139,10 @@ export const getYUPTypeMap = (): Record<string, any> => {
|
|
|
133
139
|
field.trim
|
|
134
140
|
? yup.string().trim().test(AFM_VALIDATOR)
|
|
135
141
|
: yup.string().test(AFM_VALIDATOR),
|
|
142
|
+
amka: (field): yup.StringSchema =>
|
|
143
|
+
field.trim
|
|
144
|
+
? yup.string().trim().test(AMKA_VALIDATOR)
|
|
145
|
+
: yup.string().test(AMKA_VALIDATOR),
|
|
136
146
|
uuid4: (field): yup.StringSchema =>
|
|
137
147
|
field.trim
|
|
138
148
|
? yup.string().trim().test(UUID4_VALIDATOR)
|
|
@@ -215,6 +225,7 @@ export const getYUPTypeMap = (): Record<string, any> => {
|
|
|
215
225
|
}
|
|
216
226
|
return yup.string().test(DATETIME_VALIDATOR);
|
|
217
227
|
},
|
|
228
|
+
...validatorRegistry,
|
|
218
229
|
};
|
|
219
230
|
return yupTypeMap;
|
|
220
231
|
};
|
|
@@ -226,7 +237,7 @@ export function useValidationSchema(
|
|
|
226
237
|
validatorRegistry?: Record<string, ValidatorSchema[]>
|
|
227
238
|
): Lazy<any, unknown> | AnyObjectSchema | void {
|
|
228
239
|
return useMemo(() => {
|
|
229
|
-
const yupTypeMap = getYUPTypeMap();
|
|
240
|
+
const yupTypeMap = getYUPTypeMap(validatorRegistry);
|
|
230
241
|
return getYupObjectShape(fields, yupTypeMap, validatorRegistry);
|
|
231
242
|
}, []);
|
|
232
243
|
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
function digitSum(number) {
|
|
2
|
+
const sum = number > 9 ? 1 : 0;
|
|
3
|
+
return sum + (number % 10);
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
export function validateAMKA(amka: string): boolean {
|
|
7
|
+
// Validate that the last digit is the correct check digit (created using the
|
|
8
|
+
// Luhn algorithm https://en.wikipedia.org/wiki/Luhn_algorithm).
|
|
9
|
+
amka = String(amka);
|
|
10
|
+
const checkDigitIndex = amka.length - 1;
|
|
11
|
+
let sum = 0;
|
|
12
|
+
amka
|
|
13
|
+
.substring(0, checkDigitIndex)
|
|
14
|
+
.split('')
|
|
15
|
+
.reverse()
|
|
16
|
+
.forEach(function (value, index) {
|
|
17
|
+
const weight = ((index + 1) % 2) + 1;
|
|
18
|
+
sum += digitSum(parseInt(value, 10) * weight);
|
|
19
|
+
});
|
|
20
|
+
const sumMod10 = sum % 10;
|
|
21
|
+
if (sumMod10 === 0) {
|
|
22
|
+
return amka.substring(checkDigitIndex) === '0';
|
|
23
|
+
} else {
|
|
24
|
+
return amka.substring(checkDigitIndex) === 10 - sumMod10 + '';
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export const AMKA_VALIDATOR = {
|
|
29
|
+
name: 'amka-validator',
|
|
30
|
+
message: 'form.error.amka',
|
|
31
|
+
test: (value): boolean => {
|
|
32
|
+
if (!value) return true;
|
|
33
|
+
const AMKA_REGEX = /^[0-9]{11}$/;
|
|
34
|
+
if (!AMKA_REGEX.test(value) || value === '00000000000') {
|
|
35
|
+
return false;
|
|
36
|
+
}
|
|
37
|
+
return validateAMKA(value);
|
|
38
|
+
},
|
|
39
|
+
};
|