Skip to content

Commit a3d848b

Browse files
authored
Merge pull request #12 from CornellCustomDev/table-sorting
Fixed table sorting and pagination; added select user dropdown example
2 parents 79c2663 + f44e4c7 commit a3d848b

File tree

5 files changed

+70
-27
lines changed

5 files changed

+70
-27
lines changed
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
<?php
2+
3+
namespace App\Livewire\Users;
4+
5+
use Livewire\Component;
6+
use App\Models\User;
7+
use Livewire\Attributes\Title;
8+
9+
#[Title("CD Laravel Base - User Examples")]
10+
11+
class UserExamples extends Component
12+
{
13+
public $users;
14+
public $userId = null;
15+
public $selectedUser = null;
16+
17+
public function mount()
18+
{
19+
$this->users = User::select('id', 'name')->get();
20+
}
21+
22+
public function updatedUserId($userId)
23+
{
24+
if (is_null($userId) || !($user = User::find($userId))) {
25+
$this->selectedUser = null;
26+
} else {
27+
$this->selectedUser = $user;
28+
}
29+
}
30+
31+
public function render()
32+
{
33+
return <<<'HTML'
34+
<div>
35+
<x-layouts.main-article>
36+
<h1>User Examples</h1>
37+
<p>
38+
Examples to use CDS components with User data.
39+
</p>
40+
41+
<flux:separator />
42+
<x-layouts.section class="region padded-small">
43+
<x-cds.select
44+
name="users"
45+
label="Select Users"
46+
:options="$this->users->pluck('name', 'id')->toArray()"
47+
wire:model.live="userId"
48+
/>
49+
<flux:separator class="mb-4" />
50+
Selected user: {{ $this->selectedUser?->name ?? 'None' }}
51+
</x-layouts.section>
52+
</x-layouts.main-article>
53+
</div>
54+
HTML;
55+
}
56+
}
Original file line numberDiff line numberDiff line change
@@ -1,42 +1,32 @@
11
<?php
22

3-
namespace App\Livewire;
3+
namespace App\Livewire\Users;
44

55
use Livewire\Component;
66
use App\Models\User;
77
use Livewire\WithPagination;
8-
use Illuminate\Pagination\LengthAwarePaginator;
98
use Livewire\Attributes\Title;
109
use Livewire\Attributes\Computed;
1110

12-
1311
#[Title("CD Laravel Base - User Table Example")]
1412

1513

16-
1714
class UserTable extends Component
1815
{
1916
use WithPagination;
2017

21-
// public $users;
2218
public $sortBy = 'name';
23-
public $sortDirection = 'desc';
24-
25-
26-
27-
public function mount()
28-
{
29-
$this->users = User::all();
30-
}
31-
19+
public $sortDirection = 'asc';
3220

3321
public function render()
3422
{
35-
return view('livewire.user-table');
23+
// add additional data to the view if needed
24+
return view('livewire.users.user-table');
3625
}
3726

3827
public function sort($column) {
39-
if ($this->sortBy === $column) {
28+
29+
if ($this->sortBy === $column) {
4030
$this->sortDirection = $this->sortDirection === 'asc' ? 'desc' : 'asc';
4131
} else {
4232
$this->sortBy = $column;
@@ -47,15 +37,9 @@ public function sort($column) {
4737
#[Computed]
4838
public function users()
4939
{
50-
// return User::query()
51-
// ->tap(fn ($query) => $this->sortBy ? $query->orderBy($this->sortBy, $this->sortDirection) : $query)
52-
// ->paginate(5);
5340
return User::orderBy($this->sortBy, $this->sortDirection)->paginate(5);
41+
// simple pagination:
42+
// return User::orderBy($this->sortBy, $this->sortDirection)->simplePaginate(5);
5443
}
5544

56-
// #[Computed]
57-
// public function paginator()
58-
// {
59-
// return new LengthAwarePaginator(items: range(1, 50), total: 100, perPage: 5, currentPage: 1);
60-
// }
6145
}

resources/views/components/layouts/main-nav.blade.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,9 @@
2121
<li>
2222
<a href="{{ route('examples/table') }}">Table</a>
2323
</li>
24+
<li>
25+
<a href="{{ route('examples/user-examples') }}">User Examples</a>
26+
</li>
2427
</ul>
2528
</li>
2629
</ul>

resources/views/livewire/user-table.blade.php renamed to resources/views/livewire/users/user-table.blade.php

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,7 @@
1010
<x-layouts.section class="region padded-small">
1111
<h2>Users Table</h2>
1212

13-
<flux:table class="cds-table" >
14-
{{-- :paginate="$users" --}}
13+
<flux:table class="cds-table" :paginate="$this->users" >
1514

1615
<flux:table.columns>
1716
<flux:table.column sortable :sorted="$sortBy === 'name'" :direction="$sortDirection" wire:click="sort('name')">Name</flux:table.column>

routes/examples.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,5 +9,6 @@
99
Route::get('/examples/errors', function () {
1010
return view('examples/errors');
1111
})->name('examples/errors');
12-
Route::get('/examples/table', \App\Livewire\UserTable::class)->name('examples/table');
12+
Route::get('/examples/table', \App\Livewire\Users\UserTable::class)->name('examples/table');
13+
Route::get('/examples/user-examples', \App\Livewire\Users\UserExamples::class)->name('examples/user-examples');
1314

0 commit comments

Comments
 (0)