Shared layout, tabs, and sidebar timer; user onboarding and registration polish; settings danger zone and data export; chart and tRPC perf fixes; migrations for onboarding and dropped appearance columns. Co-authored-by: Cursor <cursoragent@cursor.com>
73 lines
1.8 KiB
TypeScript
73 lines
1.8 KiB
TypeScript
import {
|
|
Settings,
|
|
LayoutDashboard,
|
|
Users,
|
|
FileText,
|
|
Receipt,
|
|
BarChart2,
|
|
Shield,
|
|
RefreshCw,
|
|
Clock,
|
|
} from "lucide-react";
|
|
|
|
export interface NavLink {
|
|
name: string;
|
|
href: string;
|
|
icon: React.ComponentType<{ className?: string }>;
|
|
}
|
|
|
|
export interface NavSection {
|
|
title: string;
|
|
links: NavLink[];
|
|
}
|
|
|
|
export function isNavLinkActive(pathname: string, href: string): boolean {
|
|
if (href === "/dashboard/entities") {
|
|
return (
|
|
pathname === href ||
|
|
pathname.startsWith("/dashboard/clients") ||
|
|
pathname.startsWith("/dashboard/businesses")
|
|
);
|
|
}
|
|
return pathname === href;
|
|
}
|
|
|
|
const ADMIN_ONLY_HREFS = new Set(["/dashboard/administration"]);
|
|
|
|
export function getNavigationForUser(isAdmin: boolean): NavSection[] {
|
|
return navigationConfig
|
|
.map((section) => ({
|
|
...section,
|
|
links: section.links.filter(
|
|
(link) => isAdmin || !ADMIN_ONLY_HREFS.has(link.href),
|
|
),
|
|
}))
|
|
.filter((section) => section.links.length > 0);
|
|
}
|
|
|
|
export const navigationConfig: NavSection[] = [
|
|
{
|
|
title: "Main",
|
|
links: [
|
|
{ name: "Dashboard", href: "/dashboard", icon: LayoutDashboard },
|
|
{ name: "Time clock", href: "/dashboard/time-clock", icon: Clock },
|
|
{ name: "Entities", href: "/dashboard/entities", icon: Users },
|
|
{ name: "Invoices", href: "/dashboard/invoices", icon: FileText },
|
|
{ name: "Recurring", href: "/dashboard/invoices/recurring", icon: RefreshCw },
|
|
{ name: "Expenses", href: "/dashboard/expenses", icon: Receipt },
|
|
{ name: "Reports", href: "/dashboard/reports", icon: BarChart2 },
|
|
],
|
|
},
|
|
{
|
|
title: "Account",
|
|
links: [
|
|
{ name: "Settings", href: "/dashboard/settings", icon: Settings },
|
|
{
|
|
name: "Administration",
|
|
href: "/dashboard/administration",
|
|
icon: Shield,
|
|
},
|
|
],
|
|
},
|
|
];
|