UNPKG

@adonis-agora/authkit-react

Version:

Frontend ergonomics over AuthKit for AdonisJS + Inertia + React apps: a typed useAuth() hook, role-gating hooks and gating components.

30 lines (29 loc) 1.31 kB
import { usePage } from '@inertiajs/react'; import { useContext, useMemo } from 'react'; import { AuthContext } from './provider.js'; import { hasAllGlobalRoles as hasAllGlobalRolesPure, hasAnyGlobalRole as hasAnyGlobalRolePure, hasGlobalRole as hasGlobalRolePure, } from './roles.js'; const UNAUTHENTICATED = { user: null, globalRoles: [], }; export function useAuth() { const contextValue = useContext(AuthContext); const pageProps = usePage().props; const resolved = contextValue ?? pageProps?.authkit; if (!resolved && typeof process !== 'undefined' && process.env.NODE_ENV !== 'production') { console.warn('[authkit] useAuth(): no <AuthProvider> nor shared-prop `authkit` found — returning unauthenticated state.'); } const authkit = resolved ?? UNAUTHENTICATED; return useMemo(() => { const user = authkit.user ?? null; const globalRoles = authkit.globalRoles ?? user?.globalRoles ?? []; return { user, isAuthenticated: user !== null, globalRoles, hasGlobalRole: (role) => hasGlobalRolePure(user, role), hasAnyGlobalRole: (roles) => hasAnyGlobalRolePure(user, roles), hasAllGlobalRoles: (roles) => hasAllGlobalRolesPure(user, roles), }; }, [authkit]); }