Дата публикации: 03.07.2024 в 09:31

MoonShine v2.18 "Mango Tango"

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

Вышел релиз MoonShine v.2.18.0 с кодовым именем "Mango Tango"! Давайте взглянем на самое интересное в этом обновлении!

Sticky режим для TableBuilder

Благодря @DissNik добавлен режим с плавающей шапкой таблиц у ресурса. Чтобы попробовать новый режим добавьте флаг stickyTable в ресурсе

namespace App\MoonShine\Resources;
 
use MoonShine\Resources\ModelResource;
 
class PostResource extends ModelResource
{
    // ...

    protected bool $stickyTable = true; 
 
    // ...
}

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

Аватар заглушка

Появилась возможность заменить шаблонную заглушку аватара профиля на свою

Profile::make()->defaultAvatar("https://ui-avatars.com/api/?name=$name")

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

Большие улучшения для импорта и экспорта

Для начала экспорт теперь по умолчанию в формате xlsx

Если вы хотите сделать формат по умолчанию csv, то добавьте код ниже в ServiceProvider

ModelResource::defaultExportToCsv();

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

Также появились новые методы, которые улучшат кастомизацию импорта и экспорта, давайте взглянем на примеры

Enum::make('Enum')
    ->attach(ColorEnum::class)
    ->fromRaw(fn(string $raw, Enum $ctx) => ColorEnum::tryFrom($raw))
    ->modifyRawValue(fn(ColorEnum $raw, Enum $ctx) => $raw->value))

C помощью метода modifyRawValue мы вывели в экспорте значение Enum поля

А далее с помощью метода fromRaw при импорте преобразовали значение обратно в Enum

Есть и сахар для более простого вызова

Enum::make('Enum')
    ->attach(ColorEnum::class)
    ->useOnImport(fromRaw: static fn(string $raw, Enum $ctx) => ColorEnum::tryFrom($raw))
    ->showOnExport(modifyRawValue: static fn(ColorEnum $raw, Enum $ctx) => $raw->value)

Соответственно под капотом это будет тоже самое что и пример выше

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

Dropdown с поиском

Благодря @djnew добавлен режим поиска для компонента Dropdown

Dropdown::make()->searchable()->searchPlaceholder('Search...')

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

asyncSearch replaceQuery

Если мы переопределяем asyncSearchQuery то на самом деле мы доплняем дефолтный, который уже ищет по column, но за счет флага replaceQuery мы можем полностью заменить builder

asyncSearch(asyncSearchQuery: fn($q) => $q->where(..., ...), replaceQuery: true)

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

Рубрика BugBusters 🐛

  • Проблема метрик на некоторых разрешениях от @DissNik in PR
  • Фикс скролла в сайдбаре от@DissNik in PR
  • Проблемы с методом onBoot от @lee-to in PR

https://github.com/moonshine-software/moonshine/compare/2.17.0...2.18.0

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