fix ranking order + display winning gifs

This commit is contained in:
2026-05-22 06:32:18 +02:00
parent 92dddca964
commit 4ba6a48246
13 changed files with 56 additions and 127 deletions
@@ -52,6 +52,12 @@ const getRankBadge = (rank: number) => {
return badges[rank - 1] || `#${rank}`;
};
const getWinnersForPuzzle = (puzzle: any) => {
if (!puzzle.submissions || puzzle.submissions.length === 0) return [];
const topPoints = puzzle.submissions[0].rank_points;
return puzzle.submissions.filter((submission: any) => submission.rank_points === topPoints);
};
onMounted(() => {
fetchResults();
});
@@ -99,6 +105,26 @@ onMounted(() => {
</div>
</div>
</div>
<!-- Winners GIF Display (all with same top points) -->
<div v-if="puzzle.submissions.length > 0 && getWinnersForPuzzle(puzzle).length > 0"
class="bg-base-200 p-4 rounded-lg">
<p class="text-xs text-base-content/70 font-semibold mb-3 text-center">🏆 Winning Solutions</p>
<div class="flex flex-wrap justify-center gap-6">
<template v-for="submission in getWinnersForPuzzle(puzzle)"
:key="`${puzzle.puzzle_id}-${submission.user_id}`">
<div v-if="submission && submission.files && submission.files.length > 0" class="text-center w-96">
<div class="text-sm text-base-content/70 mb-3 font-semibold truncate">{{ submission.username }}
</div>
<button @click="openImageModal(submission.files[0].file_url, submission.files[0].original_filename)"
class="hover:opacity-80 transition-opacity cursor-pointer w-full flex items-center justify-center">
<img :src="submission.files[0].file_url" :alt="`${puzzle.puzzle_title} - ${submission.username}`"
class="max-h-full max-w-full object-contain" />
</button>
</div>
</template>
</div>
</div>
</div>
<!-- Results Table -->
@@ -5,7 +5,6 @@ import type {
PuzzleResponse,
SubmissionFile,
UserInfo,
TournamentWinners,
TournamentSubmissions,
TournamentPuzzleResults
} from '../types'
@@ -109,10 +108,6 @@ export class ApiService {
return this.request<SteamCollection>('/submissions/collection')
}
async getWinners(): Promise<ApiResponse<TournamentWinners>> {
return this.request<TournamentWinners>('/results/winners')
}
async getTopSubmissions(limit = 5): Promise<ApiResponse<TournamentSubmissions>> {
return this.request<TournamentSubmissions>(`/results/top-submissions?limit=${limit}`)
}
-10
View File
@@ -125,16 +125,6 @@ export interface WinnerResponse {
files: WinnerFile[]
}
export interface PuzzleWinner {
puzzle_id: number
puzzle_title: string
winner?: WinnerResponse
}
export interface TournamentWinners {
winners: PuzzleWinner[]
}
export interface PuzzleSubmissions {
puzzle_id: number
puzzle_title: string