File: /home/posscale/public_html/printmanager/vendor/filament/actions/src/Concerns/HasSelect.php
<?php
namespace Filament\Actions\Concerns;
use Closure;
use Filament\Support\Contracts\HasLabel as LabelInterface;
use Illuminate\Contracts\Support\Arrayable;
use UnitEnum;
trait HasSelect
{
use HasId;
/**
* @var array<string> | Arrayable | string | Closure
*/
protected array | Arrayable | string | Closure $options = [];
protected ?string $placeholder = null;
/**
* @param array<string> | Arrayable | string | Closure $options
*/
public function options(array | Arrayable | string | Closure $options): static
{
$this->options = $options;
return $this;
}
public function placeholder(string $placeholder): static
{
$this->placeholder = $placeholder;
return $this;
}
/**
* @return array<string>
*/
public function getOptions(): array
{
$options = $this->evaluate($this->options) ?? [];
if (
is_string($options) &&
enum_exists($enum = $options)
) {
if (is_a($enum, LabelInterface::class, allow_string: true)) {
return array_reduce($enum::cases(), function (array $carry, LabelInterface & UnitEnum $case): array {
$carry[$case?->value ?? $case->name] = $case->getLabel() ?? $case->name;
return $carry;
}, []);
}
return array_reduce($enum::cases(), function (array $carry, UnitEnum $case): array {
$carry[$case?->value ?? $case->name] = $case->name;
return $carry;
}, []);
}
if ($options instanceof Arrayable) {
$options = $options->toArray();
}
return $options;
}
public function getPlaceholder(): ?string
{
return $this->placeholder;
}
}