You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Текущая реализация logout в useSignOut использует глобальный client.clear(), что может очищать больше данных, чем требуется, и делает поведение после выхода из аккаунта менее контролируемым.
Также SignOut используется внутри NavUser через DropdownMenuItem asChild, где важно унифицировать семантику действия и контракты компонентов.
Разделить презентационную кнопку SignOut и доменные side-effects в useSignOut; сделать прозрачный контракт (mutateAsync, callbacks).
Заменить глобальное client.clear() на целевую очистку/инвалидацию auth/user/team query-ключей.
Сохранить последовательность: отмена релевантных запросов -> очистка токена -> cache reset/invalidate -> редирект на routes.auth.signin() -> toast.
Проверить интеграцию с NavUser и унифицировать семантику DropdownMenuItem + Button (доступность, disabled/loading состояние).
Цель и критерии приемки (Definition of Done)
База: Хук useSignOut имеет явный типизированный контракт и покрывает success/error сценарии.
Функционал: Выход из аккаунта стабильно очищает auth-состояние, перенаправляет на /signin, показывает корректный toast и не ломает dropdown.
Лимиты/SLA: Logout-сценарий завершается <= 1 сек после успешного ответа API; отсутствуют race conditions с параллельными запросами.
Интеграция: Обновлены query-key стратегии очистки для auth/user/team, проверена совместимость с NavUser, пройдены линтеры и типизация.
Важные указания
Производительность: Не выполнять полный сброс кэша приложения; очищать только затронутые доменные ключи.
Ошибки: На API-ошибках использовать предсказуемую ветку onError с человекочитаемым сообщением; не очищать локальное состояние до подтвержденного сценария.
Безопасность: Гарантировать удаление AccessToken в любом успешном logout-flow; исключить доступ к protected-данным после редиректа.
Контекст
Текущая реализация
logoutвuseSignOutиспользует глобальныйclient.clear(), что может очищать больше данных, чем требуется, и делает поведение после выхода из аккаунта менее контролируемым.Также
SignOutиспользуется внутриNavUserчерезDropdownMenuItem asChild, где важно унифицировать семантику действия и контракты компонентов.Технические требования
src/features/auth/sign-out/ui/SignOut.tsx,src/features/auth/sign-out/model/useSignOut.ts,src/widgets/app-sidebar/ui/NavUser.tsx@tanstack/react-query,Next.js router,AccessToken,sonner,shared/uiSignOutи доменные side-effects вuseSignOut; сделать прозрачный контракт (mutateAsync, callbacks).client.clear()на целевую очистку/инвалидацию auth/user/team query-ключей.routes.auth.signin()-> toast.NavUserи унифицировать семантикуDropdownMenuItem+Button(доступность, disabled/loading состояние).Цель и критерии приемки (Definition of Done)
useSignOutимеет явный типизированный контракт и покрывает success/error сценарии./signin, показывает корректный toast и не ломает dropdown.NavUser, пройдены линтеры и типизация.Важные указания
onErrorс человекочитаемым сообщением; не очищать локальное состояние до подтвержденного сценария.AccessTokenв любом успешном logout-flow; исключить доступ к protected-данным после редиректа.