'use client' import { usePathname } from 'next/navigation' import { useEffect, useState, type ReactNode } from 'react' import { authFetch, getApiBase, getToken } from '../lib/auth' import { canAccess, featureForPath, type FeatureAccess } from '../lib/features' export function useFeatureUser() { const pathname = usePathname() const [state, setState] = useState<{ path: string; user: { role?: string; features?: FeatureAccess; invite_management_enabled?: boolean } | null }>({ path: '', user: null }) useEffect(() => { let active = true const load = async () => { if (!getToken()) { if (active) setState({ path: pathname, user: null }); return } try { const response = await authFetch(`${getApiBase()}/auth/me`) const user = response.ok ? await response.json() : null if (active) setState({ path: pathname, user }) } catch { if (active) setState({ path: pathname, user: null }) } } void load() window.addEventListener('focus', load) return () => { active = false; window.removeEventListener('focus', load) } }, [pathname]) return { user: state.user, ready: state.path === pathname } } export default function FeatureGate({ children }: { children: ReactNode }) { const pathname = usePathname() const { user, ready } = useFeatureUser() const feature = featureForPath(pathname) if (!feature) return children if (!ready) return
Loading account access...
if (!getToken()) return children if (!canAccess(user, feature)) return

Feature unavailable

Your account does not have access to this feature. Ask an administrator if you need it enabled.

Go to my profile
return children }