summaryrefslogtreecommitdiffstatshomepage
path: root/frontend/src/routes/statistics/+page.svelte
blob: 53c56a48fa82e18b55ec7c9fab17c92ada801322 (plain) (blame)
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
<script lang="ts">
	import { statisticsQuery } from '$gql/Queries';
	import Guard from '$lib/components/Guard.svelte';
	import Head from '$lib/components/Head.svelte';
	import Stat from '$lib/statistics/Stat.svelte';
	import StatGroup from '$lib/statistics/StatGroup.svelte';
	import { getContextClient } from '@urql/svelte';

	let query = $derived(statisticsQuery(getContextClient()));
	let totals = $derived($query.data?.statistics.total);
</script>

<Head section="Statistics" />

{#if $query.data && totals}
	<div class="flex flex-row flex-wrap gap-8">
		<StatGroup title="Content">
			<Stat title="Archives" value={totals.archives} />
			<Stat title="Comics" value={totals.comics} />
			<Stat title="Images" value={totals.images} />
			<Stat title="Pages" value={totals.pages} />
			<Stat title="Dedup" value={(1 - totals.images / totals.pages) * 100} precision={2} unit="%" />
		</StatGroup>
		<StatGroup title="Metadata">
			<Stat title="Namespaces" value={totals.namespaces} />
			<Stat title="Tags" value={totals.tags} />
			<Stat title="Artists" value={totals.artists} />
			<Stat title="Circles" value={totals.circles} />
			<Stat title="Characters" value={totals.characters} />
			<Stat title="Worlds" value={totals.worlds} />
		</StatGroup>
		<StatGroup title="Average per Comic">
			<Stat title="Tags" value={totals.comic.tags / totals.comics} precision={2} />
			<Stat title="Artists" value={totals.comic.artists / totals.comics} precision={2} />
			<Stat title="Circles" value={totals.comic.circles / totals.comics} precision={2} />
			<Stat title="Characters" value={totals.comic.characters / totals.comics} precision={2} />
			<Stat title="Worlds" value={totals.comic.worlds / totals.comics} precision={2} />
		</StatGroup>
		<StatGroup title="Average per Archive">
			<Stat title="Comics" value={totals.comics / totals.archives} precision={2} />
			<Stat title="Images" value={totals.images / totals.archives} precision={2} />
		</StatGroup>
	</div>
{:else}
	<Guard result={query} />
{/if}