@digigov/form 1.2.0-dcbd7ded → 2.0.0-4be8f7cc
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/utils/index.js +5 -5
- package/cjs/Field/FieldBase/index.js +1 -0
- package/cjs/Field/utils/index.js +5 -10
- package/cjs/inputs/AutoCompleteInput/AutoComplete.stories/index.js +12 -0
- package/cjs/inputs/AutoCompleteInput/__stories__/Default/index.js +11 -16
- package/cjs/inputs/AutoCompleteInput/__stories__/Multiple/index.js +52 -0
- package/cjs/inputs/AutoCompleteInput/index.js +5 -2
- package/cjs/inputs/AutoCompleteInput/index.mdx +29 -0
- package/cjs/inputs/Checkboxes/__stories__/Conditional/index.js +3 -2
- package/cjs/inputs/Checkboxes/index.mdx +33 -0
- package/cjs/inputs/DateInput/index.mdx +23 -0
- package/cjs/inputs/FileInput/index.mdx +19 -0
- package/cjs/inputs/ImageInput/index.mdx +19 -0
- package/cjs/inputs/Input/index.mdx +90 -3
- package/cjs/inputs/OtpInput/index.js +1 -0
- package/cjs/inputs/OtpInput/index.mdx +23 -0
- package/cjs/inputs/Radio/__stories__/Conditional/index.js +3 -2
- package/cjs/inputs/Radio/index.mdx +33 -0
- package/cjs/inputs/Select/index.mdx +17 -0
- package/cjs/validators/utils/file/index.js +11 -19
- package/index.js +1 -1
- package/inputs/AutoCompleteInput/AutoComplete.stories/index.js +2 -1
- package/inputs/AutoCompleteInput/AutoComplete.stories.d.ts +1 -0
- package/inputs/AutoCompleteInput/__stories__/Default/index.js +9 -11
- package/inputs/AutoCompleteInput/__stories__/Default.d.ts +1 -0
- package/inputs/AutoCompleteInput/__stories__/Multiple/index.js +45 -0
- package/inputs/AutoCompleteInput/__stories__/Multiple/package.json +6 -0
- package/inputs/AutoCompleteInput/__stories__/Multiple.d.ts +3 -0
- package/inputs/AutoCompleteInput/index.js +5 -2
- package/inputs/AutoCompleteInput/index.mdx +29 -0
- package/inputs/Checkboxes/__stories__/Conditional/index.js +2 -1
- package/inputs/Checkboxes/__stories__/Conditional.d.ts +1 -0
- package/inputs/Checkboxes/index.mdx +33 -0
- package/inputs/DateInput/index.mdx +23 -0
- package/inputs/FileInput/index.mdx +19 -0
- package/inputs/ImageInput/index.mdx +19 -0
- package/inputs/Input/index.mdx +90 -3
- package/inputs/OtpInput/index.d.ts +8 -1
- package/inputs/OtpInput/index.js +1 -1
- package/inputs/OtpInput/index.mdx +23 -0
- package/inputs/Radio/__stories__/Conditional/index.js +2 -1
- package/inputs/Radio/__stories__/Conditional.d.ts +1 -0
- package/inputs/Radio/index.mdx +33 -0
- package/inputs/Select/index.mdx +17 -0
- package/lazy.d.ts +1 -1
- package/package.json +4 -4
- package/src/Field/FieldBase.tsx +1 -0
- package/src/Field/utils.ts +4 -4
- package/src/inputs/AutoCompleteInput/AutoComplete.stories.js +1 -0
- package/src/inputs/AutoCompleteInput/__stories__/Default.tsx +27 -18
- package/src/inputs/AutoCompleteInput/__stories__/Multiple.tsx +54 -0
- package/src/inputs/AutoCompleteInput/index.mdx +29 -0
- package/src/inputs/AutoCompleteInput/index.tsx +3 -2
- package/src/inputs/Checkboxes/__stories__/Conditional.tsx +2 -3
- package/src/inputs/Checkboxes/index.mdx +33 -0
- package/src/inputs/Checkboxes/index.tsx +2 -2
- package/src/inputs/DateInput/index.mdx +23 -0
- package/src/inputs/DateInput/index.tsx +1 -1
- package/src/inputs/FileInput/index.mdx +19 -0
- package/src/inputs/ImageInput/index.mdx +19 -0
- package/src/inputs/Input/index.mdx +90 -3
- package/src/inputs/OtpInput/index.mdx +23 -0
- package/src/inputs/OtpInput/index.tsx +2 -2
- package/src/inputs/Radio/__stories__/Conditional.tsx +2 -0
- package/src/inputs/Radio/index.mdx +33 -0
- package/src/inputs/Select/index.mdx +17 -0
- package/src/validators/utils/file.ts +9 -9
- package/validators/utils/file/index.js +11 -19
|
@@ -1,13 +1,21 @@
|
|
|
1
|
-
import React
|
|
1
|
+
import React from 'react';
|
|
2
2
|
import { Field } from '@digigov/form/Field';
|
|
3
3
|
import FormBuilder from '@digigov/form/FormBuilder';
|
|
4
4
|
import { FieldSpec } from '@digigov/form/types';
|
|
5
|
-
import { results } from '@digigov/ui/form/AutoComplete/utils';
|
|
6
5
|
import Button from '@digigov/ui/form/Button';
|
|
6
|
+
|
|
7
|
+
const results = [
|
|
8
|
+
'Αμερική',
|
|
9
|
+
'Ασία',
|
|
10
|
+
'Αυστραλία',
|
|
11
|
+
'Αφρική',
|
|
12
|
+
'Ευρώπη',
|
|
13
|
+
];
|
|
14
|
+
|
|
7
15
|
const fields: FieldSpec[] = [
|
|
8
16
|
{
|
|
9
17
|
key: 'autocomplete',
|
|
10
|
-
label: { primary: '
|
|
18
|
+
label: { primary: 'Επιλέξτε ήπειρο' },
|
|
11
19
|
required: true,
|
|
12
20
|
type: 'choice:single',
|
|
13
21
|
extra: {
|
|
@@ -16,7 +24,7 @@ const fields: FieldSpec[] = [
|
|
|
16
24
|
return {
|
|
17
25
|
label: {
|
|
18
26
|
primary: r,
|
|
19
|
-
secondary: `
|
|
27
|
+
secondary: `'Ηπειρος: ${r}`,
|
|
20
28
|
},
|
|
21
29
|
value: r.toLowerCase(),
|
|
22
30
|
};
|
|
@@ -28,18 +36,19 @@ const fields: FieldSpec[] = [
|
|
|
28
36
|
const initialValues = {};
|
|
29
37
|
|
|
30
38
|
export const Default = () => (
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
39
|
+
|
|
40
|
+
<FormBuilder
|
|
41
|
+
fields={fields}
|
|
42
|
+
onSubmit={(data) => {
|
|
43
|
+
console.log(data);
|
|
44
|
+
}}
|
|
45
|
+
initial={initialValues}
|
|
46
|
+
>
|
|
47
|
+
{fields.map((field) => (
|
|
48
|
+
<Field key={field.key} name={field.key} />
|
|
49
|
+
))}
|
|
50
|
+
<Button type="submit">Submit</Button>
|
|
51
|
+
</FormBuilder>
|
|
52
|
+
|
|
45
53
|
);
|
|
54
|
+
export default Default;
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { Field } from '@digigov/form/Field';
|
|
3
|
+
import FormBuilder from '@digigov/form/FormBuilder';
|
|
4
|
+
import { FieldSpec } from '@digigov/form/types';
|
|
5
|
+
import Button from '@digigov/ui/form/Button';
|
|
6
|
+
|
|
7
|
+
const results = [
|
|
8
|
+
'Αμερική',
|
|
9
|
+
'Ασία',
|
|
10
|
+
'Αυστραλία',
|
|
11
|
+
'Αφρική',
|
|
12
|
+
'Ευρώπη',
|
|
13
|
+
];
|
|
14
|
+
|
|
15
|
+
const fields: FieldSpec[] = [
|
|
16
|
+
{
|
|
17
|
+
key: 'autocomplete',
|
|
18
|
+
label: { primary: 'Επιλέξτε ήπειρο' },
|
|
19
|
+
required: true,
|
|
20
|
+
type: 'choice:single',
|
|
21
|
+
extra: {
|
|
22
|
+
component: 'AutoComplete',
|
|
23
|
+
multiple: true,
|
|
24
|
+
options: results.map((r) => {
|
|
25
|
+
return {
|
|
26
|
+
label: {
|
|
27
|
+
primary: r,
|
|
28
|
+
secondary: `Ήπειρος: ${r}`,
|
|
29
|
+
},
|
|
30
|
+
value: r.toLowerCase(),
|
|
31
|
+
};
|
|
32
|
+
}),
|
|
33
|
+
},
|
|
34
|
+
},
|
|
35
|
+
];
|
|
36
|
+
|
|
37
|
+
const initialValues = {};
|
|
38
|
+
|
|
39
|
+
export const Multiple = () => (
|
|
40
|
+
<FormBuilder
|
|
41
|
+
fields={fields}
|
|
42
|
+
onSubmit={(data) => {
|
|
43
|
+
console.log(data);
|
|
44
|
+
}}
|
|
45
|
+
initial={initialValues}
|
|
46
|
+
>
|
|
47
|
+
{fields.map((field) => (
|
|
48
|
+
<Field key={field.key} name={field.key} />
|
|
49
|
+
))}
|
|
50
|
+
<Button type="submit">Submit</Button>
|
|
51
|
+
</FormBuilder>
|
|
52
|
+
);
|
|
53
|
+
|
|
54
|
+
export default Multiple;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: AutoComplete Input
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# AutoComplete input
|
|
6
|
+
|
|
7
|
+
AutoCompleteInput element is an enhanced version of text input that shows suggested
|
|
8
|
+
options as the users type and also let them select an option from the list.
|
|
9
|
+
|
|
10
|
+
## How to use
|
|
11
|
+
|
|
12
|
+
### Default
|
|
13
|
+
|
|
14
|
+
<Story
|
|
15
|
+
packageName="@digigov/form"
|
|
16
|
+
component="inputs/AutoCompleteInput"
|
|
17
|
+
story="Default.tsx"
|
|
18
|
+
/>
|
|
19
|
+
|
|
20
|
+
### Display multiple values
|
|
21
|
+
|
|
22
|
+
<Story
|
|
23
|
+
packageName="@digigov/form"
|
|
24
|
+
component="inputs/AutoCompleteInput"
|
|
25
|
+
story="Multiple.tsx"
|
|
26
|
+
/>
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
|
|
@@ -28,7 +28,7 @@ export interface AutoCompleteInputProps
|
|
|
28
28
|
|
|
29
29
|
export const AutoCompleteInput: React.FC<AutoCompleteInputProps> = ({
|
|
30
30
|
name,
|
|
31
|
-
extra: { options },
|
|
31
|
+
extra: { options, multiple },
|
|
32
32
|
onChange,
|
|
33
33
|
value,
|
|
34
34
|
...props
|
|
@@ -48,13 +48,14 @@ export const AutoCompleteInput: React.FC<AutoCompleteInputProps> = ({
|
|
|
48
48
|
.indexOf(query.toLowerCase()) !== -1
|
|
49
49
|
);
|
|
50
50
|
})
|
|
51
|
-
:
|
|
51
|
+
: options
|
|
52
52
|
);
|
|
53
53
|
},
|
|
54
54
|
[]);
|
|
55
55
|
|
|
56
56
|
return (
|
|
57
57
|
<UIAutoComplete
|
|
58
|
+
multiple={multiple}
|
|
58
59
|
source={suggest}
|
|
59
60
|
onConfirm={(value) => {
|
|
60
61
|
onChange(value.value);
|
|
@@ -6,7 +6,6 @@ const fields: FieldSpec[] = [
|
|
|
6
6
|
{
|
|
7
7
|
key: 'landline',
|
|
8
8
|
type: 'phone_number',
|
|
9
|
-
|
|
10
9
|
label: {
|
|
11
10
|
secondary: 'Εισάγετε το νούμερο του σταθερού σας τηλεφώνου.',
|
|
12
11
|
},
|
|
@@ -24,7 +23,6 @@ const fields: FieldSpec[] = [
|
|
|
24
23
|
{
|
|
25
24
|
key: 'mobile_phone',
|
|
26
25
|
type: 'mobile_phone',
|
|
27
|
-
|
|
28
26
|
label: {
|
|
29
27
|
secondary: 'Εισάγετε το νούμερο του κινητού σας τηλεφώνου.',
|
|
30
28
|
},
|
|
@@ -41,7 +39,6 @@ const fields: FieldSpec[] = [
|
|
|
41
39
|
},
|
|
42
40
|
{
|
|
43
41
|
key: 'email',
|
|
44
|
-
|
|
45
42
|
type: 'email',
|
|
46
43
|
label: {
|
|
47
44
|
secondary: 'Εισάγετε την διεύθυνση του ηλεκτρονικού σας ταχυδρομείου.',
|
|
@@ -98,3 +95,5 @@ export const Conditional = () => (
|
|
|
98
95
|
<Button type="submit">Συνέχεια</Button>
|
|
99
96
|
</FormBuilder>
|
|
100
97
|
);
|
|
98
|
+
|
|
99
|
+
export default Conditional;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Checkbox
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# Checkboxes
|
|
6
|
+
Input element of type `checkbox` are rendered by default as boxes that are checked when activated.
|
|
7
|
+
Checkboxes are used to let a user select one or more options of a limited number of choices.
|
|
8
|
+
|
|
9
|
+
## How to use
|
|
10
|
+
|
|
11
|
+
### Default
|
|
12
|
+
|
|
13
|
+
<Story
|
|
14
|
+
packageName="@digigov/form"
|
|
15
|
+
component="inputs/Checkboxes"
|
|
16
|
+
story="Default.tsx"
|
|
17
|
+
/>
|
|
18
|
+
|
|
19
|
+
### Conditional
|
|
20
|
+
|
|
21
|
+
<Story
|
|
22
|
+
packageName="@digigov/form"
|
|
23
|
+
component="inputs/Checkboxes"
|
|
24
|
+
story="Conditional.tsx"
|
|
25
|
+
/>
|
|
26
|
+
|
|
27
|
+
### With divider
|
|
28
|
+
|
|
29
|
+
<Story
|
|
30
|
+
packageName="@digigov/form"
|
|
31
|
+
component="inputs/Checkboxes"
|
|
32
|
+
story="WithDivider.tsx"
|
|
33
|
+
/>
|
|
@@ -17,14 +17,14 @@ export interface CheckboxesProps
|
|
|
17
17
|
};
|
|
18
18
|
}
|
|
19
19
|
|
|
20
|
-
export const Checkboxes: React.FC<CheckboxesProps> =
|
|
20
|
+
export const Checkboxes: React.FC<CheckboxesProps> = ({
|
|
21
21
|
name,
|
|
22
22
|
onChange,
|
|
23
23
|
value,
|
|
24
24
|
extra: { options, className },
|
|
25
25
|
disabled,
|
|
26
26
|
...props
|
|
27
|
-
}) {
|
|
27
|
+
}) => {
|
|
28
28
|
if (!value) value = [];
|
|
29
29
|
const handleChange = (optionValue, idx, show) => (evt): void => {
|
|
30
30
|
let newValue;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Date Input
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# Date input
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
Input element of type `date` create input fields that let the user enter a date,
|
|
10
|
+
either with a textbox that validates the input or a special date picker interface.
|
|
11
|
+
|
|
12
|
+
## How to use
|
|
13
|
+
|
|
14
|
+
### Default
|
|
15
|
+
|
|
16
|
+
<Story
|
|
17
|
+
packageName="@digigov/form"
|
|
18
|
+
component="inputs/DateInput"
|
|
19
|
+
story="Default.tsx"
|
|
20
|
+
/>
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
|
|
@@ -78,7 +78,7 @@ const DatePart = ({ label, ...props }) => {
|
|
|
78
78
|
return <CoreDateInputItem {...props}>{label}</CoreDateInputItem>;
|
|
79
79
|
};
|
|
80
80
|
|
|
81
|
-
export const DateInput =
|
|
81
|
+
export const DateInput = ({ name, type, ...props }) => {
|
|
82
82
|
const { t } = useTranslation();
|
|
83
83
|
const [initial] = useState(props.value);
|
|
84
84
|
const value = useMemo(() => {
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: File Input
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# File input
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
Input element of type `file` let the user choose one or more files from their device storage.
|
|
10
|
+
|
|
11
|
+
## How to use
|
|
12
|
+
|
|
13
|
+
### Default
|
|
14
|
+
|
|
15
|
+
<Story
|
|
16
|
+
packageName="@digigov/form"
|
|
17
|
+
component="inputs/FileInput"
|
|
18
|
+
story="Default.tsx"
|
|
19
|
+
/>
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Image Input
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# Image input
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
Input element of type `image` defines an image as a submit button, i.e. submit buttons that take the form of an image rather than text.
|
|
10
|
+
|
|
11
|
+
## How to use
|
|
12
|
+
|
|
13
|
+
### Default
|
|
14
|
+
|
|
15
|
+
<Story
|
|
16
|
+
packageName="@digigov/form"
|
|
17
|
+
component="inputs/ImageInput"
|
|
18
|
+
story="Default.tsx"
|
|
19
|
+
/>
|
|
@@ -1,8 +1,95 @@
|
|
|
1
1
|
---
|
|
2
2
|
title: Input
|
|
3
|
-
parent: docs/ui/components
|
|
4
3
|
---
|
|
4
|
+
|
|
5
|
+
# Input
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
The input element of type `string` is used to create interactive controls for web-based forms in order to accept data from the user;
|
|
10
|
+
a wide variety of types of input data and control widgets are available, depending on the device and user agent. The input element is one of the most powerful and complex in all of HTML due to the sheer number of combinations of input types and attributes.
|
|
11
|
+
|
|
12
|
+
## How to use
|
|
13
|
+
|
|
14
|
+
### Default
|
|
15
|
+
|
|
16
|
+
<Story
|
|
17
|
+
packageName="@digigov/form"
|
|
18
|
+
component="inputs/Input"
|
|
19
|
+
story="Default.tsx"
|
|
20
|
+
/>
|
|
21
|
+
|
|
22
|
+
### Boolean
|
|
23
|
+
|
|
24
|
+
<Story
|
|
25
|
+
packageName="@digigov/form"
|
|
26
|
+
component="inputs/Input"
|
|
27
|
+
story="Boolean.tsx"
|
|
28
|
+
/>
|
|
29
|
+
### AFM
|
|
30
|
+
|
|
31
|
+
<Story
|
|
32
|
+
packageName="@digigov/form"
|
|
33
|
+
component="inputs/Input"
|
|
34
|
+
story="AFM.tsx"
|
|
35
|
+
/>
|
|
36
|
+
|
|
37
|
+
### IBAN
|
|
38
|
+
|
|
39
|
+
<Story
|
|
40
|
+
packageName="@digigov/form"
|
|
41
|
+
component="inputs/Input"
|
|
42
|
+
story="IBAN.tsx"
|
|
43
|
+
/>
|
|
44
|
+
|
|
45
|
+
### Integer
|
|
46
|
+
|
|
47
|
+
<Story
|
|
48
|
+
packageName="@digigov/form"
|
|
49
|
+
component="inputs/Input"
|
|
50
|
+
story="Default.tsx"
|
|
51
|
+
/>
|
|
52
|
+
|
|
53
|
+
### Landline number
|
|
54
|
+
|
|
55
|
+
<Story
|
|
56
|
+
packageName="@digigov/form"
|
|
57
|
+
component="inputs/Input"
|
|
58
|
+
story="LandlineNumber.tsx"
|
|
59
|
+
/>
|
|
60
|
+
|
|
61
|
+
### Mobile phone
|
|
62
|
+
|
|
63
|
+
<Story
|
|
64
|
+
packageName="@digigov/form"
|
|
65
|
+
component="inputs/Input"
|
|
66
|
+
story="MobilePhone.tsx"
|
|
67
|
+
/>
|
|
68
|
+
|
|
69
|
+
### Phone number
|
|
70
|
+
|
|
71
|
+
<Story
|
|
72
|
+
packageName="@digigov/form"
|
|
73
|
+
component="inputs/Input"
|
|
74
|
+
story="PhoneNumber.tsx"
|
|
75
|
+
/>
|
|
76
|
+
|
|
77
|
+
### Postal code
|
|
78
|
+
|
|
79
|
+
<Story
|
|
80
|
+
packageName="@digigov/form"
|
|
81
|
+
component="inputs/Input"
|
|
82
|
+
story="PostalCode.tsx"
|
|
83
|
+
/>
|
|
84
|
+
|
|
85
|
+
### Text with character limit
|
|
86
|
+
|
|
87
|
+
<Story
|
|
88
|
+
packageName="@digigov/form"
|
|
89
|
+
component="inputs/Input"
|
|
90
|
+
story="TextWithCharacterLimit.tsx"
|
|
91
|
+
/>
|
|
92
|
+
|
|
93
|
+
|
|
5
94
|
|
|
6
|
-
## Example
|
|
7
95
|
|
|
8
|
-
<Input type="text" />
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: OTP Input
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# OTP input
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
A one-time password (OTP) input element of type `otp`, also known as a one-time PIN, one-time authorization code (OTAC) or dynamic password, is a password that is valid for only one login session or transaction,
|
|
10
|
+
on a computer system or other digital device.
|
|
11
|
+
|
|
12
|
+
## How to use
|
|
13
|
+
|
|
14
|
+
### Default
|
|
15
|
+
|
|
16
|
+
<Story
|
|
17
|
+
packageName="@digigov/form"
|
|
18
|
+
component="inputs/OtpInput"
|
|
19
|
+
story="Default.tsx"
|
|
20
|
+
/>
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
|
|
@@ -6,7 +6,7 @@ import SingleCharacterInputs, {
|
|
|
6
6
|
export const RE_DIGIT = new RegExp(/^\d+$/);
|
|
7
7
|
export const REMOVE_SPACES = new RegExp(/\s+/g);
|
|
8
8
|
|
|
9
|
-
function useOtp(onChange, maxLength) {
|
|
9
|
+
export function useOtp(onChange, maxLength) {
|
|
10
10
|
const [otpValues, setOtpValues] = useState(Array<string>(maxLength).fill(''));
|
|
11
11
|
const handleChange = useCallback(
|
|
12
12
|
(otp: string[]) => {
|
|
@@ -123,7 +123,7 @@ const SingleCharacterInputPart = ({ ...props }) => {
|
|
|
123
123
|
return <SingleCharacterInput {...props} />;
|
|
124
124
|
};
|
|
125
125
|
|
|
126
|
-
export const OtpInput =
|
|
126
|
+
export const OtpInput = ({ name, maxLength = 6, ...props }) => {
|
|
127
127
|
const otp = useOtp(props.onChange, maxLength);
|
|
128
128
|
return (
|
|
129
129
|
<SingleCharacterInputs>
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Radio
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# Radio
|
|
6
|
+
Input element of type `radio` are generally used in radio groups—collections of radio buttons describing a set of related options.
|
|
7
|
+
Radios are used to let a user select one option of a limited number of choices.
|
|
8
|
+
|
|
9
|
+
## How to use
|
|
10
|
+
|
|
11
|
+
### Default
|
|
12
|
+
|
|
13
|
+
<Story
|
|
14
|
+
packageName="@digigov/form"
|
|
15
|
+
component="inputs/Radio"
|
|
16
|
+
story="Default.tsx"
|
|
17
|
+
/>
|
|
18
|
+
|
|
19
|
+
### Conditional
|
|
20
|
+
|
|
21
|
+
<Story
|
|
22
|
+
packageName="@digigov/form"
|
|
23
|
+
component="inputs/Radio"
|
|
24
|
+
story="Conditional.tsx"
|
|
25
|
+
/>
|
|
26
|
+
|
|
27
|
+
### With divider
|
|
28
|
+
|
|
29
|
+
<Story
|
|
30
|
+
packageName="@digigov/form"
|
|
31
|
+
component="inputs/Radio"
|
|
32
|
+
story="WithDivider.tsx"
|
|
33
|
+
/>
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Select
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# Select
|
|
6
|
+
|
|
7
|
+
The select element represents a control that provides a menu of options.
|
|
8
|
+
|
|
9
|
+
## How to use
|
|
10
|
+
|
|
11
|
+
### Default
|
|
12
|
+
|
|
13
|
+
<Story
|
|
14
|
+
packageName="@digigov/form"
|
|
15
|
+
component="inputs/Select"
|
|
16
|
+
story="Default.tsx"
|
|
17
|
+
/>
|
|
@@ -5,17 +5,17 @@ const DEFAULT_FILE_MAX_SIZE = 10000000;
|
|
|
5
5
|
|
|
6
6
|
export const FILE_MAX_SIZE_VALIDATOR = (field: FieldSpec): ValidatorSchema => ({
|
|
7
7
|
name: 'file-max-size-validator',
|
|
8
|
-
message:
|
|
8
|
+
message: {
|
|
9
|
+
key: 'form.error.file_size',
|
|
10
|
+
context: {
|
|
11
|
+
maxSizeToMb: (field?.extra?.limit.maxSize || DEFAULT_FILE_MAX_SIZE) / 1000000,
|
|
12
|
+
},
|
|
13
|
+
},
|
|
9
14
|
test: (value: File[]): boolean => {
|
|
10
|
-
if (
|
|
11
|
-
for (const file of value) {
|
|
12
|
-
if (file.size >= field.extra.limit.maxSize) {
|
|
13
|
-
return false;
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
} else if (value) {
|
|
15
|
+
if (value) {
|
|
17
16
|
for (const file of value) {
|
|
18
|
-
|
|
17
|
+
const maxSize = field?.extra?.limit?.maxSize || DEFAULT_FILE_MAX_SIZE
|
|
18
|
+
if (file.size > maxSize) {
|
|
19
19
|
return false;
|
|
20
20
|
}
|
|
21
21
|
}
|
|
@@ -3,18 +3,25 @@ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o =
|
|
|
3
3
|
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
|
|
4
4
|
var DEFAULT_FILE_MAX_SIZE = 10000000;
|
|
5
5
|
export var FILE_MAX_SIZE_VALIDATOR = function FILE_MAX_SIZE_VALIDATOR(field) {
|
|
6
|
+
var _field$extra;
|
|
6
7
|
return {
|
|
7
8
|
name: 'file-max-size-validator',
|
|
8
|
-
message:
|
|
9
|
+
message: {
|
|
10
|
+
key: 'form.error.file_size',
|
|
11
|
+
context: {
|
|
12
|
+
maxSizeToMb: ((field === null || field === void 0 ? void 0 : (_field$extra = field.extra) === null || _field$extra === void 0 ? void 0 : _field$extra.limit.maxSize) || DEFAULT_FILE_MAX_SIZE) / 1000000
|
|
13
|
+
}
|
|
14
|
+
},
|
|
9
15
|
test: function test(value) {
|
|
10
|
-
|
|
11
|
-
if (field !== null && field !== void 0 && (_field$extra = field.extra) !== null && _field$extra !== void 0 && _field$extra.limit && field !== null && field !== void 0 && (_field$extra2 = field.extra) !== null && _field$extra2 !== void 0 && _field$extra2.limit.maxSize && value) {
|
|
16
|
+
if (value) {
|
|
12
17
|
var _iterator = _createForOfIteratorHelper(value),
|
|
13
18
|
_step;
|
|
14
19
|
try {
|
|
15
20
|
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
21
|
+
var _field$extra2, _field$extra2$limit;
|
|
16
22
|
var file = _step.value;
|
|
17
|
-
|
|
23
|
+
var maxSize = (field === null || field === void 0 ? void 0 : (_field$extra2 = field.extra) === null || _field$extra2 === void 0 ? void 0 : (_field$extra2$limit = _field$extra2.limit) === null || _field$extra2$limit === void 0 ? void 0 : _field$extra2$limit.maxSize) || DEFAULT_FILE_MAX_SIZE;
|
|
24
|
+
if (file.size > maxSize) {
|
|
18
25
|
return false;
|
|
19
26
|
}
|
|
20
27
|
}
|
|
@@ -23,21 +30,6 @@ export var FILE_MAX_SIZE_VALIDATOR = function FILE_MAX_SIZE_VALIDATOR(field) {
|
|
|
23
30
|
} finally {
|
|
24
31
|
_iterator.f();
|
|
25
32
|
}
|
|
26
|
-
} else if (value) {
|
|
27
|
-
var _iterator2 = _createForOfIteratorHelper(value),
|
|
28
|
-
_step2;
|
|
29
|
-
try {
|
|
30
|
-
for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
|
|
31
|
-
var _file = _step2.value;
|
|
32
|
-
if (_file.size >= DEFAULT_FILE_MAX_SIZE) {
|
|
33
|
-
return false;
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
} catch (err) {
|
|
37
|
-
_iterator2.e(err);
|
|
38
|
-
} finally {
|
|
39
|
-
_iterator2.f();
|
|
40
|
-
}
|
|
41
33
|
}
|
|
42
34
|
return true;
|
|
43
35
|
}
|