From 7baed5a2cba3c43d44bdb90ef8eafc0a3fde05b4 Mon Sep 17 00:00:00 2001 From: chs97 <623528324@qq.com> Date: Fri, 12 Oct 2018 23:11:07 +0800 Subject: [PATCH] refactor(Setting): get init state from store --- src/containers/Settings/index.tsx | 68 +++++++++++++------------------ src/models/Config.ts | 2 +- src/stores/ConfigStore.ts | 21 +++++++++- 3 files changed, 50 insertions(+), 41 deletions(-) diff --git a/src/containers/Settings/index.tsx b/src/containers/Settings/index.tsx index b0396fc..1868a1b 100644 --- a/src/containers/Settings/index.tsx +++ b/src/containers/Settings/index.tsx @@ -4,9 +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 { updateConfig } from '@lib/request' +import { setLocalStorageItem, to } from '@lib/helper' +import { rootStores } from '@lib/createStore' import './style.scss' +import { isClashX } from '@lib/jsBridge' class Settings extends React.Component { state = { @@ -16,9 +18,9 @@ class Settings extends React.Component { proxyMode: 'Rule', socks5ProxyPort: 7891, httpProxyPort: 7890, - externalControllerHost: getLocalStorageItem('externalControllerAddr', '127.0.0.1'), - externalControllerPort: getLocalStorageItem('externalControllerPort', '8080'), - externalControllerSecret: getLocalStorageItem('secret', ''), + externalControllerHost: '127.0.0.1', + externalControllerPort: '8080', + externalControllerSecret: '', showEditDrawer: false } @@ -41,57 +43,45 @@ class Settings extends React.Component { } handleProxyModeChange = async (mode: string) => { - try { - await updateConfig({ mode }) + const [, err] = await to(updateConfig({ mode })) + if (err === null) { this.setState({ proxyMode: mode }) - } catch (err) { - throw err } } handleHttpPortSave = async () => { - try { - await updateConfig({ - 'redir-port': this.state.httpProxyPort - }) - } catch (err) { - throw err - } + const [, err] = await to(updateConfig({ 'redir-port': this.state.httpProxyPort })) + if (err === null) {} } handleSocksPortSave = async () => { - try { - await updateConfig({ - 'socket-port': this.state.socks5ProxyPort - }) - } catch (err) { - throw err - } + const [, err] = await to(updateConfig({ 'socket-port': this.state.socks5ProxyPort })) + if (err === null) {} } handleAllowLanChange = async (state: boolean) => { - try { - await updateConfig({ - 'allow-lan': state - }) + const [, err] = await to(updateConfig({ 'allow-lan': state })) + if (err === null) { 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 + if (isClashX()) { + await rootStores.config.fetchAndParseConfig() + } else { + await rootStores.config.fetchConfig() } + const general = rootStores.config.config.general + this.setState({ + allowConnectFromLan: general.allowLan, + proxyMode: general.mode, + socks5ProxyPort: general.socksPort, + httpProxyPort: general.port, + externalControllerHost: general.externalControllerAddr, + externalControllerPort: general.externalControllerPort, + externalControllerSecret: general.secret + }) } render () { diff --git a/src/models/Config.ts b/src/models/Config.ts index b44e067..89fb237 100644 --- a/src/models/Config.ts +++ b/src/models/Config.ts @@ -32,7 +32,7 @@ export interface Config { /** * controller port */ - externalControllerPort?: number + externalControllerPort?: string /** * controller address diff --git a/src/stores/ConfigStore.ts b/src/stores/ConfigStore.ts index 17aa007..9db6ced 100644 --- a/src/stores/ConfigStore.ts +++ b/src/stores/ConfigStore.ts @@ -2,6 +2,8 @@ import { observable, action, runInAction } from 'mobx' import * as yaml from 'yaml' import * as Models from '@models' import { jsBridge } from '@lib/jsBridge' +import { getConfig } from '@lib/request' +import { getLocalStorageItem } from '@lib/helper' export class ConfigStore { @@ -48,7 +50,7 @@ export class ConfigStore { redirPort: config['redir-port'] || 0, allowLan: config['allow-lan'] || false, externalControllerAddr: host[0] || '', - externalControllerPort: parseInt(host[1], 10) || 0, + externalControllerPort: host[1] || '', secret: config.secret || '', logLevel: config['log-level'] || 'info', mode: config.mode || 'Rule' @@ -61,4 +63,21 @@ export class ConfigStore { }) } + @action + async fetchConfig () { + const { data: config } = await getConfig() + this.config = { + general: { + port: config.port, + socksPort: config['socket-port'], + redirPort: config['redir-port'], + allowLan: config['allow-lan'], + mode: config.mode, + externalControllerAddr: getLocalStorageItem('externalControllerAddr', '127.0.0.1'), + externalControllerPort: getLocalStorageItem('externalControllerPort', '8080'), + secret: getLocalStorageItem('secret', '') + } + } + } + }