MCPcopy Create free account
hub / github.com/GreatStackDev/project-management / Sidebar

Function Sidebar

src/components/Sidebar.jsx:8–55  ·  view source on GitHub ↗
({ isSidebarOpen, setIsSidebarOpen })

Source from the content-addressed store, hash-verified

6import { FolderOpenIcon, LayoutDashboardIcon, SettingsIcon, UsersIcon } from 'lucide-react'
7
8const Sidebar = ({ isSidebarOpen, setIsSidebarOpen }) => {
9
10 const menuItems = [
11 { name: 'Dashboard', href: '/', icon: LayoutDashboardIcon },
12 { name: 'Projects', href: '/projects', icon: FolderOpenIcon },
13 { name: 'Team', href: '/team', icon: UsersIcon },
14 ]
15
16 const sidebarRef = useRef(null);
17
18 useEffect(() => {
19 function handleClickOutside(event) {
20 if (sidebarRef.current && !sidebarRef.current.contains(event.target)) {
21 setIsSidebarOpen(false);
22 }
23 }
24 document.addEventListener("mousedown", handleClickOutside);
25 return () => document.removeEventListener("mousedown", handleClickOutside);
26 }, [setIsSidebarOpen]);
27
28 return (
29 <div ref={sidebarRef} className={`z-10 bg-white dark:bg-zinc-900 min-w-68 flex flex-col h-screen border-r border-gray-200 dark:border-zinc-800 max-sm:absolute transition-all ${isSidebarOpen ? 'left-0' : '-left-full'} `} >
30 <WorkspaceDropdown />
31 <hr className='border-gray-200 dark:border-zinc-800' />
32 <div className='flex-1 overflow-y-scroll no-scrollbar flex flex-col'>
33 <div>
34 <div className='p-4'>
35 {menuItems.map((item) => (
36 <NavLink to={item.href} key={item.name} className={({ isActive }) => `flex items-center gap-3 py-2 px-4 text-gray-800 dark:text-zinc-100 cursor-pointer rounded transition-all ${isActive ? 'bg-gray-100 dark:bg-zinc-900 dark:bg-gradient-to-br dark:from-zinc-800 dark:to-zinc-800/50 dark:ring-zinc-800' : 'hover:bg-gray-50 dark:hover:bg-zinc-800/60'}`} >
37 <item.icon size={16} />
38 <p className='text-sm truncate'>{item.name}</p>
39 </NavLink>
40 ))}
41 <button className='flex w-full items-center gap-3 py-2 px-4 text-gray-800 dark:text-zinc-100 cursor-pointer rounded hover:bg-gray-50 dark:hover:bg-zinc-800/60 transition-all'>
42 <SettingsIcon size={16} />
43 <p className='text-sm truncate'>Settings</p>
44 </button>
45 </div>
46 <MyTasksSidebar />
47 <ProjectSidebar />
48 </div>
49
50
51 </div>
52
53 </div>
54 )
55}
56
57export default Sidebar

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected