From e5d521149e6200d2c7bc7d011144a765284d56b7 Mon Sep 17 00:00:00 2001 From: LRLJoe Date: Fri, 25 Oct 2024 18:33:32 +0100 Subject: [PATCH 1/4] Add customisation for QueryString specific to Filters --- docs/datatable/available-methods.md | 38 +----- docs/datatable/query-string.md | 105 +++++++++++++++++ docs/datatable/styling.md | 2 +- .../QueryStrings/HasQueryStringForFilter.php | 77 ++++++++++++ src/Traits/WithFilters.php | 8 +- src/Traits/WithQueryString.php | 1 + .../QueryStringForFiltersTest.php | 110 ++++++++++++++++++ 7 files changed, 300 insertions(+), 41 deletions(-) create mode 100644 docs/datatable/query-string.md create mode 100644 src/Traits/Core/QueryStrings/HasQueryStringForFilter.php create mode 100644 tests/Traits/Core/QueryStrings/QueryStringForFiltersTest.php diff --git a/docs/datatable/available-methods.md b/docs/datatable/available-methods.md index 13d4091b3..3cf5c303c 100644 --- a/docs/datatable/available-methods.md +++ b/docs/datatable/available-methods.md @@ -76,43 +76,7 @@ public function configure(): void ## Query String -The query string is **enabled by default**, but if you ever needed to toggle it you can use the following methods: - -### setQueryStringStatus - -Enable/disable the query string. - -```php -public function configure(): void -{ - $this->setQueryStringStatus(true); - $this->setQueryStringStatus(false); -} -``` - -### setQueryStringEnabled - -Enable the query string. - -```php -public function configure(): void -{ - // Shorthand for $this->setQueryStringStatus(true) - $this->setQueryStringEnabled(); -} -``` - -### setQueryStringDisabled - -Disable the query string. - -```php -public function configure(): void -{ - // Shorthand for $this->setQueryStringStatus(false) - $this->setQueryStringDisabled(); -} -``` +The documentation for Query String now lives: [here](./query-string) ## Relationships diff --git a/docs/datatable/query-string.md b/docs/datatable/query-string.md new file mode 100644 index 000000000..8f1e2b3c1 --- /dev/null +++ b/docs/datatable/query-string.md @@ -0,0 +1,105 @@ +--- +title: Query String +weight: 5 +--- + +The query string is **enabled by default**, but if you ever needed to toggle it you can use the following methods: + +## Global +### setQueryStringStatus + +Enable/disable the query string. + +```php +public function configure(): void +{ + $this->setQueryStringStatus(true); + $this->setQueryStringStatus(false); +} +``` + +### setQueryStringEnabled + +Enable the query string. + +```php +public function configure(): void +{ + // Shorthand for $this->setQueryStringStatus(true) + $this->setQueryStringEnabled(); +} +``` + +### setQueryStringDisabled + +Disable the query string. + +```php +public function configure(): void +{ + // Shorthand for $this->setQueryStringStatus(false) + $this->setQueryStringDisabled(); +} +``` + +### setQueryStringAlias + +Change the Alias in the URL, otherwise defaults to "$tablename" + +```php +public function configure(): void +{ + $this->setQueryStringAlias('table1'); +} +``` + +## Filters + +The filter query string is **enabled by default**, but if you ever needed to toggle it you can use the following methods: + +### setQueryStringStatusForFilter + +Enable/disable the query string for the filters + +```php +public function configure(): void +{ + $this->setQueryStringStatusForFilter(true); + $this->setQueryStringStatusForFilter(false); +} +``` + +### setQueryStringForFilterEnabled + +Enable the query string for the filters + +```php +public function configure(): void +{ + // Shorthand for $this->setQueryStringStatusForFilter(true) + $this->setQueryStringForFilterEnabled(); +} +``` + +### setQueryStringForFilterDisabled + +Disable the query string for the filters + +```php +public function configure(): void +{ + // Shorthand for $this->setQueryStringStatusForFilter(false) + $this->setQueryStringForFilterDisabled(); +} +``` + +### setQueryStringAliasForFilter + +Change the Alias in the URL for the filter, otherwise defaults to "$tablename-filters" + +```php +public function configure(): void +{ + $this->setQueryStringAliasForFilter('filtervalues'); +} +``` \ No newline at end of file diff --git a/docs/datatable/styling.md b/docs/datatable/styling.md index 9353ad00e..937a6df94 100644 --- a/docs/datatable/styling.md +++ b/docs/datatable/styling.md @@ -1,6 +1,6 @@ --- title: Styling -weight: 5 +weight: 6 --- The package offers significant opportunities to customise the look & feel of the core table, as well as other elements (which are documented in the relevant sections). diff --git a/src/Traits/Core/QueryStrings/HasQueryStringForFilter.php b/src/Traits/Core/QueryStrings/HasQueryStringForFilter.php new file mode 100644 index 000000000..d119bb442 --- /dev/null +++ b/src/Traits/Core/QueryStrings/HasQueryStringForFilter.php @@ -0,0 +1,77 @@ +queryStringStatusForFilter); + } + + public function setupQueryStringStatusForFilter(): void + { + if (! $this->hasQueryStringStatusForFilter()) { + $this->setQueryStringForFilterEnabled(); + } + } + + public function getQueryStringStatusForFilter(): bool + { + return $this->queryStringStatusForFilter ?? true; + } + + public function queryStringForFilterIsEnabled(): bool + { + $this->setupQueryStringStatusForFilter(); + + return ($this->queryStringIsEnabled() === true && $this->getQueryStringStatusForFilter() === true && $this->filtersAreEnabled()); + } + + public function setQueryStringStatusForFilter(bool $status): self + { + $this->queryStringStatusForFilter = $status; + + return $this; + } + + public function setQueryStringForFilterEnabled(): self + { + $this->setQueryStringStatusForFilter(true); + + return $this; + } + + public function setQueryStringForFilterDisabled(): self + { + $this->setQueryStringStatusForFilter(false); + + return $this; + } + + public function hasQueryStringAliasForFilter(): bool + { + return isset($this->queryStringAliasForFilter); + } + + public function getQueryStringAliasForFilter(): string + { + return $this->queryStringAliasForFilter ?? $this->getQueryStringAlias() ."-filters"; + } + + public function setQueryStringAliasForFilter(string $queryStringAliasForFilter): self + { + $this->queryStringAliasForFilter = $queryStringAliasForFilter; + + return $this; + } + +} \ No newline at end of file diff --git a/src/Traits/WithFilters.php b/src/Traits/WithFilters.php index 3c2ff58c5..439fa045c 100644 --- a/src/Traits/WithFilters.php +++ b/src/Traits/WithFilters.php @@ -8,11 +8,13 @@ use Rappasoft\LaravelLivewireTables\Events\FilterApplied; use Rappasoft\LaravelLivewireTables\Traits\Configuration\FilterConfiguration; use Rappasoft\LaravelLivewireTables\Traits\Helpers\FilterHelpers; +use Rappasoft\LaravelLivewireTables\Traits\Core\QueryStrings\HasQueryStringForFilter; trait WithFilters { use FilterConfiguration, FilterHelpers; + use HasQueryStringForFilter; #[Locked] public bool $filtersStatus = true; @@ -49,10 +51,10 @@ public function filters(): array protected function queryStringWithFilters(): array { - if ($this->queryStringIsEnabled() && $this->filtersAreEnabled()) { + if ($this->queryStringForFilterIsEnabled()) { return [ - 'appliedFilters' => ['except' => null, 'history' => false, 'keep' => false, 'as' => $this->getQueryStringAlias().'-filters'], - 'filterComponents' => ['except' => null, 'history' => false, 'keep' => false, 'as' => $this->getQueryStringAlias().'-filters'], + 'appliedFilters' => ['except' => null, 'history' => false, 'keep' => false, 'as' => $this->getQueryStringAliasForFilter()], + 'filterComponents' => ['except' => null, 'history' => false, 'keep' => false, 'as' => $this->getQueryStringAliasForFilter()], ]; } diff --git a/src/Traits/WithQueryString.php b/src/Traits/WithQueryString.php index ccc11d5e9..c9b74d9dd 100644 --- a/src/Traits/WithQueryString.php +++ b/src/Traits/WithQueryString.php @@ -16,6 +16,7 @@ trait WithQueryString protected ?string $queryStringAlias; + /** * Set the custom query string array for this specific table * diff --git a/tests/Traits/Core/QueryStrings/QueryStringForFiltersTest.php b/tests/Traits/Core/QueryStrings/QueryStringForFiltersTest.php new file mode 100644 index 000000000..a2707a922 --- /dev/null +++ b/tests/Traits/Core/QueryStrings/QueryStringForFiltersTest.php @@ -0,0 +1,110 @@ +setDataTableFingerprint('test'); + } + }; + + $mock->configure(); + $mock->boot(); + + $this->assertSame(true, $mock->getQueryStringStatusForFilter()); + } + + public function test_can_disable_filter_query_string_status(): void + { + $mock = new class extends PetsTable + { + public ?array $testAttributesArray; + + public function configure(): void + { + $this->setDataTableFingerprint('test'); + $this->setQueryStringForFilterDisabled(); + } + }; + + $mock->configure(); + $mock->boot(); + + $this->assertSame(false, $mock->getQueryStringStatusForFilter()); + } + + public function test_can_enable_filter_query_string_status(): void + { + $mock = new class extends PetsTable + { + public ?array $testAttributesArray; + + public function configure(): void + { + $this->setDataTableFingerprint('test'); + $this->setQueryStringForFilterDisabled(); + } + }; + + $mock->configure(); + $mock->boot(); + + $this->assertSame(false, $mock->getQueryStringStatusForFilter()); + $mock->setQueryStringForFilterEnabled(); + $this->assertSame(true, $mock->getQueryStringStatusForFilter()); + + } + + public function test_can_get_default_filter_query_string_alias(): void + { + $mock = new class extends PetsTable + { + public ?array $testAttributesArray; + + public function configure(): void + { + $this->setDataTableFingerprint('test'); + } + }; + + $mock->configure(); + $mock->boot(); + + $this->assertSame("table-filters", $mock->getQueryStringAliasForFilter()); + + } + + public function test_can_change_default_filter_query_string_alias(): void + { + $mock = new class extends PetsTable + { + public ?array $testAttributesArray; + + public function configure(): void + { + $this->setDataTableFingerprint('test'); + } + }; + + $mock->configure(); + $mock->boot(); + + $this->assertSame("table-filters", $mock->getQueryStringAliasForFilter()); + $mock->setQueryStringAliasForFilter("pet-filters"); + $this->assertSame("pet-filters", $mock->getQueryStringAliasForFilter()); + } + +} From fd43ba56db49961bba6fef14f70d0a49e092d6b4 Mon Sep 17 00:00:00 2001 From: lrljoe Date: Fri, 25 Oct 2024 17:34:01 +0000 Subject: [PATCH 2/4] Fix styling --- src/Traits/Core/QueryStrings/HasQueryStringForFilter.php | 8 +++----- src/Traits/WithFilters.php | 2 +- src/Traits/WithQueryString.php | 1 - .../Core/QueryStrings/QueryStringForFiltersTest.php | 9 ++++----- 4 files changed, 8 insertions(+), 12 deletions(-) diff --git a/src/Traits/Core/QueryStrings/HasQueryStringForFilter.php b/src/Traits/Core/QueryStrings/HasQueryStringForFilter.php index d119bb442..9f1949020 100644 --- a/src/Traits/Core/QueryStrings/HasQueryStringForFilter.php +++ b/src/Traits/Core/QueryStrings/HasQueryStringForFilter.php @@ -6,7 +6,6 @@ trait HasQueryStringForFilter { - #[Locked] public ?bool $queryStringStatusForFilter; @@ -33,7 +32,7 @@ public function queryStringForFilterIsEnabled(): bool { $this->setupQueryStringStatusForFilter(); - return ($this->queryStringIsEnabled() === true && $this->getQueryStringStatusForFilter() === true && $this->filtersAreEnabled()); + return $this->queryStringIsEnabled() === true && $this->getQueryStringStatusForFilter() === true && $this->filtersAreEnabled(); } public function setQueryStringStatusForFilter(bool $status): self @@ -64,7 +63,7 @@ public function hasQueryStringAliasForFilter(): bool public function getQueryStringAliasForFilter(): string { - return $this->queryStringAliasForFilter ?? $this->getQueryStringAlias() ."-filters"; + return $this->queryStringAliasForFilter ?? $this->getQueryStringAlias().'-filters'; } public function setQueryStringAliasForFilter(string $queryStringAliasForFilter): self @@ -73,5 +72,4 @@ public function setQueryStringAliasForFilter(string $queryStringAliasForFilter): return $this; } - -} \ No newline at end of file +} diff --git a/src/Traits/WithFilters.php b/src/Traits/WithFilters.php index 439fa045c..52cdb22b3 100644 --- a/src/Traits/WithFilters.php +++ b/src/Traits/WithFilters.php @@ -7,8 +7,8 @@ use Livewire\Attributes\Locked; use Rappasoft\LaravelLivewireTables\Events\FilterApplied; use Rappasoft\LaravelLivewireTables\Traits\Configuration\FilterConfiguration; -use Rappasoft\LaravelLivewireTables\Traits\Helpers\FilterHelpers; use Rappasoft\LaravelLivewireTables\Traits\Core\QueryStrings\HasQueryStringForFilter; +use Rappasoft\LaravelLivewireTables\Traits\Helpers\FilterHelpers; trait WithFilters { diff --git a/src/Traits/WithQueryString.php b/src/Traits/WithQueryString.php index c9b74d9dd..ccc11d5e9 100644 --- a/src/Traits/WithQueryString.php +++ b/src/Traits/WithQueryString.php @@ -16,7 +16,6 @@ trait WithQueryString protected ?string $queryStringAlias; - /** * Set the custom query string array for this specific table * diff --git a/tests/Traits/Core/QueryStrings/QueryStringForFiltersTest.php b/tests/Traits/Core/QueryStrings/QueryStringForFiltersTest.php index a2707a922..9387e6cdb 100644 --- a/tests/Traits/Core/QueryStrings/QueryStringForFiltersTest.php +++ b/tests/Traits/Core/QueryStrings/QueryStringForFiltersTest.php @@ -83,7 +83,7 @@ public function configure(): void $mock->configure(); $mock->boot(); - $this->assertSame("table-filters", $mock->getQueryStringAliasForFilter()); + $this->assertSame('table-filters', $mock->getQueryStringAliasForFilter()); } @@ -102,9 +102,8 @@ public function configure(): void $mock->configure(); $mock->boot(); - $this->assertSame("table-filters", $mock->getQueryStringAliasForFilter()); - $mock->setQueryStringAliasForFilter("pet-filters"); - $this->assertSame("pet-filters", $mock->getQueryStringAliasForFilter()); + $this->assertSame('table-filters', $mock->getQueryStringAliasForFilter()); + $mock->setQueryStringAliasForFilter('pet-filters'); + $this->assertSame('pet-filters', $mock->getQueryStringAliasForFilter()); } - } From baf5944d481105f704a0eb63034df71474af5d23 Mon Sep 17 00:00:00 2001 From: Joe <104938042+lrljoe@users.noreply.github.com> Date: Fri, 25 Oct 2024 18:41:49 +0100 Subject: [PATCH 3/4] Move all QueryString Filter Code to HasQueryStringForFilter --- .../QueryStrings/HasQueryStringForFilter.php | 22 ++++++++++++++----- src/Traits/WithFilters.php | 12 ---------- 2 files changed, 17 insertions(+), 17 deletions(-) diff --git a/src/Traits/Core/QueryStrings/HasQueryStringForFilter.php b/src/Traits/Core/QueryStrings/HasQueryStringForFilter.php index 9f1949020..544d43f0a 100644 --- a/src/Traits/Core/QueryStrings/HasQueryStringForFilter.php +++ b/src/Traits/Core/QueryStrings/HasQueryStringForFilter.php @@ -11,9 +11,16 @@ trait HasQueryStringForFilter protected ?string $queryStringAliasForFilter; - public function hasQueryStringStatusForFilter(): bool + protected function queryStringHasQueryStringForFilter(): array { - return isset($this->queryStringStatusForFilter); + if ($this->queryStringForFilterIsEnabled()) { + return [ + 'appliedFilters' => ['except' => null, 'history' => false, 'keep' => false, 'as' => $this->getQueryStringAliasForFilter()], + 'filterComponents' => ['except' => null, 'history' => false, 'keep' => false, 'as' => $this->getQueryStringAliasForFilter()], + ]; + } + + return []; } public function setupQueryStringStatusForFilter(): void @@ -23,6 +30,11 @@ public function setupQueryStringStatusForFilter(): void } } + public function hasQueryStringStatusForFilter(): bool + { + return isset($this->queryStringStatusForFilter); + } + public function getQueryStringStatusForFilter(): bool { return $this->queryStringStatusForFilter ?? true; @@ -32,7 +44,7 @@ public function queryStringForFilterIsEnabled(): bool { $this->setupQueryStringStatusForFilter(); - return $this->queryStringIsEnabled() === true && $this->getQueryStringStatusForFilter() === true && $this->filtersAreEnabled(); + return (($this->queryStringIsEnabled() === true || $this->getQueryStringStatusForFilter() === true) && $this->filtersAreEnabled()); } public function setQueryStringStatusForFilter(bool $status): self @@ -66,9 +78,9 @@ public function getQueryStringAliasForFilter(): string return $this->queryStringAliasForFilter ?? $this->getQueryStringAlias().'-filters'; } - public function setQueryStringAliasForFilter(string $queryStringAliasForFilter): self + public function setQueryStringAliasForFilter(string $alias): self { - $this->queryStringAliasForFilter = $queryStringAliasForFilter; + $this->queryStringAliasForFilter = $alias; return $this; } diff --git a/src/Traits/WithFilters.php b/src/Traits/WithFilters.php index 52cdb22b3..e9469ea44 100644 --- a/src/Traits/WithFilters.php +++ b/src/Traits/WithFilters.php @@ -49,18 +49,6 @@ public function filters(): array return []; } - protected function queryStringWithFilters(): array - { - if ($this->queryStringForFilterIsEnabled()) { - return [ - 'appliedFilters' => ['except' => null, 'history' => false, 'keep' => false, 'as' => $this->getQueryStringAliasForFilter()], - 'filterComponents' => ['except' => null, 'history' => false, 'keep' => false, 'as' => $this->getQueryStringAliasForFilter()], - ]; - } - - return []; - } - public function applyFilters(): Builder { if ($this->filtersAreEnabled() && $this->hasFilters() && $this->hasAppliedFiltersWithValues()) { From 38f5c61d4c54f5c0264a6cef44951b1edc1eb97c Mon Sep 17 00:00:00 2001 From: lrljoe Date: Fri, 25 Oct 2024 17:42:17 +0000 Subject: [PATCH 4/4] Fix styling --- src/Traits/Core/QueryStrings/HasQueryStringForFilter.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Traits/Core/QueryStrings/HasQueryStringForFilter.php b/src/Traits/Core/QueryStrings/HasQueryStringForFilter.php index 544d43f0a..8a84ab222 100644 --- a/src/Traits/Core/QueryStrings/HasQueryStringForFilter.php +++ b/src/Traits/Core/QueryStrings/HasQueryStringForFilter.php @@ -44,7 +44,7 @@ public function queryStringForFilterIsEnabled(): bool { $this->setupQueryStringStatusForFilter(); - return (($this->queryStringIsEnabled() === true || $this->getQueryStringStatusForFilter() === true) && $this->filtersAreEnabled()); + return ($this->queryStringIsEnabled() === true || $this->getQueryStringStatusForFilter() === true) && $this->filtersAreEnabled(); } public function setQueryStringStatusForFilter(bool $status): self