import useSWR from "swr"; import { forwardRef, useImperativeHandle, useState } from "react"; import { useLockFn } from "ahooks"; import { useTranslation } from "react-i18next"; import { List, ListItem, ListItemText, TextField } from "@mui/material"; import { getClashInfo, patchClashConfig } from "@/services/cmds"; import { getAxios } from "@/services/api"; import { BaseDialog, DialogRef, Notice } from "@/components/base"; export const ControllerViewer = forwardRef((props, ref) => { const { t } = useTranslation(); const [open, setOpen] = useState(false); const { data: clashInfo, mutate } = useSWR("getClashInfo", getClashInfo); const [controller, setController] = useState(clashInfo?.server || ""); const [secret, setSecret] = useState(clashInfo?.secret || ""); useImperativeHandle(ref, () => ({ open: () => { setOpen(true); setController(clashInfo?.server || ""); setSecret(clashInfo?.secret || ""); }, close: () => setOpen(false), })); const onSave = useLockFn(async () => { try { await patchClashConfig({ "external-controller": controller, secret }); mutate(); // 刷新接口 getAxios(true); Notice.success("Change Clash Config successfully!", 1000); setOpen(false); } catch (err) { console.log(err); } }); return ( setOpen(false)} onCancel={() => setOpen(false)} onOk={onSave} > setController(e.target.value)} /> setSecret(e.target.value)} /> ); });