import { format } from 'date-fns'; import { Clock, ClipboardList, Pencil, Trash2, Upload, User, } from 'lucide-react'; import { AttachmentPreviewDialog } from '@/components/attachment-preview-dialog'; import { RowActions } from '@/components/row-actions'; import { Accordion, AccordionContent, AccordionItem, AccordionTrigger, } from '@/components/ui/accordion'; import { Badge } from '@/components/ui/badge'; import { index as submissionsIndex } from '@/routes/admin/academic-classes/assignments/submissions'; import { formatAcademicTermLabel } from '@/types/academic-term'; import type { Assignment } from '@/types/assignment'; import { AssignmentStatusLabels } from '@/types/assignment'; import { deadlineTextClass, percentageOf } from './utils'; type CreateCardParams = { handleEdit: (assignment: Assignment) => void; handleDeleteClick: (assignment: Assignment) => void; handleSubmitClick: (assignment: Assignment) => void; canUpdate: boolean; canDelete: boolean; canSubmit: boolean; canViewSubmissions: boolean; }; export function createAssignmentCard(params: CreateCardParams) { const { handleEdit, handleDeleteClick, handleSubmitClick, canUpdate, canDelete, canSubmit, canViewSubmissions, } = params; return function AssignmentCard(assignment: Assignment) { const mySubmission = assignment.submissions?.[0]; const lecturerName = assignment.course_class?.lecturer?.user?.profile?.full_name ?? null; return (
{assignment.title}
{assignment.course_class && ( {assignment.course_class.course?.code ?? ''}{' '} {assignment.course_class.course?.name ?? ''} )} {lecturerName && ({assignment.description}