"use client" import { useState, useEffect } from "react" import { Card, CardContent, CardHeader, CardTitle, CardDescription } from "@/components/ui/card" import { Button } from "@/components/ui/button" import { Input } from "@/components/ui/input" import { Label } from "@/components/ui/label" import { Textarea } from "@/components/ui/textarea" import { Badge } from "@/components/ui/badge" import { Dialog, DialogHeader, DialogTitle } from "@/components/ui/dialog" import { formatPence } from "@/lib/utils" import { Plus, QrCode, Calendar, MapPin, Target } from "lucide-react" import Link from "next/link" interface EventSummary { id: string name: string slug: string eventDate: string | null location: string | null goalAmount: number | null status: string pledgeCount: number qrSourceCount: number totalPledged: number totalCollected: number } export default function EventsPage() { const [events, setEvents] = useState([]) // eslint-disable-next-line @typescript-eslint/no-unused-vars const [loading, setLoading] = useState(true) const [showCreate, setShowCreate] = useState(false) useEffect(() => { fetch("/api/events", { headers: { "x-org-id": "demo" } }) .then((r) => r.json()) .then((data) => { if (Array.isArray(data)) setEvents(data) }) .catch(() => {}) .finally(() => setLoading(false)) }, []) const [creating, setCreating] = useState(false) const [form, setForm] = useState({ name: "", description: "", location: "", eventDate: "", goalAmount: "" }) const handleCreate = async () => { setCreating(true) try { const res = await fetch("/api/events", { method: "POST", headers: { "Content-Type": "application/json", "x-org-id": "demo" }, body: JSON.stringify({ ...form, goalAmount: form.goalAmount ? Math.round(parseFloat(form.goalAmount) * 100) : undefined, eventDate: form.eventDate ? new Date(form.eventDate).toISOString() : undefined, }), }) if (res.ok) { const event = await res.json() setEvents((prev) => [{ ...event, pledgeCount: 0, qrSourceCount: 0, totalPledged: 0, totalCollected: 0 }, ...prev]) setShowCreate(false) setForm({ name: "", description: "", location: "", eventDate: "", goalAmount: "" }) } } catch { // handle error } setCreating(false) } return (

Events

Manage your fundraising events and QR codes

{/* Event cards */}
{events.map((event) => { const progress = event.goalAmount ? Math.round((event.totalPledged / event.goalAmount) * 100) : 0 return (
{event.name} {event.eventDate && ( {new Date(event.eventDate).toLocaleDateString("en-GB")} )} {event.location && ( {event.location} )}
{event.status}

{event.pledgeCount}

Pledges

{formatPence(event.totalPledged)}

Pledged

{formatPence(event.totalCollected)}

Collected

{event.goalAmount && (
{progress}% of goal {formatPence(event.goalAmount)}
)}
) })}
{/* Create dialog */} Create Event
setForm((f) => ({ ...f, name: e.target.value }))} />