Skip to content

Commit bc3d2f3

Browse files
authored
Add-setDefaultPerPage Method (rappasoft#1671)
* Add setDefaultPerPage --------- Co-authored-by: lrljoe <[email protected]>
1 parent 52dac06 commit bc3d2f3

File tree

7 files changed

+214
-3
lines changed

7 files changed

+214
-3
lines changed

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,10 @@
22

33
All notable changes to `laravel-livewire-tables` will be documented in this file
44

5+
## [v3.2.2] - 2024-02-29
6+
### New Features
7+
- Add setDefaultPerPage by @lrljoe in https://github.com/rappasoft/laravel-livewire-tables/pull/1671
8+
59
## [v3.2.1] - 2024-02-24
610
### Bug Fixes
711
- Fix collapsing columns not respecting view point collapse points by @lrljoe in https://github.com/rappasoft/laravel-livewire-tables/pull/1665

docs/pagination/available-methods.md

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,7 @@ public function configure(): void
149149

150150
## setPerPage
151151

152-
Set the default selected option of the per page dropdown.
152+
Set the selected option of the per page dropdown.
153153

154154
```php
155155
public function configure(): void
@@ -158,6 +158,17 @@ public function configure(): void
158158
}
159159
```
160160

161+
## setDefaultPerPage
162+
163+
Set the default selected option of the per-page dropdown, will be over-ridden if set at Session or QueryString level.
164+
165+
```php
166+
public function configure(): void
167+
{
168+
$this->setDefaultPerPage(10);
169+
}
170+
```
171+
161172
**Note:** The value set must be included in the `per page accepted` values.
162173

163174
## setPaginationMethod

src/LaravelLivewireTablesServiceProvider.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ class LaravelLivewireTablesServiceProvider extends ServiceProvider
1414
public function boot(): void
1515
{
1616

17-
AboutCommand::add('Rappasoft Laravel Livewire Tables', fn () => ['Version' => '3.2.1']);
17+
AboutCommand::add('Rappasoft Laravel Livewire Tables', fn () => ['Version' => '3.2.2']);
1818

1919
$this->mergeConfigFrom(
2020
__DIR__.'/../config/livewire-tables.php', 'livewire-tables'

src/Traits/Configuration/PaginationConfiguration.php

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,4 +134,18 @@ public function setDisplayPaginationDetailsDisabled(): self
134134

135135
return $this;
136136
}
137+
138+
/**
139+
* Set a default per-page value (if not set already by session or querystring)
140+
*/
141+
public function setDefaultPerPage(int $perPage): self
142+
{
143+
$defaultPerPage = $perPage;
144+
145+
if ($this->perPage == 10) {
146+
$this->setPerPage($perPage);
147+
}
148+
149+
return $this;
150+
}
137151
}
Lines changed: 150 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,150 @@
1+
<?php
2+
3+
namespace Rappasoft\LaravelLivewireTables\Tests\Http\Livewire;
4+
5+
use Illuminate\Database\Eloquent\Builder;
6+
use Rappasoft\LaravelLivewireTables\DataTableComponent;
7+
use Rappasoft\LaravelLivewireTables\Tests\Models\Breed;
8+
use Rappasoft\LaravelLivewireTables\Tests\Models\Pet;
9+
use Rappasoft\LaravelLivewireTables\Tests\Models\Species;
10+
use Rappasoft\LaravelLivewireTables\Views\Column;
11+
use Rappasoft\LaravelLivewireTables\Views\Columns\ImageColumn;
12+
use Rappasoft\LaravelLivewireTables\Views\Columns\LinkColumn;
13+
use Rappasoft\LaravelLivewireTables\Views\Filters\DateFilter;
14+
use Rappasoft\LaravelLivewireTables\Views\Filters\DateTimeFilter;
15+
use Rappasoft\LaravelLivewireTables\Views\Filters\MultiSelectDropdownFilter;
16+
use Rappasoft\LaravelLivewireTables\Views\Filters\MultiSelectFilter;
17+
use Rappasoft\LaravelLivewireTables\Views\Filters\NumberFilter;
18+
use Rappasoft\LaravelLivewireTables\Views\Filters\SelectFilter;
19+
use Rappasoft\LaravelLivewireTables\Views\Filters\TextFilter;
20+
21+
class PetsTableUnpaginated extends DataTableComponent
22+
{
23+
public $model = Pet::class;
24+
25+
public string $paginationTest = 'standard';
26+
27+
public function configure(): void
28+
{
29+
$this->setPrimaryKey('id');
30+
}
31+
32+
public function columns(): array
33+
{
34+
return [
35+
Column::make('ID', 'id')
36+
->sortable()
37+
->setSortingPillTitle('Key')
38+
->setSortingPillDirections('0-9', '9-0'),
39+
Column::make('Sort')
40+
->sortable()
41+
->excludeFromColumnSelect(),
42+
Column::make('Name')
43+
->sortable()
44+
->secondaryHeader($this->getFilterByKey('pet_name_filter'))
45+
->footerFilter('pet_name_filter')
46+
->searchable(),
47+
48+
Column::make('Age'),
49+
50+
Column::make('Breed', 'breed.name')
51+
->secondaryHeaderFilter('breed')
52+
->footer($this->getFilterByKey('breed'))
53+
->sortable(
54+
fn (Builder $query, string $direction) => $query->orderBy('pets.id', $direction)
55+
)
56+
->searchable(
57+
fn (Builder $query, $searchTerm) => $query->orWhere('breed.name', $searchTerm)
58+
),
59+
60+
Column::make('Other')
61+
->label(function ($row, Column $column) {
62+
return 'Other';
63+
})
64+
->footer(function ($rows) {
65+
return 'Count: '.$rows->count();
66+
}),
67+
68+
LinkColumn::make('Link')
69+
->title(fn ($row) => 'Edit')
70+
->location(fn ($row) => 'http://www.google.com')
71+
->attributes(fn ($row) => [
72+
'class' => 'rounded-full',
73+
'alt' => $row->name.' Avatar',
74+
]),
75+
ImageColumn::make('RowImg')
76+
->location(fn ($row) => 'test'.$row->id)
77+
->attributes(fn ($row) => [
78+
'class' => 'rounded-full',
79+
'alt' => $row->name.' Avatar',
80+
]),
81+
Column::make('Last Visit', 'last_visit')
82+
->sortable()
83+
->deselected(),
84+
];
85+
}
86+
87+
public function filters(): array
88+
{
89+
return [
90+
MultiSelectFilter::make('Breed')
91+
->options(
92+
Breed::query()
93+
->orderBy('name')
94+
->get()
95+
->keyBy('id')
96+
->map(fn ($breed) => $breed->name)
97+
->toArray()
98+
)
99+
->filter(function (Builder $builder, array $values) {
100+
return $builder->whereIn('breed_id', $values);
101+
}),
102+
MultiSelectDropdownFilter::make('Species')
103+
->options(
104+
Species::query()
105+
->orderBy('name')
106+
->get()
107+
->keyBy('id')
108+
->map(fn ($species) => $species->name)
109+
->toArray()
110+
)
111+
->filter(function (Builder $builder, array $values) {
112+
return $builder->whereIn('species_id', $values);
113+
}),
114+
NumberFilter::make('Breed ID', 'breed_id_filter')
115+
->filter(function (Builder $builder, string $value) {
116+
return $builder->where('breed_id', '=', $value);
117+
}),
118+
119+
TextFilter::make('Pet Name', 'pet_name_filter')
120+
->filter(function (Builder $builder, string $value) {
121+
return $builder->where('pets.name', '=', $value);
122+
}),
123+
124+
DateFilter::make('Last Visit After Date', 'last_visit_date_filter')
125+
->filter(function (Builder $builder, string $value) {
126+
return $builder->whereDate('pets.last_visit', '=>', $value);
127+
}),
128+
129+
DateTimeFilter::make('Last Visit Before DateTime', 'last_visit_datetime_filter')
130+
->filter(function (Builder $builder, string $value) {
131+
return $builder->whereDate('pets.last_visit', '<=', $value);
132+
}),
133+
134+
SelectFilter::make('Breed SelectFilter', 'breed_select_filter')
135+
->options(
136+
Breed::query()
137+
->orderBy('name')
138+
->get()
139+
->keyBy('id')
140+
->map(fn ($breed) => $breed->name)
141+
->toArray()
142+
)
143+
->filter(function (Builder $builder, string $value) {
144+
return $builder->where('breed_id', $value);
145+
})
146+
->setCustomFilterLabel('livewire-tables::tests.testFilterLabel')
147+
->setFilterPillBlade('livewire-tables::tests.testFilterPills'),
148+
];
149+
}
150+
}

tests/TestCase.php

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
use Livewire\LivewireServiceProvider;
1010
use Orchestra\Testbench\TestCase as Orchestra;
1111
use Rappasoft\LaravelLivewireTables\LaravelLivewireTablesServiceProvider;
12-
use Rappasoft\LaravelLivewireTables\Tests\Http\Livewire\PetsTable;
12+
use Rappasoft\LaravelLivewireTables\Tests\Http\Livewire\{PetsTable,PetsTableUnpaginated};
1313
use Rappasoft\LaravelLivewireTables\Tests\Models\Breed;
1414
use Rappasoft\LaravelLivewireTables\Tests\Models\Pet;
1515
use Rappasoft\LaravelLivewireTables\Tests\Models\Species;
@@ -19,6 +19,8 @@ class TestCase extends Orchestra
1919
{
2020
public PetsTable $basicTable;
2121

22+
public PetsTableUnpaginated $unpaginatedTable;
23+
2224
/**
2325
* Setup the test environment.
2426
*/
@@ -73,6 +75,8 @@ protected function setUp(): void
7375
]);
7476
}
7577
$this->setupBasicTable();
78+
$this->setupUnpaginatedTable();
79+
7680
}
7781

7882
protected function setupBasicTable()
@@ -91,6 +95,24 @@ protected function setupBasicTable()
9195
$this->basicTable->render();
9296
}
9397

98+
protected function setupUnpaginatedTable()
99+
{
100+
101+
$view = view('livewire-tables::datatable');
102+
$this->unpaginatedTable = new PetsTableUnpaginated();
103+
$this->unpaginatedTable->boot();
104+
$this->unpaginatedTable->bootedComponentUtilities();
105+
$this->unpaginatedTable->bootedWithData();
106+
$this->unpaginatedTable->bootedWithColumns();
107+
$this->unpaginatedTable->bootedWithColumnSelect();
108+
$this->unpaginatedTable->bootedWithSecondaryHeader();
109+
$this->unpaginatedTable->booted();
110+
$this->unpaginatedTable->renderingWithData($view, []);
111+
$this->unpaginatedTable->renderingWithPagination($view, []);
112+
$this->unpaginatedTable->render();
113+
114+
}
115+
94116
protected function getPackageProviders($app): array
95117
{
96118
return [

tests/Traits/Configuration/PaginationConfigurationTest.php

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,4 +111,14 @@ public function can_set_per_page_manually(): void
111111

112112
$this->assertSame(25, $this->basicTable->getPerPage());
113113
}
114+
115+
/** @test */
116+
public function can_set_default_per_page(): void
117+
{
118+
$this->assertSame(10, $this->unpaginatedTable->getPerPage());
119+
$this->unpaginatedTable->setDefaultPerPage(50);
120+
$this->assertSame(50, $this->unpaginatedTable->getPerPage());
121+
$this->unpaginatedTable->perPage = 25;
122+
$this->assertSame(25, $this->unpaginatedTable->getPerPage());
123+
}
114124
}

0 commit comments

Comments
 (0)