import { useState } from 'react'; import { X } from 'lucide-react'; import type { Calendar, Campaign } from '@/lib/schemas'; import { calendarRepo } from '@/lib/db/repositories'; import { newId } from '@/lib/ids'; import { useCalendar } from './hooks'; import { Page, PageHeader, RequireCampaign } from '@/components/ui/Page'; import { Button } from '@/components/ui/Button'; import { Input } from '@/components/ui/Input'; export function CalendarPage() { return {(c) => }; } function CalendarView({ campaign }: { campaign: Campaign }) { const stored = useCalendar(campaign.id); const [eventTitle, setEventTitle] = useState(''); // The row is created on first save; until then we work with an in-memory default. const calendar: Calendar = stored ?? { campaignId: campaign.id, currentDay: 0, events: [] }; const save = (next: Calendar) => void calendarRepo.save(next); const advance = (delta: number) => save({ ...calendar, currentDay: calendar.currentDay + delta }); const addEvent = () => { if (eventTitle.trim() === '') return; save({ ...calendar, events: [...calendar.events, { id: newId(), day: calendar.currentDay, title: eventTitle.trim() }] }); setEventTitle(''); }; const upcoming = [...calendar.events].sort((a, b) => a.day - b.day); return (
Day
{calendar.currentDay}
setEventTitle(e.target.value)} onKeyDown={(e) => e.key === 'Enter' && addEvent()} placeholder={`Add event on day ${calendar.currentDay}…`} aria-label="Event title" />
{upcoming.length === 0 ? (

No events yet.

) : ( )}
); }