import { useEffect, useState } from 'react' import { apiFetch } from '@core/lib/api' interface Person { id: string email: string first_name?: string last_name?: string account_id?: string created_at: string } export default function ContactsPage() { const [people, setPeople] = useState([]) const [loading, setLoading] = useState(true) const [search, setSearch] = useState('') useEffect(() => { apiFetch('/api/admin-data?action=list&entity=people&limit=200') .then(r => r.json()) .then(json => setPeople(Array.isArray(json?.data) ? json.data : json || [])) .catch(() => setPeople([])) .finally(() => setLoading(false)) }, []) const filtered = people.filter(p => { const q = search.toLowerCase() return !q || p.email.toLowerCase().includes(q) || (p.first_name || '').toLowerCase().includes(q) || (p.last_name || '').toLowerCase().includes(q) }) return (

Contacts

{people.length} contacts

setSearch(e.target.value)} placeholder="Search contacts…" className="w-72 border border-slate-200 rounded-lg px-3 py-2 text-sm focus:outline-none focus:ring-2 focus:ring-blue-500" />
{loading ? (
Loading contacts…
) : ( {filtered.length === 0 ? ( ) : filtered.map(person => ( ))}
Name Email Joined
{search ? 'No contacts match your search.' : 'No contacts yet.'}
{[person.first_name, person.last_name].filter(Boolean).join(' ') || '—'} {person.email} {new Date(person.created_at).toLocaleDateString()}
)}
) }