Issues (4)

src/EntitySelect.php (2 issues)

1
<?php
2
3
namespace NovaEntitySelectField;
4
5
use Laravel\Nova\Fields\Field;
6
use Laravel\Nova\Fields\Searchable;
7
use Laravel\Nova\Http\Requests\NovaRequest;
8
use Laravel\Nova\Nova;
9
use Laravel\Nova\Resource;
10
11
/**
12
 * @psalm-suppress MethodSignatureMismatch
13
 * @method static static make(string $entityResource, ?string $name = null, ?string $attribute = null, callable|null $resolveCallback = null)
14
 */
15
class EntitySelect extends Field
16
{
17
    use Searchable;
18
19
    public $component = 'entity-select-field';
20
21
    /** @var class-string<Resource> */
0 ignored issues
show
Documentation Bug introduced by
The doc comment class-string<Resource> at position 0 could not be parsed: Unknown type name 'class-string' at position 0 in class-string<Resource>.
Loading history...
22
    public string $entityResource;
23
24
    public int $limit = 10;
25
26
    public ?string $displayValue = null;
27
28
    public ?bool $viewable = null;
29
30
    /**
31
     * @param class-string<Resource> $entityResource
0 ignored issues
show
Documentation Bug introduced by
The doc comment class-string<Resource> at position 0 could not be parsed: Unknown type name 'class-string' at position 0 in class-string<Resource>.
Loading history...
32
     * @param $name
33
     * @param $attribute
34
     * @param callable|null $resolveCallback
35
     */
36 3
    public function __construct(string $entityResource, $name = null, $attribute = null, callable $resolveCallback = null)
37
    {
38 3
        $this->entityResource = $entityResource;
39
40 3
        if (!$name) {
41 3
            $name = Nova::humanize(class_basename($entityResource));
42
        }
43
44 3
        parent::__construct($name, $attribute, $resolveCallback);
45
    }
46
47 1
    public function limit($limit)
48
    {
49 1
        $this->limit = $limit;
50
51 1
        return $this;
52
    }
53
54 1
    public function viewable($value = true)
55
    {
56 1
        $this->viewable = $value;
57
58 1
        return $this;
59
    }
60
61 1
    public function resolveForDisplay($resource, $attribute = null)
62
    {
63 1
        parent::resolveForDisplay($resource, $attribute);
64
65 1
        $titleColumn = $this->entityResource::$title;
66
67 1
        $currentEntity = $this->entityResource::newModel()::query()->whereKey($this->value)->first();
68
69 1
        if ($currentEntity) {
70 1
            $this->displayValue = $currentEntity->$titleColumn;
71
        }
72
    }
73
74 2
    public function jsonSerialize(): array
75
    {
76 2
        $request = app(NovaRequest::class);
77
78 2
        $viewable = !is_null($this->viewable) ? $this->viewable : $this->entityResource::authorizedToViewAny($request);
79
80 2
        return array_merge(parent::jsonSerialize(), [
81 2
            'entityResourceKey' => $this->entityResource::uriKey(),
82 2
            'softDeletes'       => $this->entityResource::softDeletes(),
83 2
            'withSubtitles'     => $this->withSubtitles,
84 2
            'debounce'          => $this->debounce,
85 2
            'limit'             => $this->limit,
86 2
            'viewable'          => $viewable,
87 2
            'display'           => $this->displayValue,
88 2
        ]);
89
    }
90
}
91