import * as React from 'react'; import './App.css'; import { i18n, I18NMap, install } from './i18n/i18n'; import { chineseTranslations, englishTranslations, japaneseTranslations, spanishTranslations } from './i18n/translation'; import { getLang, getGPTApiKey, getRate, setGPTApiKey, setLang, setRate, getEnabled, setEnabled } from './storage'; import { Lang, langArray } from './types/interface'; import { getTabId } from './utils/utils'; const App: React.FC = () => { const [apiKey, setApiKeyLocal] = React.useState(''); const [lang, setLangLocal] = React.useState(Lang.English); const [rate, setRateLocal] = React.useState(0); const [enabled, setEnabledLocal] = React.useState(false); const handleToggle = () => { const newState = !enabled; setEnabledLocal(newState); if (newState) { setEnabledLocal(true); } else { setEnabledLocal(false); } }; React.useEffect(() => { install(Lang.English, englishTranslations, I18NMap); install(Lang.Chinese, chineseTranslations, I18NMap); install(Lang.Japan, japaneseTranslations, I18NMap); install(Lang.Spain, spanishTranslations, I18NMap); install(Lang.Cantonese, chineseTranslations, I18NMap); }, []); React.useEffect(() => { async function fetchDefaults() { const fetchedLang = await getLang(); const fetchedApiKey = await getGPTApiKey(); const fetchedRate = await getRate(); const fetchedEnabled = await getEnabled(); setLangLocal(fetchedLang); setApiKeyLocal(fetchedApiKey); setRateLocal(fetchedRate); setEnabledLocal(fetchedEnabled); } fetchDefaults(); }, [getLang, getGPTApiKey, getRate]); const handleClose = () => { window.close(); }; const handleSave = async () => { setLang(lang); setGPTApiKey(apiKey); setRate(rate); setEnabled(enabled); chrome.tabs.sendMessage(await getTabId(), { action: enabled ? 'enable' : 'disable' }); handleClose(); }; return (

{i18n('ui_title', lang)}

{i18n('ui_link_label', lang)} {i18n('ui_link_title', lang)}
setApiKeyLocal(e.target.value)} />
setRateLocal(parseFloat(e.target.value))} />
); }; export default App;