From 02160f8ff306ca7e961a612fa6f2e650b74afe67 Mon Sep 17 00:00:00 2001 From: Arthur Monney Date: Wed, 1 Jan 2025 10:24:49 +0100 Subject: [PATCH] fix: [LAR-150] bug on leader when list is not equal to 3 --- app/Livewire/Pages/Forum/Leaderboard.php | 32 +++++-- lang/en/pages/forum.php | 1 + lang/fr/pages/forum.php | 1 + .../pages/forum/leaderboard.blade.php | 91 ++++++++++--------- 4 files changed, 75 insertions(+), 50 deletions(-) diff --git a/app/Livewire/Pages/Forum/Leaderboard.php b/app/Livewire/Pages/Forum/Leaderboard.php index f6924bc0..2d63db9f 100644 --- a/app/Livewire/Pages/Forum/Leaderboard.php +++ b/app/Livewire/Pages/Forum/Leaderboard.php @@ -6,6 +6,7 @@ use App\Models\User; use Illuminate\Contracts\View\View; +use Illuminate\Database\Eloquent\Collection; use Illuminate\Support\Facades\Cache; use Livewire\Attributes\Layout; use Livewire\Component; @@ -15,15 +16,34 @@ final class Leaderboard extends Component { public function render(): View { + $startPosition = 1; + $leaders = collect(); + + /** @var Collection $leaderboard */ + $leaderboard = User::mostSolutionsInLastDays(365) + ->take(30) + ->get() + ->reject(fn ($leaderboard) => $leaderboard->solutions_count === 0); // @phpstan-ignore-line + + if ($leaderboard->count() > 3) { + $leaders = $leaderboard->slice(0, 3); + $startPosition = 4; + } + return view('livewire.pages.forum.leaderboard', [ - 'leaderboard' => Cache::remember( - key: 'leaderboard', + 'members' => Cache::remember( + key: 'members', + ttl: now()->addWeek(), + callback: fn () => $leaderboard->reject( + fn (User $user) => in_array($user->id, $leaders->pluck('id')->toArray()) // @phpstan-ignore-line + ) + ), + 'leaders' => Cache::remember( + key: 'leaders', ttl: now()->addWeek(), - callback: fn () => User::mostSolutionsInLastDays(365) - ->take(30) - ->get() - ->reject(fn ($leaderboard) => $leaderboard->solutions_count === 0) // @phpstan-ignore-line + callback: fn () => $leaders ), + 'startPosition' => $startPosition, ]); } } diff --git a/lang/en/pages/forum.php b/lang/en/pages/forum.php index 3b4380d7..fabb32bb 100644 --- a/lang/en/pages/forum.php +++ b/lang/en/pages/forum.php @@ -47,5 +47,6 @@ 'prevent_text_one' => 'Make sure you\'ve read our', 'rules' => 'rules of conduct', 'prevent_text_two' => 'before replying to this thread.', + 'leaderboard_empty' => 'No ranking available', ]; diff --git a/lang/fr/pages/forum.php b/lang/fr/pages/forum.php index 084b5046..a0991435 100644 --- a/lang/fr/pages/forum.php +++ b/lang/fr/pages/forum.php @@ -47,5 +47,6 @@ 'prevent_text_one' => 'Assurez-vous d\'avoir lu nos', 'rules' => 'règles de conduite', 'prevent_text_two' => 'avant de répondre à ce thread.', + 'leaderboard_empty' => 'Aucun classement disponible', ]; diff --git a/resources/views/livewire/pages/forum/leaderboard.blade.php b/resources/views/livewire/pages/forum/leaderboard.blade.php index 9786df8b..1108f511 100644 --- a/resources/views/livewire/pages/forum/leaderboard.blade.php +++ b/resources/views/livewire/pages/forum/leaderboard.blade.php @@ -12,59 +12,57 @@ class="gap-2 w-full justify-center py-2.5" - @php - $top3 = $leaderboard->slice(0, 3); - $lists = $leaderboard->reject(fn ($user) => in_array($user->id, $top3->pluck('id')->toArray())) - @endphp -
- @php - $first = $top3->first(); - $second = $top3->get(1); - $third = $top3->last(); - @endphp + @if($leaders->isNotEmpty()) + @php + $first = $leaders->first(); + $second = $leaders->get(1); + $third = $leaders->last(); + @endphp -
-
-
- -