diff --git a/apps/web/src/components/registration/PerformerForm.tsx b/apps/web/src/components/registration/PerformerForm.tsx index 9a6e556..5b41a1a 100644 --- a/apps/web/src/components/registration/PerformerForm.tsx +++ b/apps/web/src/components/registration/PerformerForm.tsx @@ -15,6 +15,8 @@ interface PerformerErrors { lastName?: string; email?: string; phone?: string; + postcode?: string; + birthdate?: string; artForm?: string; isOver16?: string; } @@ -41,6 +43,8 @@ export function PerformerForm({ lastName: prefillLastName, email: prefillEmail, phone: "", + postcode: "", + birthdate: "", artForm: "", experience: "", isOver16: false, @@ -71,6 +75,8 @@ export function PerformerForm({ lastName: validateTextField(data.lastName, true, "Achternaam"), email: validateEmail(data.email), phone: validatePhone(data.phone), + postcode: !data.postcode.trim() ? "Postcode is verplicht" : undefined, + birthdate: !data.birthdate ? "Geboortedatum is verplicht" : undefined, artForm: !data.artForm.trim() ? "Kunstvorm is verplicht" : undefined, isOver16: !data.isOver16 ? "Je moet 16 jaar of ouder zijn om op te treden" @@ -82,6 +88,8 @@ export function PerformerForm({ lastName: true, email: true, phone: true, + postcode: true, + birthdate: true, artForm: true, isOver16: true, }); @@ -110,6 +118,14 @@ export function PerformerForm({ ), email: validateEmail(name === "email" ? value : data.email), phone: validatePhone(name === "phone" ? value : data.phone), + postcode: + name === "postcode" && !value.trim() + ? "Postcode is verplicht" + : undefined, + birthdate: + name === "birthdate" && !value + ? "Geboortedatum is verplicht" + : undefined, artForm: name === "artForm" && !value.trim() ? "Kunstvorm is verplicht" @@ -129,6 +145,14 @@ export function PerformerForm({ lastName: validateTextField(value, true, "Achternaam"), email: validateEmail(value), phone: validatePhone(value), + postcode: + name === "postcode" && !value.trim() + ? "Postcode is verplicht" + : undefined, + birthdate: + name === "birthdate" && !value + ? "Geboortedatum is verplicht" + : undefined, artForm: !value.trim() ? "Kunstvorm is verplicht" : undefined, }; setErrors((prev) => ({ ...prev, [name]: errMap[name] })); @@ -145,6 +169,8 @@ export function PerformerForm({ lastName: data.lastName.trim(), email: data.email.trim(), phone: data.phone.trim() || undefined, + postcode: data.postcode.trim(), + birthdate: data.birthdate, registrationType: "performer", artForm: data.artForm.trim() || undefined, experience: data.experience.trim() || undefined, @@ -306,6 +332,54 @@ export function PerformerForm({ + {/* Postcode + Birthdate row */} +
+
+ + + {touched.postcode && errors.postcode && ( + + {errors.postcode} + + )} +
+
+ + + {touched.birthdate && errors.birthdate && ( + + {errors.birthdate} + + )} +
+
+ {/* Performer-specific fields */}

diff --git a/apps/web/src/components/registration/WatcherForm.tsx b/apps/web/src/components/registration/WatcherForm.tsx index 60e9639..b8387ee 100644 --- a/apps/web/src/components/registration/WatcherForm.tsx +++ b/apps/web/src/components/registration/WatcherForm.tsx @@ -21,6 +21,8 @@ interface WatcherErrors { lastName?: string; email?: string; phone?: string; + postcode?: string; + birthdate?: string; } interface Props { @@ -251,6 +253,8 @@ export function WatcherForm({ lastName: prefillLastName, email: prefillEmail, phone: "", + postcode: "", + birthdate: "", extraQuestions: "", }); const [errors, setErrors] = useState({}); @@ -306,6 +310,8 @@ export function WatcherForm({ lastName: validateTextField(data.lastName, true, "Achternaam"), email: validateEmail(data.email), phone: validatePhone(data.phone), + postcode: !data.postcode.trim() ? "Postcode is verplicht" : undefined, + birthdate: !data.birthdate ? "Geboortedatum is verplicht" : undefined, }; setErrors(fieldErrs); setTouched({ @@ -313,6 +319,8 @@ export function WatcherForm({ lastName: true, email: true, phone: true, + postcode: true, + birthdate: true, }); const { errors: gErrs, valid: gValid } = validateGuests(guests); setGuestErrors(gErrs); @@ -330,6 +338,14 @@ export function WatcherForm({ lastName: validateTextField(value, true, "Achternaam"), email: validateEmail(value), phone: validatePhone(value), + postcode: + name === "postcode" && !value.trim() + ? "Postcode is verplicht" + : undefined, + birthdate: + name === "birthdate" && !value + ? "Geboortedatum is verplicht" + : undefined, }; setErrors((prev) => ({ ...prev, [name]: errMap[name] })); } @@ -345,6 +361,14 @@ export function WatcherForm({ lastName: validateTextField(value, true, "Achternaam"), email: validateEmail(value), phone: validatePhone(value), + postcode: + name === "postcode" && !value.trim() + ? "Postcode is verplicht" + : undefined, + birthdate: + name === "birthdate" && !value + ? "Geboortedatum is verplicht" + : undefined, }; setErrors((prev) => ({ ...prev, [name]: errMap[name] })); } @@ -386,6 +410,8 @@ export function WatcherForm({ lastName: data.lastName.trim(), email: data.email.trim(), phone: data.phone.trim() || undefined, + postcode: data.postcode.trim(), + birthdate: data.birthdate, registrationType: "watcher", guests: guests.map((g) => ({ firstName: g.firstName.trim(), @@ -585,6 +611,54 @@ export function WatcherForm({

+ {/* Postcode + Birthdate row */} +
+
+ + + {touched.postcode && errors.postcode && ( + + {errors.postcode} + + )} +
+
+ + + {touched.birthdate && errors.birthdate && ( + + {errors.birthdate} + + )} +
+
+ {/* Guests */} Vrijwillige Gifts - - {stats?.today ?? 0} - - - - - Nieuwe registraties vandaag - - - - - - - - Artiesten - - - {performerCount} - - - -
- {stats?.byArtForm.slice(0, 2).map((item) => ( -
- - {item.artForm || "Onbekend"} - - {item.count} -
- ))} -
-
-
- - - - - Bezoekers - - - {watcherCount} - - - -
- {totalGuestCount > 0 && ( -
- Inclusief gasten - +{totalGuestCount} -
- )} -
- Totaal aanwezig - - {totalWatcherAttendees} - -
-
- Drinkkaart - €{totalDrinkCardValue} -
-
-
-
- - - - - Vrijwillige Gifts - €{Math.round(totalGiftRevenue / 100)} @@ -833,6 +760,21 @@ function AdminPage() { handleSort("datum")}> Datum + + Postcode + + + Geboortedatum + + + Ervaring + + + 16+ + + + Opmerkingen + Link @@ -842,7 +784,7 @@ function AdminPage() { {registrationsQuery.isLoading ? ( Laden... @@ -851,7 +793,7 @@ function AdminPage() { ) : sortedRegistrations.length === 0 ? ( Geen registraties gevonden @@ -946,6 +888,34 @@ function AdminPage() { {dateLabel} + + {reg.postcode || "-"} + + + {reg.birthdate || "-"} + + + {isPerformer ? reg.experience || "-" : "-"} + + + {isPerformer ? ( + reg.isOver16 ? ( + Ja + ) : ( + Nee + ) + ) : ( + "-" + )} + + + + {reg.extraQuestions || "-"} + + {reg.managementToken ? (