From 6ec3f27bb11bca06ea1bb69a34e5640d661f5ab9 Mon Sep 17 00:00:00 2001 From: LRLJoe Date: Sat, 4 Jan 2025 10:22:55 +0000 Subject: [PATCH 1/4] Migrate Filter Code Appropriately --- .../Configuration/FilterConfiguration.php | 52 --------- .../Core/Filters/HandlesFilterTraits.php | 13 +++ .../Core/Filters/HasFilterGenericData.php | 36 ++++++ .../Filters/HasFilterMenuStyling.php} | 99 +++++++++++++++- .../Core/Filters/HasFilterPillsStyling.php | 63 +++++++++++ .../HasFilterQueryString.php} | 6 +- .../Core/Filters/HasFiltersVisibility.php | 65 +++++++++++ src/Traits/Core/Filters/ManagesFilters.php | 106 ++++++++++++++++++ src/Traits/HasAllTraits.php | 6 +- src/Traits/Helpers/FilterHelpers.php | 104 +---------------- src/Traits/Helpers/QueryHelpers.php | 4 + .../FilterMenuStylingConfiguration.php | 85 -------------- src/Traits/Styling/HasFilterMenuStyling.php | 26 ----- src/Traits/WithData.php | 13 +-- src/Traits/WithFilters.php | 77 +------------ tests/DataTableComponentTest.php | 3 +- tests/TestCase.php | 20 ++-- .../Unit/Traits/Helpers/ColumnHelpersTest.php | 4 +- .../Helpers/ColumnSelectHelpersTest.php | 3 +- .../Unit/Traits/Helpers/FilterHelpersTest.php | 4 +- .../Helpers/SessionStorageHelpersTest.php | 29 ++++- tests/Unit/Traits/WithCustomisationsTest.php | 8 +- tests/Unit/Traits/WithMountTest.php | 2 +- tests/Unit/Traits/WithSearchTest.php | 2 +- 24 files changed, 455 insertions(+), 375 deletions(-) create mode 100644 src/Traits/Core/Filters/HandlesFilterTraits.php create mode 100644 src/Traits/Core/Filters/HasFilterGenericData.php rename src/Traits/{Styling/Helpers/FilterMenuStylingHelpers.php => Core/Filters/HasFilterMenuStyling.php} (55%) create mode 100644 src/Traits/Core/Filters/HasFilterPillsStyling.php rename src/Traits/Core/{QueryStrings/HasQueryStringForFilter.php => Filters/HasFilterQueryString.php} (95%) create mode 100644 src/Traits/Core/Filters/HasFiltersVisibility.php create mode 100644 src/Traits/Core/Filters/ManagesFilters.php delete mode 100644 src/Traits/Styling/Configuration/FilterMenuStylingConfiguration.php delete mode 100644 src/Traits/Styling/HasFilterMenuStyling.php diff --git a/src/Traits/Configuration/FilterConfiguration.php b/src/Traits/Configuration/FilterConfiguration.php index d17e7bf16..46ebe8b68 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 @@ -27,55 +25,5 @@ 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..fe7c94722 --- /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; + } +} \ No newline at end of file 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..b0c6f9f6b 100644 --- a/src/Traits/Styling/Helpers/FilterMenuStylingHelpers.php +++ b/src/Traits/Core/Filters/HasFilterMenuStyling.php @@ -1,14 +1,106 @@ '', '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 * * @return array @@ -119,4 +211,5 @@ public function getFiltersByRow(): array return $orderedFilters; } + } diff --git a/src/Traits/Core/Filters/HasFilterPillsStyling.php b/src/Traits/Core/Filters/HasFilterPillsStyling.php new file mode 100644 index 000000000..c28a2c4c8 --- /dev/null +++ b/src/Traits/Core/Filters/HasFilterPillsStyling.php @@ -0,0 +1,63 @@ +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; + } + +} \ No newline at end of file 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..6337f0888 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; + } + +} \ No newline at end of file diff --git a/src/Traits/Core/Filters/ManagesFilters.php b/src/Traits/Core/Filters/ManagesFilters.php new file mode 100644 index 000000000..2576b09a8 --- /dev/null +++ b/src/Traits/Core/Filters/ManagesFilters.php @@ -0,0 +1,106 @@ +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); + + } + + } + + +} \ No newline at end of file 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..c5c899cd0 100644 --- a/src/Traits/Helpers/FilterHelpers.php +++ b/src/Traits/Helpers/FilterHelpers.php @@ -3,35 +3,14 @@ namespace Rappasoft\LaravelLivewireTables\Traits\Helpers; use Illuminate\Support\Collection; -use Livewire\Attributes\Computed; -use Livewire\Attributes\On; +use Illuminate\Database\Eloquent\Builder; +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\{MultiSelectFilter,MultiSelectDropdownFilter}; 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 @@ -104,9 +45,7 @@ public function getFiltersCount(): int if (! isset($this->filterCount)) { $this->filterCount = $this->getFilters()->count(); } - return $this->filterCount; - } /** @@ -199,14 +138,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 +188,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..296e5ba4e 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..1a15a4ab5 100644 --- a/src/Traits/WithData.php +++ b/src/Traits/WithData.php @@ -16,14 +16,6 @@ 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 @@ -31,6 +23,7 @@ public function bootedWithData(): void #[Computed] public function getRows(): Collection|CursorPaginator|Paginator|LengthAwarePaginator { + // Setup the Base Query $this->baseQuery(); @@ -52,6 +45,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..704166aff 100644 --- a/src/Traits/WithFilters.php +++ b/src/Traits/WithFilters.php @@ -2,42 +2,24 @@ 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\Helpers\FilterHelpers; -use Rappasoft\LaravelLivewireTables\Traits\Styling\HasFilterMenuStyling; +use Rappasoft\LaravelLivewireTables\Traits\Core\Filters\HandlesFilterTraits; 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 @@ -45,59 +27,4 @@ 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..4f0510744 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->boot(); + $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/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..6ae1a1373 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(); 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..5cc87558f 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..fa44c6df8 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,8 +92,10 @@ public function configure(): void }; $view = view('livewire-tables::datatable'); + $temp->mountManagesFilters(); $temp->boot(); $temp->bootedComponentUtilities(); + $temp->bootedManagesFilters(); $temp->bootedWithData(); $temp->bootedWithColumns(); $temp->bootedWithColumnSelect(); diff --git a/tests/Unit/Traits/WithMountTest.php b/tests/Unit/Traits/WithMountTest.php index f7934089e..089904cdc 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(); diff --git a/tests/Unit/Traits/WithSearchTest.php b/tests/Unit/Traits/WithSearchTest.php index 37ab46f3d..ce3399e78 100644 --- a/tests/Unit/Traits/WithSearchTest.php +++ b/tests/Unit/Traits/WithSearchTest.php @@ -49,7 +49,7 @@ public function configure(): void } }; - + $testTableDefault->mountManagesFilters(); $testTableDefault->configure(); $testTableDefault->boot(); $testTableDefault->bootedComponentUtilities(); From 32e129e35903a2f47be62a6a52f1d27525c832ff Mon Sep 17 00:00:00 2001 From: lrljoe Date: Sat, 4 Jan 2025 10:23:24 +0000 Subject: [PATCH 2/4] Fix styling --- .../Configuration/FilterConfiguration.php | 2 -- .../Core/Filters/HandlesFilterTraits.php | 2 +- .../Core/Filters/HasFilterGenericData.php | 4 ++-- .../Core/Filters/HasFilterMenuStyling.php | 7 ++---- .../Core/Filters/HasFilterPillsStyling.php | 3 +-- .../Core/Filters/HasFilterQueryString.php | 2 +- .../Core/Filters/HasFiltersVisibility.php | 5 ++-- src/Traits/Core/Filters/ManagesFilters.php | 14 ++++------- src/Traits/Helpers/FilterHelpers.php | 5 ++-- src/Traits/Helpers/QueryHelpers.php | 4 ++-- src/Traits/WithData.php | 1 - src/Traits/WithFilters.php | 3 +-- tests/TestCase.php | 2 +- .../Helpers/SessionStorageHelpersTest.php | 24 +++++++++---------- 14 files changed, 32 insertions(+), 46 deletions(-) diff --git a/src/Traits/Configuration/FilterConfiguration.php b/src/Traits/Configuration/FilterConfiguration.php index 46ebe8b68..7e8400b86 100644 --- a/src/Traits/Configuration/FilterConfiguration.php +++ b/src/Traits/Configuration/FilterConfiguration.php @@ -24,6 +24,4 @@ public function setFiltersDisabled(): self return $this; } - - } diff --git a/src/Traits/Core/Filters/HandlesFilterTraits.php b/src/Traits/Core/Filters/HandlesFilterTraits.php index fe7c94722..d4f3c114e 100644 --- a/src/Traits/Core/Filters/HandlesFilterTraits.php +++ b/src/Traits/Core/Filters/HandlesFilterTraits.php @@ -10,4 +10,4 @@ trait HandlesFilterTraits HasFilterPillsStyling, HasFilterQueryString, HasFiltersVisibility; -} \ No newline at end of file +} diff --git a/src/Traits/Core/Filters/HasFilterGenericData.php b/src/Traits/Core/Filters/HasFilterGenericData.php index beddfe09e..2025ffeb5 100644 --- a/src/Traits/Core/Filters/HasFilterGenericData.php +++ b/src/Traits/Core/Filters/HasFilterGenericData.php @@ -2,8 +2,8 @@ namespace Rappasoft\LaravelLivewireTables\Traits\Core\Filters; -use Rappasoft\LaravelLivewireTables\DataTransferObjects\FilterGenericData; use Livewire\Attributes\Computed; +use Rappasoft\LaravelLivewireTables\DataTransferObjects\FilterGenericData; trait HasFilterGenericData { @@ -33,4 +33,4 @@ public function getFilterGenericData(): array return $this->filterGenericData; } -} \ No newline at end of file +} diff --git a/src/Traits/Core/Filters/HasFilterMenuStyling.php b/src/Traits/Core/Filters/HasFilterMenuStyling.php index b0c6f9f6b..cf511e8cd 100644 --- a/src/Traits/Core/Filters/HasFilterMenuStyling.php +++ b/src/Traits/Core/Filters/HasFilterMenuStyling.php @@ -10,7 +10,6 @@ trait HasFilterMenuStyling { - #[Locked] public string $filterLayout = 'popover'; @@ -23,8 +22,7 @@ trait HasFilterMenuStyling protected ?Closure $filterSlidedownRowCallback; - - /** + /** * Used to set attributes for the Filter Popover */ public function setFilterPopoverAttributes(array $filterPopoverAttributes): self @@ -100,7 +98,7 @@ public function setFilterSlideDownDefaultStatusEnabled(): self return $this; } - /** + /** * Used to get attributes for the Filter Popover * * @return array @@ -211,5 +209,4 @@ public function getFiltersByRow(): array return $orderedFilters; } - } diff --git a/src/Traits/Core/Filters/HasFilterPillsStyling.php b/src/Traits/Core/Filters/HasFilterPillsStyling.php index c28a2c4c8..667583ba5 100644 --- a/src/Traits/Core/Filters/HasFilterPillsStyling.php +++ b/src/Traits/Core/Filters/HasFilterPillsStyling.php @@ -59,5 +59,4 @@ public function hasAppliedVisibleFiltersForPills(): bool ->reject(fn (Filter $filter) => $filter->isHiddenFromPills()) ->count() > 0; } - -} \ No newline at end of file +} diff --git a/src/Traits/Core/Filters/HasFilterQueryString.php b/src/Traits/Core/Filters/HasFilterQueryString.php index 6337f0888..73bfb82b1 100644 --- a/src/Traits/Core/Filters/HasFilterQueryString.php +++ b/src/Traits/Core/Filters/HasFilterQueryString.php @@ -81,4 +81,4 @@ public function setQueryStringAliasForFilter(string $alias): self return $this; } -} \ No newline at end of file +} diff --git a/src/Traits/Core/Filters/HasFiltersVisibility.php b/src/Traits/Core/Filters/HasFiltersVisibility.php index 019102bfe..ddb80778b 100644 --- a/src/Traits/Core/Filters/HasFiltersVisibility.php +++ b/src/Traits/Core/Filters/HasFiltersVisibility.php @@ -37,7 +37,7 @@ public function getVisibleFilters(): Collection { return $this->getFilters()->reject(fn (Filter $filter) => $filter->isHiddenFromMenus()); } - + #[Locked] public bool $filtersVisibilityStatus = true; @@ -61,5 +61,4 @@ public function setFiltersVisibilityDisabled(): self return $this; } - -} \ No newline at end of file +} diff --git a/src/Traits/Core/Filters/ManagesFilters.php b/src/Traits/Core/Filters/ManagesFilters.php index 2576b09a8..72bf73ad2 100644 --- a/src/Traits/Core/Filters/ManagesFilters.php +++ b/src/Traits/Core/Filters/ManagesFilters.php @@ -6,16 +6,14 @@ use Rappasoft\LaravelLivewireTables\Events\FilterApplied; trait ManagesFilters -{ - +{ // Set in JS public array $filterComponents = []; // Set in Frontend public array $appliedFilters = []; - - /** + /** * Sets Filter Default Values */ public function mountManagesFilters(): void @@ -39,8 +37,7 @@ public function bootedManagesFilters(): void { $this->setBuilder($this->builder()); - foreach($this->filterComponents as $filterKey => $value) - { + foreach ($this->filterComponents as $filterKey => $value) { $this->appliedFilters[$filterKey] = $value; } } @@ -71,7 +68,6 @@ public function applyFilters(): Builder return $this->getBuilder(); } - public function updatedFilterComponents(string|array|null $value, string $filterName): void { $this->resetComputedPage(); @@ -101,6 +97,4 @@ public function updatedFilterComponents(string|array|null $value, string $filter } } - - -} \ No newline at end of file +} diff --git a/src/Traits/Helpers/FilterHelpers.php b/src/Traits/Helpers/FilterHelpers.php index c5c899cd0..714eebfd5 100644 --- a/src/Traits/Helpers/FilterHelpers.php +++ b/src/Traits/Helpers/FilterHelpers.php @@ -2,12 +2,12 @@ namespace Rappasoft\LaravelLivewireTables\Traits\Helpers; -use Illuminate\Support\Collection; use Illuminate\Database\Eloquent\Builder; +use Illuminate\Support\Collection; use Livewire\Attributes\{Computed,On}; use Rappasoft\LaravelLivewireTables\Events\FilterApplied; use Rappasoft\LaravelLivewireTables\Views\Filter; -use Rappasoft\LaravelLivewireTables\Views\Filters\{MultiSelectFilter,MultiSelectDropdownFilter}; +use Rappasoft\LaravelLivewireTables\Views\Filters\{MultiSelectDropdownFilter, MultiSelectFilter}; trait FilterHelpers { @@ -45,6 +45,7 @@ public function getFiltersCount(): int if (! isset($this->filterCount)) { $this->filterCount = $this->getFilters()->count(); } + return $this->filterCount; } diff --git a/src/Traits/Helpers/QueryHelpers.php b/src/Traits/Helpers/QueryHelpers.php index 296e5ba4e..3bb7150dd 100644 --- a/src/Traits/Helpers/QueryHelpers.php +++ b/src/Traits/Helpers/QueryHelpers.php @@ -9,10 +9,10 @@ trait QueryHelpers { public function getBuilder(): Builder { - if(!isset($this->builder)) - { + if (! isset($this->builder)) { $this->setBuilder($this->builder()); } + return $this->builder; } diff --git a/src/Traits/WithData.php b/src/Traits/WithData.php index 1a15a4ab5..c8c4f4a75 100644 --- a/src/Traits/WithData.php +++ b/src/Traits/WithData.php @@ -16,7 +16,6 @@ trait WithData { - /** * Retrieves the rows for the executed query */ diff --git a/src/Traits/WithFilters.php b/src/Traits/WithFilters.php index 704166aff..9d099b3aa 100644 --- a/src/Traits/WithFilters.php +++ b/src/Traits/WithFilters.php @@ -5,8 +5,8 @@ use Illuminate\Support\Collection; use Livewire\Attributes\Locked; use Rappasoft\LaravelLivewireTables\Traits\Configuration\FilterConfiguration; -use Rappasoft\LaravelLivewireTables\Traits\Helpers\FilterHelpers; use Rappasoft\LaravelLivewireTables\Traits\Core\Filters\HandlesFilterTraits; +use Rappasoft\LaravelLivewireTables\Traits\Helpers\FilterHelpers; trait WithFilters { @@ -26,5 +26,4 @@ public function filters(): array { return []; } - } diff --git a/tests/TestCase.php b/tests/TestCase.php index 4f0510744..70cc035de 100644 --- a/tests/TestCase.php +++ b/tests/TestCase.php @@ -97,7 +97,7 @@ protected function setupBasicTable() $view = view('livewire-tables::datatable'); $this->basicTable = new PetsTable; $this->basicTable->mountManagesFilters(); - $this->basicTable->boot(); + $this->basicTable->boot(); $this->basicTable->bootedManagesFilters(); $this->basicTable->bootedComponentUtilities(); $this->basicTable->bootedWithColumns(); diff --git a/tests/Unit/Traits/Helpers/SessionStorageHelpersTest.php b/tests/Unit/Traits/Helpers/SessionStorageHelpersTest.php index 5cc87558f..afc8455d2 100644 --- a/tests/Unit/Traits/Helpers/SessionStorageHelpersTest.php +++ b/tests/Unit/Traits/Helpers/SessionStorageHelpersTest.php @@ -46,21 +46,21 @@ public function test_can_store_for_fikers(): void '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()); + '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'], - '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); + '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()); From a3066aed6f55a097fc22210e00293e81f75e5c52 Mon Sep 17 00:00:00 2001 From: LRLJoe Date: Sat, 4 Jan 2025 10:34:08 +0000 Subject: [PATCH 3/4] Test Fixes --- phpunit.xml.dist | 4 ---- .../DebuggableDataTest.php | 24 ++++++++++++++++--- .../Helpers/ColumnSelectHelpersTest.php | 6 +++-- tests/Unit/Traits/WithCustomisationsTest.php | 2 -- tests/Unit/Traits/WithMountTest.php | 6 +++-- tests/Unit/Traits/WithSearchTest.php | 5 ++-- 6 files changed, 32 insertions(+), 15 deletions(-) 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/tests/Unit/DataTransferObjects/DebuggableDataTest.php b/tests/Unit/DataTransferObjects/DebuggableDataTest.php index 34124e26d..ab5a1cc53 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/ColumnSelectHelpersTest.php b/tests/Unit/Traits/Helpers/ColumnSelectHelpersTest.php index 6ae1a1373..05ea4cdc9 100644 --- a/tests/Unit/Traits/Helpers/ColumnSelectHelpersTest.php +++ b/tests/Unit/Traits/Helpers/ColumnSelectHelpersTest.php @@ -157,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(); @@ -187,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/WithCustomisationsTest.php b/tests/Unit/Traits/WithCustomisationsTest.php index fa44c6df8..ede4b6584 100644 --- a/tests/Unit/Traits/WithCustomisationsTest.php +++ b/tests/Unit/Traits/WithCustomisationsTest.php @@ -96,7 +96,6 @@ public function configure(): void $temp->boot(); $temp->bootedComponentUtilities(); $temp->bootedManagesFilters(); - $temp->bootedWithData(); $temp->bootedWithColumns(); $temp->bootedWithColumnSelect(); $temp->bootedWithSecondaryHeader(); @@ -130,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 089904cdc..0e660a57d 100644 --- a/tests/Unit/Traits/WithMountTest.php +++ b/tests/Unit/Traits/WithMountTest.php @@ -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 ce3399e78..25452f352 100644 --- a/tests/Unit/Traits/WithSearchTest.php +++ b/tests/Unit/Traits/WithSearchTest.php @@ -53,7 +53,7 @@ public function configure(): void $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(); From 6c6eacadadcb097283e79773cfbdd16ebac97f5f Mon Sep 17 00:00:00 2001 From: lrljoe Date: Sat, 4 Jan 2025 10:34:35 +0000 Subject: [PATCH 4/4] Fix styling --- .../DebuggableDataTest.php | 38 +++++++++---------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/tests/Unit/DataTransferObjects/DebuggableDataTest.php b/tests/Unit/DataTransferObjects/DebuggableDataTest.php index ab5a1cc53..d185383cf 100644 --- a/tests/Unit/DataTransferObjects/DebuggableDataTest.php +++ b/tests/Unit/DataTransferObjects/DebuggableDataTest.php @@ -26,12 +26,12 @@ 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'], ['breed' => [], - 'species' => [], - 'breed_id_filter' => null, - 'pet_name_filter' => null, - 'last_visit_date_filter' => null, - 'last_visit_datetime_filter' => null, - 'breed_select_filter' => null]); + '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']); @@ -43,23 +43,23 @@ public function test_check_dto_returns_filters_correctly() $debuggableDTO = new DebuggableData($this->basicTable); $debuggableArray = $debuggableDTO->toArray(); $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]); + '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"], - '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['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]); } }