import useSWR from "swr"; import { useState } from "react"; import { useTranslation } from "react-i18next"; import { IconButton, Switch } from "@mui/material"; import { ArrowForward, PrivacyTipRounded, Settings } from "@mui/icons-material"; import { checkService } from "@/services/cmds"; import { useVerge } from "@/hooks/use-verge"; import { SettingList, SettingItem } from "./setting"; import useModalHandler from "@/hooks/use-modal-handler"; import getSystem from "@/utils/get-system"; import GuardState from "./mods/guard-state"; import ServiceMode from "./mods/service-mode"; import SysproxyViewer from "./mods/sysproxy-viewer"; interface Props { onError?: (err: Error) => void; } const isWIN = getSystem() === "windows"; const SettingSystem = ({ onError }: Props) => { const { t } = useTranslation(); const { verge, mutateVerge, patchVerge } = useVerge(); // service mode const [serviceOpen, setServiceOpen] = useState(false); const { data: serviceStatus } = useSWR( isWIN ? "checkService" : null, checkService, { revalidateIfStale: false, shouldRetryOnError: false } ); const { enable_tun_mode, enable_auto_launch, enable_service_mode, enable_silent_start, enable_system_proxy, } = verge ?? {}; const onSwitchFormat = (_e: any, value: boolean) => value; const onChangeData = (patch: Partial) => { mutateVerge({ ...verge, ...patch }, false); }; const sysproxyHandler = useModalHandler(); return ( onChangeData({ enable_tun_mode: e })} onGuard={(e) => patchVerge({ enable_tun_mode: e })} > {isWIN && ( setServiceOpen(true)} /> ) } > {serviceStatus === "active" || serviceStatus === "installed" ? ( onChangeData({ enable_service_mode: e })} onGuard={(e) => patchVerge({ enable_service_mode: e })} > ) : ( setServiceOpen(true)} > )} )} {isWIN && ( setServiceOpen(false)} /> )} sysproxyHandler.current.open()} /> } > onChangeData({ enable_system_proxy: e })} onGuard={(e) => patchVerge({ enable_system_proxy: e })} > onChangeData({ enable_auto_launch: e })} onGuard={(e) => patchVerge({ enable_auto_launch: e })} > onChangeData({ enable_silent_start: e })} onGuard={(e) => patchVerge({ enable_silent_start: e })} > ); }; export default SettingSystem;