diff --git a/src/Http/Livewire/UserEdit.php b/src/Http/Livewire/UserEdit.php index 2171fef612..7af51fddc7 100644 --- a/src/Http/Livewire/UserEdit.php +++ b/src/Http/Livewire/UserEdit.php @@ -6,16 +6,6 @@ use Filament\Support\Livewire\FormComponent; class UserEdit extends FormComponent { - public function fields() - { - return $this->getFieldset(__FILE__)::fields($this->model); - } - - public function rulesIgnoreRealtime() - { - return $this->getFieldset(__FILE__)::rulesIgnoreRealtime(); - } - public function success() { $input = collect($this->form_data); diff --git a/src/Support/Livewire/FormComponent.php b/src/Support/Livewire/FormComponent.php index 85036d388a..6cc6453593 100644 --- a/src/Support/Livewire/FormComponent.php +++ b/src/Support/Livewire/FormComponent.php @@ -5,16 +5,18 @@ namespace Filament\Support\Livewire; use Illuminate\Support\Arr; use Illuminate\Support\Facades\Route; use Livewire\Component; -use Filament\Traits\Fields\FollowsRules; use Filament\Traits\Fields\HasFields; +use Filament\Traits\Fields\FollowsRules; use Filament\Traits\Fields\HandlesFiles; use Filament\Traits\Fields\HandlesArrays; +use Filament\Contracts\Fieldset; class FormComponent extends Component { use HasFields, FollowsRules, HandlesFiles, HandlesArrays; public $model; + public $fieldset; public $form_data; public $goback; @@ -25,15 +27,34 @@ class FormComponent extends Component public function mount($model = null, $goback = null) { - $this->setFormProperties($model); + $this->model = $model; $this->goback = $goback; + + $this->setFieldset(); + $this->setFormProperties(); } - public function setFormProperties($model = null) + public function setFieldset() { - $this->model = $model; - if ($model) { - $this->form_data = $model->toArray(); + $className = (new \ReflectionClass(get_called_class()))->getShortName(); + $fieldsetName = $className.'Fieldset'; + foreach(config('filament.namespaces.fieldsets') as $namespace) { + $class = $namespace.'\\'.$fieldsetName; + if (class_exists($class)) { + if (!in_array(Fieldset::class, class_implements($class))) { + throw new \Error($class.' must implement '.Fieldset::class); + } + + $this->fieldset = $class; + break; + } + } + } + + public function setFormProperties() + { + if ($this->model) { + $this->form_data = $this->model->toArray(); } foreach ($this->fields() as $field) { diff --git a/src/Traits/Fields/FollowsRules.php b/src/Traits/Fields/FollowsRules.php index 7395012e62..d31600a86c 100644 --- a/src/Traits/Fields/FollowsRules.php +++ b/src/Traits/Fields/FollowsRules.php @@ -33,6 +33,6 @@ trait FollowsRules public function rulesIgnoreRealtime() { - return []; + return $this->fieldset ? $this->fieldset::rulesIgnoreRealtime() : []; } } diff --git a/src/Traits/Fields/HasFields.php b/src/Traits/Fields/HasFields.php index 6d6473018a..86f8e80558 100644 --- a/src/Traits/Fields/HasFields.php +++ b/src/Traits/Fields/HasFields.php @@ -2,31 +2,11 @@ namespace Filament\Traits\Fields; -use Filament\Contracts\Fieldset; - trait HasFields { public function fields() { - return []; - } - - public function getFieldset($path) - { - $className = basename($path, '.php').'Fieldset'; - foreach(config('filament.namespaces.fieldsets') as $namespace) { - $class = $namespace.'\\'.$className; - - if (class_exists($class)) { - if (!in_array(Fieldset::class, class_implements($class))) { - throw new \Error($class.' must implement '.Fieldset::class); - } - - return $class; - } - } - - throw new \Error($className.' not found.'); + return $this->fieldset ? $this->fieldset::fields($this->model) : []; } public function getField($field_name)