import { forwardRef, useImperativeHandle, useState } from "react"; import { useLockFn } from "ahooks"; import { useTranslation } from "react-i18next"; import { List, ListItem, ListItemText, MenuItem, Select, Switch, TextField, } from "@mui/material"; import { useVerge } from "@/hooks/use-verge"; import { BaseDialog, DialogRef, Notice } from "@/components/base"; export const MiscViewer = forwardRef((props, ref) => { const { t } = useTranslation(); const { verge, patchVerge } = useVerge(); const [open, setOpen] = useState(false); const [values, setValues] = useState({ appLogLevel: "info", autoCloseConnection: false, enableClashFields: false, enableBuiltinEnhanced: true, proxyLayoutColumn: 6, defaultLatencyTest: "", autoLogClean: 0, }); useImperativeHandle(ref, () => ({ open: () => { setOpen(true); setValues({ appLogLevel: verge?.app_log_level ?? "info", autoCloseConnection: verge?.auto_close_connection ?? true, enableClashFields: verge?.enable_clash_fields ?? false, enableBuiltinEnhanced: verge?.enable_builtin_enhanced ?? true, proxyLayoutColumn: verge?.proxy_layout_column || 6, defaultLatencyTest: verge?.default_latency_test || "", autoLogClean: verge?.auto_log_clean || 0, }); }, close: () => setOpen(false), })); const onSave = useLockFn(async () => { try { await patchVerge({ app_log_level: values.appLogLevel, auto_close_connection: values.autoCloseConnection, enable_clash_fields: values.enableClashFields, enable_builtin_enhanced: values.enableBuiltinEnhanced, proxy_layout_column: values.proxyLayoutColumn, default_latency_test: values.defaultLatencyTest, auto_log_clean: values.autoLogClean as any, }); setOpen(false); } catch (err: any) { Notice.error(err.message || err.toString()); } }); return ( setOpen(false)} onCancel={() => setOpen(false)} onOk={onSave} > setValues((v) => ({ ...v, autoCloseConnection: c })) } /> setValues((v) => ({ ...v, enableClashFields: c })) } /> setValues((v) => ({ ...v, enableBuiltinEnhanced: c })) } /> setValues((v) => ({ ...v, defaultLatencyTest: e.target.value })) } /> ); });