import { Badge } from '@/components/ui/badge'; import { Button } from '@/components/ui/button'; import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogTrigger } from '@/components/ui/dialog'; import { ScrollArea } from '@/components/ui/scroll-area'; import { format } from 'date-fns'; import { AlertCircle, Calendar, CheckCircle, Clock, Download, ExternalLink, FileText, Star } from 'lucide-react'; import { useState } from 'react'; import AssignmentGradeForm from './forms/assignment-grade-form'; interface Props { submission: AssignmentSubmission; } const GradeSubmissionDialog = ({ submission }: Props) => { const [open, setOpen] = useState(false); const isLate = submission.is_late; const isGraded = submission.status === 'graded'; const totalMarks = isLate ? submission.assignment?.late_total_mark || 0 : submission.assignment?.total_mark || 0; // Format date const formatDate = (dateString: string) => { return format(new Date(dateString), 'MMMM dd, yyyy, hh:mm a'); }; return (
{isGraded ? 'Review Submission' : 'Grade Submission'}
{/* Student Information */} {/*

Student Information

Name

{submission.student?.name || 'N/A'}

Email

{submission.student?.email || 'N/A'}

*/} {isLate && (

Late Submission

Maximum marks is considered as {submission.assignment?.late_total_mark}{' '} {submission.is_late ? 'for late submission' : ''}

)} {/* Assignment Information */}

Submitted At

{formatDate(submission.submitted_at)}

Assignment

{submission.assignment?.title || 'N/A'}

Total Marks

{totalMarks} {isLate && ( (Late: {submission.assignment?.late_total_mark}) )}

Attempt Number

Attempt #{submission.attempt_number}
{/* Submission Content */}

Submission Details

{/* Attachment */}

Submitted {submission.attachment_type === 'url' ? 'URL' : 'File'}:

{submission.attachment_type === 'url' ? ( {submission.attachment_path} ) : ( )}
{/* Comment */} {submission.comment && (

Student Comment:

{submission.comment}

)}
{/* Grading Form */}
); }; export default GradeSubmissionDialog;