diff --git a/src/exams/Selection.tsx b/src/exams/Selection.tsx index b6f77c98..c1b023c8 100644 --- a/src/exams/Selection.tsx +++ b/src/exams/Selection.tsx @@ -1,5 +1,5 @@ /* eslint-disable @next/next/no-img-element */ -import {useState} from "react"; +import {useMemo, useState} from "react"; import {Module} from "@/interfaces"; import clsx from "clsx"; import {Stat, User} from "@/interfaces/user"; @@ -22,10 +22,9 @@ interface Props { user: User; page: "exercises" | "exams"; onStart: (modules: Module[], avoidRepeated: boolean, variant: Variant) => void; - disableSelection?: boolean; } -export default function Selection({user, page, onStart, disableSelection = false}: Props) { +export default function Selection({user, page, onStart}: Props) { const [selectedModules, setSelectedModules] = useState([]); const [avoidRepeatedExams, setAvoidRepeatedExams] = useState(true); const [variant, setVariant] = useState("full"); @@ -40,6 +39,10 @@ export default function Selection({user, page, onStart, disableSelection = false setSelectedModules((prev) => (prev.includes(module) ? modules : [...modules, module])); }; + const isCompleteExam = useMemo(() => + ["reading", "listening", "writing", "speaking"].every(m => selectedModules.includes(m as Module)), [selectedModules] + ) + const loadSession = async (session: Session) => { state.setShuffles(session.userSolutions.map((x) => ({exerciseID: x.exercise, shuffles: x.shuffleMaps ? x.shuffleMaps : []}))); state.setSelectedModules(session.selectedModules); @@ -146,10 +149,10 @@ export default function Selection({user, page, onStart, disableSelection = false
toggleModule("reading") : undefined} + onClick={!selectedModules.includes("level") ? () => toggleModule("reading") : undefined} className={clsx( "bg-mti-white-alt relative flex w-64 max-w-xs cursor-pointer flex-col items-center gap-2 rounded-xl border p-5 pt-12 transition duration-300 ease-in-out", - selectedModules.includes("reading") || disableSelection ? "border-mti-purple-light" : "border-mti-gray-platinum", + selectedModules.includes("reading") ? "border-mti-purple-light" : "border-mti-gray-platinum", )}>
@@ -158,19 +161,19 @@ export default function Selection({user, page, onStart, disableSelection = false

Expand your vocabulary, improve your reading comprehension and improve your ability to interpret texts in English.

- {!selectedModules.includes("reading") && !selectedModules.includes("level") && !disableSelection && ( + {!selectedModules.includes("reading") && !selectedModules.includes("level") && (
)} - {(selectedModules.includes("reading") || disableSelection) && ( + {(selectedModules.includes("reading")) && ( )} {selectedModules.includes("level") && }
toggleModule("listening") : undefined} + onClick={!selectedModules.includes("level") ? () => toggleModule("listening") : undefined} className={clsx( "bg-mti-white-alt relative flex w-64 max-w-xs cursor-pointer flex-col items-center gap-2 rounded-xl border p-5 pt-12 transition duration-300 ease-in-out", - selectedModules.includes("listening") || disableSelection ? "border-mti-purple-light" : "border-mti-gray-platinum", + selectedModules.includes("listening") ? "border-mti-purple-light" : "border-mti-gray-platinum", )}>
@@ -179,19 +182,19 @@ export default function Selection({user, page, onStart, disableSelection = false

Improve your ability to follow conversations in English and your ability to understand different accents and intonations.

- {!selectedModules.includes("listening") && !selectedModules.includes("level") && !disableSelection && ( + {!selectedModules.includes("listening") && !selectedModules.includes("level") && (
)} - {(selectedModules.includes("listening") || disableSelection) && ( + {(selectedModules.includes("listening")) && ( )} {selectedModules.includes("level") && }
toggleModule("writing") : undefined} + onClick={!selectedModules.includes("level") ? () => toggleModule("writing") : undefined} className={clsx( "bg-mti-white-alt relative flex w-64 max-w-xs cursor-pointer flex-col items-center gap-2 rounded-xl border p-5 pt-12 transition duration-300 ease-in-out", - selectedModules.includes("writing") || disableSelection ? "border-mti-purple-light" : "border-mti-gray-platinum", + selectedModules.includes("writing") ? "border-mti-purple-light" : "border-mti-gray-platinum", )}>
@@ -200,19 +203,19 @@ export default function Selection({user, page, onStart, disableSelection = false

Allow you to practice writing in a variety of formats, from simple paragraphs to complex essays.

- {!selectedModules.includes("writing") && !selectedModules.includes("level") && !disableSelection && ( + {!selectedModules.includes("writing") && !selectedModules.includes("level") && (
)} - {(selectedModules.includes("writing") || disableSelection) && ( + {(selectedModules.includes("writing")) && ( )} {selectedModules.includes("level") && }
toggleModule("speaking") : undefined} + onClick={!selectedModules.includes("level") ? () => toggleModule("speaking") : undefined} className={clsx( "bg-mti-white-alt relative flex w-64 max-w-xs cursor-pointer flex-col items-center gap-2 rounded-xl border p-5 pt-12 transition duration-300 ease-in-out", - selectedModules.includes("speaking") || disableSelection ? "border-mti-purple-light" : "border-mti-gray-platinum", + selectedModules.includes("speaking") ? "border-mti-purple-light" : "border-mti-gray-platinum", )}>
@@ -221,37 +224,35 @@ export default function Selection({user, page, onStart, disableSelection = false

You'll have access to interactive dialogs, pronunciation exercises and speech recordings.

- {!selectedModules.includes("speaking") && !selectedModules.includes("level") && !disableSelection && ( + {!selectedModules.includes("speaking") && !selectedModules.includes("level") && (
)} - {(selectedModules.includes("speaking") || disableSelection) && ( + {(selectedModules.includes("speaking")) && ( )} {selectedModules.includes("level") && }
- {!disableSelection && ( -
toggleModule("level") : undefined} - className={clsx( - "bg-mti-white-alt relative flex w-64 max-w-xs cursor-pointer flex-col items-center gap-2 rounded-xl border p-5 pt-12 transition duration-300 ease-in-out", - selectedModules.includes("level") || disableSelection ? "border-mti-purple-light" : "border-mti-gray-platinum", - )}> -
- -
- Level: -

You'll be able to test your english level with multiple choice questions.

- {!selectedModules.includes("level") && selectedModules.length === 0 && !disableSelection && ( -
- )} - {(selectedModules.includes("level") || disableSelection) && ( - - )} - {!selectedModules.includes("level") && selectedModules.length > 0 && ( - - )} +
toggleModule("level") : undefined} + className={clsx( + "bg-mti-white-alt relative flex w-64 max-w-xs cursor-pointer flex-col items-center gap-2 rounded-xl border p-5 pt-12 transition duration-300 ease-in-out", + selectedModules.includes("level") ? "border-mti-purple-light" : "border-mti-gray-platinum", + )}> +
+
- )} + Level: +

You'll be able to test your english level with multiple choice questions.

+ {!selectedModules.includes("level") && selectedModules.length === 0 && ( +
+ )} + {(selectedModules.includes("level")) && ( + + )} + {!selectedModules.includes("level") && selectedModules.length > 0 && ( + + )} +
@@ -291,19 +292,29 @@ export default function Selection({user, page, onStart, disableSelection = false Start Exam
- +
+ + +
diff --git a/src/pages/(exam)/ExamPage.tsx b/src/pages/(exam)/ExamPage.tsx index 2f080c77..79069e30 100644 --- a/src/pages/(exam)/ExamPage.tsx +++ b/src/pages/(exam)/ExamPage.tsx @@ -443,7 +443,6 @@ export default function ExamPage({page, user, hideSidebar = false}: Props) { { setModuleIndex(0); setAvoidRepeated(avoid);