From 19f1df3a029b39415fb3b61d054c56285a8e9e01 Mon Sep 17 00:00:00 2001 From: Luc Mcgrady Date: Sat, 4 Oct 2025 23:12:42 +0100 Subject: [PATCH] Add remaining queue counts --- .../reviewer/reviewer-bottom/Remaining.svelte | 38 +++++++++++++++++++ .../reviewer-bottom/ReviewerBottom.svelte | 22 +---------- ts/routes/reviewer/reviewer.ts | 26 ++++++------- 3 files changed, 53 insertions(+), 33 deletions(-) create mode 100644 ts/routes/reviewer/reviewer-bottom/Remaining.svelte diff --git a/ts/routes/reviewer/reviewer-bottom/Remaining.svelte b/ts/routes/reviewer/reviewer-bottom/Remaining.svelte new file mode 100644 index 000000000..6e7ae9075 --- /dev/null +++ b/ts/routes/reviewer/reviewer-bottom/Remaining.svelte @@ -0,0 +1,38 @@ + + + + + + {queue?.newCount} + + + + {queue?.learningCount} + + + + {queue?.reviewCount} + + + + diff --git a/ts/routes/reviewer/reviewer-bottom/ReviewerBottom.svelte b/ts/routes/reviewer/reviewer-bottom/ReviewerBottom.svelte index a2224d2a0..8f978a5cd 100644 --- a/ts/routes/reviewer/reviewer-bottom/ReviewerBottom.svelte +++ b/ts/routes/reviewer/reviewer-bottom/ReviewerBottom.svelte @@ -8,17 +8,13 @@ License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html import AnswerButton from "./AnswerButton.svelte"; import { bridgeCommand } from "@tslib/bridgecommand"; import * as tr from "@generated/ftl"; - import RemainingNumber from "./RemainingNumber.svelte"; import type { ReviewerState } from "../reviewer"; - import { writable } from "svelte/store"; + import Remaining from "./Remaining.svelte"; export let state: ReviewerState; const answerButtons = state.answerButtons; const answerShown = state.answerShown; - // Placeholders - const remaining = writable([0, 0, 0]); - const remainingIndex = writable(0); $: button_count = $answerShown ? $answerButtons.length : 1; @@ -39,17 +35,7 @@ License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html {/each} {:else} - - - {$remaining[0]} - + - - {$remaining[1]} - + - - {$remaining[2]} - - + @@ -78,10 +64,6 @@ License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html grid-auto-flow: column; } - .remaining-count { - text-align: center; - } - .more, .edit { width: 100%; diff --git a/ts/routes/reviewer/reviewer.ts b/ts/routes/reviewer/reviewer.ts index f71f30347..8bee7a23a 100644 --- a/ts/routes/reviewer/reviewer.ts +++ b/ts/routes/reviewer/reviewer.ts @@ -1,20 +1,17 @@ // Copyright: Ankitects Pty Ltd and contributors // License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html -import { - CardAnswer, - type NextCardDataResponse_AnswerButton, - type NextCardDataResponse_NextCardData, -} from "@generated/anki/scheduler_pb"; +import { CardAnswer, type NextCardDataResponse_NextCardData } from "@generated/anki/scheduler_pb"; import { nextCardData } from "@generated/backend"; -import { writable } from "svelte/store"; +import { derived, writable } from "svelte/store"; export class ReviewerState { answerHtml = ""; - cardData: NextCardDataResponse_NextCardData | undefined = undefined; + _cardData: NextCardDataResponse_NextCardData | undefined = undefined; beginAnsweringMs = Date.now(); readonly cardClass = writable(""); - readonly answerButtons = writable([]); readonly answerShown = writable(false); + readonly cardData = writable(undefined); + readonly answerButtons = derived(this.cardData, ($cardData) => $cardData?.answerButtons ?? []); iframe: HTMLIFrameElement | undefined = undefined; @@ -36,22 +33,25 @@ export class ReviewerState { const resp = await nextCardData({ answer: answer || undefined, }); + // TODO: "Congratulation screen" logic - this.cardData = resp.nextCard; - this.answerButtons.set(this.cardData?.answerButtons ?? []); - const question = resp.nextCard?.front || ""; + this._cardData = resp.nextCard; + this.cardData.set(this._cardData); this.answerShown.set(false); + + const question = resp.nextCard?.front || ""; this.updateHtml(question); + this.beginAnsweringMs = Date.now(); } get currentCard() { - return this.cardData?.queue?.cards[0]; + return this._cardData?.queue?.cards[0]; } public showAnswer() { this.answerShown.set(true); - this.updateHtml(this.cardData?.back || ""); + this.updateHtml(this._cardData?.back || ""); } public easeButtonPressed(rating: number) {