diff --git a/src/islands/ai-quiz/components/Finished.qwik.tsx b/src/islands/ai-quiz/components/Finished.qwik.tsx index 14a4ab10..8c48a866 100644 --- a/src/islands/ai-quiz/components/Finished.qwik.tsx +++ b/src/islands/ai-quiz/components/Finished.qwik.tsx @@ -1,14 +1,21 @@ /** @jsxImportSource @builder.io/qwik */ -import { component$, useComputed$, useContext } from '@builder.io/qwik' -import { QUIZ_STATE_CTX, type QuizState } from '../store' +import { + component$, + useComputed$, + useContext, + useVisibleTask$, +} from '@builder.io/qwik' +import { QUIZ_STATE_CTX, SCREEN_STATE_CTX } from '../store' +import { QuizDB } from '../storage' export const FinishedScreen = component$(() => { + const screenState = useContext(SCREEN_STATE_CTX) const quizState = useContext(QUIZ_STATE_CTX) const result = useComputed$(() => { return { - all: quizState.goalQuestions, + all: quizState.correctQuizzes.length + quizState.incorrectQuizzes.length, correct: quizState.correctQuizzes.length, incorrect: quizState.incorrectQuizzes.length, @@ -16,6 +23,39 @@ export const FinishedScreen = component$(() => { } }) + useVisibleTask$(async ({ track }) => { + track(() => quizState.incorrectQuizzes) + + const quizDB = new QuizDB() + screenState.lastMissedQuizIds = quizState.incorrectQuizzes.map((q) => q.id) + + for (const q of quizState.incorrectQuizzes) { + const current = await quizDB.quizzesByNote.get(q.id) + if (!current) continue + current.rateSource.total++ + await quizDB.quizzesByNote.update(q.id, { + rateSource: current.rateSource, + rate: current.rateSource.correct / current.rateSource.total, + }) + } + for (const q of quizState.correctQuizzes) { + const current = await quizDB.quizzesByNote.get(q.id) + if (!current) continue + current.rateSource.correct++ + current.rateSource.total++ + const rate = current.rateSource.correct / current.rateSource.total + if (rate > 0.8) { + // もうたぶん覚えた + await quizDB.quizzesByNote.delete(q.id) + continue + } + await quizDB.quizzesByNote.update(q.id, { + rateSource: current.rateSource, + rate, + }) + } + }) + return (
Finished!
@@ -36,28 +76,9 @@ export const FinishedScreen = component$(() => {
-