From 0777adfdde430a683e643e8c3c9134b6101ea615 Mon Sep 17 00:00:00 2001 From: francoism90 Date: Thu, 19 Sep 2024 13:42:16 +0200 Subject: [PATCH] Refactor WithValidation trait to improve code readability and maintainability --- src/Forms/Concerns/WithValidation.php | 1 + src/Support/Html/Elements/Validate.php | 2 +- src/Support/Html/Mixins/BaseElementMixin.php | 3 +- src/Support/Html/Mixins/HtmlExtendedMixin.php | 35 +++++++++---------- src/Support/Html/Mixins/LinkElementMixin.php | 3 +- 5 files changed, 23 insertions(+), 21 deletions(-) diff --git a/src/Forms/Concerns/WithValidation.php b/src/Forms/Concerns/WithValidation.php index a249d35..a2a0b0d 100644 --- a/src/Forms/Concerns/WithValidation.php +++ b/src/Forms/Concerns/WithValidation.php @@ -17,6 +17,7 @@ public function check(): void rescue( fn () => $this->validate(), fn () => $this->reset(), + report: false, ); } diff --git a/src/Support/Html/Elements/Validate.php b/src/Support/Html/Elements/Validate.php index e6eaefd..96ad1ca 100644 --- a/src/Support/Html/Elements/Validate.php +++ b/src/Support/Html/Elements/Validate.php @@ -14,6 +14,6 @@ public function message(?string $message = null): static $element = Span::create(); return $this - ->addChild($element->class('text-error-500')->text($message)); + ->addChild($element->class('label-error')->text($message)); } } diff --git a/src/Support/Html/Mixins/BaseElementMixin.php b/src/Support/Html/Mixins/BaseElementMixin.php index d1c535a..fff0263 100644 --- a/src/Support/Html/Mixins/BaseElementMixin.php +++ b/src/Support/Html/Mixins/BaseElementMixin.php @@ -4,8 +4,9 @@ use Illuminate\Support\Stringable; use Spatie\Html\BaseElement; +use stdClass; -class BaseElementMixin +class BaseElementMixin extends stdClass { public function crossorigin(): mixed { diff --git a/src/Support/Html/Mixins/HtmlExtendedMixin.php b/src/Support/Html/Mixins/HtmlExtendedMixin.php index 3e2e185..1a961e8 100644 --- a/src/Support/Html/Mixins/HtmlExtendedMixin.php +++ b/src/Support/Html/Mixins/HtmlExtendedMixin.php @@ -8,25 +8,26 @@ use Illuminate\Validation\ValidationException; use Livewire\Form as Livewire; use Spatie\Html\Elements\Form; +use stdClass; #[\AllowDynamicProperties] -class HtmlExtendedMixin +class HtmlExtendedMixin extends stdClass { protected ?Livewire $form = null; - protected ?MessageBag $errorBag = null; + protected ?MessageBag $messageBag = null; public function wireForm(): mixed { return function (Livewire $form, ?string $action = null): Form { $this->form = $form; - $this->errorBag = null; + $this->messageBag = null; try { $this->form->validate(); } catch (ValidationException $e) { - $this->errorBag = $e->validator->errors(); + $this->messageBag = $e->validator->errors(); } return Form::create() @@ -39,30 +40,28 @@ public function closeWireForm(): mixed return function (): Form { $this->form = null; - $this->errorBag = null; + $this->messageBag = null; return Form::create()->close(); }; } - public function icon(): mixed + public function error(): mixed { - return function (): Icon { - return Icon::create(); + return function (string $field, ?string $message = null, ?string $format = null): Validate { + $hasMessage = $this->messageBag?->has($field) ?? false; + + return Validate::create() + ->classUnless($hasMessage, 'hidden') + ->classIf($hasMessage, 'label') + ->messageIf($hasMessage, $message ?: $this->messageBag?->first($field, $format)); }; } - public function validate(): mixed + public function icon(): mixed { - return function (string $field, ?string $message = null): Validate { - $hasMessage = $this->errorBag?->has($field); - - $message ??= $this->errorBag?->first($field); - - return Validate::create() - ->classUnless($hasMessage, 'hidden') - ->classIfNotNull($hasMessage, 'block py-1 text-sm') - ->messageIf($hasMessage, $message); + return function (): Icon { + return Icon::create(); }; } } diff --git a/src/Support/Html/Mixins/LinkElementMixin.php b/src/Support/Html/Mixins/LinkElementMixin.php index a5f603c..1b7995f 100644 --- a/src/Support/Html/Mixins/LinkElementMixin.php +++ b/src/Support/Html/Mixins/LinkElementMixin.php @@ -3,8 +3,9 @@ namespace Foxws\WireUse\Support\Html\Mixins; use Spatie\Html\Elements\A; +use stdClass; -class LinkElementMixin +class LinkElementMixin extends stdClass { public function link(): mixed {