import Box from "@mui/material/Box";
import Stack from "@mui/material/Stack";
import InputLabel from "@mui/material/InputLabel";
import TextField from "@mui/material/TextField";
import MenuItem from "@mui/material/MenuItem";
import FormControl from "@mui/material/FormControl";
import Select from "@mui/material/Select";
import Link from "@mui/material/Link";
import FormHelperText from "@mui/material/FormHelperText";
import { useSetting } from "../../hooks/Setting";
import { limitNumber } from "../../libs/utils";
import { useI18n } from "../../hooks/I18n";
import { useAlert } from "../../hooks/Alert";
import { isExt } from "../../libs/client";
import IconButton from "@mui/material/IconButton";
import EditIcon from "@mui/icons-material/Edit";
import Grid from "@mui/material/Grid";
import {
UI_LANGS,
TRANS_NEWLINE_LENGTH,
CACHE_NAME,
OPT_MOUSEKEY_ALL,
OPT_MOUSEKEY_DISABLE,
OPT_SHORTCUT_TRANSLATE,
OPT_SHORTCUT_STYLE,
OPT_SHORTCUT_POPUP,
} from "../../config";
import { useEffect, useState, useRef } from "react";
import { useShortcut } from "../../hooks/Shortcut";
function ShortcutItem({ action, label }) {
const { shortcut, setShortcut } = useShortcut(action);
const [disabled, setDisabled] = useState(true);
const [focused, setFocus] = useState(false);
const [formval, setFormval] = useState(shortcut);
const inputRef = useRef(null);
useEffect(() => {
if (!disabled) {
inputRef.current.focus();
setFormval([]);
}
}, [disabled]);
useEffect(() => {
if (!focused) {
return;
}
const keys = new Set();
const handleKeydown = (e) => {
// console.log("keydown", e);
e.code && keys.add(e.key);
setFormval([...keys]);
};
const handleKeyup = (e) => {
// console.log("keyup", e);
keys.delete(e.key);
};
window.addEventListener("keydown", handleKeydown);
window.addEventListener("keyup", handleKeyup);
return () => {
window.removeEventListener("keydown", handleKeydown);
window.removeEventListener("keyup", handleKeyup);
};
}, [focused]);
return (
{
setFocus(true);
}}
onBlur={(e) => {
setFocus(false);
setDisabled(true);
setShortcut(formval);
}}
/>
{
setDisabled(false);
}}
>
{}
);
}
export default function Settings() {
const i18n = useI18n();
const { setting, updateSetting } = useSetting();
const alert = useAlert();
const handleChange = (e) => {
e.preventDefault();
let { name, value } = e.target;
switch (name) {
case "fetchLimit":
value = limitNumber(value, 1, 100);
break;
case "fetchInterval":
value = limitNumber(value, 0, 5000);
break;
case "minLength":
value = limitNumber(value, 1, 100);
break;
case "maxLength":
value = limitNumber(value, 100, 10000);
break;
case "newlineLength":
value = limitNumber(value, 1, 1000);
break;
default:
}
updateSetting({
[name]: value,
});
};
const handleClearCache = () => {
try {
caches.delete(CACHE_NAME);
alert.success(i18n("clear_success"));
} catch (err) {
console.log("[clear cache]", err);
}
};
const {
uiLang,
fetchLimit,
fetchInterval,
minLength,
maxLength,
clearCache,
newlineLength = TRANS_NEWLINE_LENGTH,
mouseKey = OPT_MOUSEKEY_DISABLE,
} = setting;
return (
{i18n("ui_lang")}
{i18n("mouseover_translation")}
{isExt ? (
{i18n("if_clear_cache")}
{i18n("clear_all_cache_now")}
) : (
)}
);
}