diff --git a/src/components/Exercises/Speaking.tsx b/src/components/Exercises/Speaking.tsx
new file mode 100644
index 00000000..8b9fd0b6
--- /dev/null
+++ b/src/components/Exercises/Speaking.tsx
@@ -0,0 +1,53 @@
+import {errorButtonStyle, infoButtonStyle} from "@/constants/buttonStyles";
+import {SpeakingExercise, WritingExercise} from "@/interfaces/exam";
+import {mdiArrowLeft, mdiArrowRight} from "@mdi/js";
+import Icon from "@mdi/react";
+import clsx from "clsx";
+import {CommonProps} from ".";
+import {Fragment, useEffect, useState} from "react";
+import {toast} from "react-toastify";
+
+export default function Speaking({id, title, text, prompts, onNext, onBack}: SpeakingExercise & CommonProps) {
+ return (
+
+
+
{title}
+
+ {text.split("\\n").map((line, index) => (
+
+ {line}
+
+
+ ))}
+
+
+
You should talk about the following things:
+
+ {prompts.map((x, index) => (
+
+ {x}
+
+ ))}
+
+
+
+
+
+
+
+
+
+ );
+}
diff --git a/src/components/Exercises/Writing.tsx b/src/components/Exercises/Writing.tsx
index ff2fc813..e9f33f5d 100644
--- a/src/components/Exercises/Writing.tsx
+++ b/src/components/Exercises/Writing.tsx
@@ -7,7 +7,7 @@ import {CommonProps} from ".";
import {Fragment, useEffect, useState} from "react";
import {toast} from "react-toastify";
-export default function WriteBlanks({id, prompt, info, wordCounter, onNext, onBack}: WritingExercise & CommonProps) {
+export default function Writing({id, prompt, info, wordCounter, onNext, onBack}: WritingExercise & CommonProps) {
const [inputText, setInputText] = useState("");
const [isSubmitEnabled, setIsSubmitEnabled] = useState(false);
diff --git a/src/components/Exercises/index.tsx b/src/components/Exercises/index.tsx
index fd265bb7..bbabe47b 100644
--- a/src/components/Exercises/index.tsx
+++ b/src/components/Exercises/index.tsx
@@ -3,6 +3,7 @@ import {
FillBlanksExercise,
MatchSentencesExercise,
MultipleChoiceExercise,
+ SpeakingExercise,
UserSolution,
WriteBlanksExercise,
WritingExercise,
@@ -12,6 +13,7 @@ import FillBlanks from "./FillBlanks";
import MultipleChoice from "./MultipleChoice";
import WriteBlanks from "./WriteBlanks";
import Writing from "./Writing";
+import Speaking from "./Speaking";
const MatchSentences = dynamic(() => import("@/components/Exercises/MatchSentences"), {ssr: false});
@@ -32,5 +34,7 @@ export const renderExercise = (exercise: Exercise, onNext: (userSolutions: UserS
return ;
case "writing":
return ;
+ case "speaking":
+ return ;
}
};
diff --git a/src/exams/Selection.tsx b/src/exams/Selection.tsx
index d632d668..5b8389db 100644
--- a/src/exams/Selection.tsx
+++ b/src/exams/Selection.tsx
@@ -56,19 +56,6 @@ export default function Selection({user, onStart}: Props) {
Listening
- toggleModule("speaking")}
- className={clsx(
- "flex flex-col gap-2 items-center justify-center",
- "border-ielts-speaking hover:bg-ielts-speaking text-white",
- "border-2 rounded-xl p-4 h-fit w-48 cursor-pointer",
- selectedModules.includes("speaking") ? "bg-ielts-speaking " : "bg-ielts-speaking-transparent ",
- )}>
-
- Speaking
-
Writing
+ toggleModule("speaking")}
+ className={clsx(
+ "flex flex-col gap-2 items-center justify-center",
+ "border-ielts-speaking hover:bg-ielts-speaking text-white",
+ "border-2 rounded-xl p-4 h-fit w-48 cursor-pointer",
+ selectedModules.includes("speaking") ? "bg-ielts-speaking " : "bg-ielts-speaking-transparent ",
+ )}>
+
+ Speaking
+