Tables for the data of sports competition: tournament standings tables by groups.
The main logic here lives in a custom page with a custom Livewire component that houses a Filament table:
Order
column has a custom implementation that displays a badge for X amount of places (configured in the config file)Name
column has a prefix that displays the team flagMatches Played
column counts how many games were played in real timeWins
and Losses
columns count how many games were won/lost in real-timeTotal Points
column sums up the scored vs. missed points from the format X:Y
in real-timePoints
calculates points in real-time for display (this could be extracted to the database, but we kept it as an example!)Badges
uses a clever Blade injection to display Filament badges based on W or L per each game.Here's what that looks like in our code:
app/Filament/Pages/GroupsOverview.php
use App\Models\Group;use Filament\Pages\Page; class GroupsOverview extends Page{ protected static ?string $navigationIcon = 'heroicon-o-document-text'; protected static string $view = 'filament.pages.groups-overview'; protected function getViewData(): array { return [ // This adds the group data to our views 'groups' => Group::all() ]; }}
Its view is quite simple:
resources/views/filament/pages/groups-overview.blade.php
<x-filament-panels::page> @foreach($groups as $group) // ...