diff options
| -rw-r--r-- | app/lib/backend.js | 14 | ||||
| -rw-r--r-- | app/redux/connection/actions.js | 26 | ||||
| -rw-r--r-- | app/redux/connection/reducers.js | 24 |
3 files changed, 54 insertions, 10 deletions
diff --git a/app/lib/backend.js b/app/lib/backend.js index 02ab2717f0..e8c8cbd464 100644 --- a/app/lib/backend.js +++ b/app/lib/backend.js @@ -276,9 +276,17 @@ export class Backend { log.info('Got new state from backend', newState); const newStatus = this._securityStateToConnectionState(newState); - this._store.dispatch(connectionActions.connectionChange({ - status: newStatus, - })); + switch(newStatus) { + case 'connecting': + this._store.dispatch(connectionActions.connecting()); + break; + case 'connected': + this._store.dispatch(connectionActions.connected()); + break; + case 'disconnected': + this._store.dispatch(connectionActions.disconnected()); + break; + } this.sync(); }); diff --git a/app/redux/connection/actions.js b/app/redux/connection/actions.js index e334cfd63b..e7fd03bc77 100644 --- a/app/redux/connection/actions.js +++ b/app/redux/connection/actions.js @@ -22,7 +22,10 @@ const copyIPAddress = () => { type ConnectingAction = { type: 'CONNECTING', - serverAddress: string, + serverAddress?: string, +}; +type ConnectedAction = { + type: 'CONNECTED', }; type DisconnectedAction = { type: 'DISCONNECTED', @@ -49,7 +52,12 @@ type NewLocationAction = { newLocation: Location, }; -export type ConnectionAction = ConnectionChangeAction | NewPublicIpAction | NewLocationAction | ConnectingAction | DisconnectedAction; +export type ConnectionAction = ConnectionChangeAction + | NewPublicIpAction + | NewLocationAction + | ConnectingAction + | ConnectedAction + | DisconnectedAction; function connectingTo(serverAddress: string): ConnectingAction { return { @@ -58,6 +66,18 @@ function connectingTo(serverAddress: string): ConnectingAction { }; } +function connecting(): ConnectingAction { + return { + type: 'CONNECTING', + }; +} + +function connected(): ConnectedAction { + return { + type: 'CONNECTED', + }; +} + function disconnected(): DisconnectedAction { return { type: 'DISCONNECTED', @@ -86,5 +106,5 @@ function newLocation(newLoc: Location): NewLocationAction { } -export default { connect, disconnect, copyIPAddress, connectionChange, newPublicIp, newLocation, connectingTo, disconnected }; +export default { connect, disconnect, copyIPAddress, connectionChange, newPublicIp, newLocation, connectingTo, connecting, connected, disconnected }; diff --git a/app/redux/connection/reducers.js b/app/redux/connection/reducers.js index d454e1bc4a..457a6c1bd6 100644 --- a/app/redux/connection/reducers.js +++ b/app/redux/connection/reducers.js @@ -30,18 +30,34 @@ export default function(state: ConnectionReduxState = initialState, action: Redu switch (action.type) { case 'CONNECTION_CHANGE': return { ...state, ...action.newData }; + case 'NEW_PUBLIC_IP': return { ...state, ...{ clientIp: action.ip }}; + case 'NEW_LOCATION': return { ...state, ...action.newLocation }; + case 'CONNECTING': - return { ...state, ...{ - status: 'connecting', - serverAddress: action.serverAddress, - }}; + return onConnecting(state, action); + + case 'CONNECTED': + return { ...state, ...{ status: 'connected' }}; + case 'DISCONNECTED': return { ...state, ...{ status: 'disconnected' }}; + default: return state; } } + +function onConnecting(state, action) { + const newState: $Shape<ConnectionReduxState> = { + status: 'connecting', + }; + + if (action.serverAddress) { + newState.serverAddress = action.serverAddress; + } + return { ...state, ...newState}; +} |
