Дата публикации: 22.09.2024 в 20:17

Интеграция Iconify в Moonshine

Евгений ЮрченкоЕвгений Юрченко
1 комментария

Привет, коллеги! 👋

При использовании админ-панели MoonShine у нас есть список иконок "из коробки". Очень часто возникает ситуация, что этих иконок недостаточно. Что делать в такой ситуации?
В документации MoonShine сказано, что мы можем спокойно загружать свои иконки в определённую папку и использовать их.
Но тут я, как ленивый программист, задумался: "А что, если мне лень искать эти иконки, скачивать их, раскладывать по папкам?". А я очень не люблю делать рутинную работу.

Теперь Iconify нас спасает?

Итак, я понял, что нужно что-то с этим делать. Решил, что определенно таких разработчиков как я немало, почему бы не решить эту общую проблему и внести свой вклад в MoonShine?

Нашел Iconify (это большая библиотека иконок с возможностью работы по API) и реализовал её интеграцию в MoonShine с помощью пакетаmoonshine-iconify.

Пакет убирает ограничение в 292 иконки, вместо этого предлагая нам более 200 тысяч Open Source иконок, которые можно выбрать в удобном интерфейсе с поиском. При этом не запрещает всё также использовать иконки, которые стоят в MoonShine "из коробки" и те иконки, что вы уже выкачали ранее и использовали в проекте.

Хочу-хочу! Что делать?

Всё очень легко и просто:

1. Ставим пакет:

composer require jerabix/moonshine-iconify

2. Публикуем блейд-файлик:

php artisan vendor:publish --tag="moonshine-iconify-blade"

3. (Опционально) Публикуем конфиг пакета:

php artisan vendor:publish --tag="moonshine-iconify-config"

Если коротко - то всё, можете брать название иконок отсюда и использовать их, как и обычные иконки MoonShine.

Есть нюансы

Пакет может работать в двух режимах:

1. Iconify component (по умолчанию):

Более подробно можно ознакомиться тут.

Подключается JS-скрипт в шапку, используется компонент Custom HTML-element <iconify-icon>и когда вы доскраливаете до определённой иконки - она запрашивается HTTP-запросом по Iconify API и кешируется в localstorage каждого клиента.

Данный режим самый простой и не требует от вас дополнительных действий.

2. Download usage icons:

В данном режиме JS-скрипт не подключается, а вместо iconify component используется обычный inline SVG, но есть конечно же и минусы.

Каждый раз, когда в проекте появляется новая иконка - нужно запускать команду, которая сканирует проект, понимает какие иконки используются, а какие нет - и выкачивает нужные иконки с Iconify API единоразово в проект и далее иконки используются в соответствии с документацией MoonShine.

Команда для скачивания иконок:
php artisan moonshine-iconify:icons:download

Если мы имеем в зависимостях пакет spatie-ignition версии более чем 2.8 - то жизнь немного упрощается и всё что нужно будет сделать - на странице эксепшена нажать кнопочку "DOWNLOAD USAGE ICONIFY ICONS" и команда запуститься сама, нужно будет только обновить страницу.

Далее логика взаимодействия с иконками будет точно такая же как и с обычными иконками MoonShine.

Конфиг

Есть конфиг в котором вы можете настроить следующее поведение:

  • режим работы пакета
  • удалять ли неиспользуемые иконки в папке iconify
  • путь в котором искать используемые иконки в проекте
  • путь для подключения iconify JS-скрипта (по умолчанию он грузится по CDN из их документации)

Итого

Работа с иконками может быть более приятной, стоит только это захотеть!

Спасибо за прочтение! Всем желаю интересных и больших проектов вместе с MoonShine!

Видео гайд с обзором и настройкой на YouTube

Ссылка на пакет -https://github.com/JeRabix/moonshine-iconify

Комментарии (1)

Danil Shutsky
Danil Shutsky
30.09.2024 в 16:17
Отличная работа!
ОбщайсяРазвивайсяУчисьРаботай
ОбщайсяРазвивайсяУчисьРаботай
ОбщайсяРазвивайсяУчисьРаботай
ОбщайсяРазвивайсяУчисьРаботай