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 && ( {lecturerName} )}
, show: canSubmit && assignment.status === 'open', onClick: () => handleSubmitClick(assignment), }, { label: 'Pengumpulan', icon: ( ), show: canViewSubmissions, href: submissionsIndex.url(assignment.id), }, { label: 'Edit', icon: , show: canUpdate, onClick: () => handleEdit(assignment), }, { label: 'Hapus', icon: ( ), show: canDelete, onClick: () => handleDeleteClick(assignment), }, ]} />
{AssignmentStatusLabels[assignment.status]} {assignment.course_class?.academic_term && ( {formatAcademicTermLabel( assignment.course_class.academic_term, )} )}
{format(new Date(assignment.deadline), 'd MMM yyyy, HH:mm')} {assignment.attachment_url && assignment.attachment_name ? (
) : null}
{canSubmit ? ( {mySubmission?.status === 'submitted' ? 'Sudah Mengumpulkan' : 'Belum Mengumpulkan'} ) : ( <> {assignment.submissions_count.toLocaleString( 'id-ID', )}{' '} /{' '} {( assignment.course_class ?.enrollments_count ?? 0 ).toLocaleString('id-ID')}{' '} Pengumpulan ( {percentageOf( assignment.submissions_count, assignment.course_class ?.enrollments_count ?? 0, )} %) {assignment.graded_submissions_count.toLocaleString( 'id-ID', )}{' '} /{' '} {assignment.submissions_count.toLocaleString( 'id-ID', )}{' '} Dinilai ( {percentageOf( assignment.graded_submissions_count, assignment.submissions_count, )} %) )}
{assignment.description && ( Deskripsi

{assignment.description}

)}
); }; }