import useUsers from "@/hooks/useUsers"; 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[]; isLoading: boolean; user: User; onBack: () => void; reloadAssignments: () => void; } export default function AssignmentsPage({assignments, corporateAssignments, user, groups, isLoading, onBack, reloadAssignments}: Props) { const [selectedAssignment, setSelectedAssignment] = useState(); const [isCreatingAssignment, setIsCreatingAssignment] = useState(false); const {users} = useUsers(); 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 /> ))}
); }