import useSWR, { useSWRConfig } from "swr"; import { useState } from "react"; import { useTranslation } from "react-i18next"; import { IconButton, Switch, TextField } from "@mui/material"; import { ArrowForward, PrivacyTipRounded } from "@mui/icons-material"; import { checkService, getVergeConfig, patchVergeConfig, } from "@/services/cmds"; import { SettingList, SettingItem } from "./setting"; import getSystem from "@/utils/get-system"; import GuardState from "./mods/guard-state"; import ServiceMode from "./mods/service-mode"; import SysproxyTooltip from "./mods/sysproxy-tooltip"; interface Props { onError?: (err: Error) => void; } const isWIN = getSystem() === "windows"; const SettingSystem = ({ onError }: Props) => { const { t } = useTranslation(); const { mutate } = useSWRConfig(); const { data: vergeConfig } = useSWR("getVergeConfig", getVergeConfig); // service mode const [serviceOpen, setServiceOpen] = useState(false); const { data: serviceStatus } = useSWR( isWIN ? "checkService" : null, checkService, { revalidateIfStale: true, shouldRetryOnError: false } ); const { enable_tun_mode, enable_auto_launch, enable_service_mode, enable_silent_start, enable_system_proxy, system_proxy_bypass, enable_proxy_guard, } = vergeConfig ?? {}; const onSwitchFormat = (_e: any, value: boolean) => value; const onChangeData = (patch: Partial) => { mutate("getVergeConfig", { ...vergeConfig, ...patch }, false); }; return ( onChangeData({ enable_tun_mode: e })} onGuard={(e) => patchVergeConfig({ enable_tun_mode: e })} > {isWIN && ( setServiceOpen(true)} /> ) } > {serviceStatus === "active" || serviceStatus === "installed" ? ( onChangeData({ enable_service_mode: e })} onGuard={(e) => patchVergeConfig({ enable_service_mode: e })} > ) : ( setServiceOpen(true)} > )} )} {isWIN && ( setServiceOpen(false)} /> )} onChangeData({ enable_auto_launch: e })} onGuard={(e) => patchVergeConfig({ enable_auto_launch: e })} > onChangeData({ enable_silent_start: e })} onGuard={(e) => patchVergeConfig({ enable_silent_start: e })} > }> onChangeData({ enable_system_proxy: e })} onGuard={async (e) => { await patchVergeConfig({ enable_system_proxy: e }); mutate("getVergeConfig"); // update bypass value }} > {enable_system_proxy && ( onChangeData({ enable_proxy_guard: e })} onGuard={(e) => patchVergeConfig({ enable_proxy_guard: e })} > )} {enable_system_proxy && ( e.target.value} onChange={(e) => onChangeData({ system_proxy_bypass: e })} onGuard={(e) => patchVergeConfig({ system_proxy_bypass: e })} waitTime={1000} > )} ); }; export default SettingSystem;