Skip to content

Commit a06aed3

Browse files
committed
Refactored Billing component
1 parent 0df8091 commit a06aed3

File tree

1 file changed

+54
-56
lines changed

1 file changed

+54
-56
lines changed

components/Checkout/Billing.component.jsx

Lines changed: 54 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,50 @@
11
import { useForm } from 'react-hook-form';
22
import { InputField } from '../Input/InputField.component';
33

4+
const getCustomNumberValidation = (
5+
value,
6+
{ minLength, maxLength, pattern }
7+
) => ({
8+
minLength: { value, message: minLength },
9+
maxLength: { value, message: maxLength },
10+
pattern: { value: /^\d+$/i, message: pattern },
11+
});
12+
13+
const inputs = [
14+
{ label: 'Fornavn', name: 'firstName' },
15+
{ label: 'Etternavn', name: 'lastName' },
16+
{ label: 'Adresse', name: 'address1' },
17+
{
18+
label: 'Postnummer',
19+
name: 'postcode',
20+
customValidation: getCustomNumberValidation(4, {
21+
minLength: 'Postnummer må være minimum 4 tall',
22+
maxLength: 'Postnummer må være maksimalt 4 tall',
23+
pattern: 'Postnummer må bare være tall',
24+
}),
25+
},
26+
{ label: 'Sted', name: 'city' },
27+
{
28+
label: 'Epost',
29+
name: 'email',
30+
customValidation: {
31+
pattern: {
32+
value: /[^@]+@[^@]+\.[^@]+/i,
33+
message: 'Du må oppgi en gyldig epost',
34+
},
35+
},
36+
},
37+
{
38+
label: 'Telefon',
39+
name: 'phone',
40+
customValidation: getCustomNumberValidation(8, {
41+
minLength: 'Minimum 8 tall i telefonnummeret',
42+
maxLength: 'Maksimalt 8 tall i telefonnummeret',
43+
pattern: 'Ikke gyldig telefonnummer',
44+
}),
45+
},
46+
];
47+
448
const Billing = ({ onSubmit }) => {
549
const {
650
register,
@@ -12,24 +56,16 @@ const Billing = ({ onSubmit }) => {
1256
<section className="text-gray-700 container p-4 py-2 mx-auto">
1357
<form onSubmit={handleSubmit(onSubmit)}>
1458
<div className="mx-auto lg:w-1/2 flex flex-wrap">
15-
<InputField
16-
label="Fornavn"
17-
name="firstName"
18-
errors={errors}
19-
register={register}
20-
/>
21-
<InputField
22-
label="Etternavn"
23-
name="lastName"
24-
errors={errors}
25-
register={register}
26-
/>
27-
<InputField
28-
label="Adresse"
29-
name="address1"
30-
errors={errors}
31-
register={register}
32-
/>
59+
{inputs.map(({ label, name, customValidation }, key) => (
60+
<InputField
61+
key={key}
62+
label={label}
63+
name={name}
64+
customValidation={customValidation}
65+
errors={errors}
66+
register={register}
67+
/>
68+
))}
3369
<InputField
3470
label="Postnummer"
3571
name="postcode"
@@ -50,44 +86,6 @@ const Billing = ({ onSubmit }) => {
5086
},
5187
}}
5288
/>
53-
<InputField
54-
label="Sted"
55-
name="city"
56-
errors={errors}
57-
register={register}
58-
/>
59-
<InputField
60-
label="Epost"
61-
name="email"
62-
errors={errors}
63-
register={register}
64-
customValidation={{
65-
pattern: {
66-
value: /[^@]+@[^@]+\.[^@]+/i,
67-
message: 'Du må oppgi en gyldig epost',
68-
},
69-
}}
70-
/>
71-
<InputField
72-
label="Telefon"
73-
name="phone"
74-
errors={errors}
75-
register={register}
76-
customValidation={{
77-
minLength: {
78-
value: 8,
79-
message: 'Minimum 8 tall i telefonnummeret',
80-
},
81-
maxLength: {
82-
value: 8,
83-
message: 'Maksimalt 8 tall i telefonnummeret',
84-
},
85-
pattern: {
86-
value: /^\d+$/i,
87-
message: 'Ikke gyldig telefonnummer',
88-
},
89-
}}
90-
/>
9189
<OrderButton register={register} />
9290
</div>
9391
</form>

0 commit comments

Comments
 (0)