New field added for works to store gradation repository
Some checks are pending
continuous-integration/drone/push Build is running

This commit is contained in:
nemunaire 2023-01-01 15:26:58 +01:00
commit 6def3de983
7 changed files with 97 additions and 10 deletions

View file

@ -3,6 +3,7 @@
import { goto } from '$app/navigation';
import { getCategories } from '$lib/categories';
import { getGradationRepositories, syncGradationRepositories } from '$lib/gradation';
import DateTimeInput from './DateTimeInput.svelte';
import { ToastsStore } from '$lib/stores/toasts';
@ -39,6 +40,7 @@
})
}
let grepositoriesP = getGradationRepositories();
</script>
<form on:submit|preventDefault={saveWork}>
@ -109,11 +111,41 @@
<div class="col-sm-3 text-sm-end">
<label for="submissionurl" class="col-form-label col-form-label-sm">URL validation la soumission</label>
</div>
<div class="col-sm-8 col-md-4 col-lg-2">
<div class="col-sm-10 col-md-8 col-lg-4">
<input class="form-control form-control-sm" id="submissionurl" bind:value={work.submission_url}>
</div>
</div>
<div class="row">
<div class="col-sm-3 text-sm-end">
<label for="gradationrepo" class="col-form-label col-form-label-sm">Dépôt des tests automatiques</label>
</div>
<div class="col-sm-10 col-md-8 col-lg-4 d-flex align-items-center">
{#await grepositoriesP}
<div class="spinner-border spinner-border-sm" role="status">
<span class="visually-hidden">Loading...</span>
</div>
{:then grepositories}
<div class="input-group">
<select class="form-select form-select-sm" id="gradationrepo" bind:value={work.gradation_repo}>
<option value={null}>-</option>
{#each grepositories as r}
<option value={r.slug}>{r.slug}</option>
{/each}
</select>
<button
type="button"
class="btn btn-light btn-sm"
title="Synchroniser les dépôts"
on:click={() => grepositoriesP = syncGradationRepositories()}
>
<i class="bi bi-arrow-repeat"></i>
</button>
</div>
{/await}
</div>
</div>
<div class="row">
<div class="col-sm-3 text-sm-end">
<label for="start_availability" class="col-form-label col-form-label-sm">Date de début</label>

19
ui/src/lib/gradation.js Normal file
View file

@ -0,0 +1,19 @@
export async function getGradationRepositories() {
let url = '/api/gradation_repositories';
const res = await fetch(url, {headers: {'Accept': 'application/json'}})
if (res.status == 200) {
return await res.json();
} else {
throw new Error((await res.json()).errmsg);
}
}
export async function syncGradationRepositories() {
let url = '/api/gradation_repositories/sync';
const res = await fetch(url, {method: 'post', headers: {'Accept': 'application/json'}})
if (res.status == 200) {
return await res.json();
} else {
throw new Error((await res.json()).errmsg);
}
}

View file

@ -6,7 +6,7 @@ export class Work {
}
}
update({ id, id_category, title, promo, group, shown, tag, description, descr_raw, submission_url, corrected, start_availability, end_availability }) {
update({ id, id_category, title, promo, group, shown, tag, description, descr_raw, submission_url, gradation_repo, corrected, start_availability, end_availability }) {
this.id = id;
this.id_category = id_category;
this.title = title;
@ -17,6 +17,7 @@ export class Work {
this.description = description;
this.descr_raw = descr_raw;
this.submission_url = submission_url;
this.gradation_repo = gradation_repo;
this.corrected = corrected;
if (this.start_availability != start_availability) {
this.start_availability = start_availability;