diff --git a/src/Traits/Configuration/ColumnConfiguration.php b/src/Traits/Configuration/ColumnConfiguration.php index c6bbb42d8..29bfadabd 100644 --- a/src/Traits/Configuration/ColumnConfiguration.php +++ b/src/Traits/Configuration/ColumnConfiguration.php @@ -8,44 +8,14 @@ trait ColumnConfiguration { public function setPrependedColumns(array $prependedColumns): void { - $this->prependedColumns = collect($prependedColumns) - ->filter(fn ($column) => $column instanceof Column) - ->map(function (Column $column) { - $column->setTheme($this->getTheme()); - $column->setHasTableRowUrl($this->hasTableRowUrl()); - $column->setIsReorderColumn($this->getDefaultReorderColumn() == $column->getField()); - - if ($column->hasField()) { - if ($column->isBaseColumn()) { - $column->setTable($this->getBuilder()->getModel()->getTable()); - } else { - $column->setTable($this->getTableForColumn($column)); - } - } - - return $column; - }); + $this->prependedColumns = collect($prependedColumns); + $this->hasRunColumnSetup = false; } public function setAppendedColumns(array $appendedColumns): void { - $this->appendedColumns = collect($appendedColumns) - ->filter(fn ($column) => $column instanceof Column) - ->map(function (Column $column) { - $column->setTheme($this->getTheme()); - $column->setHasTableRowUrl($this->hasTableRowUrl()); - $column->setIsReorderColumn($this->getDefaultReorderColumn() == $column->getField()); - - if ($column->hasField()) { - if ($column->isBaseColumn()) { - $column->setTable($this->getBuilder()->getModel()->getTable()); - } else { - $column->setTable($this->getTableForColumn($column)); - } - } - - return $column; - }); + $this->appendedColumns = collect($appendedColumns); + $this->hasRunColumnSetup = false; } public function unsetCollapsedStatuses(): void diff --git a/src/Traits/Helpers/ColumnHelpers.php b/src/Traits/Helpers/ColumnHelpers.php index 16a84a3dc..487bcb879 100644 --- a/src/Traits/Helpers/ColumnHelpers.php +++ b/src/Traits/Helpers/ColumnHelpers.php @@ -13,14 +13,19 @@ trait ColumnHelpers */ public function setColumns(): void { - $this->prependedColumns = $this->getPrependedColumns(); + $columns = collect($this->getPrependedColumns())->concat($this->columns())->concat(collect($this->getAppendedColumns())); + $this->columns = $columns->filter(fn ($column) => $column instanceof Column); + } - $columns = collect($this->columns()) + protected function setupColumns(): void + { + $this->columns = $this->columns ->filter(fn ($column) => $column instanceof Column) ->map(function (Column $column) { - $column->setTheme($this->getTheme()); - $column->setHasTableRowUrl($this->hasTableRowUrl()); - $column->setIsReorderColumn($this->getDefaultReorderColumn() == $column->getField()); + $column->setTheme($this->getTheme()) + ->setHasTableRowUrl($this->hasTableRowUrl()) + ->setIsReorderColumn($this->getDefaultReorderColumn() == $column->getField()); + if ($column instanceof AggregateColumn) { if ($column->getAggregateMethod() == 'count' && $column->hasDataSource()) { $this->addExtraWithCount($column->getDataSource()); @@ -42,13 +47,15 @@ public function setColumns(): void return $column; }); - $this->appendedColumns = $this->getAppendedColumns(); - - $this->columns = collect([...$this->prependedColumns, ...$columns, ...$this->appendedColumns]); + $this->hasRunColumnSetup = true; } public function getColumns(): Collection { + if (! $this->hasRunColumnSetup) { + $this->setupColumns(); + } + return $this->columns; } @@ -206,63 +213,12 @@ public function getColspanCount(): int public function getPrependedColumns(): Collection { - return collect($this->prependedColumns ?? $this->prependColumns()) - ->filter(fn ($column) => $column instanceof Column) - ->map(function (Column $column) { - $column->setTheme($this->getTheme()); - $column->setHasTableRowUrl($this->hasTableRowUrl()); - $column->setIsReorderColumn($this->getDefaultReorderColumn() == $column->getField()); - if ($column instanceof AggregateColumn) { - if ($column->getAggregateMethod() == 'count' && $column->hasDataSource()) { - $this->addExtraWithCount($column->getDataSource()); - } elseif ($column->getAggregateMethod() == 'sum' && $column->hasDataSource() && $column->hasForeignColumn()) { - $this->addExtraWithSum($column->getDataSource(), $column->getForeignColumn()); - } elseif ($column->getAggregateMethod() == 'avg' && $column->hasDataSource() && $column->hasForeignColumn()) { - $this->addExtraWithAvg($column->getDataSource(), $column->getForeignColumn()); - } - } - - if ($column->hasField()) { - if ($column->isBaseColumn()) { - $column->setTable($this->getBuilder()->getModel()->getTable()); - } else { - $column->setTable($this->getTableForColumn($column)); - } - } - - return $column; - }); + return $this->prependedColumns ?? collect($this->prependColumns()); } public function getAppendedColumns(): Collection { - return collect($this->appendedColumns ?? $this->appendColumns()) - ->filter(fn ($column) => $column instanceof Column) - ->map(function (Column $column) { - $column->setTheme($this->getTheme()); - $column->setHasTableRowUrl($this->hasTableRowUrl()); - $column->setIsReorderColumn($this->getDefaultReorderColumn() == $column->getField()); - if ($column instanceof AggregateColumn) { - if ($column->getAggregateMethod() == 'count' && $column->hasDataSource()) { - $this->addExtraWithCount($column->getDataSource()); - } elseif ($column->getAggregateMethod() == 'sum' && $column->hasDataSource() && $column->hasForeignColumn()) { - $this->addExtraWithSum($column->getDataSource(), $column->getForeignColumn()); - } elseif ($column->getAggregateMethod() == 'avg' && $column->hasDataSource() && $column->hasForeignColumn()) { - $this->addExtraWithAvg($column->getDataSource(), $column->getForeignColumn()); - } - } - - if ($column->hasField()) { - if ($column->isBaseColumn()) { - $column->setTable($this->getBuilder()->getModel()->getTable()); - } else { - $column->setTable($this->getTableForColumn($column)); - } - } - - return $column; - }); - + return $this->appendedColumns ?? collect($this->appendColumns()); } public function getCollapsedAlwaysColumns(): Collection @@ -287,4 +243,20 @@ public function shouldCollapseAlways(): bool return $this->shouldAlwaysCollapse; } + + /** + * Prepend columns. + */ + public function prependColumns(): array + { + return []; + } + + /** + * Append columns. + */ + public function appendColumns(): array + { + return []; + } } diff --git a/src/Traits/WithColumns.php b/src/Traits/WithColumns.php index 729aa595a..798ec205a 100644 --- a/src/Traits/WithColumns.php +++ b/src/Traits/WithColumns.php @@ -15,9 +15,9 @@ trait WithColumns protected Collection $columns; - protected Collection $prependedColumns; + protected ?Collection $prependedColumns; - protected Collection $appendedColumns; + protected ?Collection $appendedColumns; protected ?bool $shouldAlwaysCollapse; @@ -25,6 +25,8 @@ trait WithColumns protected ?bool $shouldTabletCollapse; + protected bool $hasRunColumnSetup = false; + /** * Sets up Columns */ @@ -55,22 +57,6 @@ public function bootedWithColumns(): void */ abstract public function columns(): array; - /** - * Prepend columns. - */ - public function prependColumns(): array - { - return []; - } - - /** - * Append columns. - */ - public function appendColumns(): array - { - return []; - } - /** * Add Columns to View */