import { useState } from 'react' import { createFileRoute, Link } from '@tanstack/react-router' import { SiteFooter } from '#/components/site-footer' import { SiteHeader } from '#/components/site-header' import { cancelReservationByToken, getReservationByCancelToken } from '#/lib/reservations' export const Route = createFileRoute('/stornieren/$token')({ component: CancelReservationPage, loader: async ({ params }) => { const reservation = await getReservationByCancelToken({ data: { token: params.token } }) return { reservation } }, }) const dateTimeFormatter = new Intl.DateTimeFormat('de-DE', { dateStyle: 'full', timeStyle: 'short', }) function CancelReservationPage() { const { token } = Route.useParams() const { reservation } = Route.useLoaderData() const [isCancelled, setIsCancelled] = useState(false) const [isSubmitting, setIsSubmitting] = useState(false) const [error, setError] = useState(null) async function handleCancel() { setError(null) setIsSubmitting(true) try { await cancelReservationByToken({ data: { token } }) setIsCancelled(true) } catch (err) { setError(err instanceof Error ? err.message : 'Etwas ist schiefgelaufen') } finally { setIsSubmitting(false) } } return ( <>
Reservierung verwalten

Reservierung stornieren

{!reservation ? (

Diese Reservierung wurde nicht gefunden oder ist bereits storniert.{' '} Zurück zur Startseite

) : isCancelled ? (

Ihre Reservierung wurde storniert. Wir haben Ihnen eine Bestätigung per E-Mail gesendet. Zurück zur Startseite

) : (
  • Tisch {reservation.tableName}
  • Datum & Uhrzeit {dateTimeFormatter.format(new Date(reservation.reservationTime))}
  • Personen {reservation.partySize}
{error &&

{error}

}
)}
) }