This repository has been archived on 2024-03-28. You can view files and clone it, but cannot push or open issues or pull requests.
atsebay.t/ui/src/lib/components/SurveyAdmin.svelte

174 lines
6.1 KiB
Svelte
Raw Normal View History

2021-11-18 11:12:28 +00:00
<script>
import { createEventDispatcher } from 'svelte';
import { goto } from '$app/navigation';
import { getCategories } from '$lib/categories';
2022-11-18 14:38:50 +00:00
import { getQuestions } from '$lib/questions';
import DateTimeInput from './DateTimeInput.svelte';
2022-11-18 14:38:50 +00:00
import { ToastsStore } from '$lib/stores/toasts';
2022-02-28 18:00:30 +00:00
2021-11-18 11:12:28 +00:00
const dispatch = createEventDispatcher();
export let survey = null;
function saveSurvey() {
survey.save().then((response) => {
2022-03-01 19:21:49 +00:00
dispatch('saved', response);
2021-11-18 11:12:28 +00:00
}, (error) => {
2022-03-01 12:16:20 +00:00
ToastsStore.addErrorToast({
msg: error,
2022-03-01 12:16:20 +00:00
});
2021-11-18 11:12:28 +00:00
})
}
let deleteInProgress = false;
2021-11-18 11:12:28 +00:00
function deleteSurvey() {
deleteInProgress = true;
2021-11-18 11:12:28 +00:00
survey.delete().then((response) => {
deleteInProgress = false;
2021-11-18 11:12:28 +00:00
goto(`surveys`);
}, (error) => {
deleteInProgress = false;
2022-03-01 12:16:20 +00:00
ToastsStore.addErrorToast({
msg: error,
2022-03-01 12:16:20 +00:00
});
2021-11-18 11:12:28 +00:00
})
}
function duplicateSurvey() {
survey.duplicate().then((response) => {
goto(`surveys/${response.id}`);
}).catch((error) => {
2022-03-01 12:16:20 +00:00
ToastsStore.addErrorToast({
msg: error,
2022-03-01 12:16:20 +00:00
});
2021-11-18 11:12:28 +00:00
})
}
</script>
<form on:submit|preventDefault={saveSurvey}>
2022-03-01 19:21:49 +00:00
{#if survey.id}
<div class="row">
<div class="col-sm-3 text-sm-end">
<label for="title" class="col-form-label col-form-label-sm">Identifiant du questionnaire</label>
</div>
<div class="col-sm-8">
<input type="text" class="form-control-plaintext form-control-sm" id="title" value={survey.id}>
</div>
</div>
{/if}
2021-11-18 11:12:28 +00:00
<div class="row">
<div class="col-sm-3 text-sm-end">
<label for="title" class="col-form-label col-form-label-sm">Titre du questionnaire</label>
</div>
2022-03-01 19:21:49 +00:00
<div class="col-sm-8">
2021-11-18 11:12:28 +00:00
<input type="text" class="form-control form-control-sm" id="title" bind:value={survey.title}>
</div>
</div>
<div class="row">
<div class="col-sm-3 text-sm-end">
<label for="category" class="col-form-label col-form-label-sm">Catégorie</label>
</div>
<div class="col-sm-8 col-md-4 col-lg-2">
{#await getCategories() then categories}
<select id="category" class="form-select form-select-sm" bind:value={survey.id_category}>
{#each categories as category (category.id)}
<option value={category.id}>{category.label} {category.promo}</option>
{/each}
</select>
{/await}
</div>
</div>
2021-11-18 11:12:28 +00:00
<div class="row">
<div class="col-sm-3 text-sm-end">
<label for="promo" class="col-form-label col-form-label-sm">Promo</label>
</div>
<div class="col-sm-8 col-md-4 col-lg-2">
<input type="number" step="1" min="0" max="2068" class="form-control form-control-sm" id="promo" bind:value={survey.promo}>
</div>
</div>
2022-02-21 07:53:27 +00:00
<div class="row">
<div class="col-sm-3 text-sm-end">
<label for="group" class="col-form-label col-form-label-sm">Restreindre au groupe</label>
</div>
<div class="col-sm-8 col-md-4 col-lg-2">
<input class="form-control form-control-sm" id="group" bind:value={survey.group}>
</div>
</div>
2022-03-01 19:21:49 +00:00
{#if survey.id}
<div class="row">
<div class="col-sm-3 text-sm-end">
<label for="direct" class="col-form-label col-form-label-sm">Question en direct</label>
</div>
<div class="col-sm-8">
{#await getQuestions(survey.id) then questions}
<select id="direct" class="form-select form-select-sm" bind:value={survey.direct}>
<option value={null}>Pas de direct</option>
<option value={0}>Pause</option>
{#each questions as question (question.id)}
<option value={question.id}>{question.id} - {question.title}</option>
{/each}
</select>
{/await}
</div>
2022-02-28 18:00:30 +00:00
</div>
2022-03-01 19:21:49 +00:00
{/if}
2022-02-28 18:00:30 +00:00
2021-11-18 11:12:28 +00:00
<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>
</div>
<div class="col-sm-8">
<DateTimeInput class="form-control form-control-sm" id="start_availability" bind:date={survey.start_availability} />
2021-11-18 11:12:28 +00:00
</div>
</div>
<div class="row">
<div class="col-sm-3 text-sm-end">
<label for="end_availability" class="col-form-label col-form-label-sm">Date de fin</label>
</div>
<div class="col-8">
<DateTimeInput class="form-control form-control-sm" id="end_availability" bind:date={survey.end_availability} />
2021-11-18 11:12:28 +00:00
</div>
</div>
<div class="row row-cols-3 mx-1 my-2">
<div class="form-check">
<input class="form-check-input" type="checkbox" id="shown" bind:checked={survey.shown}>
<label class="form-check-label" for="shown">
Afficher le questionnaire
</label>
</div>
<div class="form-check">
<input class="form-check-input" type="checkbox" id="corrected" bind:checked={survey.corrected}>
<label class="form-check-label" for="corrected">
Marqué comme corrigé
</label>
</div>
</div>
<div class="form-group row">
<div class="col-sm-10">
<button type="submit" class="btn btn-primary">Enregistrer</button>
{#if survey.id}
<button type="button" class="btn btn-danger" on:click={deleteSurvey} disabled={deleteInProgress}>
{#if deleteInProgress}
<div class="spinner-border spinner-border-sm text-light me-1" role="status"></div>
{/if}
Supprimer
</button>
2021-11-18 11:12:28 +00:00
<button type="button" class="btn btn-secondary" on:click={duplicateSurvey}>Dupliquer avec ces nouveaux paramètres</button>
{/if}
</div>
</div>
</form>
<hr>