"use client"; import { useEffect, useState } from "react"; import { api } from "@/lib/api"; import { slugify } from "@/lib/utils"; import { Plus, Pencil, Trash2, X } from "lucide-react"; interface OrganizerForm { name: string; slug: string; } export default function OrganizersPage() { const [organizers, setOrganizers] = useState([]); const [loading, setLoading] = useState(true); const [error, setError] = useState(""); const [showForm, setShowForm] = useState(false); const [editingId, setEditingId] = useState(null); const [form, setForm] = useState({ name: "", slug: "" }); const [saving, setSaving] = useState(false); const loadOrganizers = async () => { try { const data = await api.getOrganizers(); setOrganizers(data); } catch (err: any) { setError(err.message); } finally { setLoading(false); } }; useEffect(() => { loadOrganizers(); }, []); const openCreate = () => { setForm({ name: "", slug: "" }); setEditingId(null); setShowForm(true); }; const openEdit = (org: any) => { setForm({ name: org.name, slug: org.slug }); setEditingId(org.id); setShowForm(true); }; const handleNameChange = (name: string) => { setForm({ name, slug: editingId ? form.slug : slugify(name) }); }; const handleSave = async () => { if (!form.name.trim() || !form.slug.trim()) return; setSaving(true); setError(""); try { if (editingId) { await api.updateOrganizer(editingId, form); } else { await api.createOrganizer(form); } setShowForm(false); setEditingId(null); await loadOrganizers(); } catch (err: any) { setError(err.message); } finally { setSaving(false); } }; const handleDelete = async (id: string) => { if (!confirm("Delete this organizer?")) return; try { await api.deleteOrganizer(id); await loadOrganizers(); } catch (err: any) { setError(err.message); } }; if (loading) { return (
Loading organizers...
); } return (

Organizers

Organizers appear on public event cards and detail pages. The default is Belgian Bitcoin Embassy; add other Belgian meetup groups so their events can be listed on this site.

{error &&

{error}

} {showForm && (

{editingId ? "Edit Organizer" : "New Organizer"}

handleNameChange(e.target.value)} className="bg-surface-container-highest text-on-surface rounded-lg px-4 py-3 w-full focus:outline-none focus:ring-1 focus:ring-primary/40" /> setForm({ ...form, slug: e.target.value })} className="bg-surface-container-highest text-on-surface rounded-lg px-4 py-3 w-full focus:outline-none focus:ring-1 focus:ring-primary/40" />
)}
{organizers.length === 0 ? (

No organizers found.

) : ( organizers.map((org) => (

{org.name}

/events/organizer/{org.slug}

)) )}
); }