import { useSignal } from '@preact/signals'; import { useEffect } from 'preact/hooks'; import { Calendar, CalendarEvent } from '/lib/models/calendar.ts'; interface AddEventModalProps { isOpen: boolean; initialStartDate?: Date; initiallyAllDay?: boolean; calendars: Calendar[]; onClickSave: (newEvent: CalendarEvent) => Promise; onClose: () => void; } export default function AddEventModal( { isOpen, initialStartDate, initiallyAllDay, calendars, onClickSave, onClose }: AddEventModalProps, ) { const newEvent = useSignal(null); useEffect(() => { if (!isOpen) { newEvent.value = null; } else { const startDate = new Date(initialStartDate || new Date()); startDate.setUTCMinutes(0); startDate.setUTCSeconds(0); startDate.setUTCMilliseconds(0); const endDate = new Date(startDate); endDate.setUTCHours(startDate.getUTCHours() + 1); if (initiallyAllDay) { startDate.setUTCHours(9); endDate.setUTCHours(18); } newEvent.value = { uid: 'new', url: '', title: '', calendarId: calendars[0]!.uid!, startDate: startDate, endDate: endDate, isAllDay: initiallyAllDay || false, organizerEmail: '', transparency: 'opaque', }; } }, [isOpen]); return ( <>

New Event

newEvent.value = { ...newEvent.value!, title: event.currentTarget.value }} placeholder='Dentist' />
calendar.uid === newEvent.value?.calendarId) ?.calendarColor, }} title={calendars.find((calendar) => calendar.uid === newEvent.value?.calendarId)?.calendarColor} >
newEvent.value = { ...newEvent.value!, startDate: new Date(event.currentTarget.value) }} />
newEvent.value = { ...newEvent.value!, endDate: new Date(event.currentTarget.value) }} />
newEvent.value = { ...newEvent.value!, isAllDay: event.currentTarget.checked }} />
); }