import {infoButtonStyle} from "@/constants/buttonStyles"; import {BAND_SCORES} from "@/constants/ielts"; import {Module} from "@/interfaces"; import {User} from "@/interfaces/user"; import useExamStore from "@/stores/examStore"; import {getExamById} from "@/utils/exams"; import axios from "axios"; import clsx from "clsx"; import {capitalize} from "lodash"; import {useRouter} from "next/router"; import {useState} from "react"; import {toast} from "react-toastify"; interface Props { user: User; onFinish: () => void; } const DIAGNOSTIC_EXAMS = [ ["reading", "CurQtQoxWmHaJHeN0JW2"], ["listening", "Y6cMao8kUcVnPQOo6teV"], ["writing", "hbueuDaEZXV37EW7I12A"], ["speaking", "QVFm4pdcziJQZN2iUTDo"], ]; export default function Diagnostic({onFinish}: Props) { const [focus, setFocus] = useState<"academic" | "general">(); const [isInsert, setIsInsert] = useState(false); const [levels, setLevels] = useState({reading: 0, listening: 0, writing: 0, speaking: 0}); const router = useRouter(); const setExams = useExamStore((state) => state.setExams); const setSelectedModules = useExamStore((state) => state.setSelectedModules); const selectExam = () => { const examPromises = DIAGNOSTIC_EXAMS.map((exam) => getExamById(exam[0] as Module, exam[1])); Promise.all(examPromises).then((exams) => { if (exams.every((x) => !!x)) { setExams(exams.map((x) => x!)); setSelectedModules(exams.map((x) => x!.module)); router.push("/exam"); } }); }; const updateUser = () => { axios .post("/api/users/update", {focus, levels, isFirstLogin: false}) .then(onFinish) .catch(() => { toast.error("Something went wrong, please try again later!", {toastId: "user-update-error"}); }); }; const onPerformDiagnosis = async () => { axios .post("/api/users/update", {focus, isFirstLogin: false}) .then(selectExam) .catch(() => { toast.error("Something went wrong, please try again later!", {toastId: "user-update-error"}); }); }; if (!focus) { return (

What is your focus?

); } if (isInsert) { return (

What is your level?

{Object.keys(levels).map((module) => (
{capitalize(module)} setLevels((prev) => ({...prev, [module]: parseFloat(e.target.value)}))} />
))}
); } return (

What is your current IELTS level?

); }