Skip to content

Commit 49b6b9d

Browse files
committed
add select filter
1 parent 27338e9 commit 49b6b9d

File tree

2 files changed

+41
-2
lines changed

2 files changed

+41
-2
lines changed

src/Fields/Field.php

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -734,8 +734,7 @@ public function apply(Request $request, Builder $query, mixed $value): Builder
734734
public function toField(): Field
735735
{
736736
return Text::make($this->field->getLabel(), $this->getRequestKey())
737-
->value(fn (Request $request): mixed => $this->getValue($request))
738-
->suffix('');
737+
->value(fn (Request $request): mixed => $this->getValue($request));
739738
}
740739
};
741740
}

src/Fields/Select.php

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@
44

55
use BackedEnum;
66
use Closure;
7+
use Cone\Root\Filters\Filter;
8+
use Cone\Root\Filters\RenderableFilter;
9+
use Illuminate\Database\Eloquent\Builder;
710
use Illuminate\Database\Eloquent\Model;
811
use Illuminate\Http\Request;
912
use Illuminate\Support\Arr;
@@ -134,4 +137,41 @@ public function toInput(Request $request, Model $model): array
134137
'options' => $this->resolveOptions($request, $model),
135138
]);
136139
}
140+
141+
/**
142+
* Get the filter representation of the field.
143+
*/
144+
public function toFilter(): Filter
145+
{
146+
return new class($this) extends RenderableFilter
147+
{
148+
protected Select $field;
149+
150+
public function __construct(Select $field)
151+
{
152+
parent::__construct($field->getModelAttribute());
153+
154+
$this->field = $field;
155+
}
156+
157+
public function apply(Request $request, Builder $query, mixed $value): Builder
158+
{
159+
return $this->field->resolveFilterQuery($request, $query, $value);
160+
}
161+
162+
public function toField(): Field
163+
{
164+
return Select::make($this->field->getLabel(), $this->getRequestKey())
165+
->value(fn (Request $request): mixed => $this->getValue($request))
166+
->nullable()
167+
->options(function (Request $request, Model $model): array {
168+
return array_column(
169+
$this->field->resolveOptions($request, $model),
170+
'label',
171+
'value',
172+
);
173+
});
174+
}
175+
};
176+
}
137177
}

0 commit comments

Comments
 (0)