From e72da27922fd6f984d9914ece68c72bbc525a17c Mon Sep 17 00:00:00 2001 From: LT Date: Tue, 17 Dec 2024 11:11:01 +0300 Subject: [PATCH 1/4] fix: UpdateOnPreviewPopover --- src/UI/src/Sets/UpdateOnPreviewPopover.php | 13 ++++++++----- src/UI/src/Traits/Fields/UpdateOnPreview.php | 12 ++++++++++++ 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/src/UI/src/Sets/UpdateOnPreviewPopover.php b/src/UI/src/Sets/UpdateOnPreviewPopover.php index daed847b3..f3eb5bf5f 100644 --- a/src/UI/src/Sets/UpdateOnPreviewPopover.php +++ b/src/UI/src/Sets/UpdateOnPreviewPopover.php @@ -13,7 +13,6 @@ use MoonShine\UI\Components\Link; use MoonShine\UI\Components\Popover; use MoonShine\UI\Fields\Hidden; -use MoonShine\UI\Fields\Text; final readonly class UpdateOnPreviewPopover { @@ -46,13 +45,17 @@ public function __invoke(): Popover Flex::make([ Hidden::make('_method')->setValue('PUT'), Hidden::make('field')->setValue($this->field->getColumn()), - Text::make('Title', 'value') + $this->field ->style('margin: 0!important') - ->setValue($this->field->toFormattedValue()) - ->withoutWrapper(), + ->setColumn('value') + ->customAttributes([ + 'name' => 'value' + ]) + ->withoutWrapper() + ->disableUpdateOnPreview(), ]), ]) - ->submit('OK', ['class' => 'btn-primary']) + ->submit(__('moonshine::ui.save'), ['class' => 'btn-primary']) ); } } diff --git a/src/UI/src/Traits/Fields/UpdateOnPreview.php b/src/UI/src/Traits/Fields/UpdateOnPreview.php index 0a9b292c7..3cf144818 100644 --- a/src/UI/src/Traits/Fields/UpdateOnPreview.php +++ b/src/UI/src/Traits/Fields/UpdateOnPreview.php @@ -33,6 +33,18 @@ public function readonly(Closure|bool|null $condition = null): static return parent::readonly($condition); } + public function disableUpdateOnPreview(): static + { + $this->updateOnPreview = false; + $this->onChangeUrl = null; + $this->updateOnPreviewPopover = false; + $this->updateOnPreviewUrl = null; + + $this->removeAttribute('@change'); + + return $this; + } + public function withUpdateRow(string $component): static { From 12644d61eecc3a3cefa126ce7003316298225a36 Mon Sep 17 00:00:00 2001 From: lee-to Date: Tue, 17 Dec 2024 08:11:31 +0000 Subject: [PATCH 2/4] Fix styling --- src/UI/src/Sets/UpdateOnPreviewPopover.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/UI/src/Sets/UpdateOnPreviewPopover.php b/src/UI/src/Sets/UpdateOnPreviewPopover.php index f3eb5bf5f..df01d7a2c 100644 --- a/src/UI/src/Sets/UpdateOnPreviewPopover.php +++ b/src/UI/src/Sets/UpdateOnPreviewPopover.php @@ -49,7 +49,7 @@ public function __invoke(): Popover ->style('margin: 0!important') ->setColumn('value') ->customAttributes([ - 'name' => 'value' + 'name' => 'value', ]) ->withoutWrapper() ->disableUpdateOnPreview(), From 24e6ddeee4a43087a4aea489314e278f716b9c32 Mon Sep 17 00:00:00 2001 From: LT Date: Tue, 17 Dec 2024 15:37:02 +0300 Subject: [PATCH 3/4] feat: UpdateOnPreviewPopover Add validation --- .../Resources/UpdateColumnFormRequest.php | 17 ++++++++++++++++- .../Contracts/HasUpdateOnPreviewContract.php | 2 ++ src/UI/src/Sets/UpdateOnPreviewPopover.php | 8 +++++++- 3 files changed, 25 insertions(+), 2 deletions(-) diff --git a/src/Laravel/src/Http/Requests/Resources/UpdateColumnFormRequest.php b/src/Laravel/src/Http/Requests/Resources/UpdateColumnFormRequest.php index ecbd8e575..b7c89ea8f 100644 --- a/src/Laravel/src/Http/Requests/Resources/UpdateColumnFormRequest.php +++ b/src/Laravel/src/Http/Requests/Resources/UpdateColumnFormRequest.php @@ -67,9 +67,24 @@ public function getField(): ?FieldContract */ public function rules(): array { + $fieldRules = data_get( + $this->getResource()?->getRules(), + request()->getScalar('field'), + ); + + $valueRules = ['present']; + + if(\is_string($fieldRules)) { + $valueRules[] = $valueRules; + } + + if(\is_array($fieldRules)) { + $valueRules = \array_merge($valueRules, $fieldRules); + } + return [ 'field' => ['required'], - 'value' => ['present'], + 'value' => $valueRules, ]; } diff --git a/src/UI/src/Contracts/HasUpdateOnPreviewContract.php b/src/UI/src/Contracts/HasUpdateOnPreviewContract.php index 7b002b75c..131c07042 100644 --- a/src/UI/src/Contracts/HasUpdateOnPreviewContract.php +++ b/src/UI/src/Contracts/HasUpdateOnPreviewContract.php @@ -8,6 +8,8 @@ interface HasUpdateOnPreviewContract { + public function disableUpdateOnPreview(): static; + public function isUpdateOnPreview(): bool; public function setUpdateOnPreviewUrl(Closure $url): static; diff --git a/src/UI/src/Sets/UpdateOnPreviewPopover.php b/src/UI/src/Sets/UpdateOnPreviewPopover.php index df01d7a2c..1cc0e7254 100644 --- a/src/UI/src/Sets/UpdateOnPreviewPopover.php +++ b/src/UI/src/Sets/UpdateOnPreviewPopover.php @@ -12,11 +12,17 @@ use MoonShine\UI\Components\Layout\Flex; use MoonShine\UI\Components\Link; use MoonShine\UI\Components\Popover; +use MoonShine\UI\Contracts\HasUpdateOnPreviewContract; use MoonShine\UI\Fields\Hidden; final readonly class UpdateOnPreviewPopover { - public function __construct(private FieldContract $field, private string $component, private string $route) + /** + * @param FieldContract&HasUpdateOnPreviewContract $field + * @param string $component + * @param string $route + */ + public function __construct(private HasUpdateOnPreviewContract $field, private string $component, private string $route) { } From 973c4f6728d1e1e060a5b9e813e309675dbf67e7 Mon Sep 17 00:00:00 2001 From: lee-to Date: Tue, 17 Dec 2024 12:37:28 +0000 Subject: [PATCH 4/4] Fix styling --- .../src/Http/Requests/Resources/UpdateColumnFormRequest.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Laravel/src/Http/Requests/Resources/UpdateColumnFormRequest.php b/src/Laravel/src/Http/Requests/Resources/UpdateColumnFormRequest.php index b7c89ea8f..2f53ba277 100644 --- a/src/Laravel/src/Http/Requests/Resources/UpdateColumnFormRequest.php +++ b/src/Laravel/src/Http/Requests/Resources/UpdateColumnFormRequest.php @@ -74,12 +74,12 @@ public function rules(): array $valueRules = ['present']; - if(\is_string($fieldRules)) { + if (\is_string($fieldRules)) { $valueRules[] = $valueRules; } - if(\is_array($fieldRules)) { - $valueRules = \array_merge($valueRules, $fieldRules); + if (\is_array($fieldRules)) { + $valueRules = array_merge($valueRules, $fieldRules); } return [