summaryrefslogtreecommitdiffhomepage
path: root/app
diff options
context:
space:
mode:
authorAndrej Mihajlov <and@codeispoetry.ru>2017-03-01 12:17:07 +0000
committerAndrej Mihajlov <and@codeispoetry.ru>2017-03-01 12:17:07 +0000
commit5a86b08fb46cbfee360d349668e1e1dc3ad470be (patch)
tree4f867baaec22fb81f5f86244b9bed1a5e87dbce3 /app
parent156cc54f9a8582efd6468b7465b54e093306bf37 (diff)
downloadmullvadvpn-5a86b08fb46cbfee360d349668e1e1dc3ad470be.tar.xz
mullvadvpn-5a86b08fb46cbfee360d349668e1e1dc3ad470be.zip
Move routing based from backend events into separate module for improved testability
Diffstat (limited to 'app')
-rw-r--r--app/app.js21
-rw-r--r--app/lib/backend-routing.js19
2 files changed, 24 insertions, 16 deletions
diff --git a/app/app.js b/app/app.js
index 369cd6cebb..99dcd4e83a 100644
--- a/app/app.js
+++ b/app/app.js
@@ -2,7 +2,7 @@ import React from 'react';
import ReactDOM from 'react-dom';
import { Provider } from 'react-redux';
import { Router, createMemoryHistory } from 'react-router';
-import { syncHistoryWithStore, replace } from 'react-router-redux';
+import { syncHistoryWithStore } from 'react-router-redux';
import { webFrame, ipcRenderer } from 'electron';
import makeRoutes from './routes';
import configureStore from './store';
@@ -10,6 +10,7 @@ import userActions from './actions/user';
import connectActions from './actions/connect';
import Backend from './lib/backend';
import mapBackendEventsToReduxActions from './lib/backend-redux-actions';
+import mapBackendEventsToRouter from './lib/backend-routing';
import { LoginState, ConnectionState } from './constants';
const initialState = {};
@@ -54,25 +55,13 @@ const updateTrayIcon = () => {
};
// patch backend
-backend.syncWithReduxStore(backend, store);
+backend.syncWithReduxStore(store);
// Setup primary event handlers to translate backend events into redux dispatch
mapBackendEventsToReduxActions(backend, store);
-// redirect user to main screen after login
-backend.on(Backend.EventType.login, (account, error) => {
- if(error) { return; } // no-op on error
-
- setTimeout(() => {
- const { settings } = store.getState();
- const server = backend.serverInfo(settings.preferredServer);
- backend.connect(server.address);
- store.dispatch(replace('/connect'));
- }, 1000);
-});
-
-// redirect user to login page on logout
-backend.on(Backend.EventType.logout, () => store.dispatch(replace('/')));
+// Setup routing based on backend events
+mapBackendEventsToRouter(backend, store);
// Setup events to update tray icon
backend.on(Backend.EventType.connect, updateTrayIcon);
diff --git a/app/lib/backend-routing.js b/app/lib/backend-routing.js
new file mode 100644
index 0000000000..7ff114f709
--- /dev/null
+++ b/app/lib/backend-routing.js
@@ -0,0 +1,19 @@
+import { replace } from 'react-router-redux';
+import Backend from './backend';
+
+export default function mapBackendEventsToRouter(backend, store) {
+ // redirect user to main screen after login
+ backend.on(Backend.EventType.login, (account, error) => {
+ if(error) { return; } // no-op on error
+
+ setTimeout(() => {
+ const { settings } = store.getState();
+ const server = backend.serverInfo(settings.preferredServer);
+ backend.connect(server.address);
+ store.dispatch(replace('/connect'));
+ }, 1000);
+ });
+
+ // redirect user to login page on logout
+ backend.on(Backend.EventType.logout, () => store.dispatch(replace('/')));
+} \ No newline at end of file