import { Badge } from '@/components/ui/badge'; import { ColumnDef } from '@tanstack/react-table'; import { format } from 'date-fns'; import { AlertCircle, Clock } from 'lucide-react'; import AssignmentDialog from './assignment-dialog'; // Funktion zum Formatieren des Datums const formatDate = (dateString: string | undefined) => { if (!dateString) return 'k.A.'; const date = new Date(dateString); return format(date, 'MMMM dd, yyyy, hh:mm a'); }; // Funktion zum Prüfen, ob die Frist abgelaufen ist const isDeadlinePassed = (deadline: string) => { if (!deadline) return false; return new Date() > new Date(deadline); }; // Funktion, um den Abgabestatus zu ermitteln const getSubmissionStatus = (assignment: CourseAssignment) => { if (!assignment.submissions || assignment.submissions.length === 0) { return { status: 'not_submitted', label: 'Nicht eingereicht', variant: 'secondary' as const }; } const latestSubmission = assignment.submissions[0]; if (latestSubmission.status === 'graded') { return { status: 'graded', label: 'Bewertet', variant: 'default' as const }; } else if (latestSubmission.is_late) { return { status: 'late', label: 'Verspätete Abgabe', variant: 'destructive' as const }; } else { return { status: 'submitted', label: 'Eingereicht', variant: 'default' as const }; } }; export const AssignmentColumns: ColumnDef[] = [ { accessorKey: 'title', header: 'Titel', cell: ({ row }) => { const assignment = row.original; return (

{assignment.title}

Gesamtpunktzahl: {assignment.total_mark} Bestehenspunktzahl: {assignment.pass_mark}
); }, }, { accessorKey: 'deadline', header: 'Frist', cell: ({ row }) => { const assignment = row.original; const deadlinePassed = isDeadlinePassed(assignment.deadline); return (
{deadlinePassed ? : } {formatDate(assignment.deadline)}
); }, }, { accessorKey: 'marks_obtained', header: () =>
Erhaltene Punkte
, cell: ({ row }) => { const assignment = row.original; const hasSubmission = assignment.submissions && assignment.submissions.length > 0; const latestSubmission = hasSubmission ? assignment.submissions[0] : null; const isGraded = latestSubmission?.status === 'graded'; const isLate = latestSubmission?.is_late; // Determine total marks based on late submission const totalMarks = isLate ? assignment.late_total_mark || 0 : assignment.total_mark || 0; return (
{isGraded ? (

{latestSubmission?.marks_obtained} / {totalMarks}

{isLate &&

(Verspätet: Max {latestSubmission?.assignment?.late_total_mark})

}
) : (

Nicht bewertet

Max: {totalMarks}

)}
); }, }, { accessorKey: 'status', header: 'Status', cell: ({ row }) => { const assignment = row.original; const submissionStatus = getSubmissionStatus(assignment); return (
{submissionStatus.label}
); }, }, { id: 'actions', header: () =>
Aktion
, cell: ({ row }) => { const assignment = row.original; return (
); }, }, ];