import { useSignal } from '@preact/signals'; import { useEffect } from 'preact/hooks'; import { Calendar, CalendarEvent } from '/lib/types.ts'; export type NewCalendarEvent = Pick< CalendarEvent, 'id' | 'calendar_id' | 'title' | 'start_date' | 'end_date' | 'is_all_day' >; interface AddEventModalProps { isOpen: boolean; initialStartDate?: Date; initiallyAllDay?: boolean; calendars: Pick[]; onClickSave: (newEvent: NewCalendarEvent) => 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.setMinutes(0); startDate.setSeconds(0); startDate.setMilliseconds(0); const endDate = new Date(startDate); endDate.setHours(startDate.getHours() + 1); if (initiallyAllDay) { startDate.setHours(9); endDate.setHours(18); } newEvent.value = { id: 'new', title: '', calendar_id: calendars[0]!.id, start_date: startDate, end_date: endDate, is_all_day: initiallyAllDay || false, }; } }, [isOpen]); return ( <>

New Event

newEvent.value = { ...newEvent.value!, title: event.currentTarget.value }} placeholder='Dentist' />
calendar.id === newEvent.value?.calendar_id)?.color } rounded-full`} title={calendars.find((calendar) => calendar.id === newEvent.value?.calendar_id)?.color} >
newEvent.value = { ...newEvent.value!, start_date: new Date(event.currentTarget.value) }} />
newEvent.value = { ...newEvent.value!, end_date: new Date(event.currentTarget.value) }} />
newEvent.value = { ...newEvent.value!, is_all_day: event.currentTarget.checked }} />
); }