Browse Source

Refactor socket status into SocketStatusPane.

pull/1/head
Titouan Rigoudy 9 years ago
parent
commit
1cf89b8ecb
5 changed files with 51 additions and 14 deletions
  1. +1
    -0
      src/actions/socketActionsFactory.js
  2. +3
    -3
      src/components/ConnectForm.js
  3. +32
    -0
      src/components/SocketStatusPane.js
  4. +10
    -5
      src/components/SolsticeApp.js
  5. +5
    -6
      src/reducers/socket.js

+ 1
- 0
src/actions/socketActionsFactory.js View File

@ -7,6 +7,7 @@ export default (socketClient) => ({
const action = { type: SOCKET_SET_OPENING }; const action = { type: SOCKET_SET_OPENING };
try { try {
socketClient.open(url); socketClient.open(url);
action.payload = url;
} catch (err) { } catch (err) {
action.error = true; action.error = true;
action.payload = err; action.payload = err;


+ 3
- 3
src/components/ConnectForm.js View File

@ -5,9 +5,9 @@ import { STATE_CLOSED } from "../constants/socket";
const ConnectForm = (props) => { const ConnectForm = (props) => {
const { fields: { url }, handleSubmit, socket, socketActions } = props;
const { fields: { url }, handleSubmit, socket, socketOpen } = props;
const submit = (values, dispatch) => { const submit = (values, dispatch) => {
dispatch(socketActions.open(values.url));
dispatch(socketOpen(values.url));
}; };
return ( return (
<form onSubmit={handleSubmit(submit)}> <form onSubmit={handleSubmit(submit)}>
@ -24,7 +24,7 @@ ConnectForm.propTypes = {
fields: PropTypes.object.isRequired, fields: PropTypes.object.isRequired,
handleSubmit: PropTypes.func.isRequired, handleSubmit: PropTypes.func.isRequired,
socket: PropTypes.object.isRequired, socket: PropTypes.object.isRequired,
socketActions: PropTypes.object.isRequired
socketOpen: PropTypes.func.isRequired
}; };
export default reduxForm({ export default reduxForm({


+ 32
- 0
src/components/SocketStatusPane.js View File

@ -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 <div>Connection status: {string}</div>;
};
SocketStatusPane.propTypes = {
state: PropTypes.number.isRequired,
url: PropTypes.string
};
export default SocketStatusPane;

+ 10
- 5
src/components/SolsticeApp.js View File

@ -1,21 +1,26 @@
import React, {PropTypes} from "react"; import React, {PropTypes} from "react";
import ConnectForm from "../components/ConnectForm"; import ConnectForm from "../components/ConnectForm";
import SocketStatusPane from "../components/SocketStatusPane";
import { STATE_OPEN } from "../constants/socket"; import { STATE_OPEN } from "../constants/socket";
const SolsticeApp = (props) => { const SolsticeApp = (props) => {
const { socket, actions } = props; const { socket, actions } = props;
if (socket.state !== STATE_OPEN ) { if (socket.state !== STATE_OPEN ) {
return ( return (
<ConnectForm socket={socket}
socketActions={actions.socketActions}/>
<main>
<ConnectForm socket={socket}
socketOpen={actions.socketActions.open}/>
<SocketStatusPane {...socket} />
</main>
); );
} }
return ( return (
<div>
<main>
<h1>Solstice web UI</h1> <h1>Solstice web UI</h1>
<div>Socket open</div>
</div>
<SocketStatusPane {...socket} />
</main>
); );
}; };


+ 5
- 6
src/reducers/socket.js View File

@ -16,23 +16,23 @@ export default function socket(state = initialState, action) {
if (action.error) { if (action.error) {
return state; return state;
} }
return objectAssign({}, state, { state: STATE_OPENING });
return { ...state, state: STATE_OPENING, url: action.payload };
case types.SOCKET_SET_OPEN: case types.SOCKET_SET_OPEN:
return objectAssign({}, state, { state: STATE_OPEN });
return { ...state, state: STATE_OPEN };
case types.SOCKET_SET_CLOSING: case types.SOCKET_SET_CLOSING:
if (action.error) { if (action.error) {
return state; return state;
} }
return objectAssign({}, state, { state: STATE_CLOSING });
return { ...state, state: STATE_CLOSING };
case types.SOCKET_SET_CLOSED: case types.SOCKET_SET_CLOSED:
return objectAssign({}, state, { state: STATE_CLOSED });
return { ...state, state: STATE_CLOSED };
case types.SOCKET_SET_ERROR: case types.SOCKET_SET_ERROR:
if (state.state === STATE_OPENING) { if (state.state === STATE_OPENING) {
return objectAssign({}, state, { state: STATE_CLOSED });
return { ...state, state: STATE_CLOSED };
} }
return state; return state;
@ -48,4 +48,3 @@ export default function socket(state = initialState, action) {
return state; return state;
} }
} }

Loading…
Cancel
Save