import { redirect } from 'next/navigation'; import { Anchor } from 'lucide-react'; import type { Metadata } from 'next'; import { getPortalSession } from '@/lib/portal/auth'; import { getClientInterests } from '@/lib/services/portal.service'; import { Badge } from '@/components/ui/badge'; export const metadata: Metadata = { title: 'Interests' }; const STAGE_LABELS: Record = { open: 'Open', details_sent: 'Details Sent', in_communication: 'In Communication', visited: 'Visited', signed_eoi_nda: 'EOI / NDA Signed', deposit_10pct: 'Deposit Received', contract: 'Contract Stage', completed: 'Completed', }; const STAGE_COLORS: Record = { open: 'secondary', details_sent: 'secondary', in_communication: 'default', visited: 'default', signed_eoi_nda: 'default', deposit_10pct: 'default', contract: 'default', completed: 'outline', }; export default async function PortalInterestsPage() { const session = await getPortalSession(); if (!session) redirect('/portal/login'); const interests = await getClientInterests(session.clientId, session.portId); return (

Berth Interests

Your berth enquiries and applications

{interests.length === 0 ? (

No interests on file

Contact your port representative to discuss available berths.

) : (
{interests.map((interest) => (
{interest.berthMooringNumber ? ( Berth {interest.berthMooringNumber} ) : ( General Interest )} {interest.berthArea && ( — {interest.berthArea} )}
{interest.leadCategory && (

{interest.leadCategory.replace(/_/g, ' ')}

)}
{interest.dateFirstContact && ( First contact:{' '} {new Date(interest.dateFirstContact).toLocaleDateString('en-US', { year: 'numeric', month: 'short', day: 'numeric', })} )} {interest.eoiStatus && ( EOI: {interest.eoiStatus.replace(/_/g, ' ')} )} {interest.contractStatus && ( Contract: {interest.contractStatus.replace(/_/g, ' ')} )}
{STAGE_LABELS[interest.pipelineStage] ?? interest.pipelineStage}
))}
)}
); }