83 lines
1.9 KiB
PHP
83 lines
1.9 KiB
PHP
<?php
|
|
|
|
namespace Laravel\Nova\Fields;
|
|
|
|
use Illuminate\Support\Arr;
|
|
use Laravel\Nova\Contracts\FilterableField;
|
|
use Laravel\Nova\Fields\Filters\TextFilter;
|
|
use Laravel\Nova\Http\Requests\NovaRequest;
|
|
|
|
class Text extends Field implements FilterableField
|
|
{
|
|
use AsHTML;
|
|
use Copyable;
|
|
use FieldFilterable;
|
|
use HasSuggestions;
|
|
use SupportsDependentFields;
|
|
use SupportsMaxlength;
|
|
|
|
/**
|
|
* The field's component.
|
|
*
|
|
* @var string
|
|
*/
|
|
public $component = 'text-field';
|
|
|
|
/**
|
|
* Make the field filter.
|
|
*
|
|
* @return \Laravel\Nova\Fields\Filters\Filter
|
|
*/
|
|
protected function makeFilter(NovaRequest $request)
|
|
{
|
|
return new TextFilter($this);
|
|
}
|
|
|
|
/**
|
|
* Prepare the field for JSON serialization.
|
|
*
|
|
* @return array
|
|
*/
|
|
public function serializeForFilter()
|
|
{
|
|
return transform($this->jsonSerialize(), function ($field) {
|
|
$field['suggestions'] = $field['suggestions'] ?? $this->resolveSuggestions(app(NovaRequest::class));
|
|
|
|
return Arr::only($field, [
|
|
'uniqueKey',
|
|
'name',
|
|
'attribute',
|
|
'suggestions',
|
|
'type',
|
|
'min',
|
|
'max',
|
|
'step',
|
|
'pattern',
|
|
'placeholder',
|
|
'extraAttributes',
|
|
]);
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Prepare the element for JSON serialization.
|
|
*
|
|
* @return array<string, mixed>
|
|
*/
|
|
public function jsonSerialize(): array
|
|
{
|
|
$request = app(NovaRequest::class);
|
|
|
|
if ($request->isFormRequest()) {
|
|
return array_merge(parent::jsonSerialize(), [
|
|
'suggestions' => $this->resolveSuggestions($request),
|
|
]);
|
|
}
|
|
|
|
return array_merge(parent::jsonSerialize(), [
|
|
'asHtml' => $this->asHtml,
|
|
'copyable' => $this->copyable,
|
|
]);
|
|
}
|
|
}
|