import { Assignment } from "@/interfaces/results"; import { CorporateUser, Group, User } from "@/interfaces/user"; import { getUserCompanyName } from "@/resources/user"; import { activeAssignmentFilter, archivedAssignmentFilter, futureAssignmentFilter, pastAssignmentFilter, startHasExpiredAssignmentFilter, } from "@/utils/assignments"; import clsx from "clsx"; import { groupBy } from "lodash"; import { useState } from "react"; import { BsArrowLeft, BsArrowRepeat, BsPlus } from "react-icons/bs"; import AssignmentCard from "../AssignmentCard"; import AssignmentCreator from "../AssignmentCreator"; import AssignmentView from "../AssignmentView"; interface Props { assignments: Assignment[]; corporateAssignments?: ({ corporate?: CorporateUser } & Assignment)[]; groups: Group[]; users: User[]; isLoading: boolean; user: User; onBack: () => void; reloadAssignments: () => void; } export default function AssignmentsPage({ assignments, corporateAssignments, user, groups, users, isLoading, onBack, reloadAssignments, }: Props) { const [selectedAssignment, setSelectedAssignment] = useState(); const [isCreatingAssignment, setIsCreatingAssignment] = useState(false); const displayAssignmentView = !!selectedAssignment && !isCreatingAssignment; const assignmentsPastExpiredStart = assignments.filter(startHasExpiredAssignmentFilter); return ( <> {displayAssignmentView && ( { setSelectedAssignment(undefined); setIsCreatingAssignment(false); reloadAssignments(); }} assignment={selectedAssignment} /> )} {/** I'll be using this is creating assingment as a workaround for a key to trigger a new rendering */} {isCreatingAssignment && ( { setIsCreatingAssignment(false); setSelectedAssignment(undefined); reloadAssignments(); }} /> )}
Back
Reload
Active Assignments Status
Total:{" "} {assignments .filter(activeAssignmentFilter) .reduce((acc, curr) => acc + curr.results.length, 0)} / {assignments .filter(activeAssignmentFilter) .reduce((acc, curr) => curr.exams.length + acc, 0)} {Object.keys( groupBy(corporateAssignments, (x) => x.corporate?.id) ).map((x) => (
{getUserCompanyName( users.find((u) => u.id === x)!, users, groups )} :{" "} {groupBy(corporateAssignments, (x) => x.corporate?.id)[ x ].reduce((acc, curr) => curr.results.length + acc, 0)} / {groupBy(corporateAssignments, (x) => x.corporate?.id)[ x ].reduce((acc, curr) => curr.exams.length + acc, 0)}
))}

Active Assignments ( {assignments.filter(activeAssignmentFilter).length})

{assignments.filter(activeAssignmentFilter).map((a) => ( setSelectedAssignment(a)} key={a.id} /> ))}

Planned Assignments ( {assignments.filter(futureAssignmentFilter).length})

setIsCreatingAssignment(true)} className="w-[250px] h-[200px] flex flex-col gap-2 items-center justify-center bg-white hover:bg-mti-purple-ultralight text-mti-purple-light hover:text-mti-purple-dark border border-mti-gray-platinum hover:drop-shadow p-4 cursor-pointer rounded-xl transition ease-in-out duration-300" > New Assignment
{assignments.filter(futureAssignmentFilter).map((a) => ( { setSelectedAssignment(a); setIsCreatingAssignment(true); }} key={a.id} /> ))}

Past Assignments ({assignments.filter(pastAssignmentFilter).length})

{assignments.filter(pastAssignmentFilter).map((a) => ( setSelectedAssignment(a)} key={a.id} allowDownload reload={reloadAssignments} allowArchive allowExcelDownload /> ))}

Assignments start expired ({assignmentsPastExpiredStart.length})

{assignments.filter(startHasExpiredAssignmentFilter).map((a) => ( setSelectedAssignment(a)} key={a.id} allowDownload reload={reloadAssignments} allowArchive allowExcelDownload /> ))}

Archived Assignments ( {assignments.filter(archivedAssignmentFilter).length})

{assignments.filter(archivedAssignmentFilter).map((a) => ( setSelectedAssignment(a)} key={a.id} allowDownload reload={reloadAssignments} allowUnarchive allowExcelDownload /> ))}
); }