Download frontend/src/components/Sidebar/SidebarToggle/index.jsx from leowuming/rag: direct link, hf CLI and curl.
- Browser
- Download file 3.17 kB
-
https://huggingface.co/spaces/leowuming/rag/resolve/main/frontend/src/components/Sidebar/SidebarToggle/index.jsx
- Command line
-
hf download hf://spaces/leowuming/rag/frontend/src/components/Sidebar/SidebarToggle/index.jsx
-
curl -L -o index.jsx https://huggingface.co/spaces/leowuming/rag/resolve/main/frontend/src/components/Sidebar/SidebarToggle/index.jsx
3.17 kB
| 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 ( | |
| <> | |
| <button | |
| type="button" | |
| className={`hidden md:block border-none bg-transparent outline-none ring-0 transition-left duration-500 ${showSidebar ? "left-[247px]" : "absolute top-[20px] left-[30px] z-10"}`} | |
| onClick={() => setShowSidebar((prev) => !prev)} | |
| data-tooltip-id="sidebar-toggle" | |
| data-tooltip-content={ | |
| showSidebar | |
| ? `Hide Sidebar (${shortcut})` | |
| : `Show Sidebar (${shortcut})` | |
| } | |
| aria-label={ | |
| showSidebar | |
| ? `Hide Sidebar (${shortcut})` | |
| : `Show Sidebar (${shortcut})` | |
| } | |
| > | |
| <SidebarSimple | |
| className="text-theme-text-secondary hover:text-theme-text-primary" | |
| size={24} | |
| /> | |
| </button> | |
| <Tooltip | |
| id="sidebar-toggle" | |
| place="top" | |
| delayShow={300} | |
| className="tooltip !text-xs z-99" | |
| /> | |
| </> | |
| ); | |
| } | |