= ({ variant = "default" }) => {
return () => {
document.removeEventListener("keydown", handleKeyPress);
};
- }, [showSideBar, showQuickSettings, setShowSideBar, isLoggedIn]);
+ }, [showQuickSettings]);
return (
= ({ variant = "default" }) => {
showSideBar
? "left-[16vw] duration-[0.5s]"
: "left-[20px] duration-[1s]"
- } text-[1rem] flex items-center flex-nowrap`}
+ } text-[1rem] flex items-center flex-nowrap z-[99]`}
onClick={() => (isLoggedIn ? handleLogout() : setShowAuthModal(true))}
>
{isLoggedIn ? (
@@ -100,30 +86,6 @@ const Navbar: React.FC = ({ variant = "default" }) => {
)}
- {/* Sidebar */}
- {isLoggedIn && (
- <>
- handleSideBar()}
- extraClasses={`absolute group text-[1rem] top-[9vh] ${
- showSideBar
- ? "left-[16vw] duration-[0.5s]"
- : "left-[20px] duration-[1s]"
- } ease-in-out cursor-pointer`}
- toggled={showSideBar}
- >
-
-
- {showSideBar && (
-
- Press S
-
- )}
-
-
- >
- )}
-
{/* Quick Settings Sidebar */}
= ({ variant = "default" }) => {
onClick={() => handleQuickSettings()}
toggled={showQuickSettings}
>
-
+
{showQuickSettings && (
diff --git a/frontend/src/components/Navigation/Sidebar.tsx b/frontend/src/components/Navigation/Sidebar.tsx
index c610c8e..19d60d4 100644
--- a/frontend/src/components/Navigation/Sidebar.tsx
+++ b/frontend/src/components/Navigation/Sidebar.tsx
@@ -1,7 +1,9 @@
-import React, { useState, useEffect } from "react";
-import { useSidebar } from "../../context/SidebarContext";
+import React, { useEffect, useRef, useState } from "react";
+import { Sidebar as 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;
@@ -17,8 +19,8 @@ interface SideBarProps {
extraClasses?: string;
}
-const Sidebar: React.FC = ({ extraClasses }) => {
- const { showSideBar } = useSidebar();
+const Sidebar: React.FC = ({ extraClasses = "" }) => {
+ const { showSideBar, setShowSideBar } = useSidebar();
const navigate = useNavigate();
const { username, isLoggedIn } = useAuth();
const [followedStreamers, setFollowedStreamers] = useState([]);
@@ -42,6 +44,28 @@ const Sidebar: React.FC = ({ extraClasses }) => {
fetchFollowedStreamers();
}, [isLoggedIn]);
+ const handleSideBar = () => {
+ setShowSideBar(!showSideBar);
+ };
+
+ // 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]);
+
// Fetch followed categories
useEffect(() => {
if (!isLoggedIn) return;
@@ -62,84 +86,113 @@ const Sidebar: React.FC = ({ extraClasses }) => {
}, [isLoggedIn]);
return (
-