"use client" import Link from "next/link" import { useState } from "react" import { useRouter } from "next/navigation" import { toast } from "sonner" import { Card, CardContent, CardHeader, CardTitle } from "@/shared/components/ui/card" import { Badge } from "@/shared/components/ui/badge" import { Button } from "@/shared/components/ui/button" import { EmptyState } from "@/shared/components/ui/empty-state" import { Input } from "@/shared/components/ui/input" import { Label } from "@/shared/components/ui/label" import { BookOpen, Building2, Inbox } from "lucide-react" import type { StudentEnrolledClass } from "@/modules/classes/types" import { joinClassByInvitationCodeAction } from "@/modules/classes/actions" export function StudentCoursesView({ classes, }: { classes: StudentEnrolledClass[] }) { const router = useRouter() const [code, setCode] = useState("") const [isWorking, setIsWorking] = useState(false) const handleJoin = async (formData: FormData) => { setIsWorking(true) try { const res = await joinClassByInvitationCodeAction(null, formData) if (res.success) { toast.success(res.message || "Joined class") setCode("") router.refresh() } else { toast.error(res.message || "Failed to join class") } } catch { toast.error("Failed to join class") } finally { setIsWorking(false) } } if (classes.length === 0) { return (
Join a class
setCode(e.target.value)} maxLength={6} required />
) } return (
Join a class
setCode(e.target.value)} maxLength={6} required />
{classes.map((c) => (
{c.name}
Grade {c.grade} {c.homeroom ? ( {c.homeroom} ) : null} {c.room ? ( {c.room} ) : null}
Enrolled
Open schedule for this class.
))}
) }