// App shell — sidebar, topbar, tweaks panel
const NAV_BY_ROLE = {
reception: [
{ section: 'Asosiy', items: [
{ id: 'dashboard', label: "Boshqaruv paneli", icon: 'house' },
{ id: 'new-visit', label: "Yangi rentgen", icon: 'plus-circle', highlight: true },
{ id: 'patients', label: 'Bemorlar', icon: 'users-three' },
]},
{ section: 'Kassa', items: [
{ id: 'kassa', label: 'Yozuvlar', icon: 'list-bullets' },
{ id: 'debts', label: 'Qarzlar', icon: 'warning' },
]},
],
doctor: [
{ section: 'Asosiy', items: [
{ id: 'doctor-dashboard', label: "Boshqaruv paneli", icon: 'house' },
{ id: 'doctor-patients', label: 'Bemorlarim', icon: 'users-three' },
]},
],
admin: [
{ section: 'Asosiy', items: [
{ id: 'dashboard', label: "Boshqaruv paneli", icon: 'house' },
{ id: 'new-visit', label: "Yangi rentgen", icon: 'plus-circle' },
{ id: 'patients', label: 'Bemorlar', icon: 'users-three' },
]},
{ section: 'Kassa', items: [
{ id: 'kassa', label: 'Yozuvlar', icon: 'list-bullets' },
{ id: 'debts', label: 'Qarzlar', icon: 'warning' },
{ id: 'reports', label: 'Hisobotlar', icon: 'chart-line-up' },
]},
{ section: 'Boshqaruv', items: [
{ id: 'services', label: 'Xizmatlar', icon: 'package' },
{ id: 'doctors', label: 'Shifokorlar', icon: 'stethoscope' },
]},
],
super_admin: [
{ section: 'Asosiy', items: [
{ id: 'dashboard', label: "Boshqaruv paneli", icon: 'house' },
{ id: 'new-visit', label: "Yangi rentgen", icon: 'plus-circle' },
{ id: 'patients', label: 'Bemorlar', icon: 'users-three' },
]},
{ section: 'Kassa', items: [
{ id: 'kassa', label: 'Yozuvlar', icon: 'list-bullets' },
{ id: 'debts', label: 'Qarzlar', icon: 'warning' },
{ id: 'reports', label: 'Hisobotlar', icon: 'chart-line-up' },
]},
{ section: 'Boshqaruv', items: [
{ id: 'services', label: 'Xizmatlar', icon: 'package' },
{ id: 'doctors', label: 'Shifokorlar', icon: 'stethoscope' },
{ id: 'users', label: 'Foydalanuvchilar', icon: 'user-gear' },
{ id: 'audit', label: 'Audit log', icon: 'shield-check' },
{ id: 'settings', label: 'Sozlamalar', icon: 'gear' },
]},
],
};
function Sidebar({ role, page, onNav, collapsed, activeUser }) {
const sections = NAV_BY_ROLE[role] || NAV_BY_ROLE.reception;
return (
);
}
function Topbar({ title, breadcrumbs, role, me, onNav, onToggleSidebar, theme, onToggleTheme, onShowNotif, onShowTweaks }) {
const [showMenu, setShowMenu] = useState(false);
const wrapRef = useRef(null);
useEffect(() => {
const h = (e) => { if (wrapRef.current && !wrapRef.current.contains(e.target)) setShowMenu(false); };
document.addEventListener('mousedown', h);
return () => document.removeEventListener('mousedown', h);
}, []);
const fullName = (me && (me.full_name || me.name)) || '—';
return (
Hozircha bildirishnoma yo'q
{n.title}
{n.message}
{window.uzDateTime ? window.uzDateTime(n.created_at) : n.created_at}{sub}
}