Дата публикации: 21.05.2024 в 12:12

MoonShine v2.14 "Daiquiri Delightful"

Danil ShutskyDanil Shutsky
0 комментария

Привет, муншайнеры! С радостью сообщаю о выходе большого релиза 2.14 с кодовым названием "Daiquiri Delightful"! Давайте расскажу, что появилось нового и интересного.

Новое поле Markdown

Посмотрите как кипела работа в этом PR где @AkostDev добавил новый визуальный markdown редактор на основе библиотеки EaseMde. И сделал он это на 10 из 10 баллов!
Встречаем новое поле Markdown, которое теперь в коробке. А вот TinyMce в MoonShine v3 будет вынесен в отдельный пакет из-за своей объемности.

Подробности в PR


Новый вертикальный режим для Tabs

В этом PR также бурлили страсти, но @forest-lynx справился со всеми вызовами и теперь нас с вами ждут вкладки в вертикальном режиме:

Tabs::make(...)->vertical()

Выглядят шикарно!

Подробности в PR

Доступен ответ с файлом


Теперь используя асинхронные методы, вы можете возвращать в ответе файлы:

ActionButton::make('Export')->method('export')
public function export(): BinaryFileResponse
{
    return response()->download($file);
}

Новое поле Td

Все чаще в чате стали появляться вопросы "А как изменить содержимое ячейки таблицы с использованием декораций или просто совместить несколько полей?".
Да, у нас уже были поля Preview и StackFields которые справлялись с этой задачей, но все мы любим сахар, поэтому встречаем поле Td!
Помимо того что мы можем удобно реализовать содержимое ячейки с использованием полей и декораций и добавлять условия с учетом данных, мы также сразу имеем доступ к атрибутам ячейки. Взглянем на пример:

Td::make('Column', function (Article $v) {
    if($v->active) {
        return [
            Text::make('Title'),
        ];
    }

    return [
        Flex::make([
            ActionButton::make('Click me', $this->detailPageUrl($v)),

            Text::make('Title'),
            Switcher::make('Active'),
        ])
    ];
})
    ->tdAttributes(fn (Article $data, ComponentAttributeBag $attr) => $data->getKey() === 2 ? $attr->merge([
        'style' => 'background: lightgray'
    ]) : $attr)
,

Подробности в PR

HasMany прокачан

Благодаря этому PR вы сможете модифицировать кнопку редактирования (добавления), изменить TableBuilder для превью и формы, а также изменить onlyLink кнопку:

MorphMany::make('Comments', 'polyComments', resource: new PolyCommentResource())
  ->onlyLink()
  ->modifyOnlyLinkButton(
      fn(ActionButton $button, bool $preview) => $button
          ->when($preview, fn(ActionButton $btn) => $btn->primary())
          ->when(!$preview, fn(ActionButton $btn) => $btn->secondary())
  )
  ->modifyCreateButton(
      fn(ActionButton $button) => $button->setLabel('Custom create button')
  )
  ->modifyEditButton(
      fn(ActionButton $button) => $button->setLabel('Custom edit button')
  )
  ->modifyTable(
      fn(TableBuilder $table, bool $preview) => $table
          ->when($preview, fn(TableBuilder $tbl) => $tbl->customAttributes(['style' => 'background: blue']))
          ->when(!$preview, fn(TableBuilder $tbl) => $tbl->customAttributes(['style' => 'background: green']))
  )
  ->creatable(true),


Подробности в PR

BelongsToMany в режиме inLine с ссылкой

Да, теперь на каждый элемент в режиме inLine можно повесить ссылку. Давайте взглянем на пример, чтобы понимать о чем речь:

BelongsToMany::make('Categories')->inLine(
    ' ',
    true,
    fn(Category $category, $value, $field) => (new CategoryResource())->detailPageUrl($category)
)

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

BelongsToMany::make('Categories')->inLine(
    ' ',
    true,
    fn(Category $category, $value, $field) => Link::make((new CategoryResource())->detailPageUrl($category), $value)
)

Подробности в PR

Полная локализация для Select

Новый контрибьютор @dragomano просто капитальный красавчик, добавил перевод для Choices и теперь он выглядит намного круче

Подробности в PR

Исправили

Новые контрибьюторы

ОбщайсяРазвивайсяУчисьРаботай
ОбщайсяРазвивайсяУчисьРаботай
ОбщайсяРазвивайсяУчисьРаботай
ОбщайсяРазвивайсяУчисьРаботай