108 lines
3.3 KiB
Svelte
108 lines
3.3 KiB
Svelte
<script>
|
|
import { goto } from '$app/navigation';
|
|
|
|
import {
|
|
Spinner,
|
|
} from 'sveltestrap';
|
|
|
|
import { getQAView } from '$lib/todo';
|
|
import { getExerciceQA } from '$lib/qa';
|
|
import { exercicesIdx } from '$lib/stores/exercices';
|
|
import { themesIdx } from '$lib/stores/themes';
|
|
|
|
export { className as class };
|
|
let className = '';
|
|
|
|
export let team = null;
|
|
|
|
function show(id) {
|
|
goto("exercices/" + id)
|
|
}
|
|
|
|
let my_exercices = [];
|
|
let my_exercicesP = update_exercices()
|
|
setInterval(() => my_exercicesP = update_exercices(), 62000);
|
|
|
|
async function update_exercices() {
|
|
const view = await getQAView(team);
|
|
my_exercices = [];
|
|
|
|
for (const v of view) {
|
|
v.queries = null;
|
|
v.queriesNSolved = 0;
|
|
v.queriesNClosed = 0;
|
|
getExerciceQA(v.id_exercice).then((queries) => {
|
|
v.queries = queries;
|
|
for (const q of queries) {
|
|
if (q.solved == null) v.queriesNSolved++;
|
|
if (q.closed == null) v.queriesNClosed++;
|
|
}
|
|
my_exercices.push(v);
|
|
my_exercices = my_exercices;
|
|
});
|
|
}
|
|
}
|
|
</script>
|
|
|
|
<div class={className}>
|
|
<button
|
|
class="btn btn-dark float-end"
|
|
on:click|preventDefault={() => my_exercicesP = update_exercices()}
|
|
>
|
|
↻
|
|
</button>
|
|
<h3>
|
|
{#if team}
|
|
Étapes de l'équipe
|
|
{:else}
|
|
Vos étapes
|
|
{/if}
|
|
</h3>
|
|
{#await my_exercicesP}
|
|
<div class="text-center">
|
|
<Spinner size="lg" />
|
|
</div>
|
|
{:then}
|
|
<table class="table table-stripped table-hover">
|
|
<thead>
|
|
<tr>
|
|
<th>Défi</th>
|
|
<th>Requêtes</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
{#each my_exercices as todo (todo.id)}
|
|
<tr
|
|
class:table-success={todo.queries && todo.queries.length > 0}
|
|
class:table-warning={todo.queriesNSolved > 0}
|
|
on:click={() => show(todo.id_exercice)}
|
|
>
|
|
<td>
|
|
{#if $exercicesIdx.length == 0 && $themesIdx.length == 0}
|
|
<Spinner size="sm" />
|
|
{:else if $themesIdx[$exercicesIdx[todo.id_exercice]]}
|
|
<a href="themes/{$exercicesIdx[todo.id_exercice].id_theme}">
|
|
{$themesIdx[$exercicesIdx[todo.id_exercice].id_theme].name}
|
|
</a>
|
|
–
|
|
{/if}
|
|
{#if $exercicesIdx.length == 0}
|
|
<Spinner size="sm" />
|
|
{:else if $exercicesIdx[todo.id_exercice]}
|
|
{$exercicesIdx[todo.id_exercice].title}
|
|
{/if}
|
|
</td>
|
|
<td>
|
|
{#if todo.queries && todo.queries.length}
|
|
{todo.queriesNSolved} / {todo.queriesNClosed}
|
|
{:else}
|
|
0
|
|
{/if}
|
|
</td>
|
|
</tr>
|
|
{/each}
|
|
</tbody>
|
|
</table>
|
|
{/await}
|
|
</div>
|