import { useRef } from "react"; import { useLockFn } from "ahooks"; import { useTranslation } from "react-i18next"; import { IconButton, MenuItem, Select, Typography } from "@mui/material"; import { openAppDir, openCoreDir, openLogsDir } from "@/services/cmds"; import { ArrowForward } from "@mui/icons-material"; import { checkUpdate } from "@tauri-apps/api/updater"; import { useVerge } from "@/hooks/use-verge"; import { version } from "@root/package.json"; import { DialogRef, Notice } from "@/components/base"; import { SettingList, SettingItem } from "./mods/setting-comp"; import { ThemeModeSwitch } from "./mods/theme-mode-switch"; import { ConfigViewer } from "./mods/config-viewer"; import { HotkeyViewer } from "./mods/hotkey-viewer"; import { MiscViewer } from "./mods/misc-viewer"; import { ThemeViewer } from "./mods/theme-viewer"; import { GuardState } from "./mods/guard-state"; import { LayoutViewer } from "./mods/layout-viewer"; import { UpdateViewer } from "./mods/update-viewer"; import getSystem from "@/utils/get-system"; interface Props { onError?: (err: Error) => void; } const OS = getSystem(); const SettingVerge = ({ onError }: Props) => { const { t } = useTranslation(); const { verge, patchVerge, mutateVerge } = useVerge(); const { theme_mode, language } = verge ?? {}; const configRef = useRef(null); const hotkeyRef = useRef(null); const miscRef = useRef(null); const themeRef = useRef(null); const layoutRef = useRef(null); const updateRef = useRef(null); const onChangeData = (patch: Partial) => { mutateVerge({ ...verge, ...patch }, false); }; const onCheckUpdate = useLockFn(async () => { try { const info = await checkUpdate(); if (!info?.shouldUpdate) { Notice.success("No Updates Available"); } else { updateRef.current?.open(); } } catch (err: any) { Notice.error(err.message || err.toString()); } }); return ( e.target.value} onChange={(e) => onChangeData({ language: e })} onGuard={(e) => patchVerge({ language: e })} > onChangeData({ theme_mode: e })} onGuard={(e) => patchVerge({ theme_mode: e })} > themeRef.current?.open()} > layoutRef.current?.open()} > miscRef.current?.open()} > hotkeyRef.current?.open()} > configRef.current?.open()} > {!(OS === "windows" && WIN_PORTABLE) && ( )} v{version} ); }; export default SettingVerge;