import type { FormSubmitEvent } from "@nuxt/ui"; export function useAuth() { const { loggedIn, session } = useUserSession(); const isLoggedIn = loggedIn; const isSwitchedTo = computed(() => Boolean(session.value?.isSwitchedTo)); const hasRole = (role: string) => session.value?.user?.roles?.includes(role) || false; const isAdmin = computed(() => hasRole("administrator")); return { isLoggedIn, isSwitchedTo, hasRole, isAdmin }; } export function useAuthActions() { const { fetch: refreshUserSession } = useUserSession(); const redirect = useRoute().query.redirect as string || "/"; const router = useRouter(); const toast = useToast(); // Login const loginFields = [ { name: "email", type: "text" as const, label: "Courriel", placeholder: "Entrez votre courriel", required: true, }, { name: "password", label: "Mot de passe", type: "password" as const, placeholder: "Entrez votre mot de passe", required: true, }, ]; async function login({ data: args }: FormSubmitEvent) { try { const { data, errors } = await useGraphqlMutation("login", args); if (errors.length || !data.login) { console.error(errors); throw new Error("Une erreur est survenue."); } await router.push(redirect); await refreshUserSession(); } catch (error) { const message = error instanceof Error ? error.message : "Une erreur est survenue."; toast.add({ title: "Échec de la connexion", description: message, color: "error" }); } } // Logout async function logout() { try { const result = await $fetch("/api/logout", { method: "POST" }); if (!result.success) { throw new Error("Une erreur est survenue."); } await router.push(redirect); await refreshUserSession(); } catch (error) { const message = error instanceof Error ? error.message : "Une erreur est survenue."; toast.add({ title: "Échec de la déconnexion", description: message, color: "error" }); } } // Switch to async function switchTo(userId: string | number) { try { const { data, errors } = await useGraphqlMutation("switchTo", { userId }); if (errors.length || !data.switchTo) { throw new Error("Une erreur est survenue"); } await refreshUserSession(); } catch (error) { const message = error instanceof Error ? error.message : "Une erreur est survenue"; toast.add({ title: "Échec du changement d'utilisateur", description: message, color: "error" }); } } // Switch back async function switchBack() { try { const result = await $fetch("/api/switch-back", { method: "POST" }); if (!result.success) { throw new Error("Une erreur est survenue."); } await refreshUserSession(); } catch (error) { const message = error instanceof Error ? error.message : "Une erreur est survenue"; toast.add({ title: "Échec du changement d'utilisateur", description: message, color: "error" }); } } return { loginFields, login, logout, switchTo, switchBack }; }