feat: добавил инструкцию пользователя в боковую панел
Tests / frontend-test (push) Successful in 1m16s

This commit is contained in:
Тимур Городецкий
2026-09-24 12:21:43 +05:00
parent c623d93b56
commit b7bd8537a4
2 changed files with 23 additions and 1 deletions
@@ -21,6 +21,7 @@ import {
OwnTab,
} from '../shared/routing';
import { onRequestsChanged, emitRequestsChanged } from '../shared/requestEvents';
import { USER_GUIDE_URL } from '../shared/config';
import { getImpersonatedEmail, getImpersonatedDisplayName } from '../shared/impersonation';
import { confirmDiscardFormChanges, markFormClean, markFormDirty } from '../shared/unsavedChanges';
import { Drawer } from './Drawer/Drawer';
@@ -298,6 +299,11 @@ const RequestPortal: React.FC<IRequestPortalProps> = ({ hasTeamsContext, context
// Разделы бокового меню для пакетного Sidebar (счётчики — из navCounts).
// «Отчёты» — только у тех, кому разрешено (см. canSeeReports выше): скрыт из
// меню совсем, а не показан неактивным, — раздела для остальных как бы не существует.
//
// «Инструкция пользователя» — не раздел портала, а внешняя ссылка (docx в базе
// знаний). id 'instructions' НЕ входит в NavSection специально: обработчик
// onChange ниже перехватывает его до вызова goto() и открывает ссылку в новой
// вкладке, не меняя текущий раздел/маршрут.
const navItems: ISidebarItem[] = [
{ id: 'new', title: 'Новая заявка', icon: 'plus' },
{ id: 'approvals', title: 'На согласовании', icon: 'user-check', count: navCounts?.approvals },
@@ -306,8 +312,17 @@ const RequestPortal: React.FC<IRequestPortalProps> = ({ hasTeamsContext, context
{ id: 'own', title: 'Мои заявки', icon: 'clipboard' },
{ id: 'search', title: 'Поиск', icon: 'search' },
...(canSeeReports ? [{ id: 'reports', title: 'Отчёты', icon: 'chart' } as ISidebarItem] : []),
{ id: 'instructions', title: 'Инструкция пользователя', icon: 'info' },
];
const handleNavChange = (id: string): void => {
if (id === 'instructions') {
window.open(USER_GUIDE_URL, '_blank', 'noopener');
return;
}
goto(id as NavSection);
};
return (
<section className={rootClasses}>
<IconSprite />
@@ -329,7 +344,7 @@ const RequestPortal: React.FC<IRequestPortalProps> = ({ hasTeamsContext, context
<Sidebar
items={navItems}
activeId={route.nav}
onChange={(id) => goto(id as NavSection)}
onChange={handleNavChange}
brand="Портал заявок"
collapsed={navCollapsed}
onToggleCollapsed={() => setNavCollapsed((v) => !v)}