diff options
| author | Andrej Mihajlov <and@codeispoetry.ru> | 2017-02-21 14:12:39 +0000 |
|---|---|---|
| committer | Andrej Mihajlov <and@codeispoetry.ru> | 2017-02-21 14:12:39 +0000 |
| commit | 0fd89cfc1c91d90ec625199ba0460bb5fb8c9ec6 (patch) | |
| tree | 04b2f15f7f9aef83aa749b29757458486a11fee6 /app/app.js | |
| parent | 191d72546accf308696f57ee14d27c1b221ad4b9 (diff) | |
| download | mullvadvpn-0fd89cfc1c91d90ec625199ba0460bb5fb8c9ec6.tar.xz mullvadvpn-0fd89cfc1c91d90ec625199ba0460bb5fb8c9ec6.zip | |
State management via Backend events
Diffstat (limited to 'app/app.js')
| -rw-r--r-- | app/app.js | 52 |
1 files changed, 50 insertions, 2 deletions
diff --git a/app/app.js b/app/app.js index 8789608887..a7c0aca8f3 100644 --- a/app/app.js +++ b/app/app.js @@ -6,9 +6,10 @@ import { syncHistoryWithStore } from 'react-router-redux'; import { webFrame } from 'electron'; import routes from './routes'; import configureStore from './store'; +import userActions from './actions/user'; +import connectActions from './actions/connect'; import Backend from './lib/backend'; - -const backend = new Backend(); +import { LoginState, ConnectionState } from './constants'; const initialState = {}; const store = configureStore(initialState); @@ -29,6 +30,53 @@ const rootElement = document.querySelector(document.currentScript.getAttribute(' // disable smart pinch. webFrame.setVisualZoomLevelLimits(1, 1); +// Create backend +const backend = new Backend(); + +// Setup events + +backend.on(Backend.EventType.connecting, (serverAddress) => { + store.dispatch(connectActions.connectionChange({ + status: ConnectionState.connecting, + error: null, + serverAddress + })); +}); + +backend.on(Backend.EventType.connect, (serverAddress, error) => { + const status = error ? ConnectionState.disconnected : ConnectionState.connected; + store.dispatch(connectActions.connectionChange({ error, status })); +}); + +backend.on(Backend.EventType.disconnect, () => { + store.dispatch(connectActions.connectionChange({ + status: ConnectionState.disconnected, + serverAddress: null, + error: null + })); +}); + +backend.on(Backend.EventType.logging, (account) => { + store.dispatch(userActions.loginChange({ + status: LoginState.connecting, + error: null, + account + })); +}); + +backend.on(Backend.EventType.login, (account, error) => { + const status = error ? LoginState.failed : LoginState.ok; + store.dispatch(userActions.loginChange({ status, error })); +}); + +backend.on(Backend.EventType.logout, () => { + store.dispatch(userActions.loginChange({ + status: LoginState.none, + account: null, + error: null + })); +}); + // helper method for router to pass backend down the component tree const createElement = (Component, props) => { const newProps = { ...props, backend }; |
