From f2a2fbfa9d3d26796c0beb705668e911e1a39dd2 Mon Sep 17 00:00:00 2001 From: Tiago Fernandes Date: Fri, 1 Dec 2023 12:28:45 +0000 Subject: [PATCH 1/3] Update 04-query-builder.md --- .../docs/04-filters/04-query-builder.md | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/packages/tables/docs/04-filters/04-query-builder.md b/packages/tables/docs/04-filters/04-query-builder.md index 7c499b2a3f..09a679475b 100644 --- a/packages/tables/docs/04-filters/04-query-builder.md +++ b/packages/tables/docs/04-filters/04-query-builder.md @@ -347,6 +347,25 @@ TextConstraint::make('author') ->icon('heroicon-m-user') ``` +## Overriding the default operators + +Each constraint type has a set of default operators, which you can customize by using the `operators()`method: + +```php +use Filament\Tables\Filters\QueryBuilder\Constraints\TextConstraint; +use Tables\Filters\QueryBuilder\Constraints\TextConstraint\Operators\EqualsOperator; + +TextConstraint::make('author') + ->relationship(name: 'author', titleAttribute: 'name') + ->operators([ + EqualsOperator::make() // or a custom operator + ], keepDefault: true) +``` + +This will add the `EqualsOperator` to the existing/default operators. + +If you'd like to remove the default operators and show only the EqualsOperator, use `keepDefault: false`. + ## Creating custom constraints Custom constraints can be created "inline" with other constraints using the `Constraint::make()` method. You should also pass an [icon](#customizing-the-constraint-icon) to the `icon()` method: From 0c725bd7d961800b1553a4f6962488f24f42ca6a Mon Sep 17 00:00:00 2001 From: Tiago Fernandes Date: Fri, 1 Dec 2023 12:30:30 +0000 Subject: [PATCH 2/3] Update HasOperators.php --- .../QueryBuilder/Constraints/Concerns/HasOperators.php | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/packages/tables/src/Filters/QueryBuilder/Constraints/Concerns/HasOperators.php b/packages/tables/src/Filters/QueryBuilder/Constraints/Concerns/HasOperators.php index 11d100cb7d..de890b3854 100644 --- a/packages/tables/src/Filters/QueryBuilder/Constraints/Concerns/HasOperators.php +++ b/packages/tables/src/Filters/QueryBuilder/Constraints/Concerns/HasOperators.php @@ -37,8 +37,12 @@ trait HasOperators /** * @param array | Operator> $operators */ - public function operators(array $operators): static + public function operators(array $operators, bool $keepDefault = true): static { + if (! $keepDefault) { + $this->operators = []; + } + foreach ($operators as $operator) { if (is_string($operator)) { $operator = $operator::make(); From 566c76985623d6d722049d92c7986a1aa4e99848 Mon Sep 17 00:00:00 2001 From: Dan Harrin Date: Sat, 2 Dec 2023 21:30:55 +0000 Subject: [PATCH 3/3] wip --- .../docs/04-filters/04-query-builder.md | 34 ++++++++++++++++--- .../Constraints/Concerns/HasOperators.php | 17 +++++++--- 2 files changed, 41 insertions(+), 10 deletions(-) diff --git a/packages/tables/docs/04-filters/04-query-builder.md b/packages/tables/docs/04-filters/04-query-builder.md index 09a679475b..beec44a73e 100644 --- a/packages/tables/docs/04-filters/04-query-builder.md +++ b/packages/tables/docs/04-filters/04-query-builder.md @@ -352,19 +352,43 @@ TextConstraint::make('author') Each constraint type has a set of default operators, which you can customize by using the `operators()`method: ```php +use Filament\Tables\Filters\QueryBuilder\Constraints\Operators\IsFilledOperator; use Filament\Tables\Filters\QueryBuilder\Constraints\TextConstraint; -use Tables\Filters\QueryBuilder\Constraints\TextConstraint\Operators\EqualsOperator; TextConstraint::make('author') ->relationship(name: 'author', titleAttribute: 'name') ->operators([ - EqualsOperator::make() // or a custom operator - ], keepDefault: true) + IsFilledOperator::make(), + ]) ``` -This will add the `EqualsOperator` to the existing/default operators. +This will remove all operators, and register the `EqualsOperator`. -If you'd like to remove the default operators and show only the EqualsOperator, use `keepDefault: false`. +If you'd like to add an operator to the end of the list, use `pushOperators()` instead: + +```php +use Filament\Tables\Filters\QueryBuilder\Constraints\Operators\IsFilledOperator; +use Filament\Tables\Filters\QueryBuilder\Constraints\TextConstraint; + +TextConstraint::make('author') + ->relationship(name: 'author', titleAttribute: 'name') + ->pushOperators([ + IsFilledOperator::class, + ]) +``` + +If you'd like to add an operator to the start of the list, use `unshiftOperators()` instead: + +```php +use Filament\Tables\Filters\QueryBuilder\Constraints\Operators\IsFilledOperator; +use Filament\Tables\Filters\QueryBuilder\Constraints\TextConstraint; + +TextConstraint::make('author') + ->relationship(name: 'author', titleAttribute: 'name') + ->unshiftOperators([ + IsFilledOperator::class, + ]) +``` ## Creating custom constraints diff --git a/packages/tables/src/Filters/QueryBuilder/Constraints/Concerns/HasOperators.php b/packages/tables/src/Filters/QueryBuilder/Constraints/Concerns/HasOperators.php index de890b3854..4189c945b8 100644 --- a/packages/tables/src/Filters/QueryBuilder/Constraints/Concerns/HasOperators.php +++ b/packages/tables/src/Filters/QueryBuilder/Constraints/Concerns/HasOperators.php @@ -37,12 +37,19 @@ trait HasOperators /** * @param array | Operator> $operators */ - public function operators(array $operators, bool $keepDefault = true): static + public function operators(array $operators): static + { + $this->operators = []; + $this->pushOperators($operators); + + return $this; + } + + /** + * @param array | Operator> $operators + */ + public function pushOperators(array $operators): static { - if (! $keepDefault) { - $this->operators = []; - } - foreach ($operators as $operator) { if (is_string($operator)) { $operator = $operator::make();