/** * Composable de lecture des modules actifs (source : `/api/modules`). * * State singleton au niveau module : `useSidebar` suit la meme convention. * Chargement idempotent via le flag `loaded`, reset explicite au logout * (voir pages/logout.vue). */ import { ref } from 'vue' const activeModuleIds = ref([]) const loaded = ref(false) export function useModules() { async function loadModules() { try { const api = useApi() const data = await api.get<{ modules: string[] }>( '/modules', {}, { toast: false }, ) activeModuleIds.value = data.modules ?? [] loaded.value = true } catch { // Swallow volontaire aligne sur useSidebar : un echec reseau ne // doit pas bloquer le rendu, l'app affichera juste sans la // granularite module (selector masque par defaut). activeModuleIds.value = [] loaded.value = true } } function isModuleActive(id: string): boolean { return activeModuleIds.value.includes(id) } function resetModules() { activeModuleIds.value = [] loaded.value = false } return { activeModuleIds, loaded, loadModules, isModuleActive, resetModules, } }