Skip to content

Commit

Permalink
[5.x] Add empty/not empty filters for replicator, bard and grid (#11354)
Browse files Browse the repository at this point in the history
  • Loading branch information
jacksleight authored Jan 22, 2025
1 parent b30bc74 commit d6382dc
Show file tree
Hide file tree
Showing 3 changed files with 159 additions and 6 deletions.
55 changes: 53 additions & 2 deletions src/Query/Scopes/Filters/Fields/Bard.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,58 @@

namespace Statamic\Query\Scopes\Filters\Fields;

class Bard extends Textarea
use Statamic\Support\Arr;
use Statamic\Support\Str;

class Bard extends FieldtypeFilter
{
//
public function fieldItems()
{
return [
'operator' => [
'type' => 'select',
'placeholder' => __('Select Operator'),
'options' => [
'like' => __('Contains'),
'null' => __('Empty'),
'not-null' => __('Not empty'),
],
'default' => 'like',
],
'value' => [
'type' => 'text',
'if' => [
'operator' => 'like',
],
'required' => false,
],
];
}

public function apply($query, $handle, $values)
{
$operator = $values['operator'];
$value = $values['value'];

if ($operator === 'like') {
$value = Str::ensureLeft($value, '%');
$value = Str::ensureRight($value, '%');
}

match ($operator) {
'null' => $query->whereNull($handle),
'not-null' => $query->whereNotNull($handle),
default => $query->where($handle, $operator, $value),
};
}

public function badge($values)
{
$field = $this->fieldtype->field()->display();
$operator = $values['operator'];
$translatedOperator = Arr::get($this->fieldItems(), "operator.options.{$operator}");
$value = $values['value'];

return $field.' '.strtolower($translatedOperator).' '.$value;
}
}
55 changes: 53 additions & 2 deletions src/Query/Scopes/Filters/Fields/Grid.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,58 @@

namespace Statamic\Query\Scopes\Filters\Fields;

class Grid extends Textarea
use Statamic\Support\Arr;
use Statamic\Support\Str;

class Grid extends FieldtypeFilter
{
//
public function fieldItems()
{
return [
'operator' => [
'type' => 'select',
'placeholder' => __('Select Operator'),
'options' => [
'like' => __('Contains'),
'null' => __('Empty'),
'not-null' => __('Not empty'),
],
'default' => 'like',
],
'value' => [
'type' => 'text',
'if' => [
'operator' => 'like',
],
'required' => false,
],
];
}

public function apply($query, $handle, $values)
{
$operator = $values['operator'];
$value = $values['value'];

if ($operator === 'like') {
$value = Str::ensureLeft($value, '%');
$value = Str::ensureRight($value, '%');
}

match ($operator) {
'null' => $query->whereNull($handle),
'not-null' => $query->whereNotNull($handle),
default => $query->where($handle, $operator, $value),
};
}

public function badge($values)
{
$field = $this->fieldtype->field()->display();
$operator = $values['operator'];
$translatedOperator = Arr::get($this->fieldItems(), "operator.options.{$operator}");
$value = $values['value'];

return $field.' '.strtolower($translatedOperator).' '.$value;
}
}
55 changes: 53 additions & 2 deletions src/Query/Scopes/Filters/Fields/Replicator.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,58 @@

namespace Statamic\Query\Scopes\Filters\Fields;

class Replicator extends Textarea
use Statamic\Support\Arr;
use Statamic\Support\Str;

class Replicator extends FieldtypeFilter
{
//
public function fieldItems()
{
return [
'operator' => [
'type' => 'select',
'placeholder' => __('Select Operator'),
'options' => [
'like' => __('Contains'),
'null' => __('Empty'),
'not-null' => __('Not empty'),
],
'default' => 'like',
],
'value' => [
'type' => 'text',
'if' => [
'operator' => 'like',
],
'required' => false,
],
];
}

public function apply($query, $handle, $values)
{
$operator = $values['operator'];
$value = $values['value'];

if ($operator === 'like') {
$value = Str::ensureLeft($value, '%');
$value = Str::ensureRight($value, '%');
}

match ($operator) {
'null' => $query->whereNull($handle),
'not-null' => $query->whereNotNull($handle),
default => $query->where($handle, $operator, $value),
};
}

public function badge($values)
{
$field = $this->fieldtype->field()->display();
$operator = $values['operator'];
$translatedOperator = Arr::get($this->fieldItems(), "operator.options.{$operator}");
$value = $values['value'];

return $field.' '.strtolower($translatedOperator).' '.$value;
}
}

0 comments on commit d6382dc

Please sign in to comment.