import { useEffect, useMemo } from "react"; import { useAccessStore, useAppConfig } from "@/app/store"; import Locale from "@/app/locales"; import { Path } from "@/app/constant"; import List from "@/app/components/List"; import { useNavigate } from "react-router-dom"; import { getClientConfig } from "@/app/config/client"; import Card from "@/app/components/Card"; import SettingHeader from "./components/SettingHeader"; import { MenuWrapperInspectProps } from "@/app/components/MenuLayout"; import SyncItems from "./components/SyncItems"; import DangerItems from "./components/DangerItems"; import AppSetting from "./components/AppSetting"; import MaskSetting from "./components/MaskSetting"; import PromptSetting from "./components/PromptSetting"; import ProviderSetting from "./components/ProviderSetting"; import ModelConfigList from "./components/ModelSetting"; export default function Settings(props: MenuWrapperInspectProps) { const { setShowPanel } = props; const navigate = useNavigate(); const accessStore = useAccessStore(); const config = useAppConfig(); const { isMobileScreen } = config; useEffect(() => { const keydownEvent = (e: KeyboardEvent) => { if (e.key === "Escape") { navigate(Path.Home); } }; if (clientConfig?.isApp) { // Force to set custom endpoint to true if it's app accessStore.update((state) => { state.useCustomConfig = true; }); } document.addEventListener("keydown", keydownEvent); return () => { document.removeEventListener("keydown", keydownEvent); }; // eslint-disable-next-line react-hooks/exhaustive-deps }, []); const clientConfig = useMemo(() => getClientConfig(), []); const cardClassName = "mb-6 md:mb-8 last:mb-0"; return (