import Stack from "@mui/material/Stack"; import TextField from "@mui/material/TextField"; import Button from "@mui/material/Button"; import CircularProgress from "@mui/material/CircularProgress"; import { OPT_TRANS_ALL, OPT_TRANS_MICROSOFT, OPT_TRANS_OPENAI, OPT_TRANS_CUSTOMIZE, } from "../../config"; import { useState } from "react"; import { useI18n } from "../../hooks/I18n"; import Typography from "@mui/material/Typography"; import Accordion from "@mui/material/Accordion"; import AccordionSummary from "@mui/material/AccordionSummary"; import AccordionDetails from "@mui/material/AccordionDetails"; import ExpandMoreIcon from "@mui/icons-material/ExpandMore"; import { useAlert } from "../../hooks/Alert"; import { useApi } from "../../hooks/Api"; import { apiTranslate } from "../../apis"; function TestButton({ translator, api }) { const i18n = useI18n(); const alert = useAlert(); const [loading, setLoading] = useState(false); const handleApiTest = async () => { try { setLoading(true); const [text] = await apiTranslate({ translator, q: "hello world", fromLang: "auto", toLang: "zh-CN", setting: api, }); if (!text) { throw new Error("empty reault"); } alert.success(i18n("test_success")); } catch (err) { alert.error(`${i18n("test_failed")}: ${err.message}`); } finally { setLoading(false); } }; if (loading) { return ; } return ( ); } function ApiFields({ translator }) { const i18n = useI18n(); const { api, updateApi, resetApi } = useApi(translator); const { url = "", key = "", model = "", prompt = "", headers = "" } = api; const handleChange = (e) => { const { name, value } = e.target; updateApi({ [name]: value, }); }; return ( {translator !== OPT_TRANS_MICROSOFT && ( <> )} {translator === OPT_TRANS_OPENAI && ( <> )} {translator === OPT_TRANS_CUSTOMIZE && ( )} {translator !== OPT_TRANS_MICROSOFT && ( )} ); } function ApiAccordion({ translator }) { const [expanded, setExpanded] = useState(false); const handleChange = (e) => { setExpanded((pre) => !pre); }; return ( }> {translator} {expanded && } ); } export default function Apis() { return OPT_TRANS_ALL.map((translator) => ( )); }