From 51de96c7973bba3fe3ac3d7f2158a3e421f51206 Mon Sep 17 00:00:00 2001 From: Matthieu Date: Fri, 19 Jun 2026 15:05:35 +0200 Subject: [PATCH] feat(front) : add shared useModules/useSidebar composables and sidebar types --- frontend/shared/composables/useModules.ts | 22 ++++++++++++++++ frontend/shared/composables/useSidebar.ts | 31 +++++++++++++++++++++++ frontend/shared/types/sidebar.ts | 11 ++++++++ 3 files changed, 64 insertions(+) create mode 100644 frontend/shared/composables/useModules.ts create mode 100644 frontend/shared/composables/useSidebar.ts create mode 100644 frontend/shared/types/sidebar.ts diff --git a/frontend/shared/composables/useModules.ts b/frontend/shared/composables/useModules.ts new file mode 100644 index 0000000..873c9cb --- /dev/null +++ b/frontend/shared/composables/useModules.ts @@ -0,0 +1,22 @@ +const activeModuleIds = ref([]) +const loaded = ref(false) + +export function useModules() { + async function loadModules(): Promise { + const api = useApi() + const data = await api.get<{ modules: string[] }>('/modules', {}, { toast: false }) + activeModuleIds.value = data.modules ?? [] + loaded.value = true + } + + function isModuleActive(id: string): boolean { + return activeModuleIds.value.includes(id) + } + + function resetModules(): void { + activeModuleIds.value = [] + loaded.value = false + } + + return { activeModuleIds, loaded, loadModules, isModuleActive, resetModules } +} diff --git a/frontend/shared/composables/useSidebar.ts b/frontend/shared/composables/useSidebar.ts new file mode 100644 index 0000000..5004182 --- /dev/null +++ b/frontend/shared/composables/useSidebar.ts @@ -0,0 +1,31 @@ +import type { SidebarSection } from '~/shared/types/sidebar' + +const sections = ref([]) +const disabledRoutes = ref([]) +const loaded = ref(false) + +export function useSidebar() { + async function loadSidebar(): Promise { + const api = useApi() + const data = await api.get<{ sections: SidebarSection[]; disabledRoutes: string[] }>( + '/sidebar', {}, { toast: false }, + ) + sections.value = data.sections ?? [] + disabledRoutes.value = data.disabledRoutes ?? [] + loaded.value = true + } + + function isRouteDisabled(path: string): boolean { + return disabledRoutes.value.some( + (disabled) => path === disabled || path.startsWith(disabled + '/'), + ) + } + + function resetSidebar(): void { + sections.value = [] + disabledRoutes.value = [] + loaded.value = false + } + + return { sections, disabledRoutes, loaded, loadSidebar, isRouteDisabled, resetSidebar } +} diff --git a/frontend/shared/types/sidebar.ts b/frontend/shared/types/sidebar.ts new file mode 100644 index 0000000..0f4057f --- /dev/null +++ b/frontend/shared/types/sidebar.ts @@ -0,0 +1,11 @@ +export type SidebarItem = { + label: string + to: string + icon: string +} + +export type SidebarSection = { + label: string + icon: string + items: SidebarItem[] +}