import * as React from "react" import intl from "react-intl-universal" import { urlTest, byteToMB, calculateItemSize, getSearchEngineName } from "../../scripts/utils" import { ThemeSettings, SearchEngines } from "../../schema-types" import { getThemeSettings, setThemeSettings, exportAll } from "../../scripts/settings" import { Stack, Label, Toggle, TextField, DefaultButton, ChoiceGroup, IChoiceGroupOption, loadTheme, Dropdown, IDropdownOption, PrimaryButton } from "@fluentui/react" import DangerButton from "../utils/danger-button" type AppTabProps = { setLanguage: (option: string) => void setFetchInterval: (interval: number) => void deleteArticles: (days: number) => Promise importAll: () => Promise } type AppTabState = { pacStatus: boolean pacUrl: string themeSettings: ThemeSettings itemSize: string cacheSize: string deleteIndex: string } class AppTab extends React.Component { constructor(props) { super(props) this.state = { pacStatus: window.settings.getProxyStatus(), pacUrl: window.settings.getProxy(), themeSettings: getThemeSettings(), itemSize: null, cacheSize: null, deleteIndex: null } this.getItemSize() this.getCacheSize() } getCacheSize = () => { window.utils.getCacheSize().then(size => { this.setState({ cacheSize: byteToMB(size) }) }) } getItemSize = () => { calculateItemSize().then((size) => { this.setState({ itemSize: byteToMB(size) }) }) } clearCache = () => { window.utils.clearCache().then(() => { this.getCacheSize() }) } themeChoices = (): IChoiceGroupOption[] => [ { key: ThemeSettings.Default, text: intl.get("followSystem") }, { key: ThemeSettings.Light, text: intl.get("app.lightTheme") }, { key: ThemeSettings.Dark, text: intl.get("app.darkTheme") } ] fetchIntervalOptions = (): IDropdownOption[] => [ { key: 0, text: intl.get("app.never") }, { key: 10, text: intl.get("time.minute", { m: 10 }) }, { key: 15, text: intl.get("time.minute", { m: 15 }) }, { key: 20, text: intl.get("time.minute", { m: 20 }) }, { key: 30, text: intl.get("time.minute", { m: 30 }) }, { key: 45, text: intl.get("time.minute", { m: 45 }) }, { key: 60, text: intl.get("time.hour", { h: 1 }) }, ] onFetchIntervalChanged = (item: IDropdownOption) => { this.props.setFetchInterval(item.key as number) } searchEngineOptions = (): IDropdownOption[] => [ SearchEngines.Google, SearchEngines.Bing, SearchEngines.Baidu, SearchEngines.DuckDuckGo ].map(engine => ({ key: engine, text: getSearchEngineName(engine) })) onSearchEngineChanged = (item: IDropdownOption) => { window.settings.setSearchEngine(item.key as number) } deleteOptions = (): IDropdownOption[] => [ { key: "7", text: intl.get("app.daysAgo", { days: 7 }) }, { key: "14", text: intl.get("app.daysAgo", { days: 14 }) }, { key: "21", text: intl.get("app.daysAgo", { days: 21 }) }, { key: "28", text: intl.get("app.daysAgo", { days: 28 }) }, { key: "0", text: intl.get("app.deleteAll") }, ] deleteChange = (_, item: IDropdownOption) => { this.setState({ deleteIndex: item ? String(item.key) : null }) } confirmDelete = () => { this.setState({ itemSize: null }) this.props.deleteArticles(parseInt(this.state.deleteIndex)) .then(() => this.getItemSize()) } languageOptions = (): IDropdownOption[] => [ { key: "default", text: intl.get("followSystem") }, { key: "de", text: "Deutsch" }, { key: "en-US", text: "English" }, { key: "es", text: "Español" }, { key: "fr-FR", text: "Français" }, { key: "tr", text: "Türkçe" }, { key: "zh-CN", text: "中文(简体)" }, { key: "zh-TW", text: "中文(繁體)" }, ] toggleStatus = () => { window.settings.toggleProxyStatus() this.setState({ pacStatus: window.settings.getProxyStatus(), pacUrl: window.settings.getProxy() }) } handleInputChange = (event) => { const name: string = event.target.name // @ts-ignore this.setState({[name]: event.target.value.trim()}) } setUrl = (event: React.FormEvent) => { event.preventDefault() if (urlTest(this.state.pacUrl)) window.settings.setProxy(this.state.pacUrl) } onThemeChange = (_, option: IChoiceGroupOption) => { setThemeSettings(option.key as ThemeSettings) this.setState({ themeSettings: option.key as ThemeSettings }) } render = () => (
this.props.setLanguage(String(option.key))} style={{width: 200}} /> {this.state.pacStatus &&
urlTest(v.trim()) ? "" : intl.get("app.badUrl")} placeholder={intl.get("app.pac")} name="pacUrl" onChange={this.handleInputChange} value={this.state.pacUrl} /> {intl.get("app.pacHint")}
} {this.state.itemSize ? intl.get("app.itemSize", {size: this.state.itemSize}) : intl.get("app.calculatingSize")} {this.state.cacheSize ? intl.get("app.cacheSize", {size: this.state.cacheSize}) : intl.get("app.calculatingSize")}
) } export default AppTab