nusaibah0110's picture
Add live video feed, Swede Score assessment, and UI improvements
3454dc0
import React, { useState } from 'react';
import { Home, User, Camera, Edit2, Info, FileText, Settings, ChevronLeft, ChevronRight } from 'lucide-react';
type MenuKey = 'home' | 'patientinfo' | 'capture' | 'annotation' | 'compare' | 'report' | 'settings';
type Props = {
current: MenuKey;
onNavigate: (key: MenuKey) => void;
};
export function Sidebar({ current, onNavigate }: Props) {
const [collapsed, setCollapsed] = useState(true);
const items: { key: MenuKey; label: string; icon: React.ReactNode }[] = [
{ key: 'home', label: 'Home', icon: <Home className="w-5 h-5" /> },
{ key: 'patientinfo', label: 'Patients', icon: <User className="w-5 h-5" /> },
{ key: 'capture', label: 'Capture', icon: <Camera className="w-5 h-5" /> },
{ key: 'annotation', label: 'Annotate', icon: <Edit2 className="w-5 h-5" /> },
{ key: 'compare', label: 'Compare', icon: <img src="/arrow.png" alt="Compare" className="w-6 h-6 brightness-0 opacity-70" /> },
{ key: 'report', label: 'Report', icon: <FileText className="w-5 h-5" /> }
];
return (
<aside className={`bg-white border-r border-gray-100 transition-all flex-shrink-0 ${collapsed ? 'w-16 md:w-20' : 'w-56 md:w-64'}`}>
<div className="flex flex-col h-full">
<div className="px-2 md:px-3 py-3 md:py-4 flex items-center justify-between">
{!collapsed && <div className="font-bold text-sm md:text-lg text-[#0A2540]">Menu</div>}
<button onClick={() => setCollapsed(c => !c)} className="p-1 rounded hover:bg-gray-100">
{collapsed ? <ChevronRight className="w-4 h-4 md:w-5 md:h-5" /> : <ChevronLeft className="w-4 h-4 md:w-5 md:h-5" />}
</button>
</div>
<nav className="flex-1 px-1 md:px-2 py-2 md:py-4 space-y-0.5 md:space-y-1">
{items.map(item => {
const active = current === item.key;
return (
<button key={item.key} onClick={() => onNavigate(item.key)} className={`w-full flex items-center gap-2 md:gap-3 px-2 md:px-3 py-1.5 md:py-2 rounded-lg text-left hover:bg-gray-50 transition-colors ${active ? 'bg-[#E0F2F1] border-l-4 border-[#05998c]' : ''}`}>
<div className={`text-gray-600 flex-shrink-0 ${active ? 'text-[#0A2540]' : ''}`}>{item.icon}</div>
{!collapsed && <span className={`text-xs md:text-sm truncate ${active ? 'text-[#0A2540] font-semibold' : 'text-gray-700'}`}>{item.label}</span>}
</button>
);
})}
</nav>
<div className="px-1 md:px-2 py-2 md:py-4 border-t border-gray-100">
<div className="px-0.5 md:px-1">
<button onClick={() => onNavigate('settings')} className={`w-full flex items-center gap-2 md:gap-3 px-2 md:px-3 py-1.5 md:py-2 rounded-lg hover:bg-gray-50 transition-colors ${current === 'settings' ? 'bg-[#E0F2F1] border-l-4 border-[#05998c]' : ''}`}>
<Settings className="w-4 h-4 md:w-5 md:h-5 text-gray-600 flex-shrink-0" />
{!collapsed && <span className="text-xs md:text-sm text-gray-700 truncate">Settings</span>}
</button>
</div>
</div>
</div>
</aside>
);
}
export default Sidebar;