import FormContainer from "@/components/FormContainer"; import Pagination from "@/components/Pagination"; import Table from "@/components/Table"; import TableSearch from "@/components/TableSearch"; import { getSupabaseClient } from "@/lib/supabase"; import { ITEM_PER_PAGE } from "@/lib/settings"; import { Tables } from "@/types/supabase"; import Image from "next/image"; import { auth } from "@clerk/nextjs/server"; type LessonList = Tables<"Lesson"> & { subject: Tables<"Subject">; class: Tables<"Class">; teacher: Tables<"Teacher">; }; const LessonListPage = async ({ searchParams, }: { searchParams: { [key: string]: string | undefined }; }) => { const { sessionClaims } = auth(); const role = (sessionClaims?.metadata as { role?: string })?.role; const columns = [ { header: "Subject Name", accessor: "name", }, { header: "Class", accessor: "class", }, { header: "Teacher", accessor: "teacher", className: "hidden md:table-cell", }, ...(role === "admin" ? [ { header: "Actions", accessor: "action", }, ] : []), ]; const renderRow = (item: LessonList) => ( {item.subject?.name || "-"} {item.class?.name || "-"} {item.teacher ? item.teacher.name + " " + item.teacher.surname : "-"}
{role === "admin" && ( <> )}
); const { page, ...queryParams } = searchParams; const p = page ? parseInt(page) : 1; const supabase = await getSupabaseClient(); // URL PARAMS CONDITION let query = supabase .from("Lesson") .select("*, subject:Subject(*), class:Class(*), teacher:Teacher(*)", { count: "exact" }); if (queryParams) { for (const [key, value] of Object.entries(queryParams)) { if (value !== undefined) { switch (key) { case "classId": query = query.eq("classId", parseInt(value)); break; case "teacherId": query = query.eq("teacherId", value); break; case "search": query = query.or(`subject.name.ilike.%${value}%,teacher.name.ilike.%${value}%,class.name.ilike.%${value}%`); break; default: break; } } } } // PAGINATION query = query.range(ITEM_PER_PAGE * (p - 1), ITEM_PER_PAGE * p - 1); const { data: rawData, count, error } = await query; if (error) { console.error("Error fetching lessons from Supabase:", error); } const data = (rawData || []) as unknown as LessonList[]; return (
{/* TOP */}

All Lessons

{role === "admin" && }
{/* LIST */} {/* PAGINATION */} ); }; export default LessonListPage;