1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- 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<DialogRef>((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 (
- <BaseDialog
- open={open}
- title={t("Clash Port")}
- contentSx={{ width: 400 }}
- okBtn={t("Save")}
- cancelBtn={t("Cancel")}
- onClose={() => setOpen(false)}
- onCancel={() => setOpen(false)}
- onOk={onSave}
- >
- <List>
- <ListItem sx={{ padding: "5px 2px" }}>
- <ListItemText primary="External Controller" />
- <TextField
- size="small"
- autoComplete="off"
- sx={{ width: 175 }}
- value={controller}
- placeholder="Required"
- onChange={(e) => setController(e.target.value)}
- />
- </ListItem>
- <ListItem sx={{ padding: "5px 2px" }}>
- <ListItemText primary="Core Secret" />
- <TextField
- size="small"
- autoComplete="off"
- sx={{ width: 175 }}
- value={secret}
- placeholder="Recommended"
- onChange={(e) => setSecret(e.target.value)}
- />
- </ListItem>
- </List>
- </BaseDialog>
- );
- });
|