fix ranking order + display winning gifs
This commit is contained in:
@@ -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}`)
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user