/* eslint-disable @typescript-eslint/no-explicit-any */ /* eslint-disable @typescript-eslint/no-unused-vars */ 'use client' import React, { useState } from 'react' import AddGuestFromGuestBook from './AddGuestFromGuestBook' import EventNotesEditor from './EventNotesEditor' import ToDoList from './ToDoList' import { fetchEventTodos } from '@/lib/helper/fetchTodos' import EventHeader from './events/EventHeader' import { getDaysUntilEvent } from '@/lib/helper/getDaysUntilEvent' interface Creator { id: string email: string name: string | null role: 'COUPLE' | 'PLANNER' | 'GUEST' } interface Todo { id: string name: string complete: boolean dueDate?: string | null createdAt: string updatedAt?: string } interface EventData { id: string name: string date: Date | null location: string | null creatorId: string createdAt: string creator: Creator guests: any[] notes?: string eventGuests: any[] todos: Todo[] } interface Props { event: EventData } export default function EventInfoDisplay({ event }: Props) { const [isEditing, setIsEditing] = useState(false); const [showSearch, setShowSearch] = useState(false); const [todos, setTodos] = useState(event.todos) const eventGuests = event.eventGuests console.log(eventGuests) const [saving, setSaving] = useState(false) const [error, setError] = useState('') const [dateTime, setDateTime] = useState(() => { if (event.date) { const date = new Date(event.date); return new Date(date.getTime() - date.getTimezoneOffset() * 60000) .toISOString() .slice(0, 16); // format: "yyyy-MM-ddTHH:mm" } return ''; }); const [form, setForm] = useState({ name: event.name, date: dateTime, location: event.location || '', }) function handleChange(e: React.ChangeEvent) { const { name, value } = e.target setForm(prev => ({ ...prev, [name]: value })) } async function handleSave() { setSaving(true) setError('') try { const res = await fetch(`/api/events/${event.id}`, { method: 'PATCH', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(form), }) if (!res.ok) { const data = await res.json() setError(data.message || 'Update failed') return } setIsEditing(false) } catch (err) { setError('Something went wrong.') } finally { setSaving(false) } } async function refreshTodos() { try { const data = await fetchEventTodos(event.id) setTodos(data) } catch (err) { console.error('Failed to refresh todos:', err) } } function formatDate(date: string) { const d = new Date(date) return `${d.toLocaleDateString()} ${d.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' })}` } const attendingGuests = eventGuests.filter((g) => g.rsvp === 'YES'); const notAttendingGuests = eventGuests.filter((g) => g.rsvp === 'NO'); const pendingGuests = eventGuests.filter((g) => g.rsvp === 'PENDING'); let daysLeft: number | undefined if (event.date !== null) { daysLeft = getDaysUntilEvent(event.date); } return (
{/* */}

{event.name}

{/* Event Date */}
{isEditing ? ( setDateTime(e.target.value)} /> ) : (

{event.date ? event.date.toDateString() : 'N/A'}

)}
{/* Location */}
{isEditing ? ( ) : (

{event.location || 'N/A'}

)}
{/*

{event.creator.email}

{formatDate(event.createdAt)}

*/}

Guest Summary

Invited

{eventGuests.length}

Attending

{attendingGuests.length}

Declined

{notAttendingGuests.length}

No Response

{pendingGuests.length}

Countdown

{daysLeft !== undefined && daysLeft > 0 ? `${daysLeft} day${daysLeft !== 1 ? 's' : ''} until the event` : daysLeft === 0 ? 'Today is the big day!' : `This event happened ${daysLeft !== undefined && Math.abs(daysLeft)} day${daysLeft !== undefined && Math.abs(daysLeft) !== 1 ? 's' : ''} ago` }
{error &&

{error}

} {isEditing && (
)}

Guest List

{showSearch && }
    {eventGuests.length && eventGuests.map(guest => (
  • {guest.guestBookEntry.fName + " " + guest.guestBookEntry.lName}

  • ))}
) }