"use client" import { useCallback, useEffect, useState } from "react" import Link from "next/link" import { useRouter } from "next/navigation" import { useTheme } from "next-themes" import { BellIcon, LogOutIcon, MoonIcon, SearchIcon, SunIcon, UserIcon, } from "lucide-react" import type { UserInfo } from "@/base/types/navigation" import { useAuthStore } from "@/shared/stores/auth-store" import { cn } from "@/shared/lib/utils" import { Avatar, AvatarFallback, AvatarImage } from "@/shared/components/ui/avatar" import { Button } from "@/shared/components/ui/button" import { SidebarTrigger } from "@/shared/components/ui/sidebar" import { CommandDialog, Command, CommandInput, CommandList, CommandEmpty, CommandGroup, CommandItem, } from "@/shared/components/ui/command" import { DropdownMenu, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuTrigger, } from "@/shared/components/ui/dropdown-menu" import { Separator } from "@/shared/components/ui/separator" type DashboardHeaderProps = { user?: UserInfo actions?: React.ReactNode className?: string } export function DashboardHeader({ actions, className }: DashboardHeaderProps) { const { resolvedTheme, setTheme } = useTheme() const [searchOpen, setSearchOpen] = useState(false) const { logout, user } = useAuthStore((s) => s) const router = useRouter() const handleLogout = useCallback(async () => { await logout() router.push("/login") }, [logout, router]) useEffect(() => { function onKeyDown(e: KeyboardEvent) { if ((e.metaKey || e.ctrlKey) && e.key === "k") { e.preventDefault() setSearchOpen((prev) => !prev) } } window.addEventListener("keydown", onKeyDown) return () => window.removeEventListener("keydown", onKeyDown) }, []) const toggleTheme = useCallback(() => { setTheme(resolvedTheme === "dark" ? "light" : "dark") }, [resolvedTheme, setTheme]) return (
{/* Sidebar toggle — mobile: hamburger, desktop: collapse */} {/* Left side — default actions */}
{/* User dropdown */} {/* {user && ( */} {/* User info header */}
{user?.avatar && } {user?.initials ?? user?.name.charAt(0).toUpperCase()}
{user?.name} {user?.email && ( {user?.email} )} {user?.role && ( {user?.role} )}
Profile Logout
{/* )} */} {/* Search trigger */} {/* Mobile search icon */} {/* Theme toggle */} {/* Notifications */}
{/* Search command dialog */} No results found. Dashboard Job Cards Customers {/* Right side — custom actions */} {actions && (
{actions}
)}
) }