summaryrefslogtreecommitdiffhomepage
path: root/app/app.js
diff options
context:
space:
mode:
authorAndrej Mihajlov <and@codeispoetry.ru>2017-02-21 14:12:39 +0000
committerAndrej Mihajlov <and@codeispoetry.ru>2017-02-21 14:12:39 +0000
commit0fd89cfc1c91d90ec625199ba0460bb5fb8c9ec6 (patch)
tree04b2f15f7f9aef83aa749b29757458486a11fee6 /app/app.js
parent191d72546accf308696f57ee14d27c1b221ad4b9 (diff)
downloadmullvadvpn-0fd89cfc1c91d90ec625199ba0460bb5fb8c9ec6.tar.xz
mullvadvpn-0fd89cfc1c91d90ec625199ba0460bb5fb8c9ec6.zip
State management via Backend events
Diffstat (limited to 'app/app.js')
-rw-r--r--app/app.js52
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 };