diff --git a/src/Views/Traits/Columns/HasComponentView.php b/src/Views/Traits/Columns/HasComponentView.php index 27fccc623..388421adc 100644 --- a/src/Views/Traits/Columns/HasComponentView.php +++ b/src/Views/Traits/Columns/HasComponentView.php @@ -2,13 +2,19 @@ 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..39b40d0fc 100644 --- a/tests/TestCase.php +++ b/tests/TestCase.php @@ -16,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 { @@ -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..d3714c914 --- /dev/null +++ b/tests/TestServiceProvider.php @@ -0,0 +1,17 @@ +loadViewsFrom(__DIR__.'/views', 'livewire-tables-test'); + + } +} diff --git a/tests/Unit/Views/Columns/ComponentColumnTest.php b/tests/Unit/Views/Columns/ComponentColumnTest.php index 343cab77a..bded51dc5 100644 --- a/tests/Unit/Views/Columns/ComponentColumnTest.php +++ b/tests/Unit/Views/Columns/ComponentColumnTest.php @@ -2,7 +2,9 @@ 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; @@ -10,6 +12,11 @@ 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,57 @@ 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