import { useParams } from 'common' import { ChevronLeft } from 'lucide-react' import Link from 'next/link' import { Fragment, ReactNode } from 'react' import { cn } from 'ui' import { Breadcrumb, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage as BreadcrumbPageItem, BreadcrumbSeparator, } from 'ui/src/components/shadcn/ui/breadcrumb' import { ScaffoldDescription, ScaffoldTitle } from '../Scaffold' interface PageHeaderProps { title?: string | ReactNode subtitle?: string | ReactNode icon?: ReactNode breadcrumbs?: Array<{ label?: string href?: string element?: ReactNode }> primaryActions?: ReactNode secondaryActions?: ReactNode className?: string isCompact?: boolean } export const PageHeader = ({ title, subtitle, icon, breadcrumbs = [], primaryActions, secondaryActions, className, isCompact = false, }: PageHeaderProps) => { const { ref } = useParams() const displayBreadcrumbs = isCompact && title ? [...breadcrumbs, { label: title }] : breadcrumbs return (
{(displayBreadcrumbs.length > 0 || (isCompact && (title || primaryActions || secondaryActions))) && (
{breadcrumbs.length > 0 ? ( {breadcrumbs.map((item, index) => ( {item.element ? ( item.element ) : item.href ? ( {breadcrumbs.length === 1 && !isCompact && ( )} {item.label} ) : ( {breadcrumbs.length === 1 && ( )} {item.label} )} {index < breadcrumbs.length - 1 && } ))} {isCompact && title && ( <> {title} )} ) : isCompact ? (
{title}
) : null}
{isCompact && (
{secondaryActions && (
{secondaryActions}
)} {primaryActions &&
{primaryActions}
}
)}
)} {!isCompact && (
{icon &&
{icon}
}
{title && (typeof title === 'string' ? {title} : title)} {subtitle && (typeof subtitle === 'string' ? ( {subtitle} ) : ( subtitle ))}
{secondaryActions &&
{secondaryActions}
} {primaryActions &&
{primaryActions}
}
)}
) }