import React, { useEffect, useState } from "react"; import { SidebarSimple } from "@phosphor-icons/react"; import paths from "@/utils/paths"; import { Tooltip } from "react-tooltip"; const SIDEBAR_TOGGLE_STORAGE_KEY = "anythingllm_sidebar_toggle"; /** * Returns the previous state of the sidebar from localStorage. * If the sidebar was closed, returns false. * If the sidebar was open, returns true. * If the sidebar state is not set, returns true. * @returns {boolean} */ function previousSidebarState() { const previousState = window.localStorage.getItem(SIDEBAR_TOGGLE_STORAGE_KEY); if (previousState === "closed") return false; return true; } export function useSidebarToggle() { const [showSidebar, setShowSidebar] = useState(previousSidebarState()); const [canToggleSidebar, setCanToggleSidebar] = useState(true); useEffect(() => { function checkPath() { const currentPath = window.location.pathname; const isVisible = currentPath === paths.home() || /^\/workspace\/[^\/]+$/.test(currentPath) || /^\/workspace\/[^\/]+\/t\/[^\/]+$/.test(currentPath); setCanToggleSidebar(isVisible); } checkPath(); }, [window.location.pathname]); useEffect(() => { function toggleSidebar(e) { if (!canToggleSidebar) return; if ( (e.ctrlKey || e.metaKey) && e.shiftKey && e.key.toLowerCase() === "s" ) { setShowSidebar((prev) => { const newState = !prev; window.localStorage.setItem( SIDEBAR_TOGGLE_STORAGE_KEY, newState ? "open" : "closed" ); return newState; }); } } window.addEventListener("keydown", toggleSidebar); return () => { window.removeEventListener("keydown", toggleSidebar); }; }, []); useEffect(() => { window.localStorage.setItem( SIDEBAR_TOGGLE_STORAGE_KEY, showSidebar ? "open" : "closed" ); }, [showSidebar]); return { showSidebar, setShowSidebar, canToggleSidebar }; } export function ToggleSidebarButton({ showSidebar, setShowSidebar }) { const isMac = navigator.userAgent.includes("Mac"); const shortcut = isMac ? "⌘ + Shift + S" : "Ctrl + Shift + S"; return ( <> ); }