Skip to content

Commit adbff85

Browse files
authored
Merge pull request #1076 from w3bdesign/develop
🔥 cleanup: remove formFields array from formConfig.ts
2 parents 597a6c6 + dcbe702 commit adbff85

File tree

5 files changed

+95
-280
lines changed

5 files changed

+95
-280
lines changed
Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
"use client";
2+
3+
import React from "react";
4+
import { useForm } from "react-hook-form";
5+
import { zodResolver } from "@hookform/resolvers/zod";
6+
7+
import Button from "@/components/UI/Button.component";
8+
import InputField from "@/components/UI/InputField.component";
9+
import { formSchema, FormData } from "./config/formConfig";
10+
11+
interface ContactFormProps {
12+
onSubmit: (data: FormData) => Promise<void>;
13+
csrfToken?: string;
14+
}
15+
16+
/**
17+
* A simplified contact form component that directly uses the form schema
18+
* without complex generic abstractions.
19+
*/
20+
const ContactForm: React.FC<ContactFormProps> = ({ onSubmit, csrfToken }) => {
21+
const {
22+
register,
23+
handleSubmit,
24+
formState: { errors, isSubmitting },
25+
} = useForm<FormData>({
26+
resolver: zodResolver(formSchema),
27+
});
28+
29+
return (
30+
<form
31+
id="contact-form"
32+
className="text-center"
33+
onSubmit={handleSubmit(onSubmit)}
34+
method="POST"
35+
action="/api/form"
36+
aria-label="Contact Form"
37+
>
38+
{csrfToken && <input type="hidden" name="_csrf" value={csrfToken} />}
39+
<fieldset>
40+
<legend className="text-center mx-auto text-xl mt-4 sr-only">
41+
Kontaktskjema
42+
</legend>
43+
44+
{/* Navn field */}
45+
<InputField<FormData>
46+
name="navn"
47+
label="Fullt navn"
48+
htmlFor="navn"
49+
register={register}
50+
error={errors.navn?.message}
51+
isRequired
52+
inputPattern={/^[a-zA-ZæøåÆØÅ ]+$/}
53+
title="Vennligst bruk norske bokstaver"
54+
/>
55+
<br />
56+
57+
{/* Telefon field */}
58+
<InputField<FormData>
59+
name="telefon"
60+
label="Telefonnummer"
61+
htmlFor="telefon"
62+
register={register}
63+
error={errors.telefon?.message}
64+
isRequired
65+
inputPattern={/^\d{8}$/}
66+
title="Vennligst oppgi et gyldig telefonnummer"
67+
/>
68+
<br />
69+
70+
{/* Tekst field */}
71+
<InputField<FormData>
72+
name="tekst"
73+
label="Hva ønsker du å si?"
74+
htmlFor="tekst"
75+
register={register}
76+
error={errors.tekst?.message}
77+
isRequired
78+
type="textarea"
79+
/>
80+
<br />
81+
</fieldset>
82+
83+
<div className="-mt-4">
84+
<Button disabled={isSubmitting} data-testid="submit-button">
85+
Send skjema
86+
</Button>
87+
</div>
88+
</form>
89+
);
90+
};
91+
92+
export default ContactForm;

src/components/Kontakt/KontaktContent.component.tsx

Lines changed: 3 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,12 @@
11
"use client";
22

33
import React, { useState } from "react";
4-
import { z } from "zod";
54
import emailjs from "@emailjs/browser";
65

76
import PageHeader from "@/components/UI/PageHeader.component";
8-
import GenericForm from "@/components/UI/GenericForm.component";
7+
import ContactForm from "./ContactForm.component";
98

10-
import { formSchema, formFields, FormData } from "./config/formConfig";
11-
12-
type KontaktFormShape = {
13-
navn: z.ZodString;
14-
telefon: z.ZodString;
15-
tekst: z.ZodString;
16-
};
9+
import { FormData } from "./config/formConfig";
1710

1811
/**
1912
* Props for the KontaktContent component.
@@ -96,11 +89,8 @@ const KontaktContent: React.FC<Props> = ({
9689
</h3>
9790
) : (
9891
<div className="bg-gray-800 p-4 md:p-6 rounded-lg pt-8">
99-
<GenericForm<KontaktFormShape>
100-
formSchema={formSchema}
92+
<ContactForm
10193
onSubmit={handleFormSubmit}
102-
fields={formFields}
103-
submitButtonText="Send skjema"
10494
csrfToken={csrfToken}
10595
/>
10696
</div>

src/components/Kontakt/config/formConfig.ts

Lines changed: 0 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -13,23 +13,3 @@ export const formSchema = z.object({
1313
});
1414

1515
export type FormData = z.infer<typeof formSchema>;
16-
17-
export const formFields = [
18-
{
19-
name: "navn" as const,
20-
label: "Fullt navn",
21-
inputPattern: /^[a-zA-ZæøåÆØÅ ]+$/,
22-
title: "Vennligst bruk norske bokstaver",
23-
},
24-
{
25-
name: "telefon" as const,
26-
label: "Telefonnummer",
27-
inputPattern: /^\d{8}$/,
28-
title: "Vennligst oppgi et gyldig telefonnummer",
29-
},
30-
{
31-
name: "tekst" as const,
32-
label: "Hva ønsker du å si?",
33-
type: "textarea" as const,
34-
},
35-
] as const;

src/components/UI/GenericForm.component.tsx

Lines changed: 0 additions & 95 deletions
This file was deleted.

0 commit comments

Comments
 (0)