- Breadcrumb component: reusable nav with items array (label+href)
- DeadlineTrafficLights: buttons → Links to /fristen?status={filter}
- CaseOverviewGrid: static metrics → clickable Links to /cases?status={filter}
- UpcomingTimeline: items → clickable Links to /fristen/{id} or /termine/{id}
with case number links and hover chevron
- QuickActions: swap CalDAV Sync for "Neuer Termin" → /termine/neu,
fix "Frist eintragen" → /fristen/neu
- AISummaryCard: add RefreshCw button with spinning animation
- RecentActivityList: new component showing recent case events
- DeadlineList: accept initialStatus prop, add this_week/ok filters
- fristen/page.tsx: read searchParams.status for initial filter
- Add breadcrumbs to dashboard, fristen, cases, termine pages
- Add RecentActivity type, update DashboardData type
39 lines
1.0 KiB
TypeScript
39 lines
1.0 KiB
TypeScript
import Link from "next/link";
|
|
import { ChevronRight } from "lucide-react";
|
|
|
|
export interface BreadcrumbItem {
|
|
label: string;
|
|
href?: string;
|
|
}
|
|
|
|
interface Props {
|
|
items: BreadcrumbItem[];
|
|
}
|
|
|
|
export function Breadcrumb({ items }: Props) {
|
|
return (
|
|
<nav aria-label="Breadcrumb" className="mb-4 flex items-center gap-1 text-sm text-neutral-500">
|
|
{items.map((item, i) => {
|
|
const isLast = i === items.length - 1;
|
|
return (
|
|
<span key={i} className="flex items-center gap-1">
|
|
{i > 0 && <ChevronRight className="h-3.5 w-3.5 text-neutral-300" />}
|
|
{isLast || !item.href ? (
|
|
<span className={isLast ? "font-medium text-neutral-900" : ""}>
|
|
{item.label}
|
|
</span>
|
|
) : (
|
|
<Link
|
|
href={item.href}
|
|
className="transition-colors hover:text-neutral-900"
|
|
>
|
|
{item.label}
|
|
</Link>
|
|
)}
|
|
</span>
|
|
);
|
|
})}
|
|
</nav>
|
|
);
|
|
}
|