import { Link, useLocation, useNavigate } from "@tanstack/react-router"; import { useAuth } from "@/lib/auth"; import { Button } from "@/components/ui/button"; import { Briefcase, Users, FileText, Receipt, ShieldCheck, LogOut, Scale, LayoutDashboard, Calendar as CalendarIcon, CheckSquare, MessageSquare, Activity, DollarSign, FolderOpen, Files as FilesIcon, Settings as SettingsIcon, ClipboardList, UserPlus } from "lucide-react"; import { cn } from "@/lib/utils"; import type { ReactNode } from "react"; interface NavItem { to: string; label: string; icon: typeof Briefcase; adminOnly?: boolean; } const NAV: NavItem[] = [ { to: "/", label: "Dashboard", icon: LayoutDashboard }, { to: "/calendar", label: "Calendar", icon: CalendarIcon }, { to: "/clients", label: "Clients", icon: Users }, { to: "/contacts", label: "Contacts", icon: UserPlus }, { to: "/cases", label: "Cases", icon: Briefcase }, { to: "/tasks", label: "Tasks", icon: CheckSquare }, { to: "/messages", label: "Messages", icon: MessageSquare }, { to: "/status", label: "Status Updates", icon: Activity }, { to: "/collections", label: "Collections", icon: DollarSign }, { to: "/documents", label: "Documents", icon: FolderOpen }, { to: "/files", label: "Files", icon: FilesIcon }, { to: "/forms", label: "Forms & Letters", icon: ClipboardList }, { to: "/invoices", label: "Invoices", icon: Receipt }, { to: "/settings", label: "Settings", icon: SettingsIcon }, { to: "/admin/users", label: "Users", icon: ShieldCheck, adminOnly: true }, ]; void FileText; export function AppShell({ children }: { children: ReactNode }) { const { user, signOut, isAdmin, roles } = useAuth(); const location = useLocation(); const navigate = useNavigate(); const handleSignOut = async () => { await signOut(); navigate({ to: "/login" }); }; return (
{/* Sidebar */} {/* Mobile top bar */}
Counsel
{NAV.filter((n) => !n.adminOnly || isAdmin).map((item) => { const active = item.to === "/" ? location.pathname === "/" : location.pathname.startsWith(item.to); return ( {item.label} ); })}
{children}
); } export function PageHeader({ title, description, actions, }: { title: string; description?: string; actions?: ReactNode; }) { return (

{title}

{description &&

{description}

}
{actions &&
{actions}
}
); } export function PageContainer({ children }: { children: ReactNode }) { return
{children}
; }