import React, { useEffect, useState } from "react"; import { SidebarIcon } from "lucide-react"; import { useNavigate } from "react-router-dom"; import { useAuth } from "../../context/AuthContext"; import { useSidebar } from "../../context/SidebarContext"; import { ToggleButton } from "../Input/Button"; interface Streamer { user_id: number; username: string; } interface Category { category_id: number; category_name: string; } interface SideBarProps { extraClasses?: string; } const Sidebar: React.FC = ({ extraClasses = "" }) => { const { showSideBar, setShowSideBar } = useSidebar(); const navigate = useNavigate(); const { username, isLoggedIn } = useAuth(); const [followedStreamers, setFollowedStreamers] = useState([]); const [followedCategories, setFollowedCategories] = useState([]); const [justToggled, setJustToggled] = useState(false); // Fetch followed streamers useEffect(() => { if (!isLoggedIn) return; const fetchFollowedStreamers = async () => { try { const response = await fetch("/api/user/following"); if (!response.ok) throw new Error("Failed to fetch followed streamers"); const data = await response.json(); setFollowedStreamers(data); } catch (error) { console.error("Error fetching followed streamers:", error); } }; fetchFollowedStreamers(); }, [isLoggedIn]); const handleSideBar = () => { setShowSideBar(!showSideBar); setJustToggled(true); setTimeout(() => setJustToggled(false), 200); }; // Keyboard shortcut to toggle sidebar useEffect(() => { const handleKeyPress = (e: KeyboardEvent) => { if ( e.key === "s" && document.activeElement == document.body && isLoggedIn ) handleSideBar(); }; document.addEventListener("keydown", handleKeyPress); return () => { document.removeEventListener("keydown", handleKeyPress); }; }, [showSideBar, setShowSideBar, isLoggedIn]); useEffect(() => { if (!isLoggedIn) return; const fetchFollowedCategories = async () => { try { const response = await fetch("/api/categories/following"); if (!response.ok) throw new Error("Failed to fetch followed categories"); const data = await response.json(); setFollowedCategories(data); } catch (error) { console.error("Error fetching followed categories:", error); } }; fetchFollowedCategories(); }, [isLoggedIn]); return ( <> handleSideBar()} extraClasses={`absolute group text-[1rem] top-[9vh] ${ showSideBar ? "left-[16vw] duration-[0.5s]" : "left-[20px] duration-[1s]" } ease-in-out cursor-pointer z-[50]`} toggled={showSideBar} > {!showSideBar && !justToggled && ( Press S )} ); }; export default Sidebar;