27ea881738
Extrait la logique fetch/CRUD inline de la page categories (ERP-49) vers deux composables dedies, conformement au pattern Starseed : - useCategoriesAdmin : singleton state (categories + types + loading + error). Pre-chargement des types au mount de la page (au lieu du fetch par ouverture du drawer). Reset au logout via onAuthSessionCleared + appel explicite dans logout.vue. - useCategoryForm : state local par form (pas singleton). Valide cote client en miroir des RG back (RG-1.02 / RG-1.04 / RG-1.05), mappe les erreurs 409 (doublon RG-1.07) et 422 (violations API Platform) sur les bons champs. submitCreate / submitUpdate / submitDelete renvoient la ressource ou null pour decoupler la decision de fermeture du drawer. La page et le drawer deviennent purement presentationnels. Aucune regression UX : meme validations, memes toasts, meme pattern view -> edit du drawer (via isDirty expose par useCategoryForm).
36 lines
1.1 KiB
Vue
36 lines
1.1 KiB
Vue
<template>
|
|
<div class="flex h-full items-center justify-center">
|
|
<p class="text-neutral-500">{{ $t('auth.logout') }}...</p>
|
|
</div>
|
|
</template>
|
|
|
|
<script setup lang="ts">
|
|
definePageMeta({ layout: 'auth' })
|
|
|
|
const auth = useAuthStore()
|
|
const { resetSidebar } = useSidebar()
|
|
const { resetModules } = useModules()
|
|
const { resetCurrentSite } = useCurrentSite()
|
|
const { resetAuditLog } = useAuditLog()
|
|
const { resetCategoriesAdmin } = useCategoriesAdmin()
|
|
|
|
onMounted(async () => {
|
|
try {
|
|
await auth.logout()
|
|
} finally {
|
|
// Les resets sont garantis meme si auth.logout() rejette : eviter
|
|
// qu'un user suivant (connecte sur le meme onglet) voie l'etat de
|
|
// l'ancien. Toutes les fonctions reset sont synchrones et ne
|
|
// peuvent pas throw (juste des assignations reactives).
|
|
// navigateTo est dans le finally pour garantir la redirection
|
|
// meme si auth.logout() lance une exception (ex: reseau coupé).
|
|
resetSidebar()
|
|
resetModules()
|
|
resetCurrentSite()
|
|
resetAuditLog()
|
|
resetCategoriesAdmin()
|
|
await navigateTo('/login')
|
|
}
|
|
})
|
|
</script>
|