"use client"; import { useState } from "react"; import { Dialog, DialogContent, DialogHeader, DialogTitle, } from "@/components/ui/dialog"; import { Button } from "@/components/ui/button"; import { Badge } from "@/components/ui/badge"; import { Calendar, Clock, MapPin, ExternalLink, FileText, X } from "lucide-react"; import { format, parseISO } from "date-fns"; import { cn } from "@/lib/utils"; import { siteUrls } from "@/lib/config/sites"; interface CalendarEvent { id: string; summary: string; description?: string; start: { dateTime?: string; date?: string; }; end: { dateTime?: string; date?: string; }; location?: string; calendarId: string; calendarName: string; htmlLink?: string; } interface EventDetailModalProps { event: CalendarEvent | null; isOpen: boolean; onClose: () => void; } function getEventDate(event: { start: { dateTime?: string; date?: string } }): Date { if (event.start.dateTime) { return parseISO(event.start.dateTime); } if (event.start.date) { return parseISO(event.start.date); } return new Date(); } function getEventEndDate(event: { end: { dateTime?: string; date?: string } }): Date | null { if (event.end.dateTime) { return parseISO(event.end.dateTime); } if (event.end.date) { return parseISO(event.end.date); } return null; } function isAllDayEvent(event: { start: { dateTime?: string; date?: string } }): boolean { return !!event.start.date && !event.start.dateTime; } function getCalendarColor(calendarName: string): string { const colors: Record = { personal: "bg-pink-500 text-white", work: "bg-blue-500 text-white", health: "bg-green-500 text-white", social: "bg-purple-500 text-white", family: "bg-yellow-500 text-black", task: "bg-orange-500 text-white", primary: "bg-blue-600 text-white", }; const lower = calendarName.toLowerCase(); for (const [key, color] of Object.entries(colors)) { if (lower.includes(key)) return color; } return "bg-muted text-muted-foreground"; } function formatEventTime(event: CalendarEvent): string { if (isAllDayEvent(event)) { return "All day"; } const start = getEventDate(event); const end = getEventEndDate(event); if (end) { return `${format(start, "h:mm a")} - ${format(end, "h:mm a")}`; } return format(start, "h:mm a"); } function formatEventDate(event: CalendarEvent): string { const date = getEventDate(event); return format(date, "EEEE, MMMM d, yyyy"); } export function EventDetailModal({ event, isOpen, onClose }: EventDetailModalProps) { if (!event) return null; const eventUrl = event.htmlLink || `${siteUrls.googleCalendar}/calendar/event?eid=${btoa(event.id)}`; return (
{event.calendarName}
{event.summary}
{/* Date and Time */}

{formatEventDate(event)}

{formatEventTime(event)}

{/* Location */} {event.location && (

Location

{event.location}

)} {/* Description */} {event.description && (

Description

{event.description}
)} {/* Actions */}
); }