import { useEffect, useState } from 'react'; import { useRouter } from 'next/router'; import axios from 'axios'; import { Tab } from "@headlessui/react"; import { AiOutlineFileSearch } from "react-icons/ai"; import { MdOutlinePlaylistAddCheckCircle, MdOutlineSelfImprovement } from "react-icons/md"; import { BsChatLeftDots } from "react-icons/bs"; import Button from "@/components/Low/Button"; import clsx from "clsx"; import Exercise from "@/training/Exercise"; import TrainingScore from "@/training/TrainingScore"; import { ITrainingContent, ITrainingTip } from "@/training/TrainingInterfaces"; import { Stat, User } from '@/interfaces/user'; import Head from "next/head"; import Layout from "@/components/High/Layout"; import { ToastContainer } from 'react-toastify'; import { withIronSessionSsr } from "iron-session/next"; import { shouldRedirectHome } from "@/utils/navigation.disabled"; import { sessionOptions } from "@/lib/session"; import qs from 'qs'; import StatsGridItem from '@/components/StatGridItem'; import useExamStore from "@/stores/examStore"; import { usePDFDownload } from "@/hooks/usePDFDownload"; import useAssignments from '@/hooks/useAssignments'; import useUsers from '@/hooks/useUsers'; import Dropdown from "@/components/Dropdown"; export const getServerSideProps = withIronSessionSsr(({ req, res }) => { const user = req.session.user; if (!user || !user.isVerified) { return { redirect: { destination: "/login", permanent: false, }, }; } if (shouldRedirectHome(user)) { return { redirect: { destination: "/", permanent: false, }, }; } return { props: { user: req.session.user }, }; }, sessionOptions); const TrainingContent: React.FC<{ user: User }> = ({ user }) => { // Record stuff 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 setInactivity = useExamStore((state) => state.setInactivity); const setTimeSpent = useExamStore((state) => state.setTimeSpent); const renderPdfIcon = usePDFDownload("stats"); const [trainingContent, setTrainingContent] = useState(null); const [loading, setLoading] = useState(true); const [trainingTips, setTrainingTips] = useState([]); const [currentTipIndex, setCurrentTipIndex] = useState(0); const { assignments } = useAssignments({}); const { users } = useUsers(); const router = useRouter(); const { id } = router.query; useEffect(() => { const fetchTrainingContent = async () => { if (!id || typeof id !== 'string') return; try { setLoading(true); const response = await axios.get(`/api/training/${id}`); const trainingContent = response.data; const withExamsStats = { ...trainingContent, exams: await Promise.all(trainingContent.exams.map(async (exam) => { const stats = await Promise.all(exam.stat_ids.map(async (statId) => { const statResponse = await axios.get(`/api/stats/${statId}`); return statResponse.data; })); return { ...exam, stats }; })) }; const tips = await axios.get('/api/training/walkthrough', { params: { ids: trainingContent.tip_ids }, paramsSerializer: params => qs.stringify(params, { arrayFormat: 'repeat' }) }); setTrainingTips(tips.data); setTrainingContent(withExamsStats); } catch (error) { router.push('/training'); } finally { setLoading(false); } }; fetchTrainingContent(); }, [id]); const handleNext = () => { setCurrentTipIndex((prevIndex) => (prevIndex + 1)); }; const handlePrevious = () => { setCurrentTipIndex((prevIndex) => (prevIndex - 1)); }; return ( <> Training | EnCoach {loading ? (
) : (trainingContent && (
{/**/} {trainingContent.exams.map((exam, examIndex) => ( ))} {/* */}

General Evaluation

Performance Breakdown by Exam:

    {trainingContent.exams.flatMap((exam, index) => (
  • Exam {index + 1} {exam.score}%

    {exam.performance_comment}

  • ))}

Subjects that Need Improvement

Detailed Breakdown

    {trainingContent.exams.map((exam, index) => (
  • {exam.detailed_summary}
  • ))}

Identified Weak Areas

{trainingContent.weak_areas.map((x, index) => ( clsx( 'text-[#53B2F9] pb-2 border-b-2', 'focus:outline-none', selected ? 'border-[#1B78BE]' : 'border-[#1B78BE0F]' ) } > {x.area} ))}
{trainingContent.weak_areas.map((x, index) => (

{x.comment}

))}
))}
); } export default TrainingContent;