Refactored fieldsets

This commit is contained in:
Ryan Scherler
2020-04-06 12:16:06 -07:00
parent ab1f7bf89e
commit f716bf88f9
4 changed files with 29 additions and 38 deletions
-10
View File
@@ -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);
+27 -6
View File
@@ -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) {
+1 -1
View File
@@ -33,6 +33,6 @@ trait FollowsRules
public function rulesIgnoreRealtime()
{
return [];
return $this->fieldset ? $this->fieldset::rulesIgnoreRealtime() : [];
}
}
+1 -21
View File
@@ -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)