'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 unavailableYour account does not have access to this feature. Ask an administrator if you need it enabled.Go to my profile return children }
Your account does not have access to this feature. Ask an administrator if you need it enabled.