From 1cf89b8ecbfadf3b73ecb2b7287d0f010bbda98f Mon Sep 17 00:00:00 2001 From: Titouan Rigoudy Date: Mon, 7 Mar 2016 17:47:39 +0100 Subject: [PATCH] Refactor socket status into SocketStatusPane. --- src/actions/socketActionsFactory.js | 1 + src/components/ConnectForm.js | 6 +++--- src/components/SocketStatusPane.js | 32 +++++++++++++++++++++++++++++ src/components/SolsticeApp.js | 15 +++++++++----- src/reducers/socket.js | 11 +++++----- 5 files changed, 51 insertions(+), 14 deletions(-) create mode 100644 src/components/SocketStatusPane.js diff --git a/src/actions/socketActionsFactory.js b/src/actions/socketActionsFactory.js index 8a8932e..a7f04c0 100644 --- a/src/actions/socketActionsFactory.js +++ b/src/actions/socketActionsFactory.js @@ -7,6 +7,7 @@ export default (socketClient) => ({ const action = { type: SOCKET_SET_OPENING }; try { socketClient.open(url); + action.payload = url; } catch (err) { action.error = true; action.payload = err; diff --git a/src/components/ConnectForm.js b/src/components/ConnectForm.js index 922aaa2..bc35c25 100644 --- a/src/components/ConnectForm.js +++ b/src/components/ConnectForm.js @@ -5,9 +5,9 @@ import { STATE_CLOSED } from "../constants/socket"; const ConnectForm = (props) => { - const { fields: { url }, handleSubmit, socket, socketActions } = props; + const { fields: { url }, handleSubmit, socket, socketOpen } = props; const submit = (values, dispatch) => { - dispatch(socketActions.open(values.url)); + dispatch(socketOpen(values.url)); }; return (
@@ -24,7 +24,7 @@ ConnectForm.propTypes = { fields: PropTypes.object.isRequired, handleSubmit: PropTypes.func.isRequired, socket: PropTypes.object.isRequired, - socketActions: PropTypes.object.isRequired + socketOpen: PropTypes.func.isRequired }; export default reduxForm({ diff --git a/src/components/SocketStatusPane.js b/src/components/SocketStatusPane.js new file mode 100644 index 0000000..105a52e --- /dev/null +++ b/src/components/SocketStatusPane.js @@ -0,0 +1,32 @@ +import React, { PropTypes } from "react"; + +import { + STATE_OPENING, STATE_OPEN, STATE_CLOSING, STATE_CLOSED +} from "../constants/socket"; + +const SocketStatusPane = (props) => { + const { state, url } = props; + let string; + switch (state) { + case STATE_OPENING: + string = `connecting to ${url}`; + break; + case STATE_OPEN: + string = `connected to ${url}`; + break; + case STATE_CLOSING: + string = `disconnecting from ${url}`; + break; + case STATE_CLOSED: + string = `disconnected`; + break; + } + return
Connection status: {string}
; +}; + +SocketStatusPane.propTypes = { + state: PropTypes.number.isRequired, + url: PropTypes.string +}; + +export default SocketStatusPane; diff --git a/src/components/SolsticeApp.js b/src/components/SolsticeApp.js index caca388..c33cd88 100644 --- a/src/components/SolsticeApp.js +++ b/src/components/SolsticeApp.js @@ -1,21 +1,26 @@ import React, {PropTypes} from "react"; import ConnectForm from "../components/ConnectForm"; +import SocketStatusPane from "../components/SocketStatusPane"; + import { STATE_OPEN } from "../constants/socket"; const SolsticeApp = (props) => { const { socket, actions } = props; if (socket.state !== STATE_OPEN ) { return ( - +
+ + +
); } return ( -
+

Solstice web UI

-
Socket open
-
+ + ); }; diff --git a/src/reducers/socket.js b/src/reducers/socket.js index 18741ee..3e34b3e 100644 --- a/src/reducers/socket.js +++ b/src/reducers/socket.js @@ -16,23 +16,23 @@ export default function socket(state = initialState, action) { if (action.error) { return state; } - return objectAssign({}, state, { state: STATE_OPENING }); + return { ...state, state: STATE_OPENING, url: action.payload }; case types.SOCKET_SET_OPEN: - return objectAssign({}, state, { state: STATE_OPEN }); + return { ...state, state: STATE_OPEN }; case types.SOCKET_SET_CLOSING: if (action.error) { return state; } - return objectAssign({}, state, { state: STATE_CLOSING }); + return { ...state, state: STATE_CLOSING }; case types.SOCKET_SET_CLOSED: - return objectAssign({}, state, { state: STATE_CLOSED }); + return { ...state, state: STATE_CLOSED }; case types.SOCKET_SET_ERROR: if (state.state === STATE_OPENING) { - return objectAssign({}, state, { state: STATE_CLOSED }); + return { ...state, state: STATE_CLOSED }; } return state; @@ -48,4 +48,3 @@ export default function socket(state = initialState, action) { return state; } } -