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 (
<>
>
);
}