From b1fd0cdeff287e4cf0ec180ff9fee804cb2c8b8d Mon Sep 17 00:00:00 2001 From: Arda Serdar Pektezol <1669855+pektezol@users.noreply.github.com> Date: Wed, 22 Oct 2025 01:52:05 +0400 Subject: feat/frontend: add general mobile support (#275) --- frontend/src/components/Sidebar.tsx | 174 ++++++++++++++++++++++-------------- 1 file changed, 106 insertions(+), 68 deletions(-) (limited to 'frontend/src/components/Sidebar.tsx') diff --git a/frontend/src/components/Sidebar.tsx b/frontend/src/components/Sidebar.tsx index 67f7f3d..f972c6f 100644 --- a/frontend/src/components/Sidebar.tsx +++ b/frontend/src/components/Sidebar.tsx @@ -19,7 +19,9 @@ const Sidebar: React.FC = ({ setToken, profile, setProfile, onUplo const [searchData, setSearchData] = React.useState(undefined); const [isSidebarLocked, setIsSidebarLocked] = React.useState(false); - const [isSidebarOpen, setSidebarOpen] = React.useState(true); + const [isSidebarOpen, setSidebarOpen] = React.useState(false); + const [isMobileMenuOpen, setIsMobileMenuOpen] = React.useState(false); + const [isMobileSearchOpen, setIsMobileSearchOpen] = React.useState(false); const location = useLocation(); const path = location.pathname; @@ -88,18 +90,34 @@ const Sidebar: React.FC = ({ setToken, profile, setProfile, onUplo }; const _handle_sidebar_lock = () => { - if (!isSidebarLocked) { - _handle_sidebar_hide() - setIsSidebarLocked(true); - setTimeout(() => setIsSidebarLocked(false), 300); + if (window.innerWidth <= 768) { + setIsMobileSearchOpen(!isMobileSearchOpen); + } else { + if (!isSidebarLocked) { + _handle_sidebar_hide() + setIsSidebarLocked(true); + setTimeout(() => setIsSidebarLocked(false), 300); + } } }; + const _close_mobile_search = () => { + setIsMobileSearchOpen(false); + }; + const _handle_search_change = async (q: string) => { const searchResponse = await API.get_search(q); setSearchData(searchResponse); }; + const _toggle_mobile_menu = () => { + setIsMobileMenuOpen(!isMobileMenuOpen); + }; + + const _close_mobile_menu = () => { + setIsMobileMenuOpen(false); + }; + React.useEffect(() => { if (path === "/") { handle_sidebar_click(1) } else if (path.includes("games")) { handle_sidebar_click(2) } @@ -112,90 +130,110 @@ const Sidebar: React.FC = ({ setToken, profile, setProfile, onUplo }, [path]); return ( -