import { Group } from '../group'; import type { ValuesOrBoolean } from '../values-or-boolean'; /** * @interface NavigationBase * Базовый интерфейс для объектов, содержащих информацию о навигации внутри приложения. */ export interface NavigationBase { id: number; description: string; } /** * @interface NavigationLoader * Интерфейс объекта для потока, в котором происходит загрузка массива обьъектов навигации для прилоржения. * @property options.queryObject - Объект ValuesOrBoolean для загрузки навигации * @property options.uniqueKeyForCompareItem - наименование ключа, значение которого является уникальным для запрашиваемых данных (например,'id'). * Необходим для работы внутренней вспомогательной функции обновления изначального набора данных актуальными данными, поступившими в рамках подписки. */ export interface NavigationLoader { nameQuery: string; nameSubscribe: string; queryObject: ValuesOrBoolean; uniqueKeyForCompareItem: keyof { [K in keyof T]: K extends string ? K : never; }; } export interface Navigation extends NavigationBase { mnemonicId: string; options: NavigationsOptions; navigation_menu: NavigationsMenuItem[]; } export interface NavigationsMenuItemBase { label: string; link: string; concept: 'origin' | string; active?: boolean; visible?: boolean; } export interface NavigationsMenuItem extends NavigationsMenuItemBase { icon?: string; groupSlug: string; } export interface NavigationsOptions { initGroupSlug: string; concept: string | 'origin' | null | undefined; behavior?: 'newpagebynavigationmenu' | 'onepagebynavigationmenu'; } export type NavbarMenuLink = Pick; export type NavBarLinkItem = NavbarMenuLink & { link: [string[], string | undefined]; }; export interface NavBarMenu { concept?: string; topLevelGroupId?: string; menu: NavbarMenuLink[]; }