Контекст
В текущей ветке реализовано расширение основного лэйаута: в шапку SidebarLayout добавлены пользовательские действия для ускорения повседневных сценариев — быстрое создание сущностей, просмотр уведомлений и доступ к профилю/выходу.
Цель — сократить количество переходов по интерфейсу, повысить доступность ключевых действий и унифицировать точку входа в user-centric функции приложения.
Технические требования
- Локация логики:
src/app/layouts/SidebarLayout.tsx, src/widgets/quick-create/*, src/widgets/notifications/*, src/widgets/nav-user/*, src/shared/ui/Item.tsx
- Инструменты:
Next.js, React, @tanstack/react-query, next/dynamic, shadcn/ui-компоненты, lucide-react
- Логика работы:
- Обновить
SidebarLayout: добавить sticky-header с правым блоком действий (QuickCreate, Notifications, NavUser) и сохранить совместимость с SidebarProvider.
- Реализовать
QuickCreate с DropdownMenu и запуском CreateTeamDialog/CreateProjectDialog; открытие диалогов через локальный state и onSelect c preventDefault.
- Реализовать
Notifications с ленивой загрузкой через next/dynamic, fallback-скелетоном и запросом данных по queryKey только при open === true.
- Реализовать
NavUser с ленивой загрузкой контента, отображением UserAvatar, переходом в профиль и действием SignOut.
- Добавить публичные re-export точки (
index.ts) для новых виджетов и синхронизировать стили ItemDescription под компактный режим в dropdown.
Цель и критерии приемки (Definition of Done)
Важные указания
- Производительность: Использовать
dynamic import + fallback для снижения initial bundle; исключить лишние запросы (enabled: open для уведомлений).
- Ошибки: Для UI-запросов обрабатывать состояния
loading/empty/error; не допускать runtime-падений при отсутствии пользовательских данных (null-safe доступ к profile/avatar).
- Безопасность: Действие выхода доступно только авторизованному пользователю; переходы и команды в меню должны проходить через валидные route-константы (
routes.*) без хардкода URL.
Контекст
В текущей ветке реализовано расширение основного лэйаута: в шапку
SidebarLayoutдобавлены пользовательские действия для ускорения повседневных сценариев — быстрое создание сущностей, просмотр уведомлений и доступ к профилю/выходу.Цель — сократить количество переходов по интерфейсу, повысить доступность ключевых действий и унифицировать точку входа в user-centric функции приложения.
Технические требования
src/app/layouts/SidebarLayout.tsx,src/widgets/quick-create/*,src/widgets/notifications/*,src/widgets/nav-user/*,src/shared/ui/Item.tsxNext.js,React,@tanstack/react-query,next/dynamic,shadcn/ui-компоненты,lucide-reactSidebarLayout: добавить sticky-header с правым блоком действий (QuickCreate,Notifications,NavUser) и сохранить совместимость сSidebarProvider.QuickCreateсDropdownMenuи запускомCreateTeamDialog/CreateProjectDialog; открытие диалогов через локальный state иonSelectcpreventDefault.Notificationsс ленивой загрузкой черезnext/dynamic, fallback-скелетоном и запросом данных поqueryKeyтолько приopen === true.NavUserс ленивой загрузкой контента, отображениемUserAvatar, переходом в профиль и действиемSignOut.index.ts) для новых виджетов и синхронизировать стилиItemDescriptionпод компактный режим в dropdown.Цель и критерии приемки (Definition of Done)
quick-create,notifications,nav-userс корректными публичными экспортами.SidebarLayoutотображаются 3 action-кнопки; все dropdown открываются/закрываются корректно; диалоги создания сущностей вызываются изQuickCreate; профиль и выход работают изNavUser.<100msна локальном профиле); сетевой запрос уведомлений стартует только по событию открытия меню; отсутствие деградации рендера при первом paint.pnpm lintиpnpm typecheck; изменения включены в текущий CI pipeline без дополнительных переменных окружения.Важные указания
dynamic import+ fallback для снижения initial bundle; исключить лишние запросы (enabled: openдля уведомлений).loading/empty/error; не допускать runtime-падений при отсутствии пользовательских данных (null-safeдоступ кprofile/avatar).routes.*) без хардкода URL.