Skip to content

Commit 78b047a

Browse files
authored
Merge pull request #1 from davidyell/feature/filament-tables
Swapped the Tailwind table for a Filament table
2 parents daa77f4 + 0a41806 commit 78b047a

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

45 files changed

+2329
-255
lines changed

.github/workflows/code-quality.yml

+1
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ on:
66
- 'README.md'
77
- '*.graphql'
88
- 'graphql/*'
9+
- 'docker/*'
910
workflow_dispatch:
1011

1112
jobs:

.github/workflows/test.yml

+1
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ on:
66
- 'README.md'
77
- '*.graphql'
88
- 'graphql/*'
9+
- 'docker/*'
910
push:
1011
branches:
1112
- main

app/Livewire/CardIndex.php

+80-5
Original file line numberDiff line numberDiff line change
@@ -4,17 +4,92 @@
44

55
namespace App\Livewire;
66

7+
use App\Enums\Color;
78
use App\Models\Card;
9+
use Filament\Forms\Concerns\InteractsWithForms;
10+
use Filament\Forms\Contracts\HasForms;
11+
use Filament\Tables\Columns\TextColumn;
12+
use Filament\Tables\Columns\ViewColumn;
13+
use Filament\Tables\Concerns\InteractsWithTable;
14+
use Filament\Tables\Contracts\HasTable;
15+
use Filament\Tables\Filters\SelectFilter;
16+
use Filament\Tables\Table;
17+
use Illuminate\Database\Eloquent\Builder;
818
use Livewire\Component;
9-
use Livewire\WithPagination;
1019

11-
class CardIndex extends Component
20+
class CardIndex extends Component implements HasForms, HasTable
1221
{
13-
use WithPagination;
22+
use InteractsWithForms;
23+
use InteractsWithTable;
24+
25+
public function table(Table $table): Table
26+
{
27+
return $table
28+
->query(Card::query())
29+
->columns([
30+
TextColumn::make('name')
31+
->sortable()
32+
->searchable(),
33+
TextColumn::make('types')
34+
->sortable()
35+
->searchable(),
36+
TextColumn::make('set.name'),
37+
ViewColumn::make('rarity')
38+
->view('filament.tables.columns.rarity-badge'),
39+
ViewColumn::make('colors')
40+
->view('filament.tables.columns.color-badge')
41+
->alignCenter()
42+
->tooltip(fn ($record) => implode(', ', $record->colors)),
43+
ViewColumn::make('manaCost')
44+
->view('filament.tables.columns.mana-cost')
45+
->alignCenter(),
46+
])
47+
->filters([
48+
SelectFilter::make('types')
49+
->options([
50+
'Artifact' => 'Artifact',
51+
'Battle' => 'Battle',
52+
'Conspiracy' => 'Conspiracy',
53+
'Creature' => 'Creature',
54+
'Enchantment' => 'Enchantment',
55+
'Instant' => 'Instant',
56+
'Land' => 'Land',
57+
'Phenomenon' => 'Phenomenon',
58+
'Plane' => 'Plane',
59+
'Planeswalker' => 'Planeswalker',
60+
'Scheme' => 'Scheme',
61+
'Sorcery' => 'Sorcery',
62+
'Tribal' => 'Tribal',
63+
'Vanguard' => 'Vanguard',
64+
])
65+
->multiple()
66+
->query(function (Builder $query, array $data) {
67+
foreach ($data['values'] as $value) {
68+
$query->orWhereRaw('JSON_CONTAINS(types, ?)', [json_encode($value)]);
69+
}
70+
}),
71+
SelectFilter::make('setCode')
72+
->label('Set')
73+
->relationship('set', 'name')
74+
->searchable()
75+
->preload()
76+
->default(request()->query('setCode')),
77+
SelectFilter::make('rarity')
78+
->options(Card::query()->select('rarity')->get()->pluck('rarity', 'rarity')->unique()),
79+
SelectFilter::make('colors')
80+
->options(Color::class)
81+
->multiple()
82+
->query(function (Builder $query, array $data) {
83+
foreach ($data['values'] as $value) {
84+
$query->whereRaw('JSON_CONTAINS(colors, ?)', [json_encode($value)]);
85+
}
86+
}),
87+
])
88+
->defaultPaginationPageOption(50);
89+
}
1490

1591
public function render()
1692
{
17-
return view('livewire.card-index', ['cards' => Card::with('set')->paginate(30)])
18-
->layout('layouts.app');
93+
return view('livewire.card-index')->layout('layouts.app');
1994
}
2095
}

app/Livewire/SetIndex.php

+50-5
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,61 @@
55
namespace App\Livewire;
66

77
use App\Models\Set;
8+
use Filament\Forms\Concerns\InteractsWithForms;
9+
use Filament\Forms\Contracts\HasForms;
10+
use Filament\Tables\Columns\TextColumn;
11+
use Filament\Tables\Columns\ViewColumn;
12+
use Filament\Tables\Concerns\InteractsWithTable;
13+
use Filament\Tables\Contracts\HasTable;
14+
use Filament\Tables\Filters\SelectFilter;
15+
use Filament\Tables\Table;
816
use Livewire\Component;
9-
use Livewire\WithPagination;
1017

11-
class SetIndex extends Component
18+
class SetIndex extends Component implements HasForms, HasTable
1219
{
13-
use WithPagination;
20+
use InteractsWithForms;
21+
use InteractsWithTable;
22+
23+
public function table(Table $table): Table
24+
{
25+
return $table
26+
->query(Set::query())
27+
->columns([
28+
ViewColumn::make('keyruneCode')
29+
->view('filament.tables.columns.set-keyrune'),
30+
TextColumn::make('name')
31+
->sortable()
32+
->searchable()
33+
->url(fn ($record) => route('card.index', ['setCode' => $record->code])),
34+
TextColumn::make('code')
35+
->badge()
36+
->color('gray'),
37+
TextColumn::make('releaseDate')
38+
->since()
39+
->dateTooltip()
40+
->sortable(),
41+
TextColumn::make('block'),
42+
TextColumn::make('type')
43+
->badge()
44+
->color('gray'),
45+
TextColumn::make('totalSetSize')
46+
->sortable(),
47+
])
48+
->filters([
49+
SelectFilter::make('type')
50+
->options(
51+
Set::query()
52+
->select(['type'])
53+
->distinct()
54+
->get()
55+
->pluck('type', 'type')
56+
),
57+
])
58+
->defaultPaginationPageOption(50);
59+
}
1460

1561
public function render()
1662
{
17-
return view('livewire.set-index', ['sets' => Set::with('cards')->paginate(30)])
18-
->layout('layouts.app');
63+
return view('livewire.set-index')->layout('layouts.app');
1964
}
2065
}

composer.json

+8-2
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
"license": "MIT",
1212
"require": {
1313
"php": "^8.4",
14+
"filament/tables": "^3.2",
1415
"laravel/framework": "^11.41.3",
1516
"laravel/jetstream": "^5.3.4",
1617
"laravel/sanctum": "^4.0.8",
@@ -45,7 +46,8 @@
4546
"scripts": {
4647
"post-autoload-dump": [
4748
"Illuminate\\Foundation\\ComposerScripts::postAutoloadDump",
48-
"@php artisan package:discover --ansi"
49+
"@php artisan package:discover --ansi",
50+
"@php artisan filament:upgrade"
4951
],
5052
"post-update-cmd": [
5153
"@php artisan vendor:publish --tag=laravel-assets --ansi --force"
@@ -67,7 +69,11 @@
6769
"larastan": "./vendor/bin/phpstan analyse --ansi",
6870
"test": "@php artisan test",
6971
"test:ci": "@php artisan test -p --stop-on-defect",
70-
"precommit": ["@pint:fix", "@larastan", "@test"]
72+
"precommit": [
73+
"@pint:fix",
74+
"@larastan",
75+
"@test"
76+
]
7177
},
7278
"extra": {
7379
"laravel": {

0 commit comments

Comments
 (0)