diff --git a/src/app/page.tsx b/src/app/page.tsx index 4803dc7..a832e3e 100644 --- a/src/app/page.tsx +++ b/src/app/page.tsx @@ -2,127 +2,18 @@ import { useEffect, useState } from 'react' import { nanoid } from 'nanoid' -import { Button } from '@/components/ui/button' -import { Dialog, DialogContent, DialogFooter, DialogHeader, DialogTitle } from '@/components/ui/dialog' -import { Input } from '@/components/ui/input' -import { Card, CardHeader, CardContent } from '@/components/ui/card' -import { Badge } from '@/components/ui/badge' -import { LucideMapPin, Clock, MoreHorizontal, Calendar1Icon } from 'lucide-react' -import { DropdownMenu, DropdownMenuContent, DropdownMenuTrigger, DropdownMenuItem } from '@/components/ui/dropdown-menu' -import { RecurrencePicker } from '@/components/recurrence-picker' -import { IcsFilePicker } from '@/components/ics-file-picker' +import { useSession } from 'next-auth/react' +import { toast } from 'sonner' import { saveEvent as addEvent, deleteEvent, getEvents as getAllEvents, clearEvents, updateEvent } from '@/lib/events-db' import { parseICS, generateICS } from '@/lib/ical' import type { CalendarEvent } from '@/lib/types' -import { Textarea } from '@/components/ui/textarea' -import { useSession } from 'next-auth/react' -import { toast } from 'sonner' -// Individual event card component -const EventCard = ({ event, onEdit, onDelete }: { event: CalendarEvent, onEdit: (event: CalendarEvent) => void, onDelete: (eventId: string) => void }) => { - const formatDateTime = (dateStr: string, allDay: boolean | undefined) => { - return allDay - ? new Date(dateStr).toLocaleDateString() - : new Date(dateStr).toLocaleString() - } - - const handleEdit = () => { - onEdit({ - id: event.id, - title: event.title, - description: event.description || '', - location: event.location || '', - url: event.url || '', - start: event.start, - end: event.end || '', - allDay: event.allDay || false - }) - } - - return ( - - -
-
-

- {event.title} -

- {event.recurrenceRule && ( - - Repeats: {event.recurrenceRule} - - )} - {event.description && ( -

- {event.description} -

- )} -
- - - - - - - Edit event - - onDelete(event.id)} - className="text-destructive" - > - Delete event - - - -
-
- - -
-
- - {formatDateTime(event.start, event.allDay)} -
- - {event.location && ( -
- - {event.location} -
- )} -
-
-
- ) -} - -const EventsList = ({ events, onEdit, onDelete }: { events: CalendarEvent[], onEdit: (event: CalendarEvent) => void, onDelete: (eventId: string) => void }) => { - if (events.length === 0) { - - return (
- -

No events yet

-

Create your first event to get started

-
) - } - - return ( -
- {events.map(event => ( - - ))} -
- ) -} +import { AIToolbar } from '@/components/ai-toolbar' +import { EventActionsToolbar } from '@/components/event-actions-toolbar' +import { EventsList } from '@/components/events-list' +import { EventDialog } from '@/components/event-dialog' +import { DragDropContainer } from '@/components/drag-drop-container' export default function HomePage() { const [events, setEvents] = useState([]) @@ -164,6 +55,7 @@ export default function HomePage() { setEnd('') setAllDay(false) setEditingId(null) + setRecurrenceRule(undefined) } const handleSave = async () => { @@ -226,22 +118,6 @@ export default function HomePage() { URL.revokeObjectURL(url) } - // Drag-and-drop - const handleDragOver = (e: React.DragEvent) => { e.preventDefault(); setIsDragOver(true) } - const handleDragLeave = (e: React.DragEvent) => { e.preventDefault(); setIsDragOver(false) } - const handleDrop = (e: React.DragEvent) => { - e.preventDefault() - setIsDragOver(false) - if (e.dataTransfer.files?.length) { - const file = e.dataTransfer.files[0] - if (file.name.endsWith('.ics')) { - handleImport(file) - } else { - toast.warning('Please drop an .ics file') - } - } - } - // AI Create Event const handleAiCreate = async () => { if (!aiPrompt.trim()) return @@ -360,130 +236,74 @@ export default function HomePage() { } } + const handleEdit = (eventData: CalendarEvent) => { + setTitle(eventData.title) + setDescription(eventData.description || "") + setLocation(eventData.location || "") + setUrl(eventData.url || "") + setStart(eventData.start) + setEnd(eventData.end || "") + setAllDay(eventData.allDay || false) + setEditingId(eventData.id) + setRecurrenceRule(eventData.recurrenceRule) + setDialogOpen(true) + } + return ( -
- {/* AI Toolbar */} - {status === "loading" ?
Loading...
:
- {session?.user ? ( -
-
-