mirror of
https://github.com/filamentphp/filament.git
synced 2026-09-24 15:42:09 +08:00
93 lines
2.3 KiB
PHP
93 lines
2.3 KiB
PHP
<?php
|
|
|
|
namespace Filament\Forms\Components;
|
|
|
|
use Closure;
|
|
use Filament\Schemas\Components\StateCasts\BooleanStateCast;
|
|
use Filament\Schemas\Components\StateCasts\Contracts\StateCast;
|
|
use Filament\Schemas\Components\StateCasts\StringStateCast;
|
|
|
|
class Radio extends Field implements Contracts\CanDisableOptions
|
|
{
|
|
use Concerns\CanDisableOptions;
|
|
use Concerns\CanDisableOptionsWhenSelectedInSiblingRepeaterItems;
|
|
use Concerns\CanFixIndistinctState;
|
|
use Concerns\HasDescriptions;
|
|
use Concerns\HasExtraInputAttributes;
|
|
use Concerns\HasGridDirection;
|
|
use Concerns\HasOptions;
|
|
|
|
/**
|
|
* @var view-string
|
|
*/
|
|
protected string $view = 'filament-forms::components.radio';
|
|
|
|
protected bool | Closure $isInline = false;
|
|
|
|
public function boolean(?string $trueLabel = null, ?string $falseLabel = null): static
|
|
{
|
|
$this->options([
|
|
1 => $trueLabel ?? __('filament-forms::components.radio.boolean.true'),
|
|
0 => $falseLabel ?? __('filament-forms::components.radio.boolean.false'),
|
|
]);
|
|
|
|
$this->stateCast(app(BooleanStateCast::class, ['isStoredAsInt' => true]));
|
|
|
|
return $this;
|
|
}
|
|
|
|
public function inline(bool | Closure $condition = true): static
|
|
{
|
|
$this->isInline = $condition;
|
|
|
|
return $this;
|
|
}
|
|
|
|
public function isInline(): bool
|
|
{
|
|
return (bool) $this->evaluate($this->isInline);
|
|
}
|
|
|
|
public function getDefaultState(): mixed
|
|
{
|
|
$state = parent::getDefaultState();
|
|
|
|
if (is_bool($state)) {
|
|
return $state ? 1 : 0;
|
|
}
|
|
|
|
return $state;
|
|
}
|
|
|
|
/**
|
|
* @return array<StateCast>
|
|
*/
|
|
public function getDefaultStateCasts(): array
|
|
{
|
|
if ($this->hasCustomStateCasts() || filled($this->getEnum())) {
|
|
return parent::getDefaultStateCasts();
|
|
}
|
|
|
|
return [app(StringStateCast::class, ['isNullable' => true])];
|
|
}
|
|
|
|
/**
|
|
* @return ?array<string>
|
|
*/
|
|
public function getInValidationRuleValues(): ?array
|
|
{
|
|
$values = parent::getInValidationRuleValues();
|
|
|
|
if ($values !== null) {
|
|
return $values;
|
|
}
|
|
|
|
return array_keys($this->getEnabledOptions());
|
|
}
|
|
|
|
public function hasNullableBooleanState(): bool
|
|
{
|
|
return true;
|
|
}
|
|
}
|