From 96f9af3410847d38c3df1008f0be55b351961bbe Mon Sep 17 00:00:00 2001 From: LRLJoe Date: Sat, 11 Jan 2025 08:35:30 +0000 Subject: [PATCH 1/2] Adjustments for ComponentColumn --- src/Views/Traits/Columns/HasComponentView.php | 11 +++- tests/TestCase.php | 4 +- tests/TestServiceProvider.php | 17 +++++ .../Views/Columns/ComponentColumnTest.php | 62 +++++++++++++++++++ .../Views/Columns/ViewComponentColumnTest.php | 2 +- tests/Unit/Views/ComponentColumnTest.php | 33 ---------- tests/views/test.blade.php | 3 + 7 files changed, 96 insertions(+), 36 deletions(-) create mode 100644 tests/TestServiceProvider.php delete mode 100644 tests/Unit/Views/ComponentColumnTest.php create mode 100644 tests/views/test.blade.php diff --git a/src/Views/Traits/Columns/HasComponentView.php b/src/Views/Traits/Columns/HasComponentView.php index 27fccc623..9c021c7aa 100644 --- a/src/Views/Traits/Columns/HasComponentView.php +++ b/src/Views/Traits/Columns/HasComponentView.php @@ -2,13 +2,22 @@ namespace Rappasoft\LaravelLivewireTables\Views\Traits\Columns; +use Illuminate\Support\Facades\View; + trait HasComponentView { protected string $componentView; public function component(string $component): self { - $this->componentView = 'components.'.$component; + if (View::exists('components.'.$component)) + { + $this->componentView = 'components.'.$component; + } + elseif (View::exists($component)) + { + $this->componentView = $component; + } return $this; } diff --git a/tests/TestCase.php b/tests/TestCase.php index aba2a3bc6..1b40aeb77 100644 --- a/tests/TestCase.php +++ b/tests/TestCase.php @@ -8,6 +8,7 @@ use Illuminate\Support\Facades\DB; use Livewire\LivewireServiceProvider; use Orchestra\Testbench\TestCase as Orchestra; +use Rappasoft\LaravelLivewireTables\Tests\TestServiceProvider; use Rappasoft\LaravelLivewireTables\LaravelLivewireTablesServiceProvider; use Rappasoft\LaravelLivewireTables\Tests\Http\Livewire\{BreedsTable,PetsTable,PetsTableEvents,PetsTableUnpaginated,PetsTableWithOwner,SpeciesTable}; use Rappasoft\LaravelLivewireTables\Tests\Http\TestComponent; @@ -35,7 +36,7 @@ class TestCase extends Orchestra protected function setUp(): void { parent::setUp(); - + if (! Breed::where('id', 1)->get()) { include_once __DIR__.'/../database/migrations/create_test_tables.php.stub'; (new \CreateTestTables)->down(); @@ -139,6 +140,7 @@ protected function setupUnpaginatedTable() protected function getPackageProviders($app): array { return [ + TestServiceProvider::class, LivewireServiceProvider::class, LaravelLivewireTablesServiceProvider::class, BladeIconsServiceProvider::class, diff --git a/tests/TestServiceProvider.php b/tests/TestServiceProvider.php new file mode 100644 index 000000000..8173f0512 --- /dev/null +++ b/tests/TestServiceProvider.php @@ -0,0 +1,17 @@ +loadViewsFrom(__DIR__.'/views', 'livewire-tables-test'); + + } +} \ No newline at end of file diff --git a/tests/Unit/Views/Columns/ComponentColumnTest.php b/tests/Unit/Views/Columns/ComponentColumnTest.php index 343cab77a..866c547d2 100644 --- a/tests/Unit/Views/Columns/ComponentColumnTest.php +++ b/tests/Unit/Views/Columns/ComponentColumnTest.php @@ -7,9 +7,16 @@ use Rappasoft\LaravelLivewireTables\Tests\TestCase; use Rappasoft\LaravelLivewireTables\Views\Column; use Rappasoft\LaravelLivewireTables\Views\Columns\ComponentColumn; +use Rappasoft\LaravelLivewireTables\Tests\Http\Components\TestComponent; +use Illuminate\Support\Facades\Blade; final class ComponentColumnTest extends TestCase { + protected function setUp(): void + { + parent::setUp(); + } + public function test_can_set_the_column_title(): void { $column = ComponentColumn::make('Name', 'name'); @@ -34,4 +41,59 @@ public function test_can_not_be_both_collapsible_on_mobile_and_on_tablet(): void $column->getContents($row); } + + + public function test_can_set_custom_slot(): void + { + $column = ComponentColumn::make('Age 2', 'age') + ->attributes(fn ($value, $row, Column $column) => [ + 'age' => $row->age, + ]) + ->slot(fn ($value, $row, Column $column) => [ + ($row->age < 2) => 'test1', + ($row->age > 2) => 'test2', + ]); + $this->assertTrue($column->hasSlotCallback()); + } + + + public function test_can_get_custom_slot(): void + { + + $column = ComponentColumn::make('Age 2', 'age') + ->attributes(fn ($value, $row, Column $column) => [ + 'age' => $row->age, + ]) + ->slot(fn ($value, $row, Column $column) => (($row->age < 10) ? 'youngslot' : 'oldslot')) + ->component('livewire-tables-test::test'); + + $pet1 = Pet::where('age', '>', 11)->first(); + $pet1_contents = $column->getContents($pet1); + $this->assertSame('oldslot',$pet1_contents->getData()['slot']->__toString()); + + $pet2 = Pet::where('age', '<', 5)->first(); + $pet2_contents = $column->getContents($pet2); + $this->assertSame('youngslot',$pet2_contents->getData()['slot']->__toString()); + + } + + public function test_can_get_attributes(): void + { + + $column = ComponentColumn::make('Age 2', 'age') + ->attributes(fn ($value, $row, Column $column) => [ + 'age' => $row->age, + ]) + ->slot(fn ($value, $row, Column $column) => (($row->age < 10) ? 'youngslot' : 'oldslot')) + ->component('livewire-tables-test::test'); + + $pet1 = Pet::where('age', '>', 11)->first(); + $pet1_contents = $column->getContents($pet1); + $this->assertSame(22, $pet1_contents->getData()['attributes']['age']); + + $pet2 = Pet::where('age', '<', 5)->first(); + $pet2_contents = $column->getContents($pet2); + $this->assertSame(2, $pet2_contents->getData()['attributes']['age']); + + } } diff --git a/tests/Unit/Views/Columns/ViewComponentColumnTest.php b/tests/Unit/Views/Columns/ViewComponentColumnTest.php index 2edcf4c53..c5d138d71 100644 --- a/tests/Unit/Views/Columns/ViewComponentColumnTest.php +++ b/tests/Unit/Views/Columns/ViewComponentColumnTest.php @@ -33,7 +33,7 @@ public function test_can_have_component_view(): void ]); $this->assertFalse($column->hasComponentView()); - $column->component('test-component'); + $column->component('livewire-tables-test::test'); $this->assertTrue($column->hasComponentView()); } diff --git a/tests/Unit/Views/ComponentColumnTest.php b/tests/Unit/Views/ComponentColumnTest.php deleted file mode 100644 index ba36e2f44..000000000 --- a/tests/Unit/Views/ComponentColumnTest.php +++ /dev/null @@ -1,33 +0,0 @@ -expectException(DataTableConfigurationException::class); - ComponentColumn::make('Name') - ->component('alert') - ->attributes(fn () => 'string')->getContents(Pet::find(1)); - } - - public function test_component_column_component_has_to_be_an_string() - { - $column = ComponentColumn::make('Name') - ->component('alert'); - $this->assertEquals('components.alert', $column->getComponentView()); - } - - public function test_component_column_component_view_has_to_be_set() - { - $this->expectException(DataTableConfigurationException::class); - ComponentColumn::make('Name') - ->getContents(Pet::find(1)); - } -} diff --git a/tests/views/test.blade.php b/tests/views/test.blade.php new file mode 100644 index 000000000..70dc7f6ea --- /dev/null +++ b/tests/views/test.blade.php @@ -0,0 +1,3 @@ +
+ test +
\ No newline at end of file From edef5b99dc9af9d2cf9a493dfd16f2c3e3253334 Mon Sep 17 00:00:00 2001 From: lrljoe <104938042+lrljoe@users.noreply.github.com> Date: Sat, 11 Jan 2025 08:36:01 +0000 Subject: [PATCH 2/2] Fix styling --- src/Views/Traits/Columns/HasComponentView.php | 9 ++-- tests/TestCase.php | 4 +- tests/TestServiceProvider.php | 4 +- .../Views/Columns/ComponentColumnTest.php | 44 +++++++++---------- 4 files changed, 28 insertions(+), 33 deletions(-) diff --git a/src/Views/Traits/Columns/HasComponentView.php b/src/Views/Traits/Columns/HasComponentView.php index 9c021c7aa..388421adc 100644 --- a/src/Views/Traits/Columns/HasComponentView.php +++ b/src/Views/Traits/Columns/HasComponentView.php @@ -10,13 +10,10 @@ trait HasComponentView public function component(string $component): self { - if (View::exists('components.'.$component)) - { + if (View::exists('components.'.$component)) { $this->componentView = 'components.'.$component; - } - elseif (View::exists($component)) - { - $this->componentView = $component; + } elseif (View::exists($component)) { + $this->componentView = $component; } return $this; diff --git a/tests/TestCase.php b/tests/TestCase.php index 1b40aeb77..39b40d0fc 100644 --- a/tests/TestCase.php +++ b/tests/TestCase.php @@ -8,7 +8,6 @@ use Illuminate\Support\Facades\DB; use Livewire\LivewireServiceProvider; use Orchestra\Testbench\TestCase as Orchestra; -use Rappasoft\LaravelLivewireTables\Tests\TestServiceProvider; use Rappasoft\LaravelLivewireTables\LaravelLivewireTablesServiceProvider; use Rappasoft\LaravelLivewireTables\Tests\Http\Livewire\{BreedsTable,PetsTable,PetsTableEvents,PetsTableUnpaginated,PetsTableWithOwner,SpeciesTable}; use Rappasoft\LaravelLivewireTables\Tests\Http\TestComponent; @@ -17,6 +16,7 @@ use Rappasoft\LaravelLivewireTables\Tests\Models\Pet; use Rappasoft\LaravelLivewireTables\Tests\Models\Species; use Rappasoft\LaravelLivewireTables\Tests\Models\Veterinary; +use Rappasoft\LaravelLivewireTables\Tests\TestServiceProvider; class TestCase extends Orchestra { @@ -36,7 +36,7 @@ class TestCase extends Orchestra protected function setUp(): void { parent::setUp(); - + if (! Breed::where('id', 1)->get()) { include_once __DIR__.'/../database/migrations/create_test_tables.php.stub'; (new \CreateTestTables)->down(); diff --git a/tests/TestServiceProvider.php b/tests/TestServiceProvider.php index 8173f0512..d3714c914 100644 --- a/tests/TestServiceProvider.php +++ b/tests/TestServiceProvider.php @@ -2,8 +2,8 @@ namespace Rappasoft\LaravelLivewireTables\Tests; -use Illuminate\Support\ServiceProvider; use Illuminate\Support\Facades\Blade; +use Illuminate\Support\ServiceProvider; use Rappasoft\LaravelLivewireTables\Tests\Http\Components\TestComponent; class TestServiceProvider extends ServiceProvider @@ -14,4 +14,4 @@ public function boot(): void $this->loadViewsFrom(__DIR__.'/views', 'livewire-tables-test'); } -} \ No newline at end of file +} diff --git a/tests/Unit/Views/Columns/ComponentColumnTest.php b/tests/Unit/Views/Columns/ComponentColumnTest.php index 866c547d2..bded51dc5 100644 --- a/tests/Unit/Views/Columns/ComponentColumnTest.php +++ b/tests/Unit/Views/Columns/ComponentColumnTest.php @@ -2,13 +2,13 @@ namespace Rappasoft\LaravelLivewireTables\Tests\Unit\Views\Columns; +use Illuminate\Support\Facades\Blade; use Rappasoft\LaravelLivewireTables\Exceptions\DataTableConfigurationException; +use Rappasoft\LaravelLivewireTables\Tests\Http\Components\TestComponent; use Rappasoft\LaravelLivewireTables\Tests\Models\Pet; use Rappasoft\LaravelLivewireTables\Tests\TestCase; use Rappasoft\LaravelLivewireTables\Views\Column; use Rappasoft\LaravelLivewireTables\Views\Columns\ComponentColumn; -use Rappasoft\LaravelLivewireTables\Tests\Http\Components\TestComponent; -use Illuminate\Support\Facades\Blade; final class ComponentColumnTest extends TestCase { @@ -42,38 +42,36 @@ public function test_can_not_be_both_collapsible_on_mobile_and_on_tablet(): void } - public function test_can_set_custom_slot(): void { $column = ComponentColumn::make('Age 2', 'age') - ->attributes(fn ($value, $row, Column $column) => [ - 'age' => $row->age, - ]) - ->slot(fn ($value, $row, Column $column) => [ - ($row->age < 2) => 'test1', - ($row->age > 2) => 'test2', - ]); + ->attributes(fn ($value, $row, Column $column) => [ + 'age' => $row->age, + ]) + ->slot(fn ($value, $row, Column $column) => [ + ($row->age < 2) => 'test1', + ($row->age > 2) => 'test2', + ]); $this->assertTrue($column->hasSlotCallback()); } - public function test_can_get_custom_slot(): void { $column = ComponentColumn::make('Age 2', 'age') - ->attributes(fn ($value, $row, Column $column) => [ - 'age' => $row->age, - ]) - ->slot(fn ($value, $row, Column $column) => (($row->age < 10) ? 'youngslot' : 'oldslot')) - ->component('livewire-tables-test::test'); + ->attributes(fn ($value, $row, Column $column) => [ + 'age' => $row->age, + ]) + ->slot(fn ($value, $row, Column $column) => (($row->age < 10) ? 'youngslot' : 'oldslot')) + ->component('livewire-tables-test::test'); $pet1 = Pet::where('age', '>', 11)->first(); $pet1_contents = $column->getContents($pet1); - $this->assertSame('oldslot',$pet1_contents->getData()['slot']->__toString()); + $this->assertSame('oldslot', $pet1_contents->getData()['slot']->__toString()); $pet2 = Pet::where('age', '<', 5)->first(); $pet2_contents = $column->getContents($pet2); - $this->assertSame('youngslot',$pet2_contents->getData()['slot']->__toString()); + $this->assertSame('youngslot', $pet2_contents->getData()['slot']->__toString()); } @@ -81,11 +79,11 @@ public function test_can_get_attributes(): void { $column = ComponentColumn::make('Age 2', 'age') - ->attributes(fn ($value, $row, Column $column) => [ - 'age' => $row->age, - ]) - ->slot(fn ($value, $row, Column $column) => (($row->age < 10) ? 'youngslot' : 'oldslot')) - ->component('livewire-tables-test::test'); + ->attributes(fn ($value, $row, Column $column) => [ + 'age' => $row->age, + ]) + ->slot(fn ($value, $row, Column $column) => (($row->age < 10) ? 'youngslot' : 'oldslot')) + ->component('livewire-tables-test::test'); $pet1 = Pet::where('age', '>', 11)->first(); $pet1_contents = $column->getContents($pet1);