diff --git a/src/Crud/src/Components/Fragment.php b/src/Crud/src/Components/Fragment.php index 907fab125..44ca7de55 100644 --- a/src/Crud/src/Components/Fragment.php +++ b/src/Crud/src/Components/Fragment.php @@ -17,6 +17,7 @@ use MoonShine\Support\Enums\JsEvent; use MoonShine\UI\Components\AbstractWithComponents; use MoonShine\UI\Traits\HasAsync; +use Closure; use Throwable; class Fragment extends AbstractWithComponents implements HasAsyncContract @@ -27,6 +28,8 @@ class Fragment extends AbstractWithComponents implements HasAsyncContract protected string $view = 'moonshine::components.fragment'; protected ?int $interval = null; + + protected Closure|bool $updateOnLoad = false; /** * @param iterable $components @@ -109,6 +112,16 @@ public function withSelectorsParams(array $selectors): static ); } + /** + * @param (Closure(static): bool)|bool $condition + */ + public function updateOnLoad(Closure|bool $condition = true): static + { + $this->updateOnLoad = $condition; + + return $this; + } + public function autoUpdate(int $ms): static { if ($ms <= 0) { @@ -141,6 +154,7 @@ protected function viewData(): array { return [ 'interval' => $this->interval, + 'updateOnLoad' => value($this->updateOnLoad, $this), ]; } } diff --git a/src/UI/resources/js/Components/Fragment.js b/src/UI/resources/js/Components/Fragment.js index 7cda57882..007eb1895 100644 --- a/src/UI/resources/js/Components/Fragment.js +++ b/src/UI/resources/js/Components/Fragment.js @@ -47,7 +47,7 @@ export default (asyncUpdateRoute = '') => ({ t.asyncUpdateRoute = mergeURLString(t.asyncUpdateRoute, bodyParams.toString()) - const eventDetailQuery = getQueryString(this.$event.detail) + const eventDetailQuery = this.$event ? getQueryString(this.$event.detail) : null; if (eventDetailQuery) { t.asyncUpdateRoute = mergeURLString(t.asyncUpdateRoute, eventDetailQuery) diff --git a/src/UI/resources/views/components/fragment.blade.php b/src/UI/resources/views/components/fragment.blade.php index 4fb527621..888a6528b 100644 --- a/src/UI/resources/views/components/fragment.blade.php +++ b/src/UI/resources/views/components/fragment.blade.php @@ -1,6 +1,7 @@ @props([ 'name', 'interval' => null, + 'updateOnLoad' => null, 'components' => [], ]) @fragment($name) @@ -13,6 +14,14 @@ @endfragment +@if($updateOnLoad) + +@endif + @if($interval)