import { getMemberToken, getApiBaseUrl } from '../../_lib/api'; import { DirectorySearch } from './DirectorySearch'; import Link from 'next/link'; interface DirectoryMember { id: string; displayName: string; avatar: string | null; hometown: string | null; currentLocation: string | null; interests: string[]; } interface DirectoryData { total: number; members: DirectoryMember[]; interests: Array<{ name: string; count: number }>; } async function fetchDirectory(token: string, q?: string, interest?: string): Promise { const params = new URLSearchParams(); if (q) params.set('q', q); if (interest) params.set('interest', interest); const res = await fetch(`${getApiBaseUrl()}/my/directory${params.toString() ? `?${params.toString()}` : ''}`, { headers: { Authorization: `Bearer ${token}` }, cache: 'no-store', }).catch(() => null); if (!res || !res.ok) return null; return (await res.json()) as DirectoryData; } function initials(name: string): string { return name.split(/\s+/).filter(Boolean).slice(0, 2).map((p) => p.charAt(0).toUpperCase()).join('') || '?'; } export default async function DirectoryPage({ searchParams, }: { searchParams: Promise<{ q?: string; interest?: string }>; }) { const token = await getMemberToken(); if (!token) return null; const { q, interest } = await searchParams; const data = await fetchDirectory(token, q, interest); return (

Member directory

← Dashboard
{!data || data.members.length === 0 ? (

No members found.

{(q || interest) &&

Try clearing your search or filters.

}
) : (
{data.members.map((m) => (
{initials(m.displayName)}

{m.displayName}

{(m.hometown || m.currentLocation) && (

{[m.hometown, m.currentLocation].filter(Boolean).join(' · ')}

)} {m.interests.length > 0 && (
{m.interests.slice(0, 3).map((i) => ( {i} ))} {m.interests.length > 3 && ( +{m.interests.length - 3} )}
)}
))}
)}
); }