Files
Coltura/frontend/shared/composables/useModules.ts
tristan 6cf5ef4cfc
All checks were successful
Auto Tag Develop / tag (push) Successful in 6s
Module sites (#8)
| Numéro du ticket | Titre du ticket |
|------------------|-----------------|
|                  |                 |

## Description de la PR

## Modification du .env

## Check list

- [x] Pas de régression
- [x] TU/TI/TF rédigée
- [x] TU/TI/TF OK
- [ ] CHANGELOG modifié

Co-authored-by: Matthieu <mtholot19@gmail.com>
Reviewed-on: #8
Co-authored-by: tristan <tristan@yuno.malio.fr>
Co-committed-by: tristan <tristan@yuno.malio.fr>
2026-04-20 15:31:58 +00:00

50 lines
1.3 KiB
TypeScript

/**
* 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<string[]>([])
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,
}
}