diff --git a/phpunit.xml.dist b/phpunit.xml.dist index 2156f09a7..30d511e6d 100644 --- a/phpunit.xml.dist +++ b/phpunit.xml.dist @@ -9,10 +9,6 @@ failOnEmptyTestSuite="false" beStrictAboutOutputDuringTests="true" > - - tests/Unit - tests/Visuals - tests/Unit diff --git a/src/Traits/Configuration/FilterConfiguration.php b/src/Traits/Configuration/FilterConfiguration.php index d17e7bf16..7e8400b86 100644 --- a/src/Traits/Configuration/FilterConfiguration.php +++ b/src/Traits/Configuration/FilterConfiguration.php @@ -2,8 +2,6 @@ namespace Rappasoft\LaravelLivewireTables\Traits\Configuration; -use Rappasoft\LaravelLivewireTables\DataTransferObjects\FilterGenericData; - trait FilterConfiguration { public function setFiltersStatus(bool $status): self @@ -26,56 +24,4 @@ public function setFiltersDisabled(): self return $this; } - - public function setFiltersVisibilityStatus(bool $status): self - { - $this->filtersVisibilityStatus = $status; - - return $this; - } - - public function setFiltersVisibilityEnabled(): self - { - $this->setFiltersVisibilityStatus(true); - - return $this; - } - - public function setFiltersVisibilityDisabled(): self - { - $this->setFiltersVisibilityStatus(false); - - return $this; - } - - public function setFilterPillsStatus(bool $status): self - { - $this->filterPillsStatus = $status; - - return $this; - } - - public function setFilterPillsEnabled(): self - { - $this->setFilterPillsStatus(true); - - return $this; - } - - public function setFilterPillsDisabled(): self - { - $this->setFilterPillsStatus(false); - - return $this; - } - - public function generateFilterGenericData(): array - { - return (new FilterGenericData($this->getTableName(), $this->getFilterLayout(), $this->isTailwind(), $this->isBootstrap4(), $this->isBootstrap5()))->toArray(); - } - - public function setFilterGenericData(array $filterGenericData = []): void - { - $this->filterGenericData = $filterGenericData; - } } diff --git a/src/Traits/Core/Filters/HandlesFilterTraits.php b/src/Traits/Core/Filters/HandlesFilterTraits.php new file mode 100644 index 000000000..d4f3c114e --- /dev/null +++ b/src/Traits/Core/Filters/HandlesFilterTraits.php @@ -0,0 +1,13 @@ +getTableName(), $this->getFilterLayout(), $this->isTailwind(), $this->isBootstrap4(), $this->isBootstrap5()))->toArray(); + } + + public function setFilterGenericData(array $filterGenericData = []): void + { + $this->filterGenericData = $filterGenericData; + } + + public function hasFilterGenericData(): bool + { + return ! empty($this->filterGenericData); + } + + #[Computed] + public function getFilterGenericData(): array + { + if (! $this->hasFilterGenericData()) { + $this->setFilterGenericData($this->generateFilterGenericData()); + } + + return $this->filterGenericData; + } +} diff --git a/src/Traits/Styling/Helpers/FilterMenuStylingHelpers.php b/src/Traits/Core/Filters/HasFilterMenuStyling.php similarity index 55% rename from src/Traits/Styling/Helpers/FilterMenuStylingHelpers.php rename to src/Traits/Core/Filters/HasFilterMenuStyling.php index 9833809d6..cf511e8cd 100644 --- a/src/Traits/Styling/Helpers/FilterMenuStylingHelpers.php +++ b/src/Traits/Core/Filters/HasFilterMenuStyling.php @@ -1,13 +1,103 @@ '', 'default-width' => true, 'default-colors' => true, 'default-styling' => true]; + + protected array $filterSlidedownWrapperAttributes = ['class' => '', 'default-colors' => true, 'default-styling' => true]; + + protected ?Closure $filterSlidedownRowCallback; + + /** + * Used to set attributes for the Filter Popover + */ + public function setFilterPopoverAttributes(array $filterPopoverAttributes): self + { + $this->filterPopoverAttributes = array_merge($this->filterPopoverAttributes, $filterPopoverAttributes); + + return $this; + } + + /** + * Used to set attributes for the Filter Slidedown Wrapper + */ + public function setFilterSlidedownWrapperAttributes(array $filterSlidedownWrapperAttributes): self + { + $this->filterSlidedownWrapperAttributes = array_merge($this->filterSlidedownWrapperAttributes, $filterSlidedownWrapperAttributes); + + return $this; + } + + /** + * Set a list of attributes to override on the th sort button elements + */ + public function setFilterSlidedownRowAttributes(Closure $callback): self + { + $this->filterSlidedownRowCallback = $callback; + + return $this; + } + + public function setFilterLayout(string $type): self + { + if (! in_array($type, ['popover', 'slide-down'], true)) { + throw new DataTableConfigurationException('Invalid filter layout type'); + } + + $this->filterLayout = $type; + + return $this; + } + + public function setFilterLayoutPopover(): self + { + $this->setFilterLayout('popover'); + + return $this; + } + + public function setFilterLayoutSlideDown(): self + { + $this->setFilterLayout('slide-down'); + + return $this; + } + + public function setFilterSlideDownDefaultStatus(bool $status): self + { + $this->filterSlideDownDefaultVisible = $status; + + return $this; + } + + public function setFilterSlideDownDefaultStatusDisabled(): self + { + $this->setFilterSlideDownDefaultStatus(false); + + return $this; + } + + public function setFilterSlideDownDefaultStatusEnabled(): self + { + $this->setFilterSlideDownDefaultStatus(true); + + return $this; + } + /** * Used to get attributes for the Filter Popover * diff --git a/src/Traits/Core/Filters/HasFilterPillsStyling.php b/src/Traits/Core/Filters/HasFilterPillsStyling.php new file mode 100644 index 000000000..667583ba5 --- /dev/null +++ b/src/Traits/Core/Filters/HasFilterPillsStyling.php @@ -0,0 +1,62 @@ +filterPillsStatus = $status; + + return $this; + } + + public function setFilterPillsEnabled(): self + { + $this->setFilterPillsStatus(true); + + return $this; + } + + public function setFilterPillsDisabled(): self + { + $this->setFilterPillsStatus(false); + + return $this; + } + + #[Computed] + public function showFilterPillsSection(): bool + { + return $this->filtersAreEnabled() && $this->filterPillsAreEnabled() && $this->hasAppliedVisibleFiltersForPills(); + } + + public function getFilterPillsStatus(): bool + { + return $this->filterPillsStatus; + } + + public function filterPillsAreEnabled(): bool + { + return $this->getFilterPillsStatus() === true; + } + + public function filterPillsAreDisabled(): bool + { + return $this->getFilterPillsStatus() === false; + } + + public function hasAppliedVisibleFiltersForPills(): bool + { + return collect($this->getAppliedFiltersWithValues()) + ->map(fn ($_item, $key) => $this->getFilterByKey($key)) + ->reject(fn (Filter $filter) => $filter->isHiddenFromPills()) + ->count() > 0; + } +} diff --git a/src/Traits/Core/QueryStrings/HasQueryStringForFilter.php b/src/Traits/Core/Filters/HasFilterQueryString.php similarity index 95% rename from src/Traits/Core/QueryStrings/HasQueryStringForFilter.php rename to src/Traits/Core/Filters/HasFilterQueryString.php index add0a331f..73bfb82b1 100644 --- a/src/Traits/Core/QueryStrings/HasQueryStringForFilter.php +++ b/src/Traits/Core/Filters/HasFilterQueryString.php @@ -1,10 +1,10 @@ filtersVisibilityStatus; + } + + public function filtersVisibilityIsEnabled(): bool + { + return $this->getFiltersVisibilityStatus() === true; + } + + public function filtersVisibilityIsDisabled(): bool + { + return $this->getFiltersVisibilityStatus() === false; + } + + public function hasVisibleFilters(): bool + { + return $this->getFilters() + ->reject(fn (Filter $filter) => $filter->isHiddenFromMenus()) + ->count() > 0; + } + + /** + * Get whether filter has a configured slide down row. + */ + public function getVisibleFilters(): Collection + { + return $this->getFilters()->reject(fn (Filter $filter) => $filter->isHiddenFromMenus()); + } + + #[Locked] + public bool $filtersVisibilityStatus = true; + + public function setFiltersVisibilityStatus(bool $status): self + { + $this->filtersVisibilityStatus = $status; + + return $this; + } + + public function setFiltersVisibilityEnabled(): self + { + $this->setFiltersVisibilityStatus(true); + + return $this; + } + + public function setFiltersVisibilityDisabled(): self + { + $this->setFiltersVisibilityStatus(false); + + return $this; + } +} diff --git a/src/Traits/Core/Filters/ManagesFilters.php b/src/Traits/Core/Filters/ManagesFilters.php new file mode 100644 index 000000000..72bf73ad2 --- /dev/null +++ b/src/Traits/Core/Filters/ManagesFilters.php @@ -0,0 +1,100 @@ +restoreFilterValues(); + + foreach ($this->getFilters() as $filter) { + if (! isset($this->appliedFilters[$filter->getKey()])) { + if ($filter->hasFilterDefaultValue()) { + $this->setFilter($filter->getKey(), $filter->getFilterDefaultValue()); + } else { + $this->resetFilter($filter); + } + } else { + $this->setFilter($filter->getKey(), $this->appliedFilters[$filter->getKey()]); + } + } + } + + public function bootedManagesFilters(): void + { + $this->setBuilder($this->builder()); + + foreach ($this->filterComponents as $filterKey => $value) { + $this->appliedFilters[$filterKey] = $value; + } + } + + public function applyFilters(): Builder + { + if ($this->filtersAreEnabled() && $this->hasFilters() && $this->hasAppliedFiltersWithValues()) { + foreach ($this->getFilters() as $filter) { + foreach ($this->getAppliedFiltersWithValues() as $key => $value) { + if ($filter->getKey() === $key && $filter->hasFilterCallback()) { + // Let the filter class validate the value + $value = $filter->validate($value); + + if ($value === false) { + continue; + } + + $this->callHook('filterApplying', ['filter' => $filter->getKey(), 'value' => $value]); + $this->callTraitHook('filterApplying', ['filter' => $filter->getKey(), 'value' => $value]); + + ($filter->getFilterCallback())($this->getBuilder(), $value); + } + } + } + $this->storeFilterValues(); + } + + return $this->getBuilder(); + } + + public function updatedFilterComponents(string|array|null $value, string $filterName): void + { + $this->resetComputedPage(); + + // Clear bulk actions on filter - if enabled + if ($this->getClearSelectedOnFilter()) { + $this->clearSelected(); + $this->setSelectAllDisabled(); + } + + // Clear filters on empty value + $filter = $this->getFilterByKey($filterName); + + if ($filter && $filter->isEmpty($value)) { + $this->callHook('filterRemoved', ['filter' => $filter->getKey()]); + $this->callTraitHook('filterRemoved', ['filter' => $filter->getKey()]); + + $this->resetFilter($filterName); + } elseif ($filter) { + $this->callHook('filterUpdated', ['filter' => $filter->getKey(), 'value' => $value]); + $this->callTraitHook('filterUpdated', ['filter' => $filter->getKey(), 'value' => $value]); + if ($this->getEventStatusFilterApplied() && $filter->getKey() != null && $value != null) { + event(new FilterApplied($this->getTableName(), $filter->getKey(), $value)); + } + $this->dispatch('filter-was-set', tableName: $this->getTableName(), filterKey: $filter->getKey(), value: $value); + + } + + } +} diff --git a/src/Traits/HasAllTraits.php b/src/Traits/HasAllTraits.php index 10eba62ab..a79ef0b03 100644 --- a/src/Traits/HasAllTraits.php +++ b/src/Traits/HasAllTraits.php @@ -11,9 +11,9 @@ trait HasAllTraits use WithTableHooks; use HasLocalisations, WithLoadingPlaceholder, - HasTheme; - use WithFilters, - WithQuery, + HasTheme, + WithFilters; + use WithQuery, ComponentUtilities, WithActions, WithData, diff --git a/src/Traits/Helpers/FilterHelpers.php b/src/Traits/Helpers/FilterHelpers.php index a9265c6ec..714eebfd5 100644 --- a/src/Traits/Helpers/FilterHelpers.php +++ b/src/Traits/Helpers/FilterHelpers.php @@ -2,36 +2,15 @@ namespace Rappasoft\LaravelLivewireTables\Traits\Helpers; +use Illuminate\Database\Eloquent\Builder; use Illuminate\Support\Collection; -use Livewire\Attributes\Computed; -use Livewire\Attributes\On; +use Livewire\Attributes\{Computed,On}; use Rappasoft\LaravelLivewireTables\Events\FilterApplied; use Rappasoft\LaravelLivewireTables\Views\Filter; -use Rappasoft\LaravelLivewireTables\Views\Filters\MultiSelectDropdownFilter; -use Rappasoft\LaravelLivewireTables\Views\Filters\MultiSelectFilter; +use Rappasoft\LaravelLivewireTables\Views\Filters\{MultiSelectDropdownFilter, MultiSelectFilter}; trait FilterHelpers { - /** - * Sets Filter Default Values - */ - public function mountFilterHelpers(): void - { - $this->restoreFilterValues(); - - foreach ($this->getFilters() as $filter) { - if (! isset($this->appliedFilters[$filter->getKey()])) { - if ($filter->hasFilterDefaultValue()) { - $this->setFilter($filter->getKey(), $filter->getFilterDefaultValue()); - } else { - $this->resetFilter($filter); - } - } else { - $this->setFilter($filter->getKey(), $this->appliedFilters[$filter->getKey()]); - } - } - } - public function getFiltersStatus(): bool { return $this->filtersStatus; @@ -47,48 +26,11 @@ public function filtersAreDisabled(): bool return $this->getFiltersStatus() === false; } - public function getFiltersVisibilityStatus(): bool - { - return $this->filtersVisibilityStatus; - } - - public function filtersVisibilityIsEnabled(): bool - { - return $this->getFiltersVisibilityStatus() === true; - } - - public function filtersVisibilityIsDisabled(): bool - { - return $this->getFiltersVisibilityStatus() === false; - } - - public function getFilterPillsStatus(): bool - { - return $this->filterPillsStatus; - } - - public function filterPillsAreEnabled(): bool - { - return $this->getFilterPillsStatus() === true; - } - - public function filterPillsAreDisabled(): bool - { - return $this->getFilterPillsStatus() === false; - } - public function hasFilters(): bool { return $this->getFiltersCount() > 0; } - public function hasVisibleFilters(): bool - { - return $this->getFilters() - ->reject(fn (Filter $filter) => $filter->isHiddenFromMenus()) - ->count() > 0; - } - public function getFilters(): Collection { if (! isset($this->filterCollection)) { @@ -96,7 +38,6 @@ public function getFilters(): Collection } return $this->filterCollection; - } public function getFiltersCount(): int @@ -106,7 +47,6 @@ public function getFiltersCount(): int } return $this->filterCount; - } /** @@ -199,14 +139,6 @@ public function getFilterBadgeCount(): int ->count(); } - public function hasAppliedVisibleFiltersForPills(): bool - { - return collect($this->getAppliedFiltersWithValues()) - ->map(fn ($_item, $key) => $this->getFilterByKey($key)) - ->reject(fn (Filter $filter) => $filter->isHiddenFromPills()) - ->count() > 0; - } - /** * @return array */ @@ -257,35 +189,6 @@ public function resetFilter($filter): void } - /** - * Get whether filter has a configured slide down row. - */ - public function getVisibleFilters(): Collection - { - return $this->getFilters()->reject(fn (Filter $filter) => $filter->isHiddenFromMenus()); - } - - public function hasFilterGenericData(): bool - { - return ! empty($this->filterGenericData); - } - - #[Computed] - public function getFilterGenericData(): array - { - if (! $this->hasFilterGenericData()) { - $this->setFilterGenericData($this->generateFilterGenericData()); - } - - return $this->filterGenericData; - } - - #[Computed] - public function showFilterPillsSection(): bool - { - return $this->filtersAreEnabled() && $this->filterPillsAreEnabled() && $this->hasAppliedVisibleFiltersForPills(); - } - #[On('livewireArrayFilterUpdateValues')] public function updateLivewireArrayFilterValues(string $filterKey, string $tableName, array $values): void { diff --git a/src/Traits/Helpers/QueryHelpers.php b/src/Traits/Helpers/QueryHelpers.php index 1a7b2d46c..3bb7150dd 100644 --- a/src/Traits/Helpers/QueryHelpers.php +++ b/src/Traits/Helpers/QueryHelpers.php @@ -9,6 +9,10 @@ trait QueryHelpers { public function getBuilder(): Builder { + if (! isset($this->builder)) { + $this->setBuilder($this->builder()); + } + return $this->builder; } diff --git a/src/Traits/Styling/Configuration/FilterMenuStylingConfiguration.php b/src/Traits/Styling/Configuration/FilterMenuStylingConfiguration.php deleted file mode 100644 index 9a7a140b5..000000000 --- a/src/Traits/Styling/Configuration/FilterMenuStylingConfiguration.php +++ /dev/null @@ -1,85 +0,0 @@ -filterPopoverAttributes = array_merge($this->filterPopoverAttributes, $filterPopoverAttributes); - - return $this; - } - - /** - * Used to set attributes for the Filter Slidedown Wrapper - */ - public function setFilterSlidedownWrapperAttributes(array $filterSlidedownWrapperAttributes): self - { - $this->filterSlidedownWrapperAttributes = array_merge($this->filterSlidedownWrapperAttributes, $filterSlidedownWrapperAttributes); - - return $this; - } - - /** - * Set a list of attributes to override on the th sort button elements - */ - public function setFilterSlidedownRowAttributes(Closure $callback): self - { - $this->filterSlidedownRowCallback = $callback; - - return $this; - } - - public function setFilterLayout(string $type): self - { - if (! in_array($type, ['popover', 'slide-down'], true)) { - throw new DataTableConfigurationException('Invalid filter layout type'); - } - - $this->filterLayout = $type; - - return $this; - } - - public function setFilterLayoutPopover(): self - { - $this->setFilterLayout('popover'); - - return $this; - } - - public function setFilterLayoutSlideDown(): self - { - $this->setFilterLayout('slide-down'); - - return $this; - } - - public function setFilterSlideDownDefaultStatus(bool $status): self - { - $this->filterSlideDownDefaultVisible = $status; - - return $this; - } - - public function setFilterSlideDownDefaultStatusDisabled(): self - { - $this->setFilterSlideDownDefaultStatus(false); - - return $this; - } - - public function setFilterSlideDownDefaultStatusEnabled(): self - { - $this->setFilterSlideDownDefaultStatus(true); - - return $this; - } -} diff --git a/src/Traits/Styling/HasFilterMenuStyling.php b/src/Traits/Styling/HasFilterMenuStyling.php deleted file mode 100644 index 397409743..000000000 --- a/src/Traits/Styling/HasFilterMenuStyling.php +++ /dev/null @@ -1,26 +0,0 @@ - '', 'default-width' => true, 'default-colors' => true, 'default-styling' => true]; - - protected array $filterSlidedownWrapperAttributes = ['class' => '', 'default-colors' => true, 'default-styling' => true]; - - protected ?Closure $filterSlidedownRowCallback; -} diff --git a/src/Traits/WithData.php b/src/Traits/WithData.php index e7b52518a..c8c4f4a75 100644 --- a/src/Traits/WithData.php +++ b/src/Traits/WithData.php @@ -16,21 +16,13 @@ trait WithData { - /** - * Sets up the Builder instance - */ - public function bootedWithData(): void - { - // Sets up the Builder Instance - $this->setBuilder($this->builder()); - } - /** * Retrieves the rows for the executed query */ #[Computed] public function getRows(): Collection|CursorPaginator|Paginator|LengthAwarePaginator { + // Setup the Base Query $this->baseQuery(); @@ -52,6 +44,10 @@ public function getRows(): Collection|CursorPaginator|Paginator|LengthAwarePagin protected function baseQuery(): Builder { + $this->setBuilder($this->builder()); + + $builder = $this->getBuilder(); + $this->setBuilder($this->joinRelations()); $this->setBuilder($this->applySearch()); diff --git a/src/Traits/WithFilters.php b/src/Traits/WithFilters.php index 140ae6d0b..9d099b3aa 100644 --- a/src/Traits/WithFilters.php +++ b/src/Traits/WithFilters.php @@ -2,102 +2,28 @@ namespace Rappasoft\LaravelLivewireTables\Traits; -use Illuminate\Database\Eloquent\Builder; use Illuminate\Support\Collection; use Livewire\Attributes\Locked; -use Rappasoft\LaravelLivewireTables\Events\FilterApplied; use Rappasoft\LaravelLivewireTables\Traits\Configuration\FilterConfiguration; -use Rappasoft\LaravelLivewireTables\Traits\Core\QueryStrings\HasQueryStringForFilter; +use Rappasoft\LaravelLivewireTables\Traits\Core\Filters\HandlesFilterTraits; use Rappasoft\LaravelLivewireTables\Traits\Helpers\FilterHelpers; -use Rappasoft\LaravelLivewireTables\Traits\Styling\HasFilterMenuStyling; trait WithFilters { use FilterConfiguration, FilterHelpers; - use HasQueryStringForFilter; - use HasFilterMenuStyling; + use HandlesFilterTraits; #[Locked] public bool $filtersStatus = true; - #[Locked] - public bool $filtersVisibilityStatus = true; - - #[Locked] - public bool $filterPillsStatus = true; - #[Locked] public int $filterCount; - // Set in JS - public array $filterComponents = []; - - // Set in Frontend - public array $appliedFilters = []; - - public array $filterGenericData = []; - protected ?Collection $filterCollection; public function filters(): array { return []; } - - public function applyFilters(): Builder - { - if ($this->filtersAreEnabled() && $this->hasFilters() && $this->hasAppliedFiltersWithValues()) { - foreach ($this->getFilters() as $filter) { - foreach ($this->getAppliedFiltersWithValues() as $key => $value) { - if ($filter->getKey() === $key && $filter->hasFilterCallback()) { - // Let the filter class validate the value - $value = $filter->validate($value); - - if ($value === false) { - continue; - } - - $this->callHook('filterApplying', ['filter' => $filter->getKey(), 'value' => $value]); - $this->callTraitHook('filterApplying', ['filter' => $filter->getKey(), 'value' => $value]); - - ($filter->getFilterCallback())($this->getBuilder(), $value); - } - } - } - $this->storeFilterValues(); - } - - return $this->getBuilder(); - } - - public function updatedFilterComponents(string|array|null $value, string $filterName): void - { - $this->resetComputedPage(); - - // Clear bulk actions on filter - if enabled - if ($this->getClearSelectedOnFilter()) { - $this->clearSelected(); - $this->setSelectAllDisabled(); - } - - // Clear filters on empty value - $filter = $this->getFilterByKey($filterName); - - if ($filter && $filter->isEmpty($value)) { - $this->callHook('filterRemoved', ['filter' => $filter->getKey()]); - $this->callTraitHook('filterRemoved', ['filter' => $filter->getKey()]); - - $this->resetFilter($filterName); - } elseif ($filter) { - $this->callHook('filterUpdated', ['filter' => $filter->getKey(), 'value' => $value]); - $this->callTraitHook('filterUpdated', ['filter' => $filter->getKey(), 'value' => $value]); - if ($this->getEventStatusFilterApplied() && $filter->getKey() != null && $value != null) { - event(new FilterApplied($this->getTableName(), $filter->getKey(), $value)); - } - $this->dispatch('filter-was-set', tableName: $this->getTableName(), filterKey: $filter->getKey(), value: $value); - - } - - } } diff --git a/tests/DataTableComponentTest.php b/tests/DataTableComponentTest.php index e0849463c..62a1e46ec 100644 --- a/tests/DataTableComponentTest.php +++ b/tests/DataTableComponentTest.php @@ -67,9 +67,10 @@ public function test_minimum_one_column_expected(): void { $this->expectException(\Rappasoft\LaravelLivewireTables\Exceptions\NoColumnsException::class); $table = new NoColumnsTable; + $table->mountManagesFilters(); $table->boot(); + $table->bootedManagesFilters(); $table->bootedComponentUtilities(); - $table->bootedWithData(); $table->bootedWithColumns(); $table->bootedWithColumnSelect(); $table->bootedWithSecondaryHeader(); diff --git a/tests/TestCase.php b/tests/TestCase.php index eb5f3b441..70cc035de 100644 --- a/tests/TestCase.php +++ b/tests/TestCase.php @@ -96,9 +96,10 @@ protected function setupBasicTable() { $view = view('livewire-tables::datatable'); $this->basicTable = new PetsTable; + $this->basicTable->mountManagesFilters(); $this->basicTable->boot(); + $this->basicTable->bootedManagesFilters(); $this->basicTable->bootedComponentUtilities(); - $this->basicTable->bootedWithData(); $this->basicTable->bootedWithColumns(); $this->basicTable->bootedWithColumnSelect(); $this->basicTable->bootedWithSecondaryHeader(); @@ -117,9 +118,10 @@ protected function setupEventsTable() { $view = view('livewire-tables::datatable'); $this->eventsTable = new PetsTableEvents; + $this->eventsTable->mountManagesFilters(); $this->eventsTable->boot(); $this->eventsTable->bootedComponentUtilities(); - $this->eventsTable->bootedWithData(); + $this->eventsTable->bootedManagesFilters(); $this->eventsTable->bootedWithColumns(); $this->eventsTable->bootedWithColumnSelect(); $this->eventsTable->bootedWithSecondaryHeader(); @@ -139,9 +141,10 @@ protected function setupBreedsTable() { $view = view('livewire-tables::datatable'); $this->breedsTable = new BreedsTable; + $this->breedsTable->mountManagesFilters(); $this->breedsTable->boot(); $this->breedsTable->bootedComponentUtilities(); - $this->breedsTable->bootedWithData(); + $this->breedsTable->bootedManagesFilters(); $this->breedsTable->bootedWithColumns(); $this->breedsTable->bootedWithColumnSelect(); $this->breedsTable->bootedWithSecondaryHeader(); @@ -160,9 +163,10 @@ protected function setupPetOwnerTable() { $view = view('livewire-tables::datatable'); $this->petOwnerTable = new PetsTableWithOwner; + $this->petOwnerTable->mountManagesFilters(); $this->petOwnerTable->boot(); $this->petOwnerTable->bootedComponentUtilities(); - $this->petOwnerTable->bootedWithData(); + $this->petOwnerTable->bootedManagesFilters(); $this->petOwnerTable->bootedWithColumns(); $this->petOwnerTable->bootedWithColumnSelect(); $this->petOwnerTable->bootedWithSecondaryHeader(); @@ -181,9 +185,10 @@ protected function setupSpeciesTable() { $view = view('livewire-tables::datatable'); $this->speciesTable = new SpeciesTable; + $this->speciesTable->mountManagesFilters(); $this->speciesTable->boot(); $this->speciesTable->bootedComponentUtilities(); - $this->speciesTable->bootedWithData(); + $this->speciesTable->bootedManagesFilters(); $this->speciesTable->bootedWithColumns(); $this->speciesTable->bootedWithColumnSelect(); $this->speciesTable->bootedWithSecondaryHeader(); @@ -203,9 +208,10 @@ protected function setupUnpaginatedTable() $view = view('livewire-tables::datatable'); $this->unpaginatedTable = new PetsTableUnpaginated; + $this->unpaginatedTable->mountManagesFilters(); $this->unpaginatedTable->boot(); $this->unpaginatedTable->bootedComponentUtilities(); - $this->unpaginatedTable->bootedWithData(); + $this->unpaginatedTable->bootedManagesFilters(); $this->unpaginatedTable->bootedWithColumns(); $this->unpaginatedTable->bootedWithColumnSelect(); $this->unpaginatedTable->bootedWithSecondaryHeader(); diff --git a/tests/Unit/DataTransferObjects/DebuggableDataTest.php b/tests/Unit/DataTransferObjects/DebuggableDataTest.php index 34124e26d..d185383cf 100644 --- a/tests/Unit/DataTransferObjects/DebuggableDataTest.php +++ b/tests/Unit/DataTransferObjects/DebuggableDataTest.php @@ -25,7 +25,13 @@ public function test_check_all_default_dto_elements() $defaultQuery = 'select "pets"."id" as "id", "pets"."sort" as "sort", "pets"."name" as "name", "pets"."age" as "age", "breed"."name" as "breed.name", "pets"."last_visit" as "last_visit" from "pets" left join "breeds" as "breed" on "pets"."breed_id" = "breed"."id" limit 10 offset 0'; $this->assertSame($debuggableArray['query'], $defaultQuery); - $this->assertSame($debuggableArray['filters'], []); + $this->assertSame($debuggableArray['filters'], ['breed' => [], + 'species' => [], + 'breed_id_filter' => null, + 'pet_name_filter' => null, + 'last_visit_date_filter' => null, + 'last_visit_datetime_filter' => null, + 'breed_select_filter' => null]); $this->assertSame($debuggableArray['sorts'], []); $this->assertSame($debuggableArray['search'], ''); $this->assertFalse($debuggableArray['select-all']); @@ -36,12 +42,24 @@ public function test_check_dto_returns_filters_correctly() { $debuggableDTO = new DebuggableData($this->basicTable); $debuggableArray = $debuggableDTO->toArray(); - $this->assertSame($debuggableArray['filters'], []); + $this->assertSame($debuggableArray['filters'], ['breed' => [], + 'species' => [], + 'breed_id_filter' => null, + 'pet_name_filter' => null, + 'last_visit_date_filter' => null, + 'last_visit_datetime_filter' => null, + 'breed_select_filter' => null]); $this->basicTable->setFilter('breed', ['1']); $debuggableDTO = new DebuggableData($this->basicTable); $debuggableArray = $debuggableDTO->toArray(); - $this->assertSame($debuggableArray['filters'], ['breed' => ['1']]); + $this->assertSame($debuggableArray['filters'], ['breed' => ['1'], + 'species' => [], + 'breed_id_filter' => null, + 'pet_name_filter' => null, + 'last_visit_date_filter' => null, + 'last_visit_datetime_filter' => null, + 'breed_select_filter' => null]); } } diff --git a/tests/Unit/Traits/Helpers/ColumnHelpersTest.php b/tests/Unit/Traits/Helpers/ColumnHelpersTest.php index ec4f3814b..0b786109f 100644 --- a/tests/Unit/Traits/Helpers/ColumnHelpersTest.php +++ b/tests/Unit/Traits/Helpers/ColumnHelpersTest.php @@ -374,11 +374,11 @@ public function columns(): array return []; } }; - + $testTable->mountManagesFilters(); $testTable->configure(); $testTable->boot(); $testTable->bootedComponentUtilities(); - $testTable->bootedWithData(); + $testTable->bootedManagesFilters(); $testTable->bootedWithColumns(); $testTable->bootedWithColumnSelect(); $testTable->bootedWithSecondaryHeader(); diff --git a/tests/Unit/Traits/Helpers/ColumnSelectHelpersTest.php b/tests/Unit/Traits/Helpers/ColumnSelectHelpersTest.php index 4da1d5912..05ea4cdc9 100644 --- a/tests/Unit/Traits/Helpers/ColumnSelectHelpersTest.php +++ b/tests/Unit/Traits/Helpers/ColumnSelectHelpersTest.php @@ -118,10 +118,11 @@ public function configure(): void parent::configure(); } }; + $testTable->mountManagesFilters(); $testTable->configure(); $testTable->boot(); + $testTable->bootedManagesFilters(); $testTable->bootedComponentUtilities(); - $testTable->bootedWithData(); $testTable->bootedWithColumns(); $testTable->bootedWithColumnSelect(); $testTable->bootedWithSecondaryHeader(); @@ -156,10 +157,11 @@ public function configure(): void $this->enableColumnSelectEvent(); } }; + $testTable->mountManagesFilters(); $testTable->configure(); $testTable->boot(); $testTable->bootedComponentUtilities(); - $testTable->bootedWithData(); + $testTable->bootedManagesFilters(); $testTable->bootedWithColumns(); $testTable->bootedWithColumnSelect(); $testTable->bootedWithSecondaryHeader(); @@ -186,10 +188,11 @@ public function configure(): void $this->disableColumnSelectEvent(); } }; + $testTable->mountManagesFilters(); $testTable->configure(); $testTable->boot(); + $testTable->bootedManagesFilters(); $testTable->bootedComponentUtilities(); - $testTable->bootedWithData(); $testTable->bootedWithColumns(); $testTable->bootedWithColumnSelect(); $testTable->bootedWithSecondaryHeader(); diff --git a/tests/Unit/Traits/Helpers/FilterHelpersTest.php b/tests/Unit/Traits/Helpers/FilterHelpersTest.php index 80995c042..85c07c072 100644 --- a/tests/Unit/Traits/Helpers/FilterHelpersTest.php +++ b/tests/Unit/Traits/Helpers/FilterHelpersTest.php @@ -224,10 +224,12 @@ public function configure(): void parent::configure(); } }; + $testTable->mountManagesFilters(); + $testTable->configure(); $testTable->boot(); + $testTable->bootedManagesFilters(); $testTable->bootedComponentUtilities(); - $testTable->bootedWithData(); $testTable->bootedWithColumns(); $testTable->bootedWithColumnSelect(); $testTable->bootedWithSecondaryHeader(); diff --git a/tests/Unit/Traits/Helpers/SessionStorageHelpersTest.php b/tests/Unit/Traits/Helpers/SessionStorageHelpersTest.php index 08b252a3f..afc8455d2 100644 --- a/tests/Unit/Traits/Helpers/SessionStorageHelpersTest.php +++ b/tests/Unit/Traits/Helpers/SessionStorageHelpersTest.php @@ -27,17 +27,40 @@ public function test_can_get_session_storage_status_filter_key(): void public function test_can_store_for_fikers(): void { + $this->basicTable->storeFiltersInSessionDisabled(); + $this->assertFalse($this->basicTable->shouldStoreFiltersInSession()); + $this->basicTable->storeFiltersInSessionEnabled(); $this->assertTrue($this->basicTable->shouldStoreFiltersInSession()); $this->basicTable->setFilter('breed', ['1']); $this->assertSame(['1'], $this->basicTable->getAppliedFilterWithValue('breed')); - $this->assertSame(['breed' => ['1']], $this->basicTable->filterComponents); - $this->assertSame(['breed' => ['1']], $this->basicTable->getStoredFilterValues()); + $this->assertSame([ + 'breed' => ['1'], + 'species' => [], + 'breed_id_filter' => null, + 'pet_name_filter' => null, + 'last_visit_date_filter' => null, + 'last_visit_datetime_filter' => null, + 'breed_select_filter' => null, + ], $this->basicTable->filterComponents); + $this->assertSame(['breed' => ['1'], + 'species' => [], + 'breed_id_filter' => null, + 'pet_name_filter' => null, + 'last_visit_date_filter' => null, + 'last_visit_datetime_filter' => null, + 'breed_select_filter' => null], $this->basicTable->getStoredFilterValues()); $this->basicTable->setFilter('breed', ['2']); - $this->assertSame(['breed' => ['2']], $this->basicTable->filterComponents); + $this->assertSame(['breed' => ['2'], + 'species' => [], + 'breed_id_filter' => null, + 'pet_name_filter' => null, + 'last_visit_date_filter' => null, + 'last_visit_datetime_filter' => null, + 'breed_select_filter' => null], $this->basicTable->filterComponents); $this->assertSame(['2'], $this->basicTable->getAppliedFilterWithValue('breed')); $this->assertSame(['breed' => ['2']], $this->basicTable->getStoredFilterValues()); diff --git a/tests/Unit/Traits/WithCustomisationsTest.php b/tests/Unit/Traits/WithCustomisationsTest.php index e5101454f..ede4b6584 100644 --- a/tests/Unit/Traits/WithCustomisationsTest.php +++ b/tests/Unit/Traits/WithCustomisationsTest.php @@ -22,9 +22,10 @@ public function configure(): void }; $view = view('livewire-tables::datatable'); + $temp->mountManagesFilters(); $temp->boot(); $temp->bootedComponentUtilities(); - $temp->bootedWithData(); + $temp->bootedManagesFilters(); $temp->bootedWithColumns(); $temp->bootedWithColumnSelect(); $temp->bootedWithSecondaryHeader(); @@ -56,9 +57,10 @@ public function configure(): void }; $view = view('livewire-tables::datatable'); + $temp->mountManagesFilters(); $temp->boot(); $temp->bootedComponentUtilities(); - $temp->bootedWithData(); + $temp->bootedManagesFilters(); $temp->bootedWithColumns(); $temp->bootedWithColumnSelect(); $temp->bootedWithSecondaryHeader(); @@ -90,9 +92,10 @@ public function configure(): void }; $view = view('livewire-tables::datatable'); + $temp->mountManagesFilters(); $temp->boot(); $temp->bootedComponentUtilities(); - $temp->bootedWithData(); + $temp->bootedManagesFilters(); $temp->bootedWithColumns(); $temp->bootedWithColumnSelect(); $temp->bootedWithSecondaryHeader(); @@ -126,7 +129,6 @@ public function configure(): void $temp->boot(); $temp->bootedComponentUtilities(); - $temp->bootedWithData(); $temp->bootedWithColumns(); $temp->bootedWithColumnSelect(); $temp->bootedWithSecondaryHeader(); diff --git a/tests/Unit/Traits/WithMountTest.php b/tests/Unit/Traits/WithMountTest.php index f7934089e..0e660a57d 100644 --- a/tests/Unit/Traits/WithMountTest.php +++ b/tests/Unit/Traits/WithMountTest.php @@ -14,8 +14,8 @@ public function test_mounttable_gets_correct_first_item(): void $table = new PetsTableMount; $table->boot(); $table->mount(102); + $table->mountManagesFilters(); $table->bootedComponentUtilities(); - $table->bootedWithData(); $table->bootedWithColumns(); $table->bootedWithColumnSelect(); $table->bootedWithSecondaryHeader(); @@ -31,8 +31,9 @@ public function test_mounttable_gets_correct_first_item(): void $table2 = new PetsTableMount; $table2->boot(); $table2->mount(202); + $table2->mountManagesFilters(); $table2->bootedComponentUtilities(); - $table2->bootedWithData(); + $table2->bootedManagesFilters(); $table2->bootedWithColumns(); $table2->bootedWithColumnSelect(); $table2->bootedWithSecondaryHeader(); @@ -47,8 +48,9 @@ public function test_mounttable_gets_correct_first_item(): void $table3 = new PetsTableMount; $table3->boot(); $table3->mount(); + $table3->mountManagesFilters(); + $table3->bootedManagesFilters(); $table3->bootedComponentUtilities(); - $table3->bootedWithData(); $table3->bootedWithColumns(); $table3->bootedWithColumnSelect(); $table3->bootedWithSecondaryHeader(); diff --git a/tests/Unit/Traits/WithSearchTest.php b/tests/Unit/Traits/WithSearchTest.php index 37ab46f3d..25452f352 100644 --- a/tests/Unit/Traits/WithSearchTest.php +++ b/tests/Unit/Traits/WithSearchTest.php @@ -49,11 +49,11 @@ public function configure(): void } }; - + $testTableDefault->mountManagesFilters(); $testTableDefault->configure(); $testTableDefault->boot(); $testTableDefault->bootedComponentUtilities(); - $testTableDefault->bootedWithData(); + $testTableDefault->bootedManagesFilters(); $testTableDefault->bootedWithColumns(); $testTableDefault->bootedWithColumnSelect(); $testTableDefault->bootedWithSecondaryHeader(); @@ -90,10 +90,11 @@ public function configure(): void } }; + $testTableTrimSearch->mountManagesFilters(); $testTableTrimSearch->configure(); $testTableTrimSearch->boot(); $testTableTrimSearch->bootedComponentUtilities(); - $testTableTrimSearch->bootedWithData(); + $testTableTrimSearch->bootedManagesFilters(); $testTableTrimSearch->bootedWithColumns(); $testTableTrimSearch->bootedWithColumnSelect(); $testTableTrimSearch->bootedWithSecondaryHeader();