скелет готов
This commit is contained in:
@@ -10,9 +10,13 @@ interface INavItem {
|
||||
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' },
|
||||
];
|
||||
@@ -20,8 +24,8 @@ const ITEMS: INavItem[] = [
|
||||
interface ISideNavProps {
|
||||
activeId: NavSection;
|
||||
onChange: (id: NavSection) => void;
|
||||
/** Счётчик у пункта «На согласовании» (сколько ждут решения). */
|
||||
approvalsCount?: number;
|
||||
/** Счётчики очередей: сколько заявок ждёт пользователя в каждом разделе. */
|
||||
counts?: Partial<Record<NavSection, number>>;
|
||||
collapsed: boolean;
|
||||
onToggleCollapsed: () => void;
|
||||
}
|
||||
@@ -31,7 +35,7 @@ interface ISideNavProps {
|
||||
export const SideNav: React.FC<ISideNavProps> = ({
|
||||
activeId,
|
||||
onChange,
|
||||
approvalsCount,
|
||||
counts,
|
||||
collapsed,
|
||||
onToggleCollapsed,
|
||||
}) => {
|
||||
@@ -58,7 +62,8 @@ export const SideNav: React.FC<ISideNavProps> = ({
|
||||
{ITEMS.map((item) => {
|
||||
const isActive = item.id === activeId;
|
||||
const itemClasses = [styles.item, isActive ? styles.itemActive : ''].filter(Boolean).join(' ');
|
||||
const showCount = item.id === 'approvals' && !!approvalsCount;
|
||||
const count = counts?.[item.id];
|
||||
const showCount = !!count;
|
||||
|
||||
return (
|
||||
<button
|
||||
@@ -73,7 +78,7 @@ export const SideNav: React.FC<ISideNavProps> = ({
|
||||
<Icon name={item.icon} size="sm" />
|
||||
</span>
|
||||
{!collapsed && <span className={styles.itemTitle}>{item.title}</span>}
|
||||
{showCount && <span className={styles.badge}>{approvalsCount}</span>}
|
||||
{showCount && <span className={styles.badge}>{count}</span>}
|
||||
</button>
|
||||
);
|
||||
})}
|
||||
|
||||
Reference in New Issue
Block a user