🐛 Fixed bug with player sort when one username can be number

This commit is contained in:
Proxyfil
2026-03-20 19:08:07 +01:00
parent a179fa8b75
commit 9f2e882991
3 changed files with 21 additions and 25 deletions
@@ -19,17 +19,12 @@ SPDX-License-Identifier: MPL-2.0
} }
let { data = $bindable(), username, show_final_results }: Props = $props(); let { data = $bindable(), username, show_final_results }: Props = $props();
let sorted_data = $derived(sortObjectbyValue(data));
function sortObjectbyValue(obj: object) { let player_names = $derived(Object.keys(data).sort((a, b) => {
const ret = {}; const scoreA = parseFloat(data[a]) || 0;
Object.keys(obj) const scoreB = parseFloat(data[b]) || 0;
.sort((a, b) => obj[b] - obj[a]) return scoreB - scoreA;
.forEach((s) => (ret[s] = obj[s])); }));
return ret;
}
let player_names = $derived(Object.keys(sorted_data));
let player_count_or_five = $derived(player_names.length >= 5 ? 5 : player_names.length); let player_count_or_five = $derived(player_names.length >= 5 ? 5 : player_names.length);
@@ -61,13 +56,13 @@ SPDX-License-Identifier: MPL-2.0
{$t('play_page.final_result_rank', { {$t('play_page.final_result_rank', {
place: i + 1, place: i + 1,
username: player, username: player,
points: sorted_data[player] points: data[player]
})} })}
</p> </p>
{/if} {/if}
{/each} {/each}
</div> </div>
{#if sorted_data[username]} {#if data[username]}
<div class="fixed bottom-0 left-0 flex justify-center w-full mb-6"> <div class="fixed bottom-0 left-0 flex justify-center w-full mb-6">
<div class="mx-auto p-2 border-[#B07156] border-4 rounded-sm"> <div class="mx-auto p-2 border-[#B07156] border-4 rounded-sm">
<p class="text-center">{$t('play_page.your_score', { score: data[username] })}</p> <p class="text-center">{$t('play_page.your_score', { score: data[username] })}</p>
+6 -12
View File
@@ -29,16 +29,6 @@ SPDX-License-Identifier: MPL-2.0
let { data = $bindable(), question, new_data }: Props = $props(); let { data = $bindable(), question, new_data }: Props = $props();
function sortObjectbyValue(obj: object) {
const ret = {};
Object.keys(obj)
.sort((a, b) => obj[b] - obj[a])
.forEach((s) => (ret[s] = obj[s]));
return ret;
}
let sorted_data = $derived(sortObjectbyValue(data));
// let data_by_username = {}; // let data_by_username = {};
const group_username_by_score = (new_d: any[]): object => { const group_username_by_score = (new_d: any[]): object => {
@@ -50,7 +40,11 @@ SPDX-License-Identifier: MPL-2.0
}; };
let score_by_username = $derived(group_username_by_score(new_data)); let score_by_username = $derived(group_username_by_score(new_data));
let player_names = $derived(Object.keys(sorted_data)); let player_names = $derived(Object.keys(data).sort((a, b) => {
const scoreA = parseFloat(data[a]) || 0;
const scoreB = parseFloat(data[b]) || 0;
return scoreB - scoreA;
}));
if (JSON.stringify(data) === '{}') { if (JSON.stringify(data) === '{}') {
for (const i of new_data) { for (const i of new_data) {
@@ -111,7 +105,7 @@ SPDX-License-Identifier: MPL-2.0
<td class:hidden={i > 3} class="p-2 border-r border-r-black" <td class:hidden={i > 3} class="p-2 border-r border-r-black"
>{player}</td >{player}</td
> >
<td class:hidden={i > 3} class="p-2">{sorted_data[player]}</td> <td class:hidden={i > 3} class="p-2">{data[player]}</td>
{#if show_new_score_clicked} {#if show_new_score_clicked}
<td <td
in:fly|global={{ x: 300 }} in:fly|global={{ x: 300 }}
@@ -20,7 +20,14 @@ SPDX-License-Identifier: MPL-2.0
let { scores, custom_field, answers }: Props = $props(); let { scores, custom_field, answers }: Props = $props();
let usernames = Object.keys(scores); 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 = {}; const correctCounts = {};
answers.forEach((questionAnswers) => { answers.forEach((questionAnswers) => {
questionAnswers.forEach((answer) => { questionAnswers.forEach((answer) => {