import Stack from "@mui/material/Stack"; import { useState } from "react"; 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 { useI18n } from "../../hooks/I18n"; import Box from "@mui/material/Box"; import { useFavWords } from "../../hooks/FavWords"; import DictCont from "../Selection/DictCont"; import SugCont from "../Selection/SugCont"; import DownloadButton from "./DownloadButton"; import UploadButton from "./UploadButton"; import Button from "@mui/material/Button"; import ClearAllIcon from "@mui/icons-material/ClearAll"; import Alert from "@mui/material/Alert"; import { isValidWord } from "../../libs/utils"; import { kissLog } from "../../libs/log"; import { useConfirm } from "../../hooks/Confirm"; import { useSetting } from "../../hooks/Setting"; import { dictHandlers } from "../Selection/DictHandler"; function FavAccordion({ word, index }) { const [expanded, setExpanded] = useState(false); const { setting } = useSetting(); const { enDict, enSug } = setting?.tranboxSetting || {}; const handleChange = (e) => { setExpanded((pre) => !pre); }; return ( }> {/* {`[${new Date( createdAt ).toLocaleString()}] ${word}`} */} {`${index + 1}. ${word}`} {expanded && ( )} ); } export default function FavWords() { const i18n = useI18n(); const { favList, wordList, mergeWords, clearWords } = useFavWords(); const { setting } = useSetting(); const confirm = useConfirm(); const handleImport = (data) => { try { const newWords = data .split("\n") .map((line) => line.split(",")[0].trim()) .filter(isValidWord); mergeWords(newWords); } catch (err) { kissLog("import rules", err); } }; const handleClearWords = async () => { const isConfirmed = await confirm({ confirmText: i18n("confirm_title"), cancelText: i18n("cancel"), }); if (isConfirmed) { clearWords(); } }; const handleTranslation = async () => { const { enDict } = setting?.tranboxSetting; const dict = dictHandlers[enDict]; if (!dict) return ""; const tranList = []; for (const word of wordList) { try { const data = await dict.apiFn(word); const title = `## ${dict.reWord(data) || word}`; const tran = dict .toText(data) .map((line) => `- ${line}`) .join("\n"); tranList.push([title, tran].join("\n")); } catch (err) { kissLog("export translation", err); } } return tranList.join("\n\n"); }; return ( {i18n("favorite_words_helper")} wordList.join("\n")} text={i18n("export")} fileName={`kiss-words_${Date.now()}.txt`} /> {favList.map(([word, { createdAt }], index) => ( ))} ); }