diff --git a/src/dashboards/Student.tsx b/src/dashboards/Student.tsx index 369249f7..81223002 100644 --- a/src/dashboards/Student.tsx +++ b/src/dashboards/Student.tsx @@ -5,9 +5,10 @@ import ProfileSummary from "@/components/ProfileSummary"; import useAssignments from "@/hooks/useAssignments"; import useStats from "@/hooks/useStats"; import {Assignment} from "@/interfaces/results"; -import {User} from "@/interfaces/user"; +import {CorporateUser, User} from "@/interfaces/user"; import useExamStore from "@/stores/examStore"; import {getExamById} from "@/utils/exams"; +import {getUserCorporate} from "@/utils/groups"; import {MODULE_ARRAY, sortByModule, sortByModuleName} from "@/utils/moduleUtils"; import {averageScore, groupBySession} from "@/utils/stats"; import {CreateOrderActions, CreateOrderData, OnApproveActions, OnApproveData, OrderResponseBody} from "@paypal/paypal-js"; @@ -18,6 +19,7 @@ import {capitalize} from "lodash"; import moment from "moment"; import Link from "next/link"; import {useRouter} from "next/router"; +import {useEffect, useState} from "react"; import {BsArrowRepeat, BsBook, BsClipboard, BsFileEarmarkText, BsHeadphones, BsMegaphone, BsPen, BsPencil, BsStar} from "react-icons/bs"; import {toast} from "react-toastify"; @@ -26,6 +28,8 @@ interface Props { } export default function StudentDashboard({user}: Props) { + const [corporateUserToShow, setCorporateUserToShow] = useState(); + const {stats} = useStats(user.id); const {assignments, isLoading: isAssignmentsLoading, reload: reloadAssignments} = useAssignments({assignees: user?.id}); @@ -37,6 +41,10 @@ export default function StudentDashboard({user}: Props) { const setSelectedModules = useExamStore((state) => state.setSelectedModules); const setAssignment = useExamStore((state) => state.setAssignment); + useEffect(() => { + getUserCorporate(user.id).then(setCorporateUserToShow); + }, [user]); + const startAssignment = (assignment: Assignment) => { const examPromises = assignment.exams.filter((e) => e.assignee === user.id).map((e) => getExamById(e.module, e.id)); @@ -60,6 +68,11 @@ export default function StudentDashboard({user}: Props) { return ( <> + {corporateUserToShow && ( +
+ Corporate: {corporateUserToShow?.corporateInformation.companyInformation.name || corporateUserToShow.name} +
+ )} (); const [isCreatingAssignment, setIsCreatingAssignment] = useState(false); + const [corporateUserToShow, setCorporateUserToShow] = useState(); const {stats} = useStats(); const {users, reload} = useUsers(); @@ -65,6 +67,10 @@ export default function TeacherDashboard({user}: Props) { setShowModal(!!selectedUser && page === ""); }, [selectedUser, page]); + useEffect(() => { + getUserCorporate(user.id).then(setCorporateUserToShow); + }, [user]); + const studentFilter = (user: User) => user.type === "student" && groups.flatMap((g) => g.participants).includes(user.id); const getStatsByStudent = (user: User) => stats.filter((s) => s.user === user.id); @@ -226,7 +232,7 @@ export default function TeacherDashboard({user}: Props) {

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

{assignments.filter(pastFilter).map((a) => ( - setSelectedAssignment(a)} key={a.id} allowDownload/> + setSelectedAssignment(a)} key={a.id} allowDownload /> ))}
@@ -236,7 +242,16 @@ export default function TeacherDashboard({user}: Props) { const DefaultDashboard = () => ( <> -
+ {corporateUserToShow && ( +
+ Corporate: {corporateUserToShow?.corporateInformation.companyInformation.name || corporateUserToShow.name} +
+ )} +
setPage("students")} Icon={BsPersonFill} diff --git a/src/utils/groups.ts b/src/utils/groups.ts index 1bb59388..0d0dec55 100644 --- a/src/utils/groups.ts +++ b/src/utils/groups.ts @@ -1,4 +1,4 @@ -import {Group, User} from "@/interfaces/user"; +import {CorporateUser, Group, User} from "@/interfaces/user"; import axios from "axios"; export const isUserFromCorporate = async (userID: string) => { @@ -8,3 +8,11 @@ export const isUserFromCorporate = async (userID: string) => { const adminTypes = groups.map((g) => users.find((u) => u.id === g.admin)?.type); return adminTypes.includes("corporate"); }; + +export const getUserCorporate = async (userID: string) => { + const groups = (await axios.get(`/api/groups?participant=${userID}`)).data; + const users = (await axios.get("/api/users/list")).data; + + const admins = groups.map((g) => users.find((u) => u.id === g.admin)); + return admins.map((x) => x?.type).includes("corporate") ? (admins[0] as CorporateUser) : undefined; +};