Updated and fixed the level generation

This commit is contained in:
Tiago Ribeiro
2024-07-26 23:43:23 +01:00
parent 8f6639b7fc
commit a6160c3cf0
4 changed files with 19 additions and 12 deletions

View File

@@ -16,7 +16,7 @@ function Question({
onSelectOption, onSelectOption,
}: MultipleChoiceQuestion & {userSolution: string | undefined; onSelectOption?: (option: string) => void; showSolution?: boolean}) { }: MultipleChoiceQuestion & {userSolution: string | undefined; onSelectOption?: (option: string) => void; showSolution?: boolean}) {
const renderPrompt = (prompt: string) => { const renderPrompt = (prompt: string) => {
return reactStringReplace(prompt, /((<u>)\w+(<\/u>))/g, (match) => { return reactStringReplace(prompt, /((<u>)[\w\s']+(<\/u>))/g, (match) => {
const word = match.replaceAll("<u>", "").replaceAll("</u>", ""); const word = match.replaceAll("<u>", "").replaceAll("</u>", "");
return word.length > 0 ? <u>{word}</u> : null; return word.length > 0 ? <u>{word}</u> : null;
}); });

View File

@@ -16,7 +16,7 @@ function Question({
userSolution, userSolution,
}: MultipleChoiceQuestion & {userSolution: string | undefined; onSelectOption?: (option: string) => void; showSolution?: boolean}) { }: MultipleChoiceQuestion & {userSolution: string | undefined; onSelectOption?: (option: string) => void; showSolution?: boolean}) {
const renderPrompt = (prompt: string) => { const renderPrompt = (prompt: string) => {
return reactStringReplace(prompt, /((<u>)\w+(<\/u>))/g, (match) => { return reactStringReplace(prompt, /((<u>)[\w\s']+(<\/u>))/g, (match) => {
const word = match.replaceAll("<u>", "").replaceAll("</u>", ""); const word = match.replaceAll("<u>", "").replaceAll("</u>", "");
return word.length > 0 ? <u>{word}</u> : null; return word.length > 0 ? <u>{word}</u> : null;
}); });

View File

@@ -71,6 +71,12 @@ export default function Level({exam, showSolutions = false, onFinish}: Props) {
setUserSolutions([...userSolutions.filter((x) => x.exercise !== solution.exercise), {...solution, module: "level", exam: exam.id}]); setUserSolutions([...userSolutions.filter((x) => x.exercise !== solution.exercise), {...solution, module: "level", exam: exam.id}]);
} }
if (storeQuestionIndex > 0) {
const exercise = getExercise();
setMultipleChoicesDone((prev) => [...prev.filter((x) => x.id !== exercise.id), {id: exercise.id, amount: storeQuestionIndex}]);
}
setStoreQuestionIndex(0);
if (exerciseIndex + 1 < exam.parts[partIndex].exercises.length && !hasExamEnded) { if (exerciseIndex + 1 < exam.parts[partIndex].exercises.length && !hasExamEnded) {
setExerciseIndex(exerciseIndex + 1); setExerciseIndex(exerciseIndex + 1);
return; return;
@@ -78,7 +84,7 @@ export default function Level({exam, showSolutions = false, onFinish}: Props) {
if (partIndex + 1 < exam.parts.length && !hasExamEnded) { if (partIndex + 1 < exam.parts.length && !hasExamEnded) {
setPartIndex(partIndex + 1); setPartIndex(partIndex + 1);
setExerciseIndex(showSolutions ? 0 : -1); setExerciseIndex(!!exam.parts[partIndex + 1].context ? -1 : 0);
return; return;
} }
@@ -94,12 +100,6 @@ export default function Level({exam, showSolutions = false, onFinish}: Props) {
return; return;
} }
if (storeQuestionIndex > 0) {
const exercise = getExercise();
setMultipleChoicesDone((prev) => [...prev.filter((x) => x.id !== exercise.id), {id: exercise.id, amount: storeQuestionIndex}]);
}
setStoreQuestionIndex(0);
setHasExamEnded(false); setHasExamEnded(false);
if (solution) { if (solution) {
@@ -114,6 +114,11 @@ export default function Level({exam, showSolutions = false, onFinish}: Props) {
if (solution) { if (solution) {
setUserSolutions([...userSolutions.filter((x) => x.exercise !== solution.exercise), {...solution, module: "level", exam: exam.id}]); setUserSolutions([...userSolutions.filter((x) => x.exercise !== solution.exercise), {...solution, module: "level", exam: exam.id}]);
} }
if (storeQuestionIndex > 0) {
const exercise = getExercise();
setMultipleChoicesDone((prev) => [...prev.filter((x) => x.id !== exercise.id), {id: exercise.id, amount: storeQuestionIndex}]);
}
setStoreQuestionIndex(0); setStoreQuestionIndex(0);
setExerciseIndex(exerciseIndex - 1); setExerciseIndex(exerciseIndex - 1);

View File

@@ -43,7 +43,7 @@ const QuestionDisplay = ({question, onUpdate}: {question: MultipleChoiceQuestion
const [answer, setAnswer] = useState(question.solution); const [answer, setAnswer] = useState(question.solution);
const renderPrompt = (prompt: string) => { const renderPrompt = (prompt: string) => {
return reactStringReplace(prompt, /((<u>)\w+(<\/u>))/g, (match) => { return reactStringReplace(prompt, /((<u>)[\w\s']+(<\/u>))/g, (match) => {
const word = match.replaceAll("<u>", "").replaceAll("</u>", ""); const word = match.replaceAll("<u>", "").replaceAll("</u>", "");
return word.length > 0 ? <u>{word}</u> : null; return word.length > 0 ? <u>{word}</u> : null;
}); });
@@ -280,6 +280,8 @@ const LevelGeneration = () => {
axios axios
.post<{exercises: {[key: string]: any}}>("/api/exam/level/generate/level", {nr_exercises: numberOfParts, ...body}) .post<{exercises: {[key: string]: any}}>("/api/exam/level/generate/level", {nr_exercises: numberOfParts, ...body})
.then((result) => { .then((result) => {
console.log(result.data);
playSound(typeof result.data === "string" ? "error" : "check"); playSound(typeof result.data === "string" ? "error" : "check");
if (typeof result.data === "string") return toast.error("Something went wrong, please try to generate again."); if (typeof result.data === "string") return toast.error("Something went wrong, please try to generate again.");
@@ -305,7 +307,7 @@ const LevelGeneration = () => {
part.type === "multiple_choice_underlined" part.type === "multiple_choice_underlined"
? "Select the wrong part of the sentence." ? "Select the wrong part of the sentence."
: "Select the appropriate option.", : "Select the appropriate option.",
questions: currentExercise.questions, questions: currentExercise.questions.map((x: any) => ({...x, variant: "text"})),
type: "multipleChoice", type: "multipleChoice",
userSolutions: [], userSolutions: [],
}; };
@@ -357,7 +359,7 @@ const LevelGeneration = () => {
const mcExercise: MultipleChoiceExercise = { const mcExercise: MultipleChoiceExercise = {
id: v4(), id: v4(),
prompt: "Select the appropriate option.", prompt: "Select the appropriate option.",
questions: currentExercise.exercises.multipleChoice, questions: currentExercise.exercises.multipleChoice.questions.map((x: any) => ({...x, variant: "text"})),
type: "multipleChoice", type: "multipleChoice",
userSolutions: [], userSolutions: [],
}; };