import { useCallback, useEffect, useState, type FormEvent } from "react"; import { api } from "../lib/api"; type Driver = { id: number; first_name: string; last_name: string; profile_image_url: string | null; car_image_url: string | null; car_seats: number; rating: string; service: string; online: boolean; car_model: string | null; total_rides: number; revenue: number; }; const EMPTY = { first_name: "", last_name: "", profile_image_url: "", car_image_url: "", car_seats: 4, rating: 4.5, }; export default function Drivers() { const [drivers, setDrivers] = useState([]); const [error, setError] = useState(null); const [editing, setEditing] = useState(null); const load = useCallback(async () => { try { const res = await api<{ data: Driver[] }>("/admin/drivers"); setDrivers(res.data); setError(null); } catch (e) { setError((e as Error).message); } }, []); useEffect(() => { load(); }, [load]); const remove = async (id: number) => { if (!confirm("Delete this driver?")) return; try { await api(`/admin/drivers/${id}`, { method: "DELETE" }); await load(); } catch (e) { setError((e as Error).message); } }; return ( <>

Drivers & fleet

{error &&
{error}
} {drivers.map((d) => ( ))}
ID Name Service Seats Rating Online Rides Revenue
{d.id} {d.first_name} {d.last_name} {d.service} {d.car_seats} {d.rating} {d.online ? "● online" : "○ off"} {d.total_rides} {d.revenue.toLocaleString()}
{editing && ( setEditing(null)} onSaved={() => { setEditing(null); load(); }} /> )} ); } function DriverForm({ initial, onClose, onSaved, }: { initial: Driver | null; onClose: () => void; onSaved: () => void; }) { const [form, setForm] = useState( initial ? { first_name: initial.first_name, last_name: initial.last_name, profile_image_url: initial.profile_image_url ?? "", car_image_url: initial.car_image_url ?? "", car_seats: initial.car_seats, rating: Number(initial.rating), } : { ...EMPTY }, ); const [error, setError] = useState(null); const [busy, setBusy] = useState(false); const set = (key: keyof typeof form) => (e: { target: { value: string } }) => setForm((f) => ({ ...f, [key]: key === "car_seats" || key === "rating" ? Number(e.target.value) : e.target.value, })); const submit = async (e: FormEvent) => { e.preventDefault(); setBusy(true); try { await api(initial ? `/admin/drivers/${initial.id}` : "/admin/drivers", { method: initial ? "PATCH" : "POST", body: JSON.stringify(form), }); onSaved(); } catch (err) { setError((err as Error).message); } finally { setBusy(false); } }; return (
e.stopPropagation()} onSubmit={submit}>

{initial ? `Edit driver #${initial.id}` : "New driver"}

{error &&
{error}
}
); }