ModelResource

Кнопки

Основы

Кнопки отображаются на страницах ресурса: индексная страница, страницы с формой (создание / редактирование) и детальная страница. Они отвечают за основные действия с элементами и являются компонентами ActionButton.

В MoonShine есть множество методов, позволяющих переопределить у ресурса как отдельную кнопку, так и всю группу.

Более подробная информация о компоненте ActionButton.

Кнопки для создания, просмотра, редактирования, удаления и массового удаления размещены в отдельных классах, чтобы применить к ним все необходимые методы и тем самым устранить дублирование, поскольку эти кнопки также используются в HasMany, BelongsToMany и т.д.

Кнопка создания

Метод modifyCreateButton() позволяет модифицировать кнопку создания нового элемента.

 namespaces
use MoonShine\Contracts\UI\ActionButtonContract;
 
protected function modifyCreateButton(ActionButtonContract $button): ActionButtonContract
{
return $button->error();
}

Так же, вы можете переопределить кнопку.

 namespaces
use MoonShine\Contracts\UI\ActionButtonContract;
use MoonShine\UI\Components\ActionButton;
 
protected function modifyCreateButton(ActionButtonContract $button): ActionButtonContract
{
return ActionButton::make('Create');
}

resource_button_create resource_button_create_dark

Кнопка детального просмотра

Метод modifyDetailButton() позволяет модифицировать или переопределить кнопку детального просмотра элемента.

 namespaces
use MoonShine\Contracts\UI\ActionButtonContract;
 
protected function modifyDetailButton(ActionButtonContract $button): ActionButtonContract
{
return $button->warning();
}

resource_button_detail resource_button_detail_dark

Кнопка редактирования

Метод modifyEditButton() позволяет модифицировать или переопределить кнопку редактирования элемента.

 namespaces
use MoonShine\Contracts\UI\ActionButtonContract;
 
protected function modifyEditButton(ActionButtonContract $button): ActionButtonContract
{
return $button->icon('pencil-square');
}

resource_button_edit resource_button_edit_dark

Кнопка удаления

Метод modifyDeleteButton() позволяет модифицировать или переопределить кнопку удаления элемента.

 namespaces
use MoonShine\Contracts\UI\ActionButtonContract;
 
protected function modifyDeleteButton(ActionButtonContract $button): ActionButtonContract
{
return $button->icon('x-mark');
}

resource_button_delete resource_button_delete_dark

Кнопка массового удаления

Метод modifyMassDeleteButton() позволяет модифицировать или переопределить кнопку массового удаления.

 namespaces
use MoonShine\Contracts\UI\ActionButtonContract;
 
protected function modifyMassDeleteButton(ActionButtonContract $button): ActionButtonContract
{
return $button->icon('x-mark');
}

resource_button_mass_delete resource_button_mass_delete

Кнопка фильтров

Метод modifyFiltersButton() позволяет модифицировать или переопределить кнопку фильтров.

 namespaces
use MoonShine\Contracts\UI\ActionButtonContract;
 
protected function modifyFiltersButton(ActionButtonContract $button): ActionButtonContract
{
return $button->error();
}

resource_button_filters resource_button_filters_dark

Кнопки индексной страницы

По умолчанию на странице индекса ресурса модели есть только кнопка создания. Метод topButtons() позволяет добавить дополнительные кнопки.

 namespaces
use MoonShine\Support\AlpineJs;
use MoonShine\Support\Enums\JsEvent;
use MoonShine\Support\ListOf;
use MoonShine\UI\Components\ActionButton;
 
protected function topButtons(): ListOf
{
return parent::topButtons()
->add(
ActionButton::make('Refresh', '#')
->dispatchEvent(
AlpineJs::event(JsEvent::TABLE_UPDATED, $this->getListComponentName())
)
);
}

resource_buttons_actions resource_buttons_actions_dark

Кнопки индексной таблицы

Для добавления кнопок в таблицу индекса используйте метод indexButtons().

 namespaces
use Illuminate\Database\Eloquent\Model;
use MoonShine\UI\Components\ActionButton;
use MoonShine\Support\ListOf;
 
protected function indexButtons(): ListOf
{
return parent::indexButtons()
->prepend(
ActionButton::make(
'Link',
fn(Model $item) => '/endpoint?id=' . $item->getKey()
)
);
}

resource_buttons_index resource_buttons_index_dark

Для массовых действий с элементами необходимо добавить метод bulk().

 namespaces
use MoonShine\UI\Components\ActionButton;
use MoonShine\Support\ListOf;
 
protected function indexButtons(): ListOf
{
return parent::indexButtons()
->prepend(
ActionButton::make('Link', '/endpoint')
->bulk()
);
}

resource_buttons_bulk resource_buttons_bulk_dark

Кнопки страницы формы

Чтобы добавить кнопки на страницу с формой, используйте метод formButtons().

 namespaces
use MoonShine\UI\Components\ActionButton;
use MoonShine\Support\ListOf;
 
protected function formButtons(): ListOf
{
return parent::formButtons()
->add(
ActionButton::make('Link')->method('updateSomething')
);
}

resource_buttons_form resource_buttons_form_dark

Метод formBuilderButtons() позволяет добавить дополнительные кнопки непосредственно в форму создания или редактирования.

 namespaces
use MoonShine\UI\Components\ActionButton;
use MoonShine\Support\ListOf;
 
protected function formBuilderButtons(): ListOf
{
return parent::formBuilderButtons()
->add(
ActionButton::make('Back', fn() => $this->getIndexPageUrl())->class('btn-lg')
);
}

resource_buttons_form_builder resource_buttons_form_builder

Кнопки страницы детального просмотра

Чтобы добавить кнопки на страницу детального просмотра, используйте метод detailButtons().

 namespaces
use MoonShine\UI\Components\ActionButton;
use MoonShine\Support\ListOf;
 
protected function detailButtons(): ListOf
{
return parent::detailButtons()
->add(ActionButton::make('Link', '/endpoint'));
}

resource_buttons_detail resource_buttons_detail_dark