diff --git a/next.config.js b/next.config.js index a843cbee09afaadbf9c8dd1477dcccf7eb56af50..ca2117bcb0751cd5e7de7d9c08c290f9d0c906f1 100644 --- a/next.config.js +++ b/next.config.js @@ -1,6 +1,6 @@ /** @type {import('next').NextConfig} */ const nextConfig = { - reactStrictMode: true, + reactStrictMode: false, } module.exports = nextConfig diff --git a/src/pages/quiz/[id]/pembahasan.tsx b/src/pages/quiz/[id]/pembahasan.tsx index 734f6ea2269f468ec367f48802f80727a52d72b2..fba2f376dba7c7f7436be33442489b241b0d0bc1 100644 --- a/src/pages/quiz/[id]/pembahasan.tsx +++ b/src/pages/quiz/[id]/pembahasan.tsx @@ -24,7 +24,7 @@ function Pembahasan() { const [userAnswers, setUserAnswers] = useState<UserAnswer[]>([]); useEffect(() => { - if (!router.query.id || !router.query.userAnswers) { + if (!router.isReady) { return; } setUserAnswers(JSON.parse(router.query.userAnswers as string)); @@ -41,7 +41,7 @@ function Pembahasan() { .catch((err) => { console.log(err.response.data); }); - }, [router.query.id, router.query.userAnswers]); + }, [router.isReady, router.query.id, router.query.userAnswers]); return ( <Layout> diff --git a/src/pages/quiz/[id]/result.tsx b/src/pages/quiz/[id]/result.tsx index 70acbd581c026f6acae0eaaeb5b29a4d4931f57b..a5070f9da1dbd3c7c351ea3bd3414fe9694f57f3 100644 --- a/src/pages/quiz/[id]/result.tsx +++ b/src/pages/quiz/[id]/result.tsx @@ -14,39 +14,36 @@ function Result() { const [isDoneLoading, setIsDoneLoading] = useState(false); useEffect(() => { - if (!router.query.id || !router.query.userAnswers) { - return; - } - // if score is already calculated, return - if (score !== -1) { - return; - } + if (!router.isReady) return; // parse user answer as UserAnswer[] from router.query.userAnswers - setUserAnswers(JSON.parse(router.query.userAnswers as string)); - // POST - http - .post( - `/quiz/${router.query.id}/finish`, - { - data: userAnswers, - }, - { - headers: { - Authorization: `Bearer ${getAvailableUserData()}`, - }, - } - ) - .then((res) => { - console.log(res.data.data); - setScore(res.data.data.score); - }) - .catch((err) => { - console.log(err.response.data); - }) - .finally(() => { - setIsDoneLoading(true); - }); - }, [router.query.id, router.query.userAnswers, userAnswers]); + if (score == -1) { + setUserAnswers(JSON.parse(router.query.userAnswers as string)); + if (userAnswers.length != 0) { + http + .post( + `/quiz/${router.query.id}/finish`, + { + data: userAnswers, + }, + { + headers: { + Authorization: `Bearer ${getAvailableUserData()}`, + }, + } + ) + .then((res) => { + console.log(res.data.data); + setScore(res.data.data.score); + }) + .catch((err) => { + console.log(err.response.data); + }) + .finally(() => { + setIsDoneLoading(true); + }); + } + } + }, [router.isReady, router.query.id, router.query.userAnswers, userAnswers]); return ( <Layout> diff --git a/src/pages/quiz/[id]/start.tsx b/src/pages/quiz/[id]/start.tsx index c05abd31668f0dfb6b224640691aa7b6236fcc1a..af633a0feffd7a9a2c56e971d5f9a21f87662489 100644 --- a/src/pages/quiz/[id]/start.tsx +++ b/src/pages/quiz/[id]/start.tsx @@ -59,22 +59,24 @@ function Quiz() { const hours = Math.floor(minutes / 60); useEffect(() => { - if (!router.query.id) { + if (!router.isReady) { return; } - http - .post(`/quiz/${router.query.id}/take`, { - Authorization: `Bearer ${getAvailableUserData()}`, - }) - .then((res) => { - setQuizName(res.data.data.name); - setProblems(res.data.data.problems); - }) - .catch((err) => { - console.log(err.response.data); - }) - .finally(() => setIsDoneLoading(true)); - }, [router.query.id]); + if (problems.length == 0) { + http + .post(`/quiz/${router.query.id}/take`, { + Authorization: `Bearer ${getAvailableUserData()}`, + }) + .then((res) => { + setQuizName(res.data.data.name); + setProblems(res.data.data.problems); + }) + .catch((err) => { + console.log(err.response.data); + }) + .finally(() => setIsDoneLoading(true)); + } + }, [problems.length, router.isReady, router.query.id]); const handleChangeAnswer = (problemId: string, answerId: string) => { // if same problemId already exists, then replace it