diff --git a/src/Traits/Configuration/ColumnConfiguration.php b/src/Traits/Configuration/ColumnConfiguration.php new file mode 100644 index 000000000..8f23a6f87 --- /dev/null +++ b/src/Traits/Configuration/ColumnConfiguration.php @@ -0,0 +1,47 @@ +prependedColumns = collect($prependedColumns) + ->filter(fn ($column) => $column instanceof Column) + ->map(function (Column $column) { + $column->setComponent($this); + + if ($column->hasField()) { + if ($column->isBaseColumn()) { + $column->setTable($this->getBuilder()->getModel()->getTable()); + } else { + $column->setTable($this->getTableForColumn($column)); + } + } + + return $column; + }); + } + + public function setAppendedColumns(array $appendedColumns): void + { + $this->appendedColumns = collect($appendedColumns) + ->filter(fn ($column) => $column instanceof Column) + ->map(function (Column $column) { + $column->setComponent($this); + + if ($column->hasField()) { + if ($column->isBaseColumn()) { + $column->setTable($this->getBuilder()->getModel()->getTable()); + } else { + $column->setTable($this->getTableForColumn($column)); + } + } + + return $column; + }); + } +} diff --git a/src/Traits/Helpers/ColumnHelpers.php b/src/Traits/Helpers/ColumnHelpers.php index 85dd83ff6..a525583b1 100644 --- a/src/Traits/Helpers/ColumnHelpers.php +++ b/src/Traits/Helpers/ColumnHelpers.php @@ -12,7 +12,7 @@ trait ColumnHelpers */ public function setColumns(): void { - $prependedColumns = $this->getPrependedColumns(); + $this->prependedColumns = $this->getPrependedColumns(); $columns = collect($this->columns()) ->filter(fn ($column) => $column instanceof Column) @@ -30,9 +30,9 @@ public function setColumns(): void return $column; }); - $appendedColumns = $this->getAppendedColumns(); + $this->appendedColumns = $this->getAppendedColumns(); - $this->columns = collect([...$prependedColumns, ...$columns, ...$appendedColumns]); + $this->columns = collect([...$this->prependedColumns, ...$columns, ...$this->appendedColumns]); } public function getColumns(): Collection @@ -180,9 +180,10 @@ public function getColspanCount(): int return 100; } + public function getPrependedColumns(): Collection { - return collect($this->prependColumns()) + return collect($this->prependedColumns ?? $this->prependColumns()) ->filter(fn ($column) => $column instanceof Column) ->map(function (Column $column) { $column->setComponent($this); @@ -201,7 +202,7 @@ public function getPrependedColumns(): Collection public function getAppendedColumns(): Collection { - return collect($this->appendColumns()) + return collect($this->appendedColumns ?? $this->appendColumns()) ->filter(fn ($column) => $column instanceof Column) ->map(function (Column $column) { $column->setComponent($this); @@ -216,5 +217,6 @@ public function getAppendedColumns(): Collection return $column; }); + } } diff --git a/src/Traits/WithColumns.php b/src/Traits/WithColumns.php index feba0ac09..3f1d4b0f9 100644 --- a/src/Traits/WithColumns.php +++ b/src/Traits/WithColumns.php @@ -4,12 +4,16 @@ use Illuminate\Support\Collection; use Rappasoft\LaravelLivewireTables\Traits\Helpers\ColumnHelpers; +use Rappasoft\LaravelLivewireTables\Traits\Configuration\ColumnConfiguration; trait WithColumns { use ColumnHelpers; + use ColumnConfiguration; protected Collection $columns; + protected Collection $prependedColumns; + protected Collection $appendedColumns; public function bootWithColumns(): void { @@ -19,7 +23,7 @@ public function bootWithColumns(): void /** * Prepend columns. */ - public function prependColumns(): array + public function prependColumns() { return []; } diff --git a/tests/Traits/Helpers/ColumnHelpersTest.php b/tests/Traits/Helpers/ColumnHelpersTest.php index c925c78ae..5d0751d49 100644 --- a/tests/Traits/Helpers/ColumnHelpersTest.php +++ b/tests/Traits/Helpers/ColumnHelpersTest.php @@ -15,6 +15,35 @@ public function can_get_column_list(): void $this->assertCount(9, $this->basicTable->getColumns()->toArray()); } + /** @test */ + public function can_append_column(): void + { + $this->assertCount(9, $this->basicTable->getColumns()->toArray()); + + $this->basicTable->setAppendedColumns([Column::make('IDLabel')->label(function ($row) { + return 'Test'; + })]); + + $this->basicTable->setColumns(); + + $this->assertCount(10, $this->basicTable->getColumns()->toArray()); + + } + + /** @test */ + public function can_prepend_column(): void + { + $this->assertCount(9, $this->basicTable->getColumns()->toArray()); + + $this->basicTable->setPrependedColumns([Column::make('IDLabel')->label(function ($row) { + return 'Test'; + })]); + + $this->basicTable->setColumns(); + + $this->assertCount(10, $this->basicTable->getColumns()->toArray()); + } + /** @test */ public function can_get_column_by_column(): void {