weird fix for weird quiz behaviour - something INSANE was happening with the state
This commit is contained in:
parent
0a652ba6b8
commit
02551291ba
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "@lingdocs/pashto-inflector",
|
"name": "@lingdocs/pashto-inflector",
|
||||||
"version": "2.9.2",
|
"version": "2.9.3",
|
||||||
"author": "lingdocs.com",
|
"author": "lingdocs.com",
|
||||||
"description": "A Pashto inflection and verb conjugation engine, inculding React components for displaying Pashto text, inflections, and conjugations",
|
"description": "A Pashto inflection and verb conjugation engine, inculding React components for displaying Pashto text, inflections, and conjugations",
|
||||||
"homepage": "https://verbs.lingdocs.com",
|
"homepage": "https://verbs.lingdocs.com",
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
import { CSSProperties, useState } from "react";
|
import { CSSProperties, useEffect, useState } from "react";
|
||||||
import * as T from "../../types";
|
import * as T from "../../types";
|
||||||
import { randFromArray } from "../../lib/misc-helpers";
|
import { randFromArray } from "../../lib/misc-helpers";
|
||||||
import { baParticle } from "../../lib/grammar-units";
|
import { baParticle } from "../../lib/grammar-units";
|
||||||
|
@ -60,13 +60,25 @@ function VPExplorerQuiz(props: {
|
||||||
opts: T.TextOptions,
|
opts: T.TextOptions,
|
||||||
vps: T.VPSelectionState,
|
vps: T.VPSelectionState,
|
||||||
}) {
|
}) {
|
||||||
const startingQs = tickQuizState(completeVPs(props.vps));
|
const [quizState, setQuizState] = useState<QuizState | "loading">("loading");
|
||||||
const [quizState, setQuizState] = useState<QuizState>(startingQs);
|
|
||||||
const [showCheck, setShowCheck] = useState<boolean>(false);
|
const [showCheck, setShowCheck] = useState<boolean>(false);
|
||||||
const [answerBlank, setAnswerBlank] = useState<string>("");
|
const [answerBlank, setAnswerBlank] = useState<string>("");
|
||||||
const [withBa, setWithBa] = useState<boolean>(false);
|
const [withBa, setWithBa] = useState<boolean>(false);
|
||||||
const [currentCorrectEmoji, setCurrentCorrectEmoji] = useState<string>(randFromArray(correctEmoji));
|
const [currentCorrectEmoji, setCurrentCorrectEmoji] = useState<string>(randFromArray(correctEmoji));
|
||||||
|
useEffect(() => {
|
||||||
|
setQuizState(tickQuizState(completeVPs(props.vps)));
|
||||||
|
}, [props.vps]);
|
||||||
|
if (quizState === "loading") {
|
||||||
|
return <div></div>;
|
||||||
|
}
|
||||||
|
function handleRestart() {
|
||||||
|
if (quizState === "loading") return;
|
||||||
|
setWithBa(false);
|
||||||
|
setAnswerBlank("");
|
||||||
|
setQuizState(tickQuizState(quizState.vps));
|
||||||
|
}
|
||||||
function checkAnswer(a: T.PsString | { text: string, withBa: boolean }) {
|
function checkAnswer(a: T.PsString | { text: string, withBa: boolean }) {
|
||||||
|
if (quizState === "loading") return;
|
||||||
if (!quizState) return;
|
if (!quizState) return;
|
||||||
const correct = "p" in a
|
const correct = "p" in a
|
||||||
? isInAnswer(a, quizState.answer)
|
? isInAnswer(a, quizState.answer)
|
||||||
|
@ -79,7 +91,10 @@ function VPExplorerQuiz(props: {
|
||||||
if (toPlay) playAudio(`correct-${randFromArray([1,2,3])}`);
|
if (toPlay) playAudio(`correct-${randFromArray([1,2,3])}`);
|
||||||
setShowCheck(true);
|
setShowCheck(true);
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
setQuizState(tickQuizState);
|
setQuizState(o => {
|
||||||
|
if (o === "loading") return o;
|
||||||
|
return tickQuizState(o);
|
||||||
|
});
|
||||||
}, checkDuration / 2);
|
}, checkDuration / 2);
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
setShowCheck(false);
|
setShowCheck(false);
|
||||||
|
@ -98,20 +113,9 @@ function VPExplorerQuiz(props: {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
const rendered = renderVP(quizState.vps);
|
const rendered = renderVP(quizState.vps);
|
||||||
const subject = getRenderedSubjectSelection(rendered.blocks).selection;
|
const subject: T.Rendered<T.NPSelection> = getRenderedSubjectSelection(rendered.blocks).selection;
|
||||||
const object = getRenderedObjectSelection(rendered.blocks).selection;
|
const object = getRenderedObjectSelection(rendered.blocks).selection;
|
||||||
const { e } = compileVP(rendered, { removeKing: false, shrinkServant: false });
|
const { e } = compileVP(rendered, { removeKing: false, shrinkServant: false });
|
||||||
function handleRestart() {
|
|
||||||
setWithBa(false);
|
|
||||||
setAnswerBlank("");
|
|
||||||
setQuizState(tickQuizState(quizState.vps));
|
|
||||||
}
|
|
||||||
if (1 < 3) {
|
|
||||||
return <div className="text-center my-4">
|
|
||||||
<h3>The quiz is broken 😭</h3>
|
|
||||||
<p>It will be fixed in like a week or two... hopefully.</p>
|
|
||||||
</div>
|
|
||||||
}
|
|
||||||
return <div className="mt-4">
|
return <div className="mt-4">
|
||||||
<ProgressBar quizState={quizState} />
|
<ProgressBar quizState={quizState} />
|
||||||
<div className="d-flex flex-row justify-content-around flex-wrap">
|
<div className="d-flex flex-row justify-content-around flex-wrap">
|
||||||
|
@ -328,10 +332,9 @@ function tickQuizState(startingWith: T.VPSelectionComplete | QuizState): QuizSta
|
||||||
}
|
}
|
||||||
const answer = makeRes(newVps);
|
const answer = makeRes(newVps);
|
||||||
const wrongAnswers = wrongVpsS.map(makeRes);
|
const wrongAnswers = wrongVpsS.map(makeRes);
|
||||||
console.log({ newVps, answer, wrongAnswers });
|
|
||||||
const allAnswers = shuffleArray([...wrongAnswers, answer]);
|
const allAnswers = shuffleArray([...wrongAnswers, answer]);
|
||||||
const options = allAnswers.map(getOptionFromResult);
|
const options = allAnswers.map(getOptionFromResult);
|
||||||
return {
|
const out: QuizState = {
|
||||||
stage,
|
stage,
|
||||||
qNumber: beatFirstStage ? 0 : qNumber,
|
qNumber: beatFirstStage ? 0 : qNumber,
|
||||||
vps: newVps,
|
vps: newVps,
|
||||||
|
@ -339,6 +342,7 @@ function tickQuizState(startingWith: T.VPSelectionComplete | QuizState): QuizSta
|
||||||
options,
|
options,
|
||||||
result: "waiting",
|
result: "waiting",
|
||||||
};
|
};
|
||||||
|
return out;
|
||||||
}
|
}
|
||||||
|
|
||||||
function getBlanksAnswer(vps: T.VPSelectionComplete): { ps: T.PsString[], withBa: boolean } {
|
function getBlanksAnswer(vps: T.VPSelectionComplete): { ps: T.PsString[], withBa: boolean } {
|
||||||
|
|
File diff suppressed because one or more lines are too long
Loading…
Reference in New Issue