Files
classquiz-ai/frontend/src/lib/editor/AddNewQuestionPopup.svelte
T
2023-06-30 13:16:12 +02:00

116 lines
2.7 KiB
Svelte

<!--
SPDX-FileCopyrightText: 2023 Marlon W (Mawoka)
SPDX-License-Identifier: MPL-2.0
-->
<script lang="ts">
import type { Answers, Question } from '$lib/quiz_types';
import { QuizQuestionType } from '$lib/quiz_types';
import { onMount } from 'svelte';
import { fade } from 'svelte/transition';
import { getLocalization } from '$lib/i18n';
export let questions: Question[];
export let open: boolean;
const { t } = getLocalization();
onMount(() => {
document.body.addEventListener('keydown', close_start_game_if_esc_is_pressed);
});
const close_start_game_if_esc_is_pressed = (key: KeyboardEvent) => {
if (key.code === 'Escape') {
open = false;
}
};
const on_parent_click = (e: Event) => {
if (e.target === e.currentTarget) {
open = false;
}
};
const question_types: {
name: string;
description: string;
answers: Answers;
type: QuizQuestionType;
}[] = [
{
name: $t('words.multiple_choice'),
description: $t('editor.abcd_description'),
answers: [],
type: QuizQuestionType.ABCD
},
{
name: $t('words.voting'),
description: $t('editor.voting_description'),
answers: [],
type: QuizQuestionType.VOTING
},
{
name: $t('words.check_choice'),
description: $t('editor.check_choice_description'),
answers: [],
type: QuizQuestionType.CHECK
},
{
name: $t('words.order'),
description: $t('editor.order_description'),
answers: [],
type: QuizQuestionType.ORDER
},
{
name: $t('words.text'),
description: $t('editor.text_description'),
answers: [],
type: QuizQuestionType.TEXT
},
{
name: $t('words.range'),
description: $t('editor.range_description'),
answers: {
max: 10,
min: 0,
max_correct: 7,
min_correct: 3
},
type: QuizQuestionType.RANGE
}
];
const add_question = (index: number) => {
const empty_question: Question = {
type: question_types[index].type,
time: '20',
question: '',
image: undefined,
answers: question_types[index].answers
};
questions = [...questions, { ...empty_question }];
open = false;
};
</script>
<div
class="fixed top-0 left-0 w-screen h-screen flex bg-black z-50 bg-opacity-50"
on:click={on_parent_click}
transition:fade|local={{ duration: 100 }}
>
<div class="m-auto w-2/3 h-5/6 rounded shadow-2xl bg-white dark:bg-gray-600 p-6">
<h1 class="text-center text-3xl mb-6">{$t('quiztivity.editor.select_page_type')}</h1>
<div class="grid grid-cols-4 gap-4 overflow-y-scroll">
{#each question_types as qt, i}
<div class="rounded p-6 border-[#B07156] border">
<button
class="text-xl text-black dark:text-white"
on:click={() => {
add_question(i);
}}>{qt.name}</button
>
<p class="text-sm">{qt.description}</p>
</div>
{/each}
</div>
</div>
</div>