import { useEffect, useRef, useMemo, useState } from "react"; import { CloseCircleFilled } from "@ant-design/icons"; function Sidebar({tabs}){ const sideBarRef = useRef() const sideBarExtraRef = useRef() const [activeTab, setActiveTab] = useState(-1) // -1 indicates no active tabs const [hoverIndex, setHoverIndex] = useState(-1) // -1 indicates no active tabs const [sidebarOpen, setSidebarOpen] = useState(false) const sidebarTabs = useMemo(() => tabs, [tabs]) useEffect(() => { }, [sideBarRef, sideBarExtraRef, sidebarOpen]) const openSidebar = () => { sideBarRef.current?.classList.add("tw-w-[400px]") sideBarRef.current?.classList.remove("tw-w-[80px]") setSidebarOpen(true) } const closeSidebar = () => { sideBarRef.current?.classList.add("tw-w-[80px]") sideBarRef.current?.classList.remove("tw-w-[400px]") setSidebarOpen(false) setActiveTab(-1) setHoverIndex(-1) } const hideOnMouseLeave = () => { if (activeTab === -1){ closeSidebar() } } return (
{ sidebarTabs.map((tab, index) => { return (
{ openSidebar() setHoverIndex(index) }} onClick={() => { setActiveTab(index) }} >
{tab.icon}
{tab.name}
) }) }
{(activeTab > -1 || hoverIndex > -1) && tabs[activeTab > -1 ? activeTab : hoverIndex].content}
); } export default Sidebar;