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 */}
{/* LIST */}
{/* PAGINATION */}
);
};
export default LessonListPage;