import Link from "next/link" import { PenTool } from "lucide-react" import { getLocale, getTranslations } from "next-intl/server" 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 { EmptyState } from "@/shared/components/ui/empty-state" import { StatusBadge } from "@/shared/components/ui/status-badge" import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "@/shared/components/ui/table" import { formatDate, cn } from "@/shared/lib/utils" import { getActionLabelKey, getActionVariant, getDueUrgency } from "@/modules/dashboard/lib/dashboard-utils" import type { StudentHomeworkAssignmentListItem } from "@/modules/homework/types" import { STUDENT_HOMEWORK_PROGRESS_VARIANT, STUDENT_HOMEWORK_PROGRESS_LABEL, } from "@/modules/homework/types" export async function StudentUpcomingAssignmentsCard({ upcomingAssignments }: { upcomingAssignments: StudentHomeworkAssignmentListItem[] }) { const t = await getTranslations("dashboard") const locale = await getLocale() const hasAssignments = upcomingAssignments.length > 0 const now = new Date() return ( {t("sections.upcomingAssignments")} {!hasAssignments ? ( ) : (
{t("table.title")} {t("table.status")} {t("table.due")} {t("table.score")} {t("table.action")} {upcomingAssignments.map((a) => { const urgency = getDueUrgency(a.dueAt, now) const isGraded = a.progressStatus === "graded" return (
{a.title} {!isGraded && urgency === "overdue" && ( {t("badge.late")} )}
{a.dueAt ? formatDate(a.dueAt, locale) : "-"} {a.latestScore ?? "-"}
) })}
)}
) }