// @flow import React, { useState, useEffect } from 'react'; import { FormField } from 'component/common/form'; import Button from 'component/button'; import * as ICONS from 'constants/icons'; import Icon from 'component/common/icon'; import ServerInputRow from './internal/inputRow'; type DaemonSettings = { lbryum_servers: Array<>, }; type DaemonStatus = { wallet: any, }; type StatusOfServer = { host: string, port: string, availability: boolean, latency: number, }; type ServerTuple = Array; // ['host', 'port'] type ServerStatus = Array; type ServerConfig = Array; type Props = { daemonSettings: DaemonSettings, getDaemonStatus: () => void, setCustomWalletServers: any => void, clearWalletServers: () => void, customWalletServers: ServerConfig, saveServerConfig: string => void, fetchDaemonSettings: () => void, hasWalletServerPrefs: boolean, daemonStatus: DaemonStatus, }; function SettingWalletServer(props: Props) { const { daemonSettings, daemonStatus, fetchDaemonSettings, setCustomWalletServers, getDaemonStatus, clearWalletServers, saveServerConfig, customWalletServers, hasWalletServerPrefs, } = props; const [advancedMode, setAdvancedMode] = useState(false); const activeWalletServers: ServerStatus = (daemonStatus && daemonStatus.wallet && daemonStatus.wallet.servers) || []; const currentServerConfig: ServerConfig = daemonSettings && daemonSettings.lbryum_servers; const serverConfig: ServerConfig = customWalletServers.length ? customWalletServers : currentServerConfig; const STATUS_INTERVAL = 5000; useEffect(() => { if (hasWalletServerPrefs) { setAdvancedMode(true); } }, []); useEffect(() => { const interval = setInterval(() => { getDaemonStatus(); }, STATUS_INTERVAL); return () => clearInterval(interval); }, []); useEffect(() => { fetchDaemonSettings(); }, []); function makeServerParam(configList) { return configList.reduce((acc, cur) => { acc.push(`${cur[0]}:${cur[1]}`); return acc; }, []); } function doClear() { setAdvancedMode(false); clearWalletServers(); } function onAdd(serverTuple) { let newServerConfig = serverConfig.concat(); newServerConfig.push(serverTuple); updateServers(newServerConfig); } function onDelete(i) { const newServerConfig = serverConfig.concat(); newServerConfig.splice(i, 1); updateServers(newServerConfig); } function updateServers(newConfig) { saveServerConfig(newConfig); setCustomWalletServers(makeServerParam(newConfig)); } return (
{ if (e.target.checked) { doClear(); } }} /> { setAdvancedMode(e.target.checked); if (e.target.checked) { setCustomWalletServers(makeServerParam(customWalletServers)); } }} label={__('customize')} />
{advancedMode && (
{serverConfig && serverConfig.map((entry, i) => ( ))}
{__('Host')} {__('Port')} {__('Available')} {__('Add/Delete')}
{entry[0]} {entry[1]} {activeWalletServers.some( s => s.host === entry[0] && String(s.port) === entry[1] && s.availability ) && }
)}

{__(`Choose a different provider's wallet server.`)}

); } export default SettingWalletServer;