"use client"; import { useEffect, useState } from "react"; import { DayPicker } from "react-day-picker"; import "react-day-picker/src/style.css"; import { de } from "date-fns/locale"; interface BlockRange { from: Date; to: Date; } export function AvailabilityCalendar({ slug }: { slug: string }) { const [blocks, setBlocks] = useState([]); const [loading, setLoading] = useState(true); useEffect(() => { let cancelled = false; (async () => { try { const res = await fetch(`/api/availability/${slug}`, { cache: "no-store" }); if (!res.ok) throw new Error(); const data = (await res.json()) as { blocks: { start: string; end: string }[] }; if (cancelled) return; setBlocks( data.blocks.map((b) => ({ from: new Date(b.start), to: new Date(b.end), })) ); } catch { if (!cancelled) setBlocks([]); } finally { if (!cancelled) setLoading(false); } })(); return () => { cancelled = true; }; }, [slug]); const today = new Date(); today.setHours(0, 0, 0, 0); return (
Verfügbarkeit

Wann darf es losgehen?

Durchgestrichene Tage sind bereits belegt. Die Belegung berücksichtigt auch Buchungen über Airbnb und Booking.com.

{loading ? (
Belegung wird geladen…
) : ( )}
ausgewählter Zeitraum belegt
); }