import { useEffect } from 'react' import { useOverlayDismiss } from '../../hooks/useOverlayDismiss' import type { CalendarEvent } from '../../api/client' import { weekdayLongNamesSun, monthLongNames } from './dates' export interface DayEvent extends CalendarEvent { calendarId: string /** Endgültige Farbe: eigene Farbe des Termins, sonst die des Kalenders. */ color: string calendarName: string startsAt: Date endsAt: Date | null } /** * Ein angeklickter Tag wird erst **geöffnet**, statt sofort einen neuen * Termin anzulegen. * * Vorher legte jeder Klick auf eine Tageszelle direkt einen neuen Termin an – * auch der Klick, mit dem man eigentlich nachsehen wollte, was an dem Tag * ansteht. Hier steht zuerst, was da ist; einen neuen Termin gibt es auf * Ansage. */ export default function DayDialog({ day, events, onPick, onCreate, onClose }: { day: Date events: DayEvent[] onPick: (ev: DayEvent) => void onCreate: () => void onClose: () => void }) { const overlay = useOverlayDismiss(onClose) useEffect(() => { function onKey(e: KeyboardEvent) { if (e.key === 'Escape') onClose() } window.addEventListener('keydown', onKey) return () => window.removeEventListener('keydown', onKey) }, [onClose]) const timeLabel = (ev: DayEvent) => { if (ev.all_day) return 'all day' const from = ev.startsAt.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' }) if (!ev.endsAt) return from const to = ev.endsAt.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' }) return `${from} – ${to}` } return (
Nichts an diesem Tag.
)} {events.map(ev => ( ))}