На этой неделе команда MoonShine выпустила релиз v2.1.0 с кодовым именем "Cosmo Fusion"! Давайте взглянем на самое интересное в этом обновлении!
По умолчанию активный QueryTag
QueryTag::make(
'All posts',
fn(Builder $query) => $query
)->default(),
Оптимизация элементов в таблице
Избавились от лишних клонирований элементов.
Async улучшен
Добавлены события, возможность задавать события массивом, а также возможность работать без ресурса.
Доступные события: table-updated-{{TableBuilder->name}}
, form-reset-{{FormBuilder->name}}
:
FormBuilder::make('/endpoint', 'GET')
->fields([
Text::make('Title')
])
->name('main-form')
->async(asyncEvents: ['table-updated-main-table','form-reset-main-form']),
TableBuilder::make()
->fields([
Text::make('Title'),
Textarea::make('Body')
])
->items($this->fetch())
->name('main-table')
->async()
Улучшение для Json поля
Данные можно получать и сохранять из вложенний, при этом не меняя остальную структуру:
Json::make('Data', 'data.content')->fields([
Text::make('Title'),
Text::make('Value'),
])->removable(),
Preview поле с режимом image
Быстро транформирует значение в миниатюру с изображением:
Preview::make('Link')->image()
Новый метод changeFill
У нас уже была возможность "на лету" менять preview, render, berore/afterRender и apply. Теперь добавлена возможность также "на лету" менять логику наполнения поля значением:
Text::make('Categories')
->changeFill(Article $data, Field $field) => $data->categories->imploder('title', ','))
Команда для создания Policy
В Laravel есть уже команда, которая создает Policy. Отличие команды для создания Policy в MoonShine в том, что политика будет сразу с MoonShineUser моделью, а также со всеми действиями MoonShine.
Новый компонент FlexibleRender
Дает возможность быстро рендерить простой текст, html или блейд-вьюху:
FlexibleRender::make('HTML'),
// or
FlexibleRender::make(view('path_to_blade')),
// or
FlexibleRender::make(view('path_to_blade', ['data' => 'something'])),
// or
FlexibleRender::make(view('path_to_blade'), ['data' => 'something']),
FlexibleRender::make(view('path_to_blade', ['var1' => 'something 1']), ['var2' => 'something 2']),
//or
FlexibleRender::make(fn($data) => view('path_to_blade', $data), fn() => ['data' => 'something']),
Улучшен Flash-компонент
Появилась возможность изменить ключ и другие параметры:
Flash::make(key: 'session_key', type: 'info', withToast: true, removable: true);
Событие обновления фрагмента
Событие для форм, которое позволяет после сабмита обновлять области, обвернутые в фрагмент:
// Обварачиваем область в фрагмент и указываем updateAsync (с доп параметрами реквеста если требуется)
Fragment::make($fields)
->name('fragment-name')
->updateAsync(['resourceItem' => request('resourceItem')]),
// На форму вешаем событие fragment-updated и при успешном выполнении фрагмент будет перезагружен
FormBuilder::make(...)->async(asyncEvents: 'fragment-updated-fragment-name')
Исправлены баги 🐞
- Fulltext search
- Не сохранялись поля с пустой строкой - https://github.com/moonshine-software/moonshine/pull/622
- Отключение пагинации - https://github.com/moonshine-software/moonshine/pull/628
- Проблема обращения к не сущствующему атрибуту модели - https://github.com/moonshine-software/moonshine/pull/631
- Проблема в кнопке удаления поля select - https://github.com/moonshine-software/moonshine/pull/634
- TinyMce FileManager - https://github.com/moonshine-software/moonshine/pull/637
- и многое другое
Все подробности релиза - https://github.com/moonshine-software/moonshine/compare/2.0.0...2.1.0