Компоненты

Fragment

Основы

С помощью Fragment вы можете обвернуть определенную область вашей страницы и обновлять только её, вызывая события. Для этого вы можете использовать Blade Fragments. Fragment позволяет реализовать эту возможность.

make(iterable $components = [])
use MoonShine\Laravel\Components\Fragment;
use MoonShine\UI\Fields\Text;
 
// ...
 
protected function components(): iterable
{
return [
Fragment::make([
Text::make('Имя', 'first_name')
])->name('fragment-name')
];
}
 
// ...

Асинхронное взаимодействие

Обновление через события

Fragment::make($components)->name('fragment-name'),

И в качестве примера давайте вызовем событие при успешной отправке формы:

FormBuilder::make()->async(events: AlpineJs::event(JsEvent::FRAGMENT_UPDATED, 'fragment-name'))

Вы также можете передать дополнительные параметры с запросом через массив:

Fragment::make($components)
->name('fragment-name')
->updateWith(params: ['resourceItem' => request('resourceItem')]),

Передача параметров

Метод withSelectorsParams() позволяет передавать значения полей с запросом, используя селекторы элементов.

Fragment::make($components)
->withSelectorsParams([
'start_date' => '#start_date',
'end_date' => '#end_date'
])
->name('fragment-name'),

Вызов событий

При успешном обновлении Fragment может также вызвать дополнительные события. Давайте рассмотрим пример обновления фрагментов друг за другом при клике на кнопку:

Fragment::make([
FlexibleRender::make('<p> Step 1: ' . time() . '</p>')
])
->updateWith(
events: [
AlpineJs::event(JsEvent::FRAGMENT_UPDATED, 'fg-step-2'),
],
)
->name('fg-step-1')
,
 
Fragment::make([
FlexibleRender::make('<p> Step 2: ' . time() . '</p>')
])
->name('fg-step-2')
,
// ...
ActionButton::make('Start')->dispatchEvent([AlpineJs::event(JsEvent::FRAGMENT_UPDATED, 'fg-step-1')])
,

Обработка ответа

Подробности в разделе Js

Fragment::make($components)
->updateWith(
callback: AsyncCallback::with(afterResponse: 'afterResponseFunction')
)
->name('fragment-name')
,

Параметры запроса URL

Вы можете включить параметры текущего запроса URL (например, ?param=value) в запрос фрагмента:

Это позволит сохранить все параметры из URL строки текущего запроса при загрузке фрагмента.

Fragment::make($components)
->name('fragment-name')
->withQueryParams()
,