import Button from "@/components/Low/Button"; import ProgressBar from "@/components/Low/ProgressBar"; import InviteCard from "@/components/Medium/InviteCard"; import PayPalPayment from "@/components/PayPalPayment"; import ProfileSummary from "@/components/ProfileSummary"; import useAssignments from "@/hooks/useAssignments"; import useInvites from "@/hooks/useInvites"; import useStats from "@/hooks/useStats"; import useUsers from "@/hooks/useUsers"; import {Invite} from "@/interfaces/invite"; import {Assignment} from "@/interfaces/results"; 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"; import {PayPalButtons} from "@paypal/react-paypal-js"; import axios from "axios"; import clsx from "clsx"; 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"; interface Props { user: User; } export default function StudentDashboard({user}: Props) { const [corporateUserToShow, setCorporateUserToShow] = useState(); const {stats} = useStats(user.id); const {users} = useUsers(); const {assignments, isLoading: isAssignmentsLoading, reload: reloadAssignments} = useAssignments({assignees: user?.id}); const {invites, isLoading: isInvitesLoading, reload: reloadInvites} = useInvites({to: user.id}); const router = useRouter(); const setExams = useExamStore((state) => state.setExams); const setShowSolutions = useExamStore((state) => state.setShowSolutions); const setUserSolutions = useExamStore((state) => state.setUserSolutions); 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)); Promise.all(examPromises).then((exams) => { if (exams.every((x) => !!x)) { setUserSolutions([]); setShowSolutions(false); setExams(exams.map((x) => x!).sort(sortByModule)); setSelectedModules( exams .map((x) => x!) .sort(sortByModule) .map((x) => x!.module), ); setAssignment(assignment); router.push("/exercises"); } }); }; return ( <> {corporateUserToShow && (
Linked to: {corporateUserToShow?.corporateInformation?.companyInformation.name || corporateUserToShow.name}
)} , value: Object.keys(groupBySession(stats)).length, label: "Exams", tooltip: "Number of all conducted completed exams", }, { icon: , value: stats.length, label: "Exercises", tooltip: "Number of all conducted exercises including Level Test", }, { icon: , value: `${stats.length > 0 ? averageScore(stats) : 0}%`, label: "Average Score", tooltip: "Average success rate for questions responded", }, ]} /> {/* Bio */}
Bio {user.bio || "Your bio will appear here, you can change it by clicking on your name in the top right corner."}
{/* Assignments */}
Assignments
{assignments.filter((a) => moment(a.endDate).isSameOrAfter(moment())).length === 0 && "Assignments will appear here. It seems that for now there are no assignments for you."} {assignments .filter((a) => moment(a.endDate).isSameOrAfter(moment())) .sort((a, b) => moment(a.startDate).diff(b.startDate)) .map((assignment) => (
r.user).includes(user.id) && "border-mti-green-light", )} key={assignment.id}>

{assignment.name}

{moment(assignment.startDate).format("DD/MM/YY, HH:mm")} - {moment(assignment.endDate).format("DD/MM/YY, HH:mm")}
{assignment.exams .filter((e) => e.assignee === user.id) .map((e) => e.module) .sort(sortByModuleName) .map((module) => (
{module === "reading" && } {module === "listening" && } {module === "writing" && } {module === "speaking" && } {module === "level" && }
))}
{!assignment.results.map((r) => r.user).includes(user.id) && ( <>
)} {assignment.results.map((r) => r.user).includes(user.id) && ( )}
))}
{/* Invites */} {invites.length > 0 && (
Invites
{invites.map((invite) => ( ))}
)} {/* Score History */}
Score History
{MODULE_ARRAY.map((module) => (
{module === "reading" && } {module === "listening" && } {module === "writing" && } {module === "speaking" && } {module === "level" && }
{capitalize(module)} Level {user.levels[module] || 0} / Level 9 (Desired Level: {user.desiredLevels[module] || 9})
))}
); }