MoonShine 2.1 Cosmo Fusion

MoonShine 2.1 Cosmo Fusion

Danil Shutsky
Danil Shutsky
19.11.2023 в 13:01

На этой неделе команда MoonShine выпустила релиз v2.1.0 с кодовым именем "Cosmo Fusion"! Давайте взглянем на самое интересное в этом обновлении!

По умолчанию активный QueryTag

QueryTag::make(
    'All posts',
    fn(Builder $query) => $query
)->default(),

Подробнее в PR

Оптимизация элементов в таблице

Избавились от лишних клонирований элементов.

Подробнее в PR


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()

Подробнее в PR

Подробнее в PR

Улучшение для Json поля

Данные можно получать и сохранять из вложенний, при этом не меняя остальную структуру:

Json::make('Data', 'data.content')->fields([
      Text::make('Title'),
      Text::make('Value'),
  ])->removable(),

Подробнее в PR

Preview поле с режимом image

Быстро транформирует значение в миниатюру с изображением:

Preview::make('Link')->image()

Новый метод changeFill

У нас уже была возможность "на лету" менять preview, render, berore/afterRender и apply. Теперь добавлена возможность также "на лету" менять логику наполнения поля значением:

Text::make('Categories')
    ->changeFill(Article $data, Field $field) => $data->categories->imploder('title', ','))

Подробнее в PR

Команда для создания Policy

В Laravel есть уже команда, которая создает Policy. Отличие команды для создания Policy в MoonShine в том, что политика будет сразу с MoonShineUser моделью, а также со всеми действиями MoonShine.

Подробнее в PR

Подробнее в PR

Новый компонент 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']),

Подробнее в PR

Улучшен Flash-компонент

Появилась возможность изменить ключ и другие параметры:

Flash::make(key: 'session_key', type: 'info', withToast: true, removable: true);

Подробнее в PR

Событие обновления фрагмента

Событие для форм, которое позволяет после сабмита обновлять области, обвернутые в фрагмент:

// Обварачиваем область в фрагмент и указываем updateAsync (с доп параметрами реквеста если требуется)

Fragment::make($fields)
    ->name('fragment-name')
    ->updateAsync(['resourceItem' => request('resourceItem')]),

// На форму вешаем событие fragment-updated и при успешном выполнении фрагмент будет перезагружен

FormBuilder::make(...)->async(asyncEvents: 'fragment-updated-fragment-name')

Подробнее в PR

Исправлены баги 🐞


Все подробности релиза - https://github.com/moonshine-software/moonshine/compare/2.0.0...2.1.0