CityTrack / Frontend /components /DashboardHeader.tsx
0xarchit's picture
frontend v2 refactor and enhancements
c2bc4c7
"use client";
import { Search, Bell, Menu, User } from "lucide-react";
interface HeaderProps {
setMobileOpen: (open: boolean) => void;
toggleSidebar?: () => void;
title?: string;
}
export default function DashboardHeader({
setMobileOpen,
toggleSidebar,
title = "Dashboard",
}: HeaderProps) {
return (
<header className="sticky top-0 z-30 flex h-16 w-full items-center justify-between border-b border-slate-200/60 bg-white/70 backdrop-blur-md px-4 shadow-sm sm:px-6 lg:px-8 transition-all duration-300">
<div className="flex items-center gap-4">
<button
onClick={() => {
setMobileOpen(true);
toggleSidebar?.();
}}
className="rounded-lg p-2 text-slate-500 hover:bg-slate-100/80 hover:text-slate-700 transition-colors"
>
<Menu className="h-6 w-6" />
</button>
<h1 className="text-xl font-black text-slate-900 tracking-tight hidden sm:block">
{title}
</h1>
</div>
<div className="flex items-center gap-4">
<div className="hidden md:flex relative group">
<Search className="absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-slate-400 group-focus-within:text-urban-primary transition-colors" />
<input
type="text"
placeholder="Search issues, workers..."
className="h-10 w-64 rounded-full border border-slate-200 bg-slate-50/60 pl-10 pr-4 text-sm outline-none transition-all placeholder:text-slate-400 focus:border-urban-primary/40 focus:bg-white focus:ring-4 focus:ring-urban-primary/10"
/>
</div>
<button className="relative rounded-full bg-white p-2.5 text-slate-500 shadow-sm ring-1 ring-slate-200 hover:text-urban-primary hover:ring-urban-primary/20 transition-all">
<Bell className="h-5 w-5" />
<span className="absolute top-2 right-2.5 h-2 w-2 rounded-full bg-amber-500 ring-2 ring-white"></span>
</button>
<div className="h-9 w-9 rounded-full bg-urban-primary/10 flex items-center justify-center text-urban-primary font-bold border border-white shadow-sm ring-2 ring-urban-primary/20">
<User className="h-5 w-5" />
</div>
</div>
</header>
);
}