import * as React from 'react'; import styles from './SideNav.module.scss'; import { Icon } from '../../shared/ui/Icon/Icon'; import { IconName } from '../../shared/ui/Icon/iconNames'; import { NavSection } from '../../shared/routing'; interface INavItem { id: NavSection; title: string; icon: IconName; } // Порядок неслучаен: сверху действие (создать), затем три очереди — то, что // ждёт пользователя прямо сейчас, — и только потом архив и поиск. const ITEMS: INavItem[] = [ { id: 'new', title: 'Новая заявка', icon: 'plus' }, { id: 'approvals', title: 'На согласовании', icon: 'user-check' }, { id: 'execution', title: 'На исполнении', icon: 'helmet' }, { id: 'rework', title: 'Доработка', icon: 'edit' }, { id: 'own', title: 'Мои заявки', icon: 'clipboard' }, { id: 'search', title: 'Поиск', icon: 'search' }, ]; interface ISideNavProps { activeId: NavSection; onChange: (id: NavSection) => void; /** Счётчики очередей: сколько заявок ждёт пользователя в каждом разделе. */ counts?: Partial>; collapsed: boolean; onToggleCollapsed: () => void; } // Тёмный боковой рейл портала на всю высоту: бренд сверху, разделы снизу. // Сворачивается до узкой полосы с одними иконками. export const SideNav: React.FC = ({ activeId, onChange, counts, collapsed, onToggleCollapsed, }) => { const navClasses = [styles.nav, collapsed ? styles.navCollapsed : ''].filter(Boolean).join(' '); return ( ); };