import { useState, useEffect } from "react"; import Box from "@mui/material/Box"; import Stack from "@mui/material/Stack"; import MenuItem from "@mui/material/MenuItem"; import FormControlLabel from "@mui/material/FormControlLabel"; import Switch from "@mui/material/Switch"; import Button from "@mui/material/Button"; import { sendTabMsg } from "../../libs/msg"; import { browser, isExt } from "../../libs/browser"; import { useI18n } from "../../hooks/I18n"; import TextField from "@mui/material/TextField"; import { MSG_TRANS_TOGGLE, MSG_TRANS_GETRULE, MSG_TRANS_PUTRULE, OPT_TRANS_ALL, OPT_LANGS_FROM, OPT_LANGS_TO, OPT_STYLE_ALL, EVENT_KISS, MSG_TRANS_CURRULE, } from "../../config"; export default function Popup({ setShowPopup }) { const i18n = useI18n(); const [rule, setRule] = useState(null); const handleOpenSetting = () => { if (isExt) { browser?.runtime.openOptionsPage(); } else { window.open(process.env.REACT_APP_OPTIONSPAGE, "_blank"); } setShowPopup && setShowPopup(false); }; const handleTransToggle = async (e) => { try { setRule({ ...rule, transOpen: e.target.checked ? "true" : "false" }); if (isExt) { await sendTabMsg(MSG_TRANS_TOGGLE); } else { window.dispatchEvent( new CustomEvent(EVENT_KISS, { detail: { action: MSG_TRANS_TOGGLE, }, }) ); } } catch (err) { console.log("[toggle trans]", err); } }; const handleChange = async (e) => { try { const { name, value } = e.target; setRule((pre) => ({ ...pre, [name]: value })); if (isExt) { await sendTabMsg(MSG_TRANS_PUTRULE, { [name]: value }); } else { window.dispatchEvent( new CustomEvent(EVENT_KISS, { detail: { action: MSG_TRANS_PUTRULE, args: { [name]: value }, }, }) ); } } catch (err) { console.log("[update rule]", err); } }; const handleKissEvent = (e) => { const action = e?.detail?.action; const args = e?.detail?.args || {}; switch (action) { case MSG_TRANS_CURRULE: setRule(args); break; default: // console.log(`[popup] kissEvent action skip: ${action}`); } }; useEffect(() => { if (!isExt) { window.addEventListener(EVENT_KISS, handleKissEvent); window.dispatchEvent( new CustomEvent(EVENT_KISS, { detail: { action: MSG_TRANS_GETRULE }, }) ); return () => { window.removeEventListener(EVENT_KISS, handleKissEvent); }; } (async () => { try { const res = await sendTabMsg(MSG_TRANS_GETRULE); if (!res.error) { setRule(res.data); } } catch (err) { console.log("[query rule]", err); } })(); }, []); if (!rule) { return ( ); } const { transOpen, translator, fromLang, toLang, textStyle } = rule; return ( } label={i18n("translate")} /> {OPT_TRANS_ALL.map((item) => ( {item} ))} {OPT_LANGS_FROM.map(([lang, name]) => ( {name} ))} {OPT_LANGS_TO.map(([lang, name]) => ( {name} ))} {OPT_STYLE_ALL.map((item) => ( {i18n(item)} ))} ); }