diff --git a/src/Datatables/Column.php b/src/Datatables/Column.php index e4a3b105..b36be50e 100644 --- a/src/Datatables/Column.php +++ b/src/Datatables/Column.php @@ -255,6 +255,23 @@ public function tooltip(string $tooltip): Column return $this; } + /** + * Set the column visibility. + * + * @param bool $visible + * @return Column + */ + public function visible(bool $visible = true): Column + { + if ($visible) { + unset($this->attributes['visible']); + } else { + $this->attributes['visible'] = false; + } + + return $this; + } + /** * Column must be hidden. * @@ -262,7 +279,7 @@ public function tooltip(string $tooltip): Column */ public function hidden(): Column { - return $this->booleanAttribute('visible', false); + return $this->visible(false); } /** diff --git a/src/Datatables/Datatable.php b/src/Datatables/Datatable.php index fdcff2c8..b43bed4a 100644 --- a/src/Datatables/Datatable.php +++ b/src/Datatables/Datatable.php @@ -94,6 +94,10 @@ public function make(): JsonResponse } foreach ($this->getColumns() as $column) { + if (empty($column->data)) { + continue; + } + if ($column->filter) { $datatable->filterColumn($column->name ?? $column->data, $column->filter); } diff --git a/tests/Datatables/DatatablesTest.php b/tests/Datatables/DatatablesTest.php index 021e994d..318c754e 100644 --- a/tests/Datatables/DatatablesTest.php +++ b/tests/Datatables/DatatablesTest.php @@ -2,11 +2,40 @@ namespace Sebastienheyd\Boilerplate\Tests\Datatables; +use Sebastienheyd\Boilerplate\Datatables\Column; use Sebastienheyd\Boilerplate\Tests\factories\UserFactory; use Sebastienheyd\Boilerplate\Tests\TestCase; class DatatablesTest extends TestCase { + public function testColumnVisibleTrue() + { + $column = Column::add('Name')->data('name')->visible(true); + $result = $column->get(); + $this->assertEquals('{data:"name"}', $result); + } + + public function testColumnVisibleFalse() + { + $column = Column::add('Name')->data('name')->visible(false); + $result = $column->get(); + $this->assertEquals('{data:"name",visible:false}', $result); + } + + public function testColumnHidden() + { + $column = Column::add('Name')->data('name')->hidden(); + $result = $column->get(); + $this->assertEquals('{data:"name",visible:false}', $result); + } + + public function testColumnVisibleRemovesHidden() + { + $column = Column::add('Name')->data('name')->hidden()->visible(true); + $result = $column->get(); + $this->assertEquals('{data:"name"}', $result); + } + public function testDatatable() { UserFactory::create()->admin(true);