166 lines
6.5 KiB
Svelte
166 lines
6.5 KiB
Svelte
<script>
|
|
import { StatsService } from "@odit/lfk-client-js";
|
|
import { _ } from "svelte-i18n";
|
|
const stats_promise = StatsService.statsControllerGet();
|
|
</script>
|
|
|
|
<!-- -->
|
|
<h1>{$_('general-stats')}</h1>
|
|
{#await stats_promise}
|
|
<div
|
|
class="bg-teal-lightest border-t-4 border-teal rounded-b text-teal-darkest px-4 py-3 shadow-md my-2"
|
|
role="alert">
|
|
<p class="font-bold">{$_('stats-are-being-loaded')}</p>
|
|
<p class="text-sm">{$_('this-might-take-a-moment')}</p>
|
|
</div>
|
|
{:then stats}
|
|
<div
|
|
class="flex flex-col lg:flex-row w-full lg:space-x-2 space-y-2 lg:space-y-0 mb-2 lg:mb-4">
|
|
<a href="/runners/" class="w-full lg:w-1/4">
|
|
<div
|
|
class="widget w-full p-4 rounded-lg bg-white border border-grey-100">
|
|
<div class="flex flex-row items-center justify-between">
|
|
<div class="flex flex-col">
|
|
<div class="text-xs uppercase font-light text-grey-500">
|
|
{$_('runners')}
|
|
</div>
|
|
<div class="text-xl font-bold">{stats.total_runners}</div>
|
|
</div>
|
|
<svg
|
|
height="24"
|
|
width="24"
|
|
fill="currentColor"
|
|
xmlns="http://www.w3.org/2000/svg"
|
|
viewBox="0 0 24 24"><path d="M0 0h24v24H0z" fill="none" />
|
|
<path
|
|
d="M13.49 5.48c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm-3.6 13.9l1-4.4 2.1 2v6h2v-7.5l-2.1-2 .6-3c1.3 1.5 3.3 2.5 5.5 2.5v-2c-1.9 0-3.5-1-4.3-2.4l-1-1.6c-.4-.6-1-1-1.7-1-.3 0-.5.1-.8.1l-5.2 2.2v4.7h2v-3.4l1.8-.7-1.6 8.1-4.9-1-.4 2 7 1.4z" /></svg>
|
|
</div>
|
|
</div>
|
|
</a>
|
|
<div class="w-full lg:w-1/4">
|
|
<div
|
|
class="widget w-full p-4 rounded-lg bg-white border border-grey-100">
|
|
<div class="flex flex-row items-center justify-between">
|
|
<div class="flex flex-col">
|
|
<div class="text-xs uppercase font-light text-grey-500">
|
|
{$_('total-scans')}
|
|
</div>
|
|
<div class="text-xl font-bold">{stats.total_scans}</div>
|
|
</div><svg
|
|
stroke="currentColor"
|
|
fill="currentColor"
|
|
stroke-width="2"
|
|
viewBox="0 0 24 24"
|
|
stroke-linecap="round"
|
|
stroke-linejoin="round"
|
|
size="24"
|
|
class="stroke-current text-grey-500"
|
|
height="24"
|
|
width="24"
|
|
xmlns="http://www.w3.org/2000/svg"><polyline
|
|
points="22 12 18 12 15 21 9 3 6 12 2 12" /></svg>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="w-full lg:w-1/4">
|
|
<div
|
|
class="widget w-full p-4 rounded-lg bg-white border border-grey-100">
|
|
<div class="flex flex-row items-center justify-between">
|
|
<div class="flex flex-col">
|
|
<div class="text-xs uppercase font-light text-grey-500">
|
|
{$_('total-donations')}
|
|
</div>
|
|
<div class="text-xl font-bold">{(stats.total_donation/100).toFixed(2)} €</div>
|
|
</div><svg
|
|
xmlns="http://www.w3.org/2000/svg"
|
|
height="24"
|
|
fill="currentColor"
|
|
width="24"><path d="M0 0h24v24H0z" fill="none" />
|
|
<path
|
|
d="M15 18.5A6.48 6.48 0 019.24 15H15v-2H8.58c-.05-.33-.08-.66-.08-1s.03-.67.08-1H15V9H9.24A6.491 6.491 0 0115 5.5c1.61 0 3.09.59 4.23 1.57L21 5.3A8.955 8.955 0 0015 3c-3.92 0-7.24 2.51-8.48 6H3v2h3.06a8.262 8.262 0 000 2H3v2h3.52c1.24 3.49 4.56 6 8.48 6 2.31 0 4.41-.87 6-2.3l-1.78-1.77c-1.13.98-2.6 1.57-4.22 1.57z" /></svg>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="w-full lg:w-1/4">
|
|
<div
|
|
class="widget w-full p-4 rounded-lg bg-white border border-grey-100">
|
|
<div class="flex flex-row items-center justify-between">
|
|
<div class="flex flex-col">
|
|
<div class="text-xs uppercase font-light text-grey-500">
|
|
{$_('total-distance')}
|
|
</div>
|
|
<div class="text-xl font-bold">
|
|
{stats.total_distance / 1000}
|
|
km
|
|
</div>
|
|
</div>
|
|
<svg
|
|
fill="currentColor"
|
|
xmlns="http://www.w3.org/2000/svg"
|
|
height="24"
|
|
width="24"><path d="M0 0h24v24H0z" fill="none" />
|
|
<path
|
|
d="M21 6H3c-1.1 0-2 .9-2 2v8c0 1.1.9 2 2 2h18c1.1 0 2-.9 2-2V8c0-1.1-.9-2-2-2zm0 10H3V8h2v4h2V8h2v4h2V8h2v4h2V8h2v4h2V8h2v8z" /></svg>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<a href="/teams/" class="w-full lg:w-1/4">
|
|
<div
|
|
class="widget w-full p-4 rounded-lg bg-white border border-grey-100">
|
|
<div class="flex flex-row items-center justify-between">
|
|
<div class="flex flex-col">
|
|
<div class="text-xs uppercase font-light text-grey-500">
|
|
{$_('count_teams')}
|
|
</div>
|
|
<div class="text-xl font-bold">{stats.total_teams}</div>
|
|
</div>
|
|
<svg
|
|
stroke="currentColor"
|
|
fill="none"
|
|
stroke-width="2"
|
|
viewBox="0 0 24 24"
|
|
stroke-linecap="round"
|
|
stroke-linejoin="round"
|
|
size="24"
|
|
class="stroke-current text-grey-500"
|
|
height="24"
|
|
width="24"
|
|
xmlns="http://www.w3.org/2000/svg"><path
|
|
d="M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2" />
|
|
<circle cx="9" cy="7" r="4" />
|
|
<path d="M23 21v-2a4 4 0 0 0-3-3.87" />
|
|
<path d="M16 3.13a4 4 0 0 1 0 7.75" /></svg>
|
|
</div>
|
|
</div>
|
|
</a>
|
|
<a href="/orgs/" class="w-full lg:w-1/4">
|
|
<div
|
|
class="widget w-full p-4 rounded-lg bg-white border border-grey-100">
|
|
<div class="flex flex-row items-center justify-between">
|
|
<div class="flex flex-col">
|
|
<div class="text-xs uppercase font-light text-grey-500">
|
|
{$_('count_organizations')}
|
|
</div>
|
|
<div class="text-xl font-bold">{stats.total_orgs}</div>
|
|
</div>
|
|
<svg
|
|
height="24"
|
|
fill="currentColor"
|
|
width="24"
|
|
xmlns="http://www.w3.org/2000/svg"
|
|
viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z" />
|
|
<path
|
|
d="M17 11V3H7v4H3v14h8v-4h2v4h8V11h-4zM7 19H5v-2h2v2zm0-4H5v-2h2v2zm0-4H5V9h2v2zm4 4H9v-2h2v2zm0-4H9V9h2v2zm0-4H9V5h2v2zm4 8h-2v-2h2v2zm0-4h-2V9h2v2zm0-4h-2V5h2v2zm4 12h-2v-2h2v2zm0-4h-2v-2h2v2z" /></svg>
|
|
</div>
|
|
</div>
|
|
</a>
|
|
</div>
|
|
{:catch error}
|
|
<div class="text-white px-6 py-4 border-0 rounded relative mb-4 bg-red-500">
|
|
<span class="inline-block align-middle mr-8">
|
|
<b class="capitalize">{$_('general_promise_error')}</b>
|
|
{error}
|
|
</span>
|
|
</div>
|
|
{/await}
|