"use client"; import { useEffect, useMemo, useState } from "react"; import CourseCard from "@/components/CourseCard"; import Tabs from "@/components/Tabs"; import { getAllCourses } from "@/lib/data/courseCatalog"; import { getCourseProgressPercent, progressUpdatedEventName, } from "@/lib/progress/localProgress"; import { teacherCoursesUpdatedEventName } from "@/lib/data/teacherCourses"; import { supabaseBrowser } from "@/lib/supabase/browser"; import type { Course, CourseLevel } from "@/types/course"; const levels: CourseLevel[] = ["Beginner", "Intermediate", "Advanced"]; export default function CoursesPage() { const [activeLevel, setActiveLevel] = useState("Beginner"); const [userId, setUserId] = useState("guest"); const [progressBySlug, setProgressBySlug] = useState>({}); const [courses, setCourses] = useState(() => getAllCourses()); const counts = useMemo( () => levels.reduce( (acc, level) => { acc[level] = courses.filter((course) => course.level === level).length; return acc; }, {} as Record, ), [courses], ); useEffect(() => { const loadCourses = () => { setCourses(getAllCourses()); }; loadCourses(); window.addEventListener(teacherCoursesUpdatedEventName, loadCourses); return () => window.removeEventListener(teacherCoursesUpdatedEventName, loadCourses); }, []); useEffect(() => { const client = supabaseBrowser(); if (!client) return; client.auth.getUser().then(({ data }) => { setUserId(data.user?.id ?? "guest"); }); const { data } = client.auth.onAuthStateChange((_event, session) => { setUserId(session?.user?.id ?? "guest"); }); return () => data.subscription.unsubscribe(); }, []); useEffect(() => { const load = () => { const nextProgress: Record = {}; for (const course of courses) { nextProgress[course.slug] = getCourseProgressPercent(userId, course.slug, course.lessons.length); } setProgressBySlug(nextProgress); }; load(); window.addEventListener(progressUpdatedEventName, load); window.addEventListener(teacherCoursesUpdatedEventName, load); return () => { window.removeEventListener(progressUpdatedEventName, load); window.removeEventListener(teacherCoursesUpdatedEventName, load); }; }, [courses, userId]); const filteredCourses = useMemo( () => courses.filter((course) => course.level === activeLevel), [activeLevel, courses], ); return (
{counts[activeLevel]} courses in this level
C

{activeLevel} Level Courses

{activeLevel === "Beginner" ? "Perfect for those new to English law. Build a strong foundation with fundamental concepts and terminology." : activeLevel === "Intermediate" ? "Deepen practical analysis skills with real-world drafting, contract review, and legal communication." : "Master complex legal reasoning and advanced writing for high-impact legal practice."}

{filteredCourses.map((course) => ( ))}
); }