Skip to content
Extraits de code Groupes Projets
Valider 10fd96ae rédigé par Brieuc Dubois's avatar Brieuc Dubois
Parcourir les fichiers

WIP questions

parent f5677b8d
Branches Tests
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
<script lang="ts">
import { t } from '$lib/services/i18n';
import type { PageData } from './$types';
import type TestTaskGroup from '$lib/types/testTaskGroups';
const { data }: { data: PageData } = $props();
let groups: TestTaskGroup[] = $state(data.groups);
</script>
<h1 class="text-xl font-bold m-5 text-center">{$t('header.admin.groups')}</h1>
<table class="table max-w-5xl mx-auto text-left">
<thead>
<tr>
<th>#</th>
<th>{$t('utils.words.title')}</th>
<th>{$t('utils.words.demo')}</th>
<th>{$t('utils.words.randomize')}</th>
<th class="capitalize"># {$t('utils.words.questions')}</th>
</tr>
</thead>
<tbody>
{#each groups as group (group.id)}
<tr
class="hover:bg-gray-100 hover:cursor-pointer"
onclick={() => (window.location.href = `/admin/tests/groups/${group.id}`)}
>
<td>{group.id}</td>
<td>{group.title}</td>
<td>{$t(`utils.bool.${group.demo}`)}</td>
<td>{$t(`utils.bool.${group.randomize}`)}</td>
<td>{group.questions.length}</td>
</tr>
{/each}
</tbody>
</table>
<div class="mt-8 mx-auto w-[64rem] flex justify-between pb-8">
<a class="button" href="/admin/tests/groups/new">{$t('tests.groups.create')}</a>
<span>
<a class="btn" href="/admin/tests">{$t('tests.groups.backtotests')}</a>
<a class="btn" href="/admin/tests/groups/questions">{$t('tests.questions.manage')}</a>
</span>
</div>
import { getTestQuestionsAPI } from '$lib/api/tests';
import { type Load } from '@sveltejs/kit';
import { TestTaskQuestion } from '$lib/types/testTaskQuestions';
export const load: Load = async ({ fetch }) => {
const questionsRaw = await getTestQuestionsAPI(fetch);
const questions = TestTaskQuestion.parseAll(questionsRaw);
return {
questions
};
};
import { redirect, type Actions } from '@sveltejs/kit';
import { updateTestTaskGroupAPI } from '$lib/api/tests';
export const actions: Actions = {
default: async ({ request, fetch }) => {
const formData = await request.formData();
const idStr = formData.get('id')?.toString();
const title = formData.get('title')?.toString();
const demo = formData.get('demo')?.toString() == 'on';
const randomize = formData.get('randomize')?.toString() == 'on';
if (!idStr || !title) {
return {
message: 'Invalid request: Missing required fields'
};
}
const id = parseInt(idStr, 10);
if (isNaN(id)) {
return {
message: 'Invalid request: Invalid ID'
};
}
const questions = formData
.getAll('questions[]')
.map((question) => parseInt(question.toString(), 10))
.filter((question) => !isNaN(question));
const ok = await updateTestTaskGroupAPI(fetch, id, title, demo, randomize, questions);
if (!ok) {
return {
message: 'Error updating test task group'
};
}
return redirect(303, `/admin/tests/groups`);
}
};
<script lang="ts">
import GroupForm from '$lib/components/tests/GroupForm.svelte';
import type { PageData } from './$types';
const { data, form }: { data: PageData; form: FormData } = $props();
const { group, possibleQuestions } = data;
</script>
<GroupForm {group} {possibleQuestions} message={form?.message} />
import { getTestQuestionsAPI, getTestTaskGroupAPI } from '$lib/api/tests';
import TestTaskGroup from '$lib/types/testTaskGroups';
import { TestTaskQuestion } from '$lib/types/testTaskQuestions';
import { error, type Load } from '@sveltejs/kit';
export const load: Load = async ({ fetch, params }) => {
const idStr = params?.id;
if (!idStr) {
return error(400, 'Invalid ID');
}
const id = parseInt(idStr, 10);
if (isNaN(id)) {
return error(400, 'Invalid ID');
}
const groupRaw = await getTestTaskGroupAPI(fetch, id);
if (!groupRaw) {
return error(404, 'Group not found');
}
const group = TestTaskGroup.parse(groupRaw);
const questionsRaw = await getTestQuestionsAPI(fetch);
const questions = TestTaskQuestion.parseAll(questionsRaw);
return { group, possibleQuestions: questions };
};
import { redirect, type Actions } from '@sveltejs/kit';
import { createTestTaskGroupAPI } from '$lib/api/tests';
export const actions: Actions = {
default: async ({ request, fetch }) => {
const formData = await request.formData();
const title = formData.get('title')?.toString();
const demo = formData.get('demo')?.toString() == 'on';
const randomize = formData.get('randomize')?.toString() == 'on';
if (!title) {
return {
message: 'Invalid request: Missing required fields'
};
}
const questions = formData
.getAll('questions[]')
.map((question) => parseInt(question.toString(), 10))
.filter((question) => !isNaN(question));
const id = await createTestTaskGroupAPI(fetch, title, demo, randomize, questions);
if (id === null) {
return {
message: 'Error creating test task group'
};
}
return redirect(303, `/admin/tests/groups`);
}
};
<script lang="ts">
import GroupForm from '$lib/components/tests/GroupForm.svelte';
const { data, form }: { data: PageData; form: FormData } = $props();
const { possibleQuestions } = data;
</script>
<GroupForm group={null} {possibleQuestions} message={form?.message} />
import { getTestQuestionsAPI } from '$lib/api/tests';
import { TestTaskQuestion } from '$lib/types/testTaskQuestions';
import { type Load } from '@sveltejs/kit';
export const load: Load = async ({ fetch }) => {
const questionsRaw = await getTestQuestionsAPI(fetch);
const questions = TestTaskQuestion.parseAll(questionsRaw);
return { possibleQuestions: questions };
};
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter