import { Home, PanelLeft, Folder, Users, User2 } from 'lucide-react'; import { useEffect, useState } from 'react'; import { NavLink, useNavigate, useNavigation } from 'react-router-dom'; import logo from '@/assets/logo.svg'; import { Button } from '@/components/ui/button'; import { Drawer, DrawerContent, DrawerTrigger } from '@/components/ui/drawer'; import { useLogout } from '@/lib/auth'; import { ROLES, useAuthorization } from '@/lib/authorization'; import { cn } from '@/utils/cn'; import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuSeparator, DropdownMenuTrigger, } from '../ui/dropdown'; import { Link } from '../ui/link'; type SideNavigationItem = { name: string; to: string; icon: (props: React.SVGProps) => JSX.Element; }; const Logo = () => { return ( Workflow Bulletproof React ); }; const Progress = () => { const { state, location } = useNavigation(); const [progress, setProgress] = useState(0); useEffect(() => { setProgress(0); }, [location?.pathname]); useEffect(() => { if (state === 'loading') { const timer = setInterval(() => { setProgress((oldProgress) => { if (oldProgress === 100) { clearInterval(timer); return 100; } const newProgress = oldProgress + 10; return newProgress > 100 ? 100 : newProgress; }); }, 300); return () => { clearInterval(timer); }; } }, [state]); if (state !== 'loading') { return null; } return (
); }; export function DashboardLayout({ children }: { children: React.ReactNode }) { const logout = useLogout(); const { checkAccess } = useAuthorization(); const navigate = useNavigate(); const navigation = [ { name: 'Dashboard', to: '.', icon: Home }, { name: 'Discussions', to: './discussions', icon: Folder }, checkAccess({ allowedRoles: [ROLES.ADMIN] }) && { name: 'Users', to: './users', icon: Users, }, ].filter(Boolean) as SideNavigationItem[]; return (
navigate('./profile')} className={cn('block px-4 py-2 text-sm text-gray-700')} > Your Profile logout.mutate({})} > Sign Out
{children}
); }