import useSWR from "swr"; import { useTranslation } from "react-i18next"; import { TextField, Switch, Select, MenuItem, Typography, IconButton, } from "@mui/material"; import { ArrowForward } from "@mui/icons-material"; import { patchClashConfig } from "@/services/cmds"; import { SettingList, SettingItem } from "./setting"; import { getClashConfig, getVersion, updateConfigs } from "@/services/api"; import useModalHandler from "@/hooks/use-modal-handler"; import GuardState from "./mods/guard-state"; import CoreSwitch from "./mods/core-switch"; import WebUIViewer from "./mods/web-ui-viewer"; import ClashFieldViewer from "./mods/clash-field-viewer"; import ClashPortViewer from "./mods/clash-port-viewer"; import ControllerViewer from "./mods/controller-viewer"; interface Props { onError: (err: Error) => void; } const SettingClash = ({ onError }: Props) => { const { t } = useTranslation(); const { data: clashConfig, mutate: mutateClash } = useSWR( "getClashConfig", getClashConfig ); const { data: versionData } = useSWR("getVersion", getVersion); const { ipv6, "allow-lan": allowLan, "log-level": logLevel, "mixed-port": mixedPort, } = clashConfig ?? {}; const webUIHandler = useModalHandler(); const fieldHandler = useModalHandler(); const portHandler = useModalHandler(); const controllerHandler = useModalHandler(); const onSwitchFormat = (_e: any, value: boolean) => value; const onChangeData = (patch: Partial) => { mutateClash((old) => ({ ...(old! || {}), ...patch }), false); }; const onUpdateData = async (patch: Partial) => { await updateConfigs(patch); await patchClashConfig(patch); }; // get clash core version const clashVer = versionData?.premium ? `${versionData.version} Premium` : versionData?.version || "-"; return ( onChangeData({ "allow-lan": e })} onGuard={(e) => onUpdateData({ "allow-lan": e })} > onChangeData({ ipv6: e })} onGuard={(e) => onUpdateData({ ipv6: e })} > e.target.value} onChange={(e) => onChangeData({ "log-level": e })} onGuard={(e) => onUpdateData({ "log-level": e })} > { portHandler.current.open(); (e.target as any).blur(); }} /> controllerHandler.current.open()} > webUIHandler.current.open()} > fieldHandler.current.open()} > }> {clashVer} ); }; export default SettingClash;