Files
classquiz-ai/frontend/src/routes/results/[result_id]/player_overview.svelte
T

83 lines
2.1 KiB
Svelte

<!--
SPDX-FileCopyrightText: 2023 Marlon W (Mawoka)
SPDX-License-Identifier: MPL-2.0
-->
<script lang="ts">
import { getLocalization } from '$lib/i18n';
const { t } = getLocalization();
interface Props {
scores: {
[key: string]: string;
};
custom_field: {
[key: string]: string;
};
answers: { [key: string]: any }[];
}
let { scores, custom_field, answers }: Props = $props();
let usernames = $derived(
Object.keys(scores).sort((a, b) => {
const scoreA = parseFloat(scores[a]) || 0;
const scoreB = parseFloat(scores[b]) || 0;
return scoreB - scoreA;
})
);
const correctCounts = {};
answers.forEach((questionAnswers) => {
questionAnswers.forEach((answer) => {
const user = answer.username;
if (!correctCounts[user]) {
correctCounts[user] = 0;
}
if (answer.right) {
correctCounts[user] += 1;
}
});
});
</script>
<div class="w-full">
<div class="flex justify-center w-full">
<table class="w-11/12 m-auto">
<thead>
<tr class="border-b-2 dark:border-gray-500 text-left border-gray-300">
<th class="border-r dark:border-gray-500 p-1 mx-auto border-gray-300"
>{$t('result_page.player_name')}
</th>
<th class="border-r dark:border-gray-500 p-1 mx-auto border-gray-300"
>{$t('result_page.player_correct_questions')}
</th>
<th class="p-1 mx-auto">{$t('result_page.player_score')}</th>
{#if Object.keys(custom_field).length !== 0}
<th class="border-l dark:border-gray-500 p-1 mx-auto border-gray-300"
>{$t('result_page.custom_field')}
</th>
{/if}
</tr>
</thead>
<tbody>
{#each usernames as uname}
<tr class="text-left">
<td class="border-r dark:border-gray-500 p-1 border-gray-300">{uname}</td>
<td class="border-r dark:border-gray-500 p-1 border-gray-300"
>{correctCounts[uname]}</td
>
<td class="p-1">{scores[uname]}</td>
{#if custom_field[uname]}
<td class="border-l dark:border-gray-500 p-1 border-gray-300"
>{custom_field[uname]}</td
>
{/if}
</tr>
{/each}
</tbody>
</table>
</div>
</div>