'use client'; import Link from 'next/link'; import { usePathname } from 'next/navigation'; import { Fragment } from 'react'; import { ChevronRight } from 'lucide-react'; import { Breadcrumb, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator, } from '@/components/ui/breadcrumb'; import { usePortContext } from '@/providers/port-provider'; // Human-readable labels for route segments const SEGMENT_LABELS: Record = { dashboard: 'Dashboard', clients: 'Clients', interests: 'Interests', berths: 'Berths', documents: 'Documents', files: 'Files', expenses: 'Expenses', invoices: 'Invoices', email: 'Email', reminders: 'Reminders', settings: 'Settings', admin: 'Administration', reports: 'Reports', new: 'New', edit: 'Edit', profile: 'Profile', }; function formatSegment(segment: string): string { return SEGMENT_LABELS[segment] ?? segment.replace(/-/g, ' ').replace(/\b\w/g, (c) => c.toUpperCase()); } export function Breadcrumbs() { const pathname = usePathname(); const { currentPort, currentPortSlug } = usePortContext(); // Split pathname and filter empty segments const rawSegments = pathname.split('/').filter(Boolean); // Remove the portSlug segment from display const segments = currentPortSlug ? rawSegments.filter((seg) => seg !== currentPortSlug) : rawSegments; if (segments.length === 0) { return ( {currentPort?.name ?? 'Port Nimara CRM'} ); } // Build href for each segment const crumbs = segments.map((segment, index) => { const segmentsUpToHere = rawSegments.slice(0, rawSegments.indexOf(segment, index) + 1); const href = '/' + segmentsUpToHere.join('/'); const label = formatSegment(segment); const isLast = index === segments.length - 1; return { label, href, isLast }; }); return ( {currentPort && ( <> {currentPort.name} {crumbs.length > 0 && ( )} )} {crumbs.map((crumb, _index) => ( {crumb.isLast ? ( {crumb.label} ) : ( {crumb.label} )} {!crumb.isLast && ( )} ))} ); }