05 Понятие кастомизации
Cлоистая структура фронтенда Luxms BI
Конструктор итогового вида фронтенда Luxms BI собирается из следующих элементов:
- Коробочный вид компонентов текущей версии веб-клиента. Определяется пакетом
luxmsbi-web-client
. - Текущая тема, определяющая цветовую палитру, тени, бекграунд и набор цветов по умолчанию для графиков.
- Текущая локализация.
- Переопределение компонентов-строительных блоков из ресурсов (набор таких компонентов ограничен и будет приведен позже).
- Обусловленные разделом уровни стилизации. Например переопределение компонентов, тем и стилей только для конкретного атласа. В случае стилей - и для конкретного дешборда. В случае дешей - указание кастомного компонента только у конкретного(ных) деша(ей).
Помимо этого, для раздела dashboards
атласа возможно подключить глобальные файлы стилей, поместив их в раздел resources
текущего атласа, ds_res
или родительских атласов (подключаются на страницу при помощи тега <link>
): _global.css
или (styles.css
). Такой файл будет на всех дешбордах атласа. В случае с ds_res
- на всех атласах инстанса вообще.
Так же, учитывая ролевые особенности родительских атласов и ds_res
, вы можете разместить файлы стилей _global.css
в каждом из них и по итогу получить несколько подключений файлов стилей, по приоритету:
- сначала стили
ds_res
(если есть - будут подключаться к каждому атласу и его дешбордам) - затем цепочка стилей родительских атласов (только для дочерних атласов и их дешбордов)
- стили текущего атласа (для всех дешбордов текущего атласа)
- Стили для текущего дешборда текущего атласа будут дополнительными стилями. Такой файл для дешборда с
id = 1
будет называтьсяstyles.dboard=1.css
Под кастомизацией фронтенда Luxms BI мы будем подразумевать ситуацию, когда требования вашей бизнес-логики выходят за рамки коробочного функционала, предоставляемого фронтендом, и достичь ваших целей вы можете только работая с пунктами 2 - 4 выше.
Как достигается сама кастомизация?
Основной механизм, используемый в проекте luxmsbi-web-client
для кастомизации строительных компонентов, дешлетов, тем и стилей: запрос на наличие соответствующих файлов в разделе resources
в иерархии атласов перед тем как webpack
займется построением дерева компонентов для билдования. Иерархия таких файлов работает так же, как в случае с глобальными стилями выше.
По итогу используется файл, ближайший в иерархии к текущему разделу (атласу, например).
Рассмотрим принцип кастомизации строительного блока страницы:
В проекте luxmsbi-web-client
есть компонент-обертка LoadFromResources
, который, перед тем как отдать webpack
компонент MyComponent.tsx
, проверяет наличие файла MyComponent.js
(это должен быть собранный React-компонент) в разделе resources
текущего атласа и если он там присутствует, то использует его, если нет - идет в родительский атлас за одноименным ресурсом (поднимаясь выше по уровню вложенности атласа), если файла нет ни в одном из родительских атласов, то в ds_res
, а если и в нем нет - вставляет коробочную версию компонента (из папки src
проекта ).
По похожему принципу работает и переопределение фавиконок, основного лого, анимированного лого при загрузке, файла с настройками тем, локализации, плагинов, картинок разделов и загрузки компонентов для подключения в качестве кастомной визуализации в дешлете.