forked from ankitects/anki
-
Notifications
You must be signed in to change notification settings - Fork 0
/
CardInfo.svelte
57 lines (48 loc) · 1.65 KB
/
CardInfo.svelte
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
<!--
Copyright: Ankitects Pty Ltd and contributors
License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
-->
<script lang="ts">
import Container from "../components/Container.svelte";
import Row from "../components/Row.svelte";
import type { Stats } from "../lib/proto";
import { Cards, stats as statsService } from "../lib/proto";
import CardInfoPlaceholder from "./CardInfoPlaceholder.svelte";
import CardStats from "./CardStats.svelte";
import Revlog from "./Revlog.svelte";
export let includeRevlog = true;
let stats: Stats.CardStatsResponse | null = null;
let revlog: Stats.CardStatsResponse.StatsRevlogEntry[] | null = null;
export async function updateStats(cardId: number | null): Promise<void> {
const requestedCardId = cardId;
if (cardId === null) {
stats = null;
revlog = null;
return;
}
const cardStats = await statsService.cardStats(
Cards.CardId.create({ cid: requestedCardId }),
);
/* Skip if another update has been triggered in the meantime. */
if (requestedCardId === cardId) {
stats = cardStats;
if (includeRevlog) {
revlog = stats.revlog as Stats.CardStatsResponse.StatsRevlogEntry[];
}
}
}
</script>
<Container breakpoint="md" --gutter-inline="1rem" --gutter-block="0.5rem">
{#if stats}
<Row>
<CardStats {stats} />
</Row>
{#if revlog}
<Row>
<Revlog {revlog} />
</Row>
{/if}
{:else}
<CardInfoPlaceholder />
{/if}
</Container>