Download the PHP package ewk/moonshine-resource-kit without Composer
On this page you can find all versions of the php package ewk/moonshine-resource-kit. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.
Download ewk/moonshine-resource-kit
More information about ewk/moonshine-resource-kit
Files in ewk/moonshine-resource-kit
Package moonshine-resource-kit
Short Description Drag & drop sorting and activity toggling toolkit for MoonShine 4 resources.
License MIT
Homepage https://github.com/einzelwerk/moonshine-resource-kit
Informations about the package moonshine-resource-kit
MoonShine Resource Kit
Тулкит для ресурсов MoonShine 4: drag & drop сортировка и переключатель активности.
Извлечён из паттернов, повторяющихся в реальных проектах: колонка sort_order с перетаскиванием строк в админской таблице и флаг is_active с переключением по одной записи и массово. Пакет — тонкий клей над встроенными механизмами MoonShine (reorderable()-таблицы на SortableJS, updateOnPreview() у переключателей): без собственного JS, всё настраивается на уровне модели/ресурса.
Требования
- PHP 8.3+
- Laravel 12/13
- MoonShine 4.15+
Установка
Сервис-провайдер подключается автоматически. При необходимости опубликуйте конфиг и переводы:
Сортировка
Модель
Добавьте колонку sort_order ($table->unsignedInteger('sort_order')->nullable();) и трейт:
Новые записи получают позицию max + 1 автоматически. Также трейт даёт:
Позиции плотные (всегда 1..N), перемещение дешёвое: один UPDATE со сдвигом диапазона плюс один UPDATE с установкой позиции — независимо от размера таблицы.
Своя колонка — переопределите в модели (глобальный дефолт задаётся в конфиге):
Групповые последовательности — независимая сортировка внутри каждой группы (например, блоки внутри страницы):
Ресурс
Дальше включите drag & drop на индексной странице — либо трейтом страницы:
либо вручную в modifyListComponent():
Пагинация и большие таблицы
Drag & drop достаёт только до строк текущей страницы — и это нормально: когда таблица отсортирована по колонке сортировки, страница занимает непрерывный срез позиций, и пакет перераспределяет ровно этот срез. Остальные страницы не затрагиваются.
Чтобы переносить записи между страницами, добавьте кнопки перемещения на индексную страницу:
Вы получите «вверх / вниз», «в начало / в конец» и модалку «на позицию».
Каждое перемещение — два UPDATE, так что решение масштабируется на большие
таблицы без перезаписи всех строк.
Ручка перетаскивания
По умолчанию тянется вся строка. Чтобы перетаскивать только за ручку:
Вложенные таблицы
Для таблиц HasMany, которые рендерятся внутри формы другого ресурса:
Переключатель активности
Модель
Добавьте boolean-колонку ($table->boolean('is_active')->default(true);) и трейт:
Вы получите activate() / deactivate() / toggleActive() / isActive(),
скоупы active() / inactive() и boolean-каст. Чтобы использовать другую
колонку, переопределите getActiveColumn().
Ресурс
Переключение прямо из индексной таблицы:
Кнопки массовой активации/деактивации:
Глобальные скоупы (opt-in)
ActiveScope (скрывает неактивные записи) и SortOrderScope (неявная
сортировка) поставляются в пакете, но никогда не регистрируются
автоматически — глобальный скоуп, зависящий от текущего URL, стреляет в ногу
в очередях, Octane и artisan. Регистрируйте их там, где ограничение реально
нужно:
Состояния фабрик
Конфигурация
config/moonshine-resource-kit.php:
| Ключ | По умолчанию | Назначение |
|---|---|---|
sort_column |
sort_order |
Глобальный дефолт для трейта Sortable |
active_column |
is_active |
Глобальный дефолт для трейта Activatable |
handle_class |
msrk-handle |
CSS-класс ячейки-ручки перетаскивания |
Переопределения на уровне модели (getSortColumn(), getSortGroupColumns(),
getActiveColumn()) всегда приоритетнее конфига.
Разработка
Лицензия
MIT