119 lines
4.2 KiB
Svelte
119 lines
4.2 KiB
Svelte
<script lang="ts">
|
|
import type { PageData } from './$types';
|
|
|
|
import Card from '$lib/components/card.svelte';
|
|
import Button from '$lib/components/ui/button/button.svelte';
|
|
|
|
export let data: PageData;
|
|
|
|
$: user = data.user;
|
|
</script>
|
|
|
|
<section class="flex w-full flex-col gap-4">
|
|
<header>
|
|
<h1 class="text-xl font-semibold">Tableau de bord</h1>
|
|
<p class="text-muted-foreground">Ceci est la page d'accueil du dashboard</p>
|
|
</header>
|
|
<main class="flex flex-col gap-4">
|
|
<div
|
|
class="flex w-full flex-col justify-between gap-4 space-x-0 md:flex md:flex-row md:space-x-6 md:space-y-0"
|
|
>
|
|
<Card title="Puzzles résolus" data={user?.completions ?? 0} />
|
|
<Card title="Badges obtenus" data={user?.badges?.length ?? 'Aucun'} />
|
|
<Card title="Rang actuel" data={user?.rank ?? 'Non classé'} />
|
|
</div>
|
|
{#if data.event}
|
|
<header>
|
|
<h1 class="text-lg font-semibold">Événement en cours ou à venir</h1>
|
|
<p class="text-muted-foreground">
|
|
Partipiez à l'événement en équipe en résolvant des puzzles
|
|
</p>
|
|
</header>
|
|
<div
|
|
class="flex items-center justify-between gap-4 rounded border border-primary bg-card px-4 py-2"
|
|
>
|
|
<div class="flex w-full flex-col justify-between md:flex-row md:items-center md:gap-4">
|
|
<span class="text-lg font-semibold">{data.event.name}</span>
|
|
{#if data.event.start && data.event.end}
|
|
<span class="text-muted-foreground">
|
|
{new Date(data.event.start).toLocaleDateString()} - {new Date(
|
|
data.event.end
|
|
).toLocaleDateString()}
|
|
</span>
|
|
{:else}
|
|
<span class="text-muted-foreground">Aucune date</span>
|
|
{/if}
|
|
</div>
|
|
<Button href="/chapters/{data.event.id}">Participer</Button>
|
|
</div>
|
|
{/if}
|
|
<!-- {#if data.daily && data.daily.puzzle}
|
|
<header>
|
|
<h1 class="text-lg font-semibold">Puzzle du jour</h1>
|
|
<p class="text-muted-foreground">
|
|
Essayer de résoudre le puzzle du jour pour gagner des points supplémentaires
|
|
</p>
|
|
</header>
|
|
<div
|
|
class="flex items-center justify-between gap-4 rounded border border-primary bg-card px-4 py-2"
|
|
>
|
|
<div class="flex w-full flex-col justify-between md:flex-row md:items-center md:gap-4">
|
|
<span class="text-lg font-semibold">{data.daily.chapter.name}</span>
|
|
<span class="text-muted-foreground">
|
|
{data.daily.puzzle.name} ({data.daily.puzzle.score ?? '?'}/{data.daily.puzzle.scoreMax})
|
|
</span>
|
|
</div>
|
|
<Button href="/chapters/{data.daily.chapter.id}/puzzle/{data.daily.puzzle.id}">
|
|
{data.daily.puzzle.score ? 'Voir' : 'Jouer'}
|
|
</Button>
|
|
</div>
|
|
{/if} -->
|
|
<div class="grid grid-cols-1 gap-4">
|
|
<div class="flex flex-col gap-4">
|
|
<header>
|
|
<h2 class="text-lg font-semibold">Derniers puzzles</h2>
|
|
<p class="text-muted-foreground">
|
|
Voici les derniers puzzles que vous avez résolus ou essayer de résoudres
|
|
</p>
|
|
</header>
|
|
<div
|
|
class="h-full max-h-96 overflow-y-scroll rounded border border-border bg-card p-4 shadow-md"
|
|
>
|
|
<ul class="flex flex-col space-y-2">
|
|
{#if user?.completionsList?.length}
|
|
{#each user.completionsList as completion, key}
|
|
<li class="flex justify-between space-x-2">
|
|
<div class="flex items-center space-x-4">
|
|
<div class="flex items-center space-x-2">
|
|
<span class="text-lg">{completion.puzzleName}</span>
|
|
</div>
|
|
</div>
|
|
<div class="flex items-center space-x-4">
|
|
<div class="flex flex-col">
|
|
<span class="text-sm font-semibold">
|
|
Essai{completion.tries > 1 ? 's' : ''}
|
|
</span>
|
|
<span class="text-right text-lg text-muted-foreground">
|
|
{completion.tries}
|
|
</span>
|
|
</div>
|
|
<div class="flex flex-col">
|
|
<span class="text-sm font-semibold">Score</span>
|
|
<span class="text-right text-lg text-muted-foreground">
|
|
{completion.score}
|
|
</span>
|
|
</div>
|
|
</div>
|
|
</li>
|
|
{/each}
|
|
{:else}
|
|
<li class="m-auto flex items-center justify-center">
|
|
<span class="text-lg text-muted-foreground"> Aucun puzzles </span>
|
|
</li>
|
|
{/if}
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</main>
|
|
</section>
|