Admiral. Как мы делаем бейджи в меню
Всем привет! Мы продолжаем делать Admiral — решение с открытым исходным кодом на React. С ним можно быстро разрабатывать красивые CRUDы в админ-панелях и создавать полностью кастомные интерфейсы. От разработчиков для разработчиков с любовью.
Проект доступен по ссылке — https://github.com/dev-family/admiral
Будем рады вашим оценкам!
В прошлой статье мы рассказывали про построение динамического меню на backend для Admiral.
Сегодня разберем работу Badges (счетчиков) рядом с пунктами меню, и что мы делаем с ними на стороне backend.
В прошлой статье мы говорили о полях, которые присутствуют в меню — одно из них badge. Оно и отвечает за вывод значения возле пункта меню.
Backend
Давайте разберем, что делать на стороне backend в Laravel. Так выглядит файл упрощенногоMenuService, который занимается генерацией динамического меню для Admiral. Чтобы его вызвать, нужен методUserMenuс параметром "пользователь", для которого это меню и строится (если есть необходимость разделения меню по ролям).
Рассмотрим основные компоненты нашего меню: класс Menu, представляющий собой каркас, и класс MenuItem, представляющий отдельные пункты меню.
Ничего особенного, простой объект с простыми методами:
- items — для пунктов меню
- addItem() — для добавления нового пункта
MenuItem выглядит уже поинтереснее. Здесь есть параметры title, icon, to. Думаю, понятно, какую роль каждый выполняет.
Давайте обратим внимание, как идет формирование пункта меню. Это метод toArray. Но еще больше нас интересует строка формирования Badge, и что делает метод get.
Разберем подробнее, что делает класс Badge.
В данном классе мы собираем информацию о бейджах. Конкретно в этом случае — для пункта меню Products. Я формирую и выполняю один общий запрос на получение информации.
Если необходимо добавить новый запрос, например, появился пункт меню "Заказы", - необходимо добавить в метод get строчку:
А также в метод query добавить запрос:
Потом написать функцию productQuery, которая будет формировать запрос на получение заказов по определенным параметрам. Если необходимо, можно кэшировать эти данные.
Со стороны Admiral в файле menu.tsx MenuItemLink должен выглядеть так. Где в Badge: count — значение, а status — цвет пункта меню.
Готово. Теперь у вас должно появиться число рядом с пунктом меню, если оно удовлетворяет запросу.
Если у вас возникли вопросы, пожалуйста, свяжитесь с нами по адресу: admiral@dev.family Мы всегда рады вашим отзывам!