import { useMemo } from "react"; import DragIcon from "@/app/icons/drag.svg"; import DiscoverIcon from "@/app/icons/discoverActive.svg"; import AssistantActiveIcon from "@/app/icons/assistantActive.svg"; import GitHubIcon from "@/app/icons/githubIcon.svg"; import SettingIcon from "@/app/icons/settingActive.svg"; import DiscoverInactiveIcon from "@/app/icons/discoverInactive.svg"; import AssistantInactiveIcon from "@/app/icons/assistantInactive.svg"; import SettingInactiveIcon from "@/app/icons/settingInactive.svg"; import { useAppConfig, useChatStore } from "@/app/store"; import { Path, REPO_URL } from "@/app/constant"; import { useNavigate, useLocation } from "react-router-dom"; import { isIOS } from "@/app/utils"; import dynamic from "next/dynamic"; import useHotKey from "@/app/hooks/useHotKey"; import useDragSideBar from "@/app/hooks/useDragSideBar"; import useMobileScreen from "@/app/hooks/useMobileScreen"; import TabActions from "@/app/components/TabActions"; const SessionList = dynamic(async () => await import("./SessionList"), { loading: () => null, }); const SettingList = dynamic(async () => await import("./SettingList"), { loading: () => null, }); export function SideBar(props: { className?: string }) { const chatStore = useChatStore(); // drag side bar const { onDragStart } = useDragSideBar(); const navigate = useNavigate(); const loc = useLocation(); const config = useAppConfig(); const isMobileScreen = useMobileScreen(); const isIOSMobile = useMemo( () => isIOS() && isMobileScreen, [isMobileScreen], ); useHotKey(); let selectedTab: string; switch (loc.pathname) { case Path.Masks: case Path.NewChat: selectedTab = Path.Masks; break; case Path.Settings: selectedTab = Path.Settings; break; default: selectedTab = Path.Chat; } return (
, inactive: , }, }, { id: Path.Chat, icons: { active: , inactive: , }, }, { id: "github", icons: , className: "p-2", }, { id: Path.Settings, icons: { active: , inactive: , }, className: "p-2", }, ]} onSelect={(id) => { if (id === "github") { return window.open(REPO_URL, "noopener noreferrer"); } if (id !== Path.Masks) { return navigate(id); } if (config.dontShowMaskSplashScreen !== true) { navigate(Path.NewChat, { state: { fromHome: true } }); } else { navigate(Path.Masks, { state: { fromHome: true } }); } }} groups={[ [Path.Chat, Path.Masks], ["github", Path.Settings], ]} selected={selectedTab} className="px-5 py-6" />
{ if (e.target === e.currentTarget) { navigate(Path.Home); } }} > {selectedTab === Path.Chat && } {loc.pathname === Path.Settings && }
{!isMobileScreen && (
onDragStart(e as any)} >
)}
); }