Refonte front (packages/web) : coquille applicative partagée (sidebar desktop + barre d'onglets mobile + PageHeader, langue/push/logout centralisés) pilotée par route.meta.layout ; design system (BaseButton/BaseBadge/SegmentedControl/EmptyState/ SkeletonRow, anneau de focus, icônes @lucide/vue) ; tri/filtre/recherche/pagination côté client via useListControls (+ synchro URL) sur sessions/worktrees/groupes ; section « À traiter », palette de commandes ⌘K, toasts. Aucune modif serveur/protocole/DB.
20 lines
598 B
TypeScript
20 lines
598 B
TypeScript
import { useRouter } from 'vue-router';
|
|
import { useAuthStore } from '../stores/auth';
|
|
|
|
/**
|
|
* Déconnexion centralisée. `auth.logout()` ferme la WebSocket ; la redirection vers /login
|
|
* démonte l'AppShell, qui stoppe alors les abonnements temps réel (source unique). Corrige
|
|
* l'incohérence où certaines vues ne stoppaient pas tous les flux au logout.
|
|
*/
|
|
export function useSession() {
|
|
const auth = useAuthStore();
|
|
const router = useRouter();
|
|
|
|
async function logout(): Promise<void> {
|
|
await auth.logout();
|
|
await router.replace({ name: 'login' });
|
|
}
|
|
|
|
return { logout };
|
|
}
|