Конфигурация меню бизнес-приложения

{
	favicon?: string;                       // Иконка сайта
	title?: string;                         // Заголовок сайта
	logo?: string;                          // Логотип в развёрнутом меню навигации
	logoShort?: string;                     // Логотип в свёрнутом меню навигации
	notificationPollingIntervalMS?: number; // Интервал получения нотификаций. По умолчанию равен 30000 (30 сек)
	toolbar?: Toolbar;                      // Настройки верхней панели
	routes?: Route[];                       // Настройки навигации и существующих страниц
}

Toolbar

{
		megaMenu?: {
				title: string;                          // Заголовок кнопки с мега меню
				hidden?: boolean;                       // Скрыть мега меню  
				features: {                             // Массив страницы в мега меню (по умолчанию добавляется страница настроек)
						icon: string;                       // Иконка страницы
						title: string;                      // Заголовок под иконкой
						url: string;                        // Ссылка (поддерживает переменные вида ${var})
            external?: boolean;                 // Открывать ссылку в новой вкладке
						roles?: string[];                   // Роли, которым будет доступна эта кнопка 
				}[];
		};
		userMenu?: {                                // Меню с правой стороны toolbar'a
				icon: string;                           // Иконка
			  color?: string;                         // Цвет иконки
			  title: string;                          // Заголовок
				description?: string;                   // Описание под заголовком
			  url: string;                            // Ссылка (поддерживает переменные вида ${var})
			  external?: boolean;                     // Открывать ссылку в новой вкладке
				roles?: string[];                       // Роли, которым будет доступен этот пункт
		}[];
		buttons?: {                                 // Кнопоки на верхней панели
			  title: string;                          // Надпись на кнопке
			  url: string;                            // Ссылка (поддерживает переменные вида ${var})
        external?: boolean;                     // Открывать ссылку в новой вкладке
			  color?: 'primary' | 'accent' | 'warn';  // Цвет из стандартного набора цветов
        roles?: string[];                       // Роли, которым будет доступна эта кнопка 
		}[];
}

Routes

Групповой route (type = 'group')

Модель

{
		type?: 'group';               // Тип route
		title: string;                // Название группы
		hidden?: boolean;             // Cкрывает route в навигационном меню
		children?: Route[];           // Дочернии route
		roles?: string[];             // Роли которым разрешена эта группа
		inheritRoles?: boolean;       // Наследовать роли от родителя (по умолчанию true)
}

Пример

{
  "title": "Вакансии",
  "type": "group",
  "children": [
    {
      "url": "vacancyall",
      "title": "Все",
      "icon": "recent_actors",
      "componentId": "485550b8-e39b-454f-abc2-b23ee8459580",
      "children": [
        {
          "url": "employee",
          "title": "Сотрудник",
          "componentId": "e2458aaa-1a0c-4694-aa6f-59ac29b8fe17"
        }
      ]
    },
    {
      "url": "vacancyopen",
      "title": "Открытые",
      "componentId": "a7a58f31-f5d0-4ace-a2fc-c99645ae98c7",
    },
    {
      "url": "vacancyclose",
      "title": "Закрытые",
      "componentId": "9995b09b-67e5-453a-b761-7adf8eff7a30"
    }
  ]
}

Route c children

Модель

{
		url?: string;                 // URL поддерживает переменные в виде '/user/:var:/' - где ':var:' это переменная. Не поддерживает query параметры
		icon?: string;                // Иконка в навигационном меню
		title: string;                // Название в навигационном меню
		hidden?: boolean;             // Cкрывает route в навигационном меню
		children?: Route[];           // Дочернии route
		roles?: string[];             // Роли которым разрешен этот route
		inheritRoles?: boolean;       // Наследовать роли от родителя (по умолчанию true)
		chip?: {                      // Чип отображается справа от элемента навигации
				color: string;            // Цвет чипа
				url: string;              // Путь для graphql запроса
				graphql: string;          // Строка graphql запроса, получение данных для чипа (поддерживает переменные вида ${var})
				variables: Params;        // Переменные для graphql запроса (поддерживает переменные вида ${var})
		}
}

Пример

{
	"title": "СПРАВОЧНИКИ",
	"url": "spra",
	"roles": ["admin"],
	"children": [
    {
      "url": "employee",
      "title": "Сотрудник",
      "componentId": "e2458aaa-1a0c-4694-aa6f-59ac29b8fe17"
    },
    {
      "url": "spec",
      "title": "Специализация",
      "componentId": "7da46d04-a15c-41a7-a5c9-1950ee563f78"
    },
    {
      "url": "businessUnit",
      "title": "Бизнес-Юнит",
      "componentId": "21aa0b1e-a820-4f2a-95ea-82a36fed19f0"
    }
	]
}

Обычная ссылка

Модель

{
		url: string;                  // URL, поддерживает переменные в виде '/user/:var:/' - где ':var:' переменная. Не поддерживает query параметры
		external?: boolean;           // Открывать ссылку в новой вкладке
    icon?: string;                // Иконка в навигационном меню
		title: string;                // Название в навигационном меню
		header?: {                    // Шапка страницы
				title: string,            // Заголовок в шапке
				style?: 'black' | 'white' // Цвет заголовка в шапке (по умолчанию black)
				tooltip?: string          // Тултип рядом с заголовком страницы
		};
		queryParams?: Params;         // Query параметры
		componentId?: string;         // ID компонента
		heightPanel?: string;         // Размеры синей плашки
		isIndexPage?: boolean;        // Помечает страницу как главную
		hidden?: boolean;             // Cкрывает route в навигационном меню
		roles?: string[];             // Роли, которым разрешен этот route
		inheritRoles?: boolean;       // Наследовать роли от родителя (по умолчанию true)
		chip?: {                      // Чип отображается справа от элемента навигации
				color: string;            // Цвет чипа
				url: string;              // Путь для graphql запроса
				graphql: string;          // Строка graphql запроса, получение данных для чипа
				variables: Params;        // Переменные для graphql запроса
		},
		breadcrumbs?: {               // Массив хлебных крошек
				title: string;            // Заголовок крошки. Поддерживаются query переменные. В заголовке выглядят как ${name}
			  url: string;              // Ссылка куда крошка ведёт
		}[];
}

Пример

{
	"url": "vacancyopen",
	"title": "Открытые",
	"componentId": "a7a58f31-f5d0-4ace-a2fc-c99645ae98c7",
	"chip": {
	    "color": "warn",
	    "url": "/security",
	    "graphql": "query($realm: String!, $value: String){userCount(realm: $realm, value: $value)}",
	    "variables": {
	        "value": "aimc.io"
	    }
	},
	"heightPanel": "200px",
	"header": {
	    "title": "Важный заголовок для страницы",
	    "style": "white"
	},
	"breadcrumbs": [
	    {"title": "Главная", "url": "roles"},
	    {"title": "Справочная", "url": "users"}
	]
}

Захардкоженные routes

Модель

{
  "componentId": "settings",
  "type": "group",
	"children": [
			{"componentId": "settings"},
			{"componentId": "security"},
			{"componentId": "templates"},
			...
	]
}