import React, { useCallback, useRef } from "react"; import { Link, useLocation } from "react-router-dom"; import { UserProfile } from "@customTypes/Profile"; import _Header from "./Header"; import _Footer from "./Footer"; import _Content from "./Content"; import _Search from "./Search"; import links from "./Links"; interface SidebarProps { setToken: React.Dispatch>; profile?: UserProfile; setProfile: React.Dispatch>; onUploadRun: () => void; } const Sidebar: React.FC = ({ setToken, profile, setProfile, onUploadRun, }) => { const [isSearching, setIsSearching] = React.useState(false); const [isSidebarOpen, setSidebarOpen] = React.useState(false); const [selectedButtonIndex, setSelectedButtonIndex] = React.useState(1); const location = useLocation(); const path = location.pathname; const handle_sidebar_click = useCallback( (clicked_sidebar_idx: number) => { setSelectedButtonIndex(clicked_sidebar_idx); if (clicked_sidebar_idx == 0 && !isSearching) { if (!isSearching) { setIsSearching(true); } } else { setIsSearching(false); } }, [isSearching] ); React.useEffect(() => { links.content.forEach((link, i) => { if (path.includes(link.to)) { handle_sidebar_click(i + 1); } }) links.footer.forEach((link, i) => { if (path.includes(link.to)) { handle_sidebar_click(links.content.length + i + 1); } }) }, [path]); return (
{/* Header */} <_Header />
{/* Sidebar Content */} <_Content profile={profile} isSearching={isSearching} selectedButtonIndex={selectedButtonIndex} isSidebarOpen={isSidebarOpen} handle_sidebar_click={handle_sidebar_click} /> {/* Bottom Section */} <_Footer profile={profile} isSearching={isSearching} selectedButtonIndex={selectedButtonIndex} onUploadRun={onUploadRun} setToken={setToken} setProfile={setProfile} handle_sidebar_click={handle_sidebar_click} />
<_Search profile={profile} isSearching={isSearching} />
); }; export default Sidebar;