From ba6f2999dfb8c94df0458aa9a384a603cf43da03 Mon Sep 17 00:00:00 2001 From: chs97 <623528324@qq.com> Date: Thu, 11 Oct 2018 23:28:14 +0800 Subject: [PATCH] feat(Settings): update config change API --- src/containers/Settings/index.tsx | 118 +++++++++++++++++++++++------- src/lib/request.ts | 4 +- 2 files changed, 93 insertions(+), 29 deletions(-) diff --git a/src/containers/Settings/index.tsx b/src/containers/Settings/index.tsx index 2e494e3..b0396fc 100644 --- a/src/containers/Settings/index.tsx +++ b/src/containers/Settings/index.tsx @@ -4,10 +4,11 @@ import { changeLanguage } from 'i18next' import { Header, Card, Row, Col, Switch, ButtonSelect, ButtonSelectOptions, Input, Icon } from '@components' import { ExternalControllerModal } from './components' import { I18nProps } from '@models' +import { getConfig, updateConfig } from '@lib/request' +import { getLocalStorageItem, setLocalStorageItem } from '@lib/helper' import './style.scss' class Settings extends React.Component { - state = { startAtLogin: false, setAsSystemProxy: true, @@ -15,21 +16,84 @@ class Settings extends React.Component { proxyMode: 'Rule', socks5ProxyPort: 7891, httpProxyPort: 7890, - externalControllerHost: '127.0.0.1', - externalControllerPort: '7892', - externalControllerSecret: '', + externalControllerHost: getLocalStorageItem('externalControllerAddr', '127.0.0.1'), + externalControllerPort: getLocalStorageItem('externalControllerPort', '8080'), + externalControllerSecret: getLocalStorageItem('secret', ''), showEditDrawer: false } - languageOptions: ButtonSelectOptions[] = [ - { label: '中文', value: 'zh' }, - { label: 'English', value: 'en' } - ] + languageOptions: ButtonSelectOptions[] = [{ label: '中文', value: 'zh' }, { label: 'English', value: 'en' }] changeLanguage = (language: string) => { changeLanguage(language) } + handleExternalControllerChange = (host: string, port: string, secret: string) => { + setLocalStorageItem('externalControllerAddr', host) + setLocalStorageItem('externalControllerPort', port) + setLocalStorageItem('secret', secret) + this.setState({ + showEditDrawer: false, + externalControllerHost: host, + externalControllerPort: port, + externalControllerSecret: secret + }) + } + + handleProxyModeChange = async (mode: string) => { + try { + await updateConfig({ mode }) + this.setState({ proxyMode: mode }) + } catch (err) { + throw err + } + } + + handleHttpPortSave = async () => { + try { + await updateConfig({ + 'redir-port': this.state.httpProxyPort + }) + } catch (err) { + throw err + } + } + + handleSocksPortSave = async () => { + try { + await updateConfig({ + 'socket-port': this.state.socks5ProxyPort + }) + } catch (err) { + throw err + } + } + + handleAllowLanChange = async (state: boolean) => { + try { + await updateConfig({ + 'allow-lan': state + }) + this.setState({ allowConnectFromLan: state }) + } catch (err) { + throw err + } + } + + async componentDidMount () { + try { + const { data: config } = await getConfig() + this.setState({ + proxyMode: config.mode, + httpProxyPort: config['redir-port'], + socks5ProxyPort: config['socket-port'], + allowConnectFromLan: config['allow-lan'] + }) + } catch (err) { + throw err + } + } + render () { const { t, lng } = this.props const { @@ -59,20 +123,13 @@ class Settings extends React.Component { {t('labels.startAtLogin')} - this.setState({ startAtLogin })} - /> + this.setState({ startAtLogin })} /> {t('labels.language')} - + @@ -91,7 +148,7 @@ class Settings extends React.Component { this.setState({ allowConnectFromLan })} + onChange={this.handleAllowLanChange} /> @@ -106,14 +163,18 @@ class Settings extends React.Component { this.setState({ proxyMode })} + onSelect={this.handleProxyModeChange} /> {t('labels.socks5ProxyPort')} - this.setState({ socks5ProxyPort })}> + this.setState({ socks5ProxyPort })} + onBlur={this.handleSocksPortSave} + /> @@ -121,24 +182,27 @@ class Settings extends React.Component { {t('labels.httpProxyPort')} - this.setState({ httpProxyPort })}> + this.setState({ httpProxyPort })} + onBlur={this.handleHttpPortSave} + /> {t('labels.externalController')} {`${externalControllerHost}:${externalControllerPort}`} - this.setState({ showEditDrawer: true })} - >修改 + this.setState({ showEditDrawer: true })}> + 修改 + - +

{t('versionString', { version: 'unknown' })}

{t('checkUpdate')} @@ -149,7 +213,7 @@ class Settings extends React.Component { host={externalControllerHost} port={externalControllerPort} secret={externalControllerSecret} - onConfirm={(host, port, secret) => console.log(host, port, secret)} + onConfirm={this.handleExternalControllerChange} onCancel={() => this.setState({ showEditDrawer: false })} /> diff --git a/src/lib/request.ts b/src/lib/request.ts index 99fdfbd..188cb27 100644 --- a/src/lib/request.ts +++ b/src/lib/request.ts @@ -101,8 +101,8 @@ export async function getExternalControllerConfig () { } } - const hostname = getLocalStorageItem('externalControllerAddr', '') - const port = getLocalStorageItem('externalControllerPort', '') + const hostname = getLocalStorageItem('externalControllerAddr', '127.0.0.1') + const port = getLocalStorageItem('externalControllerPort', '8080') const secret = getLocalStorageItem('secret', '') if (!hostname || !port) {