From 9020b214f3d17f2947cc2111bc8cd1b97475f07d Mon Sep 17 00:00:00 2001 From: renee-png Date: Sun, 19 Jul 2026 17:11:25 -0400 Subject: [PATCH] Fix empty class dropdown on Attendance for admins MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The classes query filtered by teacher_id when isAdmin was momentarily false (roles not yet loaded) and never refetched — cache key lacked isAdmin. Gate on !loading and include isAdmin in the query key. Co-Authored-By: Claude Opus 4.8 --- src/routes/_authenticated/attendance.tsx | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/routes/_authenticated/attendance.tsx b/src/routes/_authenticated/attendance.tsx index 528c8cc..ba5f7b1 100644 --- a/src/routes/_authenticated/attendance.tsx +++ b/src/routes/_authenticated/attendance.tsx @@ -14,20 +14,22 @@ export const Route = createFileRoute("/_authenticated/attendance")({ }); function AttendancePage() { - const { user, roles } = useAuth(); + const { user, roles, loading } = useAuth(); const isAdmin = roles.includes("admin"); const qc = useQueryClient(); const [date, setDate] = useState(new Date().toISOString().slice(0, 10)); const [classId, setClassId] = useState(""); const { data: classes } = useQuery({ - queryKey: ["my-classes", user?.id], + // isAdmin is in the key so the query refetches once roles resolve; gated on + // !loading so it never runs with a not-yet-known (false) admin status. + queryKey: ["my-classes", user?.id, isAdmin], queryFn: async () => { let q = supabase.from("classes").select("id, name, teacher_id"); if (!isAdmin) q = q.eq("teacher_id", user!.id); return (await q.order("name")).data ?? []; }, - enabled: !!user, + enabled: !!user && !loading, }); const { data: students } = useQuery({