diff --git a/apps/web/src/pages/Staff.tsx b/apps/web/src/pages/Staff.tsx index a521e1c..f338338 100644 --- a/apps/web/src/pages/Staff.tsx +++ b/apps/web/src/pages/Staff.tsx @@ -75,8 +75,19 @@ export function StaffPage() { } async function toggleActive(s: Staff) { - await fetch(`/api/staff/${s.id}`, { method: "PATCH", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ active: !s.active }) }); - await load(); + setTogglingId(s.id); + setToggleError(null); + try { + const res = await fetch(`/api/staff/${s.id}`, { method: "PATCH", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ active: !s.active }) }); + if (!res.ok) { + const err = (await res.json()) as { error?: string }; + setToggleError(err.error ?? `HTTP ${res.status}`); + return; + } + await load(); + } finally { + setTogglingId(null); + } } async function toggleSuperUser(s: Staff) { @@ -137,34 +148,83 @@ export function StaffPage() { {s.email} {s.role} - {s.isSuperUser ? ( - - Super User - + {currentUser?.isSuperUser ? ( + ) : ( - + s.isSuperUser ? ( + Super User + ) : ( + + ) )} - - {s.active ? "Active" : "Inactive"} - + - {currentUser?.isSuperUser && ( - <> - - - )} - - + ))} diff --git a/packages/db/src/seed.ts b/packages/db/src/seed.ts index 28b6096..82b43d4 100644 --- a/packages/db/src/seed.ts +++ b/packages/db/src/seed.ts @@ -430,7 +430,8 @@ async function seed() { } console.log(`✓ Created ${allStaff.length} staff (1 manager, 1 receptionist, 3 groomers, 3 bathers)`); - // Truncate downstream tables before services dedup to avoid FK violation + // Truncate downstream tables before services upsert — clears stale appointments + // from prior seed runs so the FK constraint on service_id is never violated await db.execute(sql`TRUNCATE appointments, invoices, invoice_line_items, invoice_tip_splits, grooming_visit_logs CASCADE`); // ── Services ──