import Link from "next/link" import { EmptyState } from "@/shared/components/ui/empty-state" import { Badge } from "@/shared/components/ui/badge" import { Button } from "@/shared/components/ui/button" import { Card, CardContent, CardHeader, CardTitle } from "@/shared/components/ui/card" import { formatDate } from "@/shared/lib/utils" import { getStudentHomeworkAssignments } from "@/modules/homework/data-access" import { getCurrentStudentUser } from "@/modules/users/data-access" import { Inbox } from "lucide-react" export const dynamic = "force-dynamic" const getStatusVariant = (status: string): "default" | "secondary" | "outline" => { if (status === "graded") return "default" if (status === "submitted") return "secondary" if (status === "in_progress") return "secondary" return "outline" } const getStatusLabel = (status: string) => { if (status === "graded") return "Graded" if (status === "submitted") return "Submitted" if (status === "in_progress") return "In progress" return "Not started" } const getActionLabel = (status: string) => { if (status === "graded") return "Review" if (status === "submitted") return "View" if (status === "in_progress") return "Continue" return "Start" } const getActionVariant = (status: string): "default" | "secondary" | "outline" => { if (status === "graded" || status === "submitted") return "outline" return "default" } const isAnswered = (status: string) => status === "submitted" || status === "graded" export default async function StudentAssignmentsPage() { const student = await getCurrentStudentUser() if (!student) { return (
) } const assignments = await getStudentHomeworkAssignments(student.id) const hasAssignments = assignments.length > 0 const assignmentsBySubject = assignments.reduce((acc, assignment) => { const subject = assignment.subjectName?.trim() || "Other" const existing = acc.get(subject) if (existing) { existing.push(assignment) } else { acc.set(subject, [assignment]) } return acc }, new Map()) const subjectEntries = Array.from(assignmentsBySubject.entries()).sort((a, b) => a[0].localeCompare(b[0])) return (
{!hasAssignments ? ( ) : (
{subjectEntries.map(([subject, items]) => { const answeredItems = items.filter((a) => isAnswered(a.progressStatus)) const unansweredItems = items.filter((a) => !isAnswered(a.progressStatus)) return (
{subject}
{unansweredItems.length > 0 && (
未答题
{unansweredItems.map((a) => (
{a.title} {getStatusLabel(a.progressStatus)}
Due {a.dueAt ? formatDate(a.dueAt) : "-"} Attempts {a.attemptsUsed}/{a.maxAttempts}
Score
{a.latestScore ?? "-"}
))}
)} {answeredItems.length > 0 && (
已答题
{answeredItems.map((a) => (
{a.title} {getStatusLabel(a.progressStatus)}
Due {a.dueAt ? formatDate(a.dueAt) : "-"} Attempts {a.attemptsUsed}/{a.maxAttempts}
Score
{a.latestScore ?? "-"}
))}
)}
)})}
)}
) }