import Layout from "@/components/High/Layout"; import AssignmentCard from "@/dashboards/AssignmentCard"; import AssignmentView from "@/dashboards/AssignmentView"; import {Assignment} from "@/interfaces/results"; import {CorporateUser, Group, User} from "@/interfaces/user"; import {sessionOptions} from "@/lib/session"; import {getUserCompanyName} from "@/resources/user"; import {mapBy, serialize} from "@/utils"; import { activeAssignmentFilter, archivedAssignmentFilter, futureAssignmentFilter, pastAssignmentFilter, startHasExpiredAssignmentFilter, } from "@/utils/assignments"; import {getEntitiesAssignments} from "@/utils/assignments.be"; import {getEntitiesWithRoles} from "@/utils/entities.be"; import {getGroupsByEntities} from "@/utils/groups.be"; import {checkAccess} from "@/utils/permissions"; import {getEntitiesUsers} from "@/utils/users.be"; import {withIronSessionSsr} from "iron-session/next"; import {groupBy} from "lodash"; import Link from "next/link"; import {useRouter} from "next/router"; import {useMemo, useState} from "react"; import {BsChevronLeft, BsPlus} from "react-icons/bs"; export const getServerSideProps = withIronSessionSsr(async ({req, res}) => { const user = req.session.user as User | undefined; if (!user) { return { redirect: { destination: "/login", permanent: false, }, }; } if (!checkAccess(user, ["admin", "developer", "corporate", "teacher", "mastercorporate"])) return { redirect: { destination: "/dashboard", permanent: false, }, }; const entityIDS = mapBy(user.entities, "id") || []; const users = await getEntitiesUsers(entityIDS); const entities = await getEntitiesWithRoles(entityIDS); const assignments = await getEntitiesAssignments(entityIDS); const groups = await getGroupsByEntities(entityIDS); return {props: serialize({user, users, entities, assignments, groups})}; }, sessionOptions); interface Props { assignments: Assignment[]; corporateAssignments?: ({corporate?: CorporateUser} & Assignment)[]; groups: Group[]; user: User; users: User[]; } export default function AssignmentsPage({assignments, corporateAssignments, user, users, groups}: Props) { const [selectedAssignment, setSelectedAssignment] = useState(); const [isCreatingAssignment, setIsCreatingAssignment] = useState(false); const displayAssignmentView = useMemo(() => !!selectedAssignment && !isCreatingAssignment, [selectedAssignment, isCreatingAssignment]); const assignmentsPastExpiredStart = assignments.filter(startHasExpiredAssignmentFilter); const router = useRouter(); return ( {displayAssignmentView && ( { setSelectedAssignment(undefined); setIsCreatingAssignment(false); }} assignment={selectedAssignment} /> )}

Assignments

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})

New Assignment {assignments.filter(futureAssignmentFilter).map((a) => ( router.push(`/assignments/creator/${a.id}`)} key={a.id} /> ))}

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

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

Assignments start expired ({assignmentsPastExpiredStart.length})

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

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

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