From 88f71aeba1a1649661d713297d3a75454636b2d1 Mon Sep 17 00:00:00 2001 From: Sam Light Date: Sat, 26 Apr 2025 12:25:03 +0100 Subject: Larastan fixes --- src/TableComponent.php | 66 +++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 62 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/TableComponent.php b/src/TableComponent.php index 14d631b..84ca518 100644 --- a/src/TableComponent.php +++ b/src/TableComponent.php @@ -3,7 +3,7 @@ namespace Lightscale\LaralightTables; use Lightscale\LaralightTables\Columns\Column; - +use Lightscale\LaralightTables\Toolbar\Filter; use Lightscale\LaralightAssets\Facades\Assets; use Livewire\Component; @@ -12,18 +12,34 @@ use Livewire\Attributes\Url; use Illuminate\Pagination\Paginator; use Illuminate\Database\Eloquent\Builder; +use Illuminate\Database\Eloquent\Model; use Illuminate\Support\Str; use Illuminate\Support\Collection; +use Illuminate\View\View; use Exception; + +/** + * @template TModel of Model + */ abstract class TableComponent extends Component { use WithPagination; // Config + + /** + * @var string + */ protected $paginationTheme = 'bootstrap'; + + + /** + * @var ?class-string + */ protected $model = null; + protected int $defaultPageSize = 10; // Properties @@ -33,8 +49,14 @@ abstract class TableComponent extends Component #[Url] public int $pageSize; + /** + * @var array + */ public array $activeColumns = []; + /** + * @var array + */ #[Url] public array $filters = []; @@ -104,13 +126,22 @@ abstract class TableComponent extends Component } } + /** + * @return array + */ protected function toolbars(): array { return []; } + /** + * @var Collection + */ private Collection $toolbarsCache; + /** + * @return Collection + */ protected function getToolbars(): Collection { if (!isset($this->toolbarsCache)) { @@ -119,19 +150,33 @@ abstract class TableComponent extends Component return $this->toolbarsCache; } - protected function query() : Builder + /** + * @return Builder + */ + protected function query(): Builder { if($this->model === null) { throw new Exception('Requires $model to be set or query() method to be overridden'); } + \PHPStan\dumpType((new $this->model)->newQuery()); return $this->model::query(); } - abstract protected function columns() : array; + /** + * @return array + */ + abstract protected function columns(): array; + /** + * @param Builder $builder + * @param string $search + */ protected function search(Builder $builder, string $search) : void {} + /** + * @return Collection + */ protected function getFilters(): Collection { return $this->getToolbars() @@ -145,6 +190,9 @@ abstract class TableComponent extends Component return ($name = $this->order) === null ? null : $this->getColumns()[$name] ?? null; } + /** + * @param Builder $query + */ protected function applyOrder(Builder $query): void { $column = $this->getOrderColumn(); @@ -153,6 +201,9 @@ abstract class TableComponent extends Component } } + /** + * @return Builder + */ protected function buildQuery() : Builder { $query = $this->query(); @@ -170,7 +221,14 @@ abstract class TableComponent extends Component return $query; } + /** + * @var ?Collection + */ private ?Collection $columnsCache = null; + + /** + * @return Collection + */ public function getColumns(): Collection { if($this->columnsCache === null) { @@ -182,7 +240,7 @@ abstract class TableComponent extends Component return $this->columnsCache; } - public function render() + public function render(): View { $data = $this->buildQuery()->paginate($this->pageSize); $allColumns = $this->getColumns(); -- cgit v1.2.3