diff --git a/frontend/src/lib/admin.svelte b/frontend/src/lib/admin.svelte index d5d1f74..8952b3a 100644 --- a/frontend/src/lib/admin.svelte +++ b/frontend/src/lib/admin.svelte @@ -6,7 +6,7 @@ -{#if timer_res === undefined} - Select a question to start! -{:else if !final_results_clicked} +{#if timer_res !== undefined && !final_results_clicked}
{$t('admin_page.time_left')}: {timer_res}
@@ -89,6 +89,12 @@ >{$t('admin_page.get_results')} + {:else if question_results === undefined} + {#if !final_results_clicked} +
+

{$t('admin_page.no_answers')}

+
+ {/if} {:else}
diff --git a/frontend/src/lib/admin.ts b/frontend/src/lib/admin.ts index 4e52258..e5a58ce 100644 --- a/frontend/src/lib/admin.ts +++ b/frontend/src/lib/admin.ts @@ -23,21 +23,6 @@ export const getWinnersSorted = ( ) => { const winners = {}; const q_count = quiz_data.questions.length; - for (let i = 0; i < q_count; i++) { - const q_res = final_results[i]; - if (q_res === null) { - continue; - } - for (let j = 0; j < q_res.length; j++) { - const res = q_res[j]; - if (res['right']) { - if (winners[res['username']] === undefined) { - winners[res['username']] = 0; - } - winners[res['username']] += 1; - } - } - } function sortObjectbyValue(obj) { const asc = false; @@ -48,7 +33,27 @@ export const getWinnersSorted = ( return ret; } - return sortObjectbyValue(winners); + try { + for (let i = 0; i < q_count; i++) { + const q_res = final_results[i]; + if (q_res === null) { + continue; + } + for (let j = 0; j < q_res.length; j++) { + const res = q_res[j]; + if (res['right']) { + if (winners[res['username']] === undefined) { + winners[res['username']] = 0; + } + winners[res['username']] += 1; + } + } + } + + return sortObjectbyValue(winners); + } catch { + return undefined; + } }; export interface Player { diff --git a/frontend/src/lib/i18n/locales/en.json b/frontend/src/lib/i18n/locales/en.json index e3c50ca..1d97942 100644 --- a/frontend/src/lib/i18n/locales/en.json +++ b/frontend/src/lib/i18n/locales/en.json @@ -132,7 +132,8 @@ "get_final_results": "Get final results", "export_results": "Export results", "show_next_question": "Show next question", - "start_by_showing_first_question": "Start by showing the first question!" + "start_by_showing_first_question": "Start by showing the first question!", + "no_answers": "No answers!" }, "password_reset_page": { "reset_password": "Reset password" diff --git a/frontend/src/lib/play/end.svelte b/frontend/src/lib/play/end.svelte index e625444..76b6407 100644 --- a/frontend/src/lib/play/end.svelte +++ b/frontend/src/lib/play/end.svelte @@ -18,24 +18,17 @@ right: string; } + let data_available = false; + const getWinnersSorted = () => { let winners = {}; let q_count = quiz_data.questions.length; - for (let i = 0; i < q_count; i++) { - let q_res = final_results[i]; - if (q_res === null) { - continue; - } - for (let j = 0; j < q_res.length; j++) { - let res = q_res[j]; - if (res['right']) { - if (winners[res['username']] === undefined) { - winners[res['username']] = 0; - } - winners[res['username']] += 1; - } - } - } + console.log( + JSON.stringify(final_results), + JSON.stringify(final_results) === '{}', + 'HI!!!!!', + JSON.stringify(final_results) === JSON.stringify({}) + ); function sortObjectbyValue(obj) { const asc = false; @@ -46,43 +39,71 @@ return ret; } - return sortObjectbyValue(winners); + try { + for (let i = 0; i < q_count; i++) { + let q_res = final_results[i]; + if (q_res === null) { + continue; + } + for (let j = 0; j < q_res.length; j++) { + let res = q_res[j]; + if (res['right']) { + if (winners[res['username']] === undefined) { + winners[res['username']] = 0; + } + winners[res['username']] += 1; + } + } + } + winners_arr = Object.keys(winners); + data_available = true; + return sortObjectbyValue(winners); + } catch { + data_available = false; + } }; let winners = getWinnersSorted(); - let winners_arr = Object.keys(winners); - console.log(winners); + let winners_arr;

{$t('play_page.end_sentence')}

- -
-
-

- {$t('play_page.1st_place')}: {winners_arr[0]} - with {winners[winners_arr[0]]} out of {quiz_data.questions.length} -

+ {#if data_available} +
+
+

+ {$t('play_page.1st_place')}: {winners_arr[0]} + with {winners[winners_arr[0]]} out of {quiz_data.questions.length} +

+
+ {#if winners_arr.length >= 2} +
+

+ {$t('play_page.2nd_place')}: {winners_arr[1]} + with {winners[winners_arr[1]]} out of {quiz_data.questions + .length} +

+
+ {/if} + {#if winners_arr.length >= 3} +
+

+ {$t('play_page.3rd place')}: {winners_arr[2]} + + {$t('play_page.with_out_of', { + correct_questions: winners[winners_arr[2]], + total_question_count: quiz_data.questions.length + })} + +

+
+ {/if}
- {#if winners_arr.length >= 2} -
-

- {$t('play_page.2nd_place')}: {winners_arr[1]} - with {winners[winners_arr[1]]} out of {quiz_data.questions.length} -

-
- {/if} - {#if winners_arr.length >= 3} -
-

- {$t('play_page.3rd place')}: {winners_arr[2]} - - {$t('play_page.with_out_of', { - correct_questions: winners[winners_arr[2]], - total_question_count: quiz_data.questions.length - })} - -

-
- {/if} -
+ {:else} +
+

{$t('admin_page.no_answers')}

+
+ {/if}
diff --git a/frontend/src/routes/admin/+page.svelte b/frontend/src/routes/admin/+page.svelte index 391a2a4..e2045c0 100644 --- a/frontend/src/routes/admin/+page.svelte +++ b/frontend/src/routes/admin/+page.svelte @@ -29,7 +29,7 @@ let game_started = false; let quiz_data: QuizData; //let question_number = '0'; - let question_results = null; + // let question_results = null; let final_results: Array | Array> = [null]; let success = false; let dataexport_download_a; @@ -58,7 +58,7 @@ errorMessage = $t('admin_page.already_registered_as_admin'); }); - socket.on('question_results', (int_data) => { + /* socket.on('question_results', (int_data) => { try { int_data = JSON.parse(int_data); } catch (e) { @@ -66,7 +66,7 @@ return; } question_results = int_data; - }); + });*/ socket.on('export_token', (int_data) => { warnToLeave = false; dataexport_download_a.href = `/api/v1/quiz/export_data/${int_data}?ts=${new Date().getTime()}&game_pin=${game_pin}`; diff --git a/frontend/src/routes/play/+page.svelte b/frontend/src/routes/play/+page.svelte index 0db51b1..2d11cf2 100644 --- a/frontend/src/routes/play/+page.svelte +++ b/frontend/src/routes/play/+page.svelte @@ -9,6 +9,9 @@ import { navbarVisible } from '$lib/stores'; import ShowEndScreen from '$lib/play/end.svelte'; import { QuizQuestionType } from '$lib/quiz_types'; + import { getLocalization } from '$lib/i18n'; + + const { t } = getLocalization(); // Exports export let data; @@ -83,7 +86,11 @@ socket.on('question_results', (data) => { restart(); - answer_results = JSON.parse(data); + try { + answer_results = JSON.parse(data); + } catch { + answer_results = null; + } }); socket.on('final_results', (data) => { @@ -124,12 +131,18 @@ /> {/key} {:else if gameMeta.started && answer_results !== undefined} - {#key unique} - - {/key} + {#if answer_results === null} +
+

{$t('admin_page.no_answers')}

+
+ {:else} + {#key unique} + + {/key} + {/if} {/if}