Skip to content

[Refactor] Декомпозировать AppSidebar и подключить реальные teams в TeamSwitcher #46

@kapitulin24

Description

@kapitulin24

Контекст

src/widgets/app-sidebar/ui/AppSidebar.tsx содержит статический data.teams, дублирование секций и смешение next/link с raw <a href>, что ломает единообразие клиентской навигации и мешает дальнейшей интеграции с реальными team-данными.
Нужно выделить конфиг навигации/переиспользуемые секции и перевести сайдбар на единый подход к маршрутизации.

Технические требования

  • Локация логики: src/widgets/app-sidebar/ui/AppSidebar.tsx, src/widgets/app-sidebar/ui/TeamSwitcher.tsx, связанные компоненты app/layouts/BaseLayout
  • Инструменты: Next.js Link, React, TypeScript, shared/ui (Sidebar, Collapsible, menu-компоненты)
  • Логика работы:
    1. Разбить AppSidebar на декларативный конфиг и переиспользуемые UI-секции (профиль, команда) с устранением дублирования.
    2. Полностью заменить raw <a href> на next/link для сохранения клиентской навигации и префетча.
    3. Подключить TeamSwitcher к реальным данным команд (query/контекст); локальный state оставить только для UI-состояний (open/close).
    4. Опционально добавить active-подсветку пунктов по pathname для улучшения UX и предсказуемой навигации.

Цель и критерии приемки (Definition of Done)

  • База: Выделен конфиг пунктов/секций сайдбара, убраны инлайн-структуры с дублированием.
  • Функционал: Все пункты в сайдбаре используют Link, переходы выполняются без full reload, TeamSwitcher отображает реальные команды.
  • Лимиты/SLA: Время навигации соответствует текущему client-side поведению; отсутствуют лишние ререндеры при раскрытии/сворачивании секций.
  • Интеграция: Сохранена совместимость с SidebarProvider в app/(protected)/layout.tsx, пройдены линтеры и типизация.

Важные указания

  • Производительность: Минимизировать пересоздание массивов конфигурации и обработчиков; выносить константы за пределы рендера.
  • Ошибки: Для отсутствующих/пустых team-данных показывать безопасный fallback в TeamSwitcher без падения дерева сайдбара.
  • Безопасность: Не рендерить ссылки, если маршрут недоступен текущему контексту пользователя/команды; избегать небезопасных URL-источников.

Metadata

Metadata

Assignees

Type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions