import { useEffect, useState } from 'react'; import { api, type BusinessList, type BusinessStatus } from '../api.js'; const TABS: { status: BusinessStatus; label: string }[] = [ { status: 'ACTIVE', label: 'Active' }, { status: 'SOLD', label: 'Sold' }, { status: 'INACTIVE', label: 'Inactive' }, ]; export default function Businesses({ onOpen }: { onOpen: (id: string) => void }) { const [tab, setTab] = useState('ACTIVE'); const [search, setSearch] = useState(''); const [data, setData] = useState(null); const [error, setError] = useState(null); const [scanning, setScanning] = useState(false); const [scanMsg, setScanMsg] = useState(null); const [reload, setReload] = useState(0); useEffect(() => { let cancelled = false; api .businesses(tab, search) .then((res) => { if (!cancelled) { setData(res); setError(null); } }) .catch((err: Error) => !cancelled && setError(err.message)); return () => { cancelled = true; }; }, [tab, search, reload]); async function scan() { setScanning(true); setScanMsg(null); try { const res = await api.scan(); setScanMsg( `Scanned ${res.scanned} · inserted ${res.inserted} · updated ${res.updated} · missing ${res.missing}`, ); setReload((n) => n + 1); setTimeout(() => setScanMsg(null), 8000); } catch (err) { setScanMsg((err as Error).message); } finally { setScanning(false); } } return (
{TABS.map((t) => ( ))}
setSearch(e.target.value)} placeholder="Search name…" className="w-56 rounded border border-gray-300 px-2 py-1.5 text-sm" />
{scanMsg &&

{scanMsg}

} {error &&

{error}

} {data?.businesses.map((b) => ( onOpen(b.id)} className="cursor-pointer border-b border-gray-100 hover:bg-gray-50" > ))} {data && data.businesses.length === 0 && ( )}
Name Status
{b.name} {b.status}
No businesses.
); }