>
);
}
// ---------------------------------------------------------------------------
// Main manage page
// ---------------------------------------------------------------------------
function ManageRegistrationPage() {
const { token } = useParams({ from: "/manage/$token" });
const queryClient = useQueryClient();
const [isEditing, setIsEditing] = useState(false);
const { data, isLoading, error } = useQuery({
...orpc.getRegistrationByToken.queryOptions({ input: { token } }),
});
const cancelMutation = useMutation({
...orpc.cancelRegistration.mutationOptions(),
onSuccess: () => {
toast.success("Inschrijving geannuleerd");
queryClient.invalidateQueries({ queryKey: ["getRegistrationByToken"] });
},
onError: (err) => {
toast.error(`Annuleren mislukt: ${err.message}`);
},
});
const checkoutMutation = useMutation({
...orpc.getCheckoutUrl.mutationOptions(),
onSuccess: (result) => {
window.location.href = result.checkoutUrl;
},
onError: (err) => {
toast.error(`Betaling starten mislukt: ${err.message}`);
},
});
function handleCancel() {
if (
confirm(
"Weet je zeker dat je je inschrijving wilt annuleren? Dit kan niet ongedaan worden gemaakt.",
)
) {
cancelMutation.mutate({ token });
}
}
function handleSaved() {
queryClient.invalidateQueries({ queryKey: ["getRegistrationByToken"] });
setIsEditing(false);
}
// Loading state
if (isLoading) {
return (
Jouw inschrijving
Open Mic Night — vrijdag 18 april 2026
{/* Type badge */}
{isPerformer ? "Artiest" : "Bezoeker"}
{!isPerformer && (
— Drinkkaart €{data.drinkCardValue ?? 5}
{viewGuests.length > 0 && ` (${1 + viewGuests.length} personen)`}
)}
{/* Payment status - shown for everyone with pending/extra payment or gift */}
{(data.paymentStatus !== "paid" || (data.giftAmount ?? 0) > 0) && (
{data.paymentStatus === "paid" ? (
) : data.paymentStatus === "extra_payment_pending" ? (
) : (
)}
)}
{/* Gift display */}
{(data.giftAmount ?? 0) > 0 && (
Vrijwillige gift: €{(data.giftAmount ?? 0) / 100}
)}
{/* Registration details */}
Voornaam
{data.firstName}
Achternaam
{data.lastName}
Telefoon
{data.phone || "—"}
{isPerformer && (
Optreden
{data.artForm || "—"}
{data.experience && (
({data.experience})
)}
{data.isOver16 ? "16+ bevestigd" : "Leeftijd niet bevestigd"}
)}
{!isPerformer && viewGuests.length > 0 && (
Medebezoekers ({viewGuests.length})
{viewGuests.map((g, idx) => (
{g.firstName} {g.lastName}
{g.email && (
{g.email}
)}
{g.phone && (
{g.phone}
)}
))}
)}
{data.extraQuestions && (
Vragen of opmerkingen
{data.extraQuestions}
)}
{/* Actions */}
{/* Show pay button if there's something to pay (for watchers: drink card, for performers: gift) */}
{(data.paymentStatus === "pending" ||
data.paymentStatus === "extra_payment_pending") &&
(!isPerformer || (data.giftAmount ?? 0) > 0) && (
)}
Deze link is uniek voor jouw inschrijving. Bewaar deze pagina of de
bevestigingsmail om je gegevens later aan te passen.
);
}