// @flow import * as PAGES from 'constants/pages'; import * as MODALS from 'constants/modal_types'; import * as ICONS from 'constants/icons'; import * as React from 'react'; import { SETTINGS } from 'lbry-redux'; import { FormField } from 'component/common/form'; import Button from 'component/button'; import Page from 'component/page'; import SettingLanguage from 'component/settingLanguage'; import FileSelector from 'component/common/file-selector'; import SyncToggle from 'component/syncToggle'; import HomepageSelector from 'component/homepageSelector'; import Card from 'component/common/card'; import SettingAccountPassword from 'component/settingAccountPassword'; import classnames from 'classnames'; import { getPasswordFromCookie } from 'util/saved-passwords'; import { SIMPLE_SITE } from 'config'; // $FlowFixMe import homepages from 'homepages'; import { Lbryio } from 'lbryinc'; import Yrbl from 'component/yrbl'; type Price = { currency: string, amount: number, }; type SetDaemonSettingArg = boolean | string | number; type DarkModeTimes = { from: { hour: string, min: string, formattedTime: string }, to: { hour: string, min: string, formattedTime: string }, }; type OptionTimes = { fromTo: string, time: string, }; type DaemonSettings = { download_dir: string, share_usage_data: boolean, }; type Props = { setDaemonSetting: (string, ?SetDaemonSettingArg) => void, clearDaemonSetting: (string) => void, setClientSetting: (string, SetDaemonSettingArg) => void, toggle3PAnalytics: (boolean) => void, clearCache: () => Promise, daemonSettings: DaemonSettings, allowAnalytics: boolean, showNsfw: boolean, isAuthenticated: boolean, instantPurchaseEnabled: boolean, instantPurchaseMax: Price, currentTheme: string, themes: Array, automaticDarkModeEnabled: boolean, clock24h: boolean, autoplay: boolean, updateWalletStatus: () => void, walletEncrypted: boolean, confirmForgetPassword: ({}) => void, floatingPlayer: boolean, hideReposts: ?boolean, clearPlayingUri: () => void, darkModeTimes: DarkModeTimes, setDarkTime: (string, {}) => void, openModal: (string) => void, language?: string, enterSettings: () => void, exitSettings: () => void, myChannelUrls: ?Array, user: User, }; type State = { clearingCache: boolean, storedPassword: boolean, }; class SettingsPage extends React.PureComponent { constructor(props: Props) { super(props); this.state = { clearingCache: false, storedPassword: false, }; (this: any).onThemeChange = this.onThemeChange.bind(this); (this: any).onAutomaticDarkModeChange = this.onAutomaticDarkModeChange.bind(this); (this: any).onChangeTime = this.onChangeTime.bind(this); (this: any).onConfirmForgetPassword = this.onConfirmForgetPassword.bind(this); } componentDidMount() { const { isAuthenticated, enterSettings } = this.props; if (isAuthenticated || !IS_WEB) { this.props.updateWalletStatus(); getPasswordFromCookie().then((p) => { if (typeof p === 'string') { this.setState({ storedPassword: true }); } }); } enterSettings(); } componentWillUnmount() { const { exitSettings } = this.props; exitSettings(); } onThemeChange(event: SyntheticInputEvent<*>) { const { value } = event.target; if (value === 'dark') { this.onAutomaticDarkModeChange(false); } this.props.setClientSetting(SETTINGS.THEME, value); } onAutomaticDarkModeChange(value: boolean) { this.props.setClientSetting(SETTINGS.AUTOMATIC_DARK_MODE_ENABLED, value); } onClock24hChange(value: boolean) { this.props.setClientSetting(SETTINGS.CLOCK_24H, value); } onConfirmForgetPassword() { const { confirmForgetPassword } = this.props; confirmForgetPassword({ callback: () => { this.setState({ storedPassword: false }); }, }); } onChangeTime(event: SyntheticInputEvent<*>, options: OptionTimes) { const { value } = event.target; this.props.setDarkTime(value, options); } formatHour(time: string, clock24h: boolean) { if (clock24h) { return `${time}:00`; } const now = new Date(0, 0, 0, Number(time)); const hour = now.toLocaleTimeString('en-US', { hour12: true, hour: '2-digit' }); return hour; } setDaemonSetting(name: string, value: ?SetDaemonSettingArg): void { this.props.setDaemonSetting(name, value); } clearDaemonSetting(name: string): void { this.props.clearDaemonSetting(name); } render() { const { daemonSettings, allowAnalytics, showNsfw, isAuthenticated, currentTheme, themes, automaticDarkModeEnabled, clock24h, autoplay, walletEncrypted, // autoDownload, setDaemonSetting, setClientSetting, toggle3PAnalytics, floatingPlayer, hideReposts, clearPlayingUri, darkModeTimes, clearCache, openModal, myChannelUrls, user, } = this.props; const { storedPassword } = this.state; const noDaemonSettings = !daemonSettings || Object.keys(daemonSettings).length === 0; const startHours = ['18', '19', '20', '21']; const endHours = ['5', '6', '7', '8']; return ( {/* @if TARGET='web' */} {user && user.fiat_enabled && (