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 ──