"use client";
import { useState, useEffect } from "react";
import Link from "next/link";
import { usePathname } from "next/navigation";
import {
LayoutDashboard,
Activity,
Calendar,
Kanban,
FolderKanban,
FileText,
Wrench,
Target,
Menu,
ChevronLeft,
ChevronRight,
LogOut,
} from "lucide-react";
import { useRouter } from "next/navigation";
import { Button } from "@/components/ui/button";
import { Sheet, SheetContent, SheetTrigger, SheetTitle } from "@/components/ui/sheet";
import { cn } from "@/lib/utils";
import { Breadcrumbs } from "./breadcrumbs";
import { QuickSearch } from "./quick-search";
const navItems = [
{ name: "Dashboard", href: "/", icon: LayoutDashboard },
{ name: "Activity", href: "/activity", icon: Activity },
{ name: "Calendar", href: "/calendar", icon: Calendar },
{ name: "Tasks", href: "/tasks", icon: Kanban },
{ name: "Projects", href: "/projects", icon: FolderKanban },
{ name: "Documents", href: "/documents", icon: FileText },
{ name: "Tools", href: "/tools", icon: Wrench },
{ name: "Mission", href: "/mission", icon: Target },
];
const MISSION_SHORT = "Build an iOS empire → retire on our terms → travel with Heidi → 53 is just the start";
function LogoutButton({ collapsed }: { collapsed: boolean }) {
const router = useRouter();
const [isLoggingOut, setIsLoggingOut] = useState(false);
const handleLogout = async () => {
setIsLoggingOut(true);
try {
await fetch("/api/auth/logout", { method: "POST" });
router.push("/login");
} catch {
// Force redirect even if API call fails
router.push("/login");
}
};
return (
);
}
function SidebarContent({ pathname, collapsed = false }: { pathname: string; collapsed?: boolean }) {
return (
MC
{!collapsed &&
Mission Control}
{/* Mission Statement - hide when collapsed */}
{!collapsed && (
)}
);
}
function MobileSidebar({ pathname }: { pathname: string }) {
const [open, setOpen] = useState(false);
return (
Navigation Menu
);
}
interface DashboardLayoutProps {
children: React.ReactNode;
showBreadcrumbs?: boolean;
}
export function DashboardLayout({ children, showBreadcrumbs = true }: DashboardLayoutProps) {
const [collapsed, setCollapsed] = useState(false);
const [isMobile, setIsMobile] = useState(false);
const pathname = usePathname();
// Check for mobile on mount and resize
useEffect(() => {
const checkMobile = () => {
setIsMobile(window.innerWidth < 1024);
// Auto-collapse on smaller screens but not mobile
if (window.innerWidth < 1280 && window.innerWidth >= 1024) {
setCollapsed(true);
}
};
checkMobile();
window.addEventListener("resize", checkMobile);
return () => window.removeEventListener("resize", checkMobile);
}, []);
return (
{/* Desktop Sidebar - Collapsible */}
{/* Collapse Toggle Button */}
{/* Top Bar - Mobile header with search */}
{/* Main Content */}
{/* Desktop Search Bar */}
{/* Breadcrumbs */}
{showBreadcrumbs &&
}
{/* Page Content */}
{children}
);
}
// Note: Use DashboardLayout for all pages - Sidebar export removed to prevent duplicate menu icons