import { forwardRef, useImperativeHandle, useState } from "react"; import { useLockFn } from "ahooks"; import { useTranslation } from "react-i18next"; import { List, ListItem, ListItemText, TextField } from "@mui/material"; import { useClashInfo } from "@/hooks/use-clash"; import { BaseDialog, DialogRef, Notice } from "@/components/base"; export const ControllerViewer = forwardRef((props, ref) => { const { t } = useTranslation(); const [open, setOpen] = useState(false); const { clashInfo, patchInfo } = useClashInfo(); 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 patchInfo({ "external-controller": controller, secret }); Notice.success("Change Clash Config successfully!", 1000); setOpen(false); } catch (err: any) { Notice.error(err.message || err.toString(), 4000); } }); return ( setOpen(false)} onCancel={() => setOpen(false)} onOk={onSave} > setController(e.target.value)} /> setSecret(e.target.value)} /> ); });