Add first and last namne to guardian
This commit is contained in:
parent
a7e85e0f0d
commit
5535ef672c
1 changed files with 61 additions and 19 deletions
|
|
@ -1,6 +1,6 @@
|
||||||
"use client";
|
"use client";
|
||||||
|
|
||||||
import { useEffect, useState } from "react";
|
import { useEffect, useRef, useState } from "react";
|
||||||
|
|
||||||
import Image from "next/image";
|
import Image from "next/image";
|
||||||
import Link from "next/link";
|
import Link from "next/link";
|
||||||
|
|
@ -48,7 +48,8 @@ export default function RegisterPage() {
|
||||||
grade: "",
|
grade: "",
|
||||||
phoneNumber: "",
|
phoneNumber: "",
|
||||||
email: "",
|
email: "",
|
||||||
guardianName: "",
|
guardianFirstName: "",
|
||||||
|
guardianLastName: "",
|
||||||
guardianPhoneNumber: "",
|
guardianPhoneNumber: "",
|
||||||
guardianEmail: "",
|
guardianEmail: "",
|
||||||
isVisitor: false,
|
isVisitor: false,
|
||||||
|
|
@ -62,6 +63,13 @@ export default function RegisterPage() {
|
||||||
const [message, setMessage] = useState({ type: "", text: "" });
|
const [message, setMessage] = useState({ type: "", text: "" });
|
||||||
const [fieldErrors, setFieldErrors] = useState<Record<string, string>>({});
|
const [fieldErrors, setFieldErrors] = useState<Record<string, string>>({});
|
||||||
const [showBecomeMemberCta, setShowBecomeMemberCta] = useState(false);
|
const [showBecomeMemberCta, setShowBecomeMemberCta] = useState(false);
|
||||||
|
const successRef = useRef<HTMLDivElement>(null);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
if (message.type === "success" && successRef.current) {
|
||||||
|
successRef.current.scrollIntoView({ behavior: "smooth", block: "start" });
|
||||||
|
}
|
||||||
|
}, [message.type]);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
fetch("/api/Content")
|
fetch("/api/Content")
|
||||||
|
|
@ -121,7 +129,10 @@ export default function RegisterPage() {
|
||||||
const trimmedSurName = formData.surName.trim();
|
const trimmedSurName = formData.surName.trim();
|
||||||
const trimmedGrade = formData.grade.trim();
|
const trimmedGrade = formData.grade.trim();
|
||||||
const trimmedPhoneNumber = formData.phoneNumber.trim();
|
const trimmedPhoneNumber = formData.phoneNumber.trim();
|
||||||
const trimmedGuardianName = formData.guardianName.trim();
|
const trimmedGuardianFirstName = formData.guardianFirstName.trim();
|
||||||
|
const trimmedGuardianLastName = formData.guardianLastName.trim();
|
||||||
|
const trimmedGuardianName =
|
||||||
|
`${trimmedGuardianFirstName} ${trimmedGuardianLastName}`.trim();
|
||||||
const trimmedGuardianPhone = formData.guardianPhoneNumber.trim();
|
const trimmedGuardianPhone = formData.guardianPhoneNumber.trim();
|
||||||
const trimmedGuardianEmail = formData.guardianEmail.trim();
|
const trimmedGuardianEmail = formData.guardianEmail.trim();
|
||||||
const normalizedPhoneNumber = normalizeMobileNumber(trimmedPhoneNumber);
|
const normalizedPhoneNumber = normalizeMobileNumber(trimmedPhoneNumber);
|
||||||
|
|
@ -146,8 +157,12 @@ export default function RegisterPage() {
|
||||||
if (!trimmedSurName)
|
if (!trimmedSurName)
|
||||||
nextFieldErrors.surName = "Efternamn är obligatoriskt.";
|
nextFieldErrors.surName = "Efternamn är obligatoriskt.";
|
||||||
if (!trimmedGrade) nextFieldErrors.grade = "Årskurs är obligatorisk.";
|
if (!trimmedGrade) nextFieldErrors.grade = "Årskurs är obligatorisk.";
|
||||||
if (!trimmedGuardianName)
|
if (!trimmedGuardianFirstName)
|
||||||
nextFieldErrors.guardianName = "Vårdnadshavares namn är obligatoriskt.";
|
nextFieldErrors.guardianFirstName =
|
||||||
|
"Vårdnadshavares förnamn är obligatoriskt.";
|
||||||
|
if (!trimmedGuardianLastName)
|
||||||
|
nextFieldErrors.guardianLastName =
|
||||||
|
"Vårdnadshavares efternamn är obligatoriskt.";
|
||||||
if (!trimmedGuardianPhone)
|
if (!trimmedGuardianPhone)
|
||||||
nextFieldErrors.guardianPhoneNumber =
|
nextFieldErrors.guardianPhoneNumber =
|
||||||
"Vårdnadshavares Mobilnummer är obligatoriskt.";
|
"Vårdnadshavares Mobilnummer är obligatoriskt.";
|
||||||
|
|
@ -170,7 +185,8 @@ export default function RegisterPage() {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!formData.hasApprovedGdpr) {
|
if (!formData.hasApprovedGdpr) {
|
||||||
nextFieldErrors.hasApprovedGdpr = "Du måste godkänna GDPR för att anmäla dig.";
|
nextFieldErrors.hasApprovedGdpr =
|
||||||
|
"Du måste godkänna GDPR för att anmäla dig.";
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Object.keys(nextFieldErrors).length > 0) {
|
if (Object.keys(nextFieldErrors).length > 0) {
|
||||||
|
|
@ -217,7 +233,8 @@ export default function RegisterPage() {
|
||||||
grade: trimmedGrade,
|
grade: trimmedGrade,
|
||||||
phoneNumber: normalizedPhoneNumber,
|
phoneNumber: normalizedPhoneNumber,
|
||||||
email: formData.email.trim(),
|
email: formData.email.trim(),
|
||||||
guardianName: trimmedGuardianName,
|
guardianName:
|
||||||
|
`${trimmedGuardianFirstName} ${trimmedGuardianLastName}`.trim(),
|
||||||
guardianPhoneNumber: normalizedGuardianPhone,
|
guardianPhoneNumber: normalizedGuardianPhone,
|
||||||
guardianEmail: trimmedGuardianEmail,
|
guardianEmail: trimmedGuardianEmail,
|
||||||
friends: formData.friends.trim(),
|
friends: formData.friends.trim(),
|
||||||
|
|
@ -296,9 +313,11 @@ export default function RegisterPage() {
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{message.type === "success" && (
|
{message.type === "success" && (
|
||||||
<div className="mb-8 space-y-6">
|
<div ref={successRef} className="mb-8 space-y-6">
|
||||||
<div className="p-6 rounded-lg text-center bg-green-50 text-green-800 border border-green-200">
|
<div className="p-6 rounded-lg text-center bg-green-50 text-green-800 border border-green-200">
|
||||||
<div className="text-4xl mb-4">{showBecomeMemberCta ? "⏳" : "🎉"}</div>
|
<div className="text-4xl mb-4">
|
||||||
|
{showBecomeMemberCta ? "⏳" : "🎉"}
|
||||||
|
</div>
|
||||||
<h2 className="text-xl font-bold mb-2">
|
<h2 className="text-xl font-bold mb-2">
|
||||||
{showBecomeMemberCta ? "Nästan Klart!" : "Klart!"}
|
{showBecomeMemberCta ? "Nästan Klart!" : "Klart!"}
|
||||||
</h2>
|
</h2>
|
||||||
|
|
@ -352,8 +371,8 @@ export default function RegisterPage() {
|
||||||
<p className="mt-1 text-xs text-red-600">{fieldErrors.ssn}</p>
|
<p className="mt-1 text-xs text-red-600">{fieldErrors.ssn}</p>
|
||||||
)}
|
)}
|
||||||
<p className="mt-1 text-xs text-gray-500">
|
<p className="mt-1 text-xs text-gray-500">
|
||||||
Används endast för att kolla om du redan är medlem eller inte.
|
Används endast för att kontrollera om du redan är medlem eller
|
||||||
Sparas ej.
|
inte. Sparas ej.
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
@ -491,23 +510,46 @@ export default function RegisterPage() {
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
<label
|
<label
|
||||||
htmlFor="guardianName"
|
htmlFor="guardianFirstName"
|
||||||
className="block text-sm font-medium text-gray-700"
|
className="block text-sm font-medium text-gray-700"
|
||||||
>
|
>
|
||||||
Vårdnadshavares Namn *
|
Vårdnadshavares Förnamn *
|
||||||
</label>
|
</label>
|
||||||
<input
|
<input
|
||||||
type="text"
|
type="text"
|
||||||
name="guardianName"
|
name="guardianFirstName"
|
||||||
id="guardianName"
|
id="guardianFirstName"
|
||||||
required
|
required
|
||||||
className={`mt-1 block w-full rounded-md shadow-sm sm:text-sm p-2 border text-gray-900 ${fieldErrors.guardianName ? "border-red-500 focus:border-red-500 focus:ring-red-500" : "border-gray-300 focus:border-blue-500 focus:ring-blue-500"}`}
|
className={`mt-1 block w-full rounded-md shadow-sm sm:text-sm p-2 border text-gray-900 ${fieldErrors.guardianFirstName ? "border-red-500 focus:border-red-500 focus:ring-red-500" : "border-gray-300 focus:border-blue-500 focus:ring-blue-500"}`}
|
||||||
value={formData.guardianName}
|
value={formData.guardianFirstName}
|
||||||
onChange={handleInputChange}
|
onChange={handleInputChange}
|
||||||
/>
|
/>
|
||||||
{fieldErrors.guardianName && (
|
{fieldErrors.guardianFirstName && (
|
||||||
<p className="mt-1 text-xs text-red-600">
|
<p className="mt-1 text-xs text-red-600">
|
||||||
{fieldErrors.guardianName}
|
{fieldErrors.guardianFirstName}
|
||||||
|
</p>
|
||||||
|
)}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<label
|
||||||
|
htmlFor="guardianLastName"
|
||||||
|
className="block text-sm font-medium text-gray-700"
|
||||||
|
>
|
||||||
|
Vårdnadshavares Efternamn *
|
||||||
|
</label>
|
||||||
|
<input
|
||||||
|
type="text"
|
||||||
|
name="guardianLastName"
|
||||||
|
id="guardianLastName"
|
||||||
|
required
|
||||||
|
className={`mt-1 block w-full rounded-md shadow-sm sm:text-sm p-2 border text-gray-900 ${fieldErrors.guardianLastName ? "border-red-500 focus:border-red-500 focus:ring-red-500" : "border-gray-300 focus:border-blue-500 focus:ring-blue-500"}`}
|
||||||
|
value={formData.guardianLastName}
|
||||||
|
onChange={handleInputChange}
|
||||||
|
/>
|
||||||
|
{fieldErrors.guardianLastName && (
|
||||||
|
<p className="mt-1 text-xs text-red-600">
|
||||||
|
{fieldErrors.guardianLastName}
|
||||||
</p>
|
</p>
|
||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue