import useFilterRecordsByUser from "@/hooks/useFilterRecordsByUser"; import useGroups from "@/hooks/useGroups"; import useUsers, { userHashStudent } from "@/hooks/useUsers"; import { Group, Stat, StudentUser, User } from "@/interfaces/user"; import { getUserCompanyName } from "@/resources/user"; import clsx from "clsx"; import { useRouter } from "next/router"; import { BsArrowLeft, BsArrowRepeat, BsChevronLeft } from "react-icons/bs"; import { mapBy, serialize } from "@/utils"; import { withIronSessionSsr } from "iron-session/next"; import { getEntitiesUsers, getUsers } from "@/utils/users.be"; import { sessionOptions } from "@/lib/session"; import { checkAccess, findAllowedEntities } from "@/utils/permissions"; import { getEntities, getEntitiesWithRoles } from "@/utils/entities.be"; import { Entity } from "@/interfaces/entity"; import { getParticipantGroups, getParticipantsGroups } from "@/utils/groups.be"; import StudentPerformanceList from "../(admin)/Lists/StudentPerformanceList"; import Head from "next/head"; import { ToastContainer } from "react-toastify"; import Layout from "@/components/High/Layout"; import { requestUser } from "@/utils/api"; import { redirect } from "@/utils"; export const getServerSideProps = withIronSessionSsr(async ({ req, res, query }) => { const user = await requestUser(req, res) if (!user) return redirect("/login") const entityIDs = mapBy(user.entities, 'id') const entities = await getEntitiesWithRoles(checkAccess(user, ["admin", 'developer']) ? undefined : entityIDs) const allowedEntities = findAllowedEntities(user, entities, "view_student_performance") if (allowedEntities.length === 0) return redirect("/") const students = await (checkAccess(user, ["admin", 'developer']) ? getUsers({ type: 'student' }) : getEntitiesUsers(mapBy(allowedEntities, 'id'), { type: 'student' }) ) const groups = await getParticipantsGroups(mapBy(students, 'id')) return { props: serialize({ user, students, entities, groups }), }; }, sessionOptions); interface Props { user: User; students: StudentUser[] entities: Entity[] groups: Group[] } const StudentPerformance = ({ user, students, entities, groups }: Props) => { const { data: stats } = useFilterRecordsByUser(); const router = useRouter(); const performanceStudents = students.map((u) => ({ ...u, group: groups.find((x) => x.participants.includes(u.id))?.name || "N/A", entitiesLabel: mapBy(u.entities, 'id').map((id) => entities.find((e) => e.id === id)?.label).filter((e) => !!e).join(', '), })); return ( <> EnCoach

Student Performance ({students.length})

); }; export default StudentPerformance;