import { useCallback, useRef } from "react"; import { useTranslation } from "react-i18next"; import { open } from "@tauri-apps/plugin-dialog"; import { Button, MenuItem, Select, Input } from "@mui/material"; import { copyClashEnv } from "@/services/cmds"; import { useVerge } from "@/hooks/use-verge"; 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 { BackupViewer } from "./mods/backup-viewer"; import getSystem from "@/utils/get-system"; import { routers } from "@/pages/_routers"; import { TooltipIcon } from "@/components/base/base-tooltip-icon"; import { ContentCopyRounded } from "@mui/icons-material"; import { languages } from "@/services/i18n"; interface Props { onError?: (err: Error) => void; } const OS = getSystem(); const languageOptions = Object.entries(languages).map(([code, _]) => { const labels: { [key: string]: string } = { en: "English", ru: "Русский", zh: "中文", fa: "فارسی", tt: "Татар", id: "Bahasa Indonesia", ar: "العربية", }; return { code, label: labels[code] }; }); const SettingVergeBasic = ({ onError }: Props) => { const { t } = useTranslation(); const { verge, patchVerge, mutateVerge } = useVerge(); const { theme_mode, language, tray_event, env_type, startup_script, start_page, } = 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 backupRef = useRef(null); const onChangeData = (patch: any) => { mutateVerge({ ...verge, ...patch }, false); }; const onCopyClashEnv = useCallback(async () => { await copyClashEnv(); Notice.success(t("Copy Success"), 1000); }, []); return ( e.target.value} onChange={(e) => onChangeData({ language: e })} onGuard={(e) => patchVerge({ language: e })} > onChangeData({ theme_mode: e })} onGuard={(e) => patchVerge({ theme_mode: e })} > {OS !== "linux" && ( e.target.value} onChange={(e) => onChangeData({ tray_event: e })} onGuard={(e) => patchVerge({ tray_event: e })} > )} } > e.target.value} onChange={(e) => onChangeData({ env_type: e })} onGuard={(e) => patchVerge({ env_type: e })} > e.target.value} onChange={(e) => onChangeData({ start_page: e })} onGuard={(e) => patchVerge({ start_page: e })} > e.target.value} onChange={(e) => onChangeData({ startup_script: e })} onGuard={(e) => patchVerge({ startup_script: e })} > {startup_script && ( )} } > themeRef.current?.open()} label={t("Theme Setting")} /> layoutRef.current?.open()} label={t("Layout Setting")} /> miscRef.current?.open()} label={t("Miscellaneous")} /> hotkeyRef.current?.open()} label={t("Hotkey Setting")} /> ); }; export default SettingVergeBasic;