More dynamic submission page

This commit is contained in:
nemunaire 2022-09-05 10:12:39 +02:00
parent 0042d373f6
commit 8b0043dc8d
2 changed files with 53 additions and 9 deletions

View File

@ -1,8 +1,12 @@
<script> <script>
import { createEventDispatcher } from 'svelte';
import DateFormat from '../components/DateFormat.svelte'; import DateFormat from '../components/DateFormat.svelte';
import { WorkRepository, getRemoteRepositories, getRepositories } from '../lib/repositories'; import { WorkRepository, getRemoteRepositories, getRepositories } from '../lib/repositories';
import { ToastsStore } from '../stores/toasts'; import { ToastsStore } from '../stores/toasts';
const dispatch = createEventDispatcher();
let className = ''; let className = '';
export { className as class }; export { className as class };
@ -21,6 +25,8 @@
repo_pull_state.then((state) => { repo_pull_state.then((state) => {
if (state.status == "pending" || state.status == "running") { if (state.status == "pending" || state.status == "running") {
setTimeout(() => updatePullState(repo), state.status == "pending" ? 1000 : 3000); setTimeout(() => updatePullState(repo), state.status == "pending" ? 1000 : 3000);
} else if (state.status == "success") {
dispatch('update_submission');
} }
}) })
} }

View File

@ -23,6 +23,15 @@
export let work = null; export let work = null;
let edit = false; let edit = false;
let my_submission = null;
work.then((w) => {
refresh_submission(w);
})
function refresh_submission(w) {
my_submission = w.getSubmission();
}
</script> </script>
{#await work then w} {#await work then w}
@ -95,6 +104,28 @@
<dd><DateFormat date={new Date(w.start_availability)} dateStyle="medium" timeStyle="medium" /></dd> <dd><DateFormat date={new Date(w.start_availability)} dateStyle="medium" timeStyle="medium" /></dd>
<dt>Date de fin</dt> <dt>Date de fin</dt>
<dd><DateFormat date={new Date(w.end_availability)} dateStyle="medium" timeStyle="medium" /></dd> <dd><DateFormat date={new Date(w.end_availability)} dateStyle="medium" timeStyle="medium" /></dd>
<dt>Rendu&nbsp;?</dt>
<dd>
{#if w.submission_url}
<SubmissionStatus work={w} />
{:else}
{#await my_submission}
<div class="spinner-grow spinner-grow-sm mx-1" role="status"></div>
{:then submission}
<i
class="bi bi-check-circle text-success"
title="Oui !"
></i>
<DateFormat date={new Date(submission.date)} dateStyle="medium" timeStyle="medium" />
{:catch}
<i
class="bi bi-x-circle text-danger"
title="Pas de rendu trouvé"
></i>
Non
{/await}
{/if}
</dd>
</dl> </dl>
{#if w.description} {#if w.description}
<hr> <hr>
@ -124,7 +155,7 @@
{/if} {/if}
{/if} {/if}
<WorkRepository class="mb-3" readonly={w.corrected || new Date(w.end_availability) <= new Date()} work={w} /> <WorkRepository class="mb-3" readonly={w.corrected || new Date(w.end_availability) <= new Date()} work={w} on:update_submission={() => refresh_submission(w)} />
<div class="card mb-3"> <div class="card mb-3">
<div class="card-body d-flex justify-content-between"> <div class="card-body d-flex justify-content-between">
<div> <div>
@ -132,7 +163,7 @@
<strong>État du rendu&nbsp;:</strong> <SubmissionStatus work={w} /> <strong>État du rendu&nbsp;:</strong> <SubmissionStatus work={w} />
{:else} {:else}
Rendu&nbsp;: Rendu&nbsp;:
{#await w.getSubmission()} {#await my_submission}
<div class="spinner-grow spinner-grow-sm mx-1" role="status"></div> <div class="spinner-grow spinner-grow-sm mx-1" role="status"></div>
{:then submission} {:then submission}
<strong>{submission.commit} ({submission.tag})</strong> (taille&nbsp;: {submission.size}&nbsp;o, date&nbsp;: <DateFormat date={new Date(submission.date)} dateStyle="medium" timeStyle="medium" />) <strong>{submission.commit} ({submission.tag})</strong> (taille&nbsp;: {submission.size}&nbsp;o, date&nbsp;: <DateFormat date={new Date(submission.date)} dateStyle="medium" timeStyle="medium" />)
@ -142,13 +173,20 @@
{/if} {/if}
</div> </div>
<div class="d-flex flex-column justify-content-center"> <div class="d-flex flex-column justify-content-center">
<a {#await my_submission then submission}
href="/api/works/{w.id}/download" <a
class="btn btn-sm btn-dark" href="/api/works/{w.id}/download"
title="Voir la tarball de mon rendu" class="btn btn-sm btn-dark"
> title="Voir la tarball de mon rendu"
<i class="bi bi-download"></i> >
</a> <i class="bi bi-download"></i>
</a>
{:catch}
<i
class="bi bi-x-circle text-danger"
title="Pas de rendu trouvé"
></i>
{/await}
</div> </div>
</div> </div>
</div> </div>