'use client' import { useEffect, useState } from 'react' import { usePathname } from 'next/navigation' import { authFetch, clearToken, getApiBase, getToken } from '../lib/auth' export default function HeaderActions() { const [signedIn, setSignedIn] = useState(false) const [role, setRole] = useState(null) const [showRequestsNav, setShowRequestsNav] = useState(true) const pathname = usePathname() useEffect(() => { const token = getToken() setSignedIn(Boolean(token)) if (!token) { setShowRequestsNav(true) return } const load = async () => { try { const baseUrl = getApiBase() const [response, siteResponse] = await Promise.all([ authFetch(`${baseUrl}/auth/me`), fetch(`${baseUrl}/site/public`).catch(() => null), ]) if (!response.ok) { clearToken() setSignedIn(false) setRole(null) return } const data = await response.json() setRole(data?.role ?? null) if (siteResponse?.ok) { const siteData = await siteResponse.json() setShowRequestsNav(siteData?.navigation?.showRequests !== false) } else { setShowRequestsNav(true) } } catch (err) { console.error(err) setShowRequestsNav(true) } } void load() }, []) if (!signedIn) { return null } const roleItems = role === null ? [] : role === 'admin' ? [ { href: '/admin', label: 'Config', match: (path: string) => path.startsWith('/admin'), }, ] : [ { href: '/profile', label: 'Profile', match: (path: string) => path.startsWith('/profile') && !path.startsWith('/profile/invites'), }, { href: '/profile/invites', label: 'Invites', match: (path: string) => path.startsWith('/profile/invites'), }, ] const commonItems = [ { href: '/', label: 'Health', match: (path: string) => path === '/' }, ...(showRequestsNav ? [ { href: '/portal/requests', label: 'Requests', match: (path: string) => path === '/portal/requests' || path.startsWith('/requests/'), }, ] : []), { href: '/portal/issues', label: 'Issues', match: (path: string) => path === '/portal/issues' || path === '/admin/issues', }, ] const items = [ ...commonItems, ...roleItems, ] return ( ) }