-
-
+
+
+
);
}
@@ -32,9 +38,17 @@ class RoomsPane extends React.Component {
RoomsPane.propTypes = {
rooms: PropTypes.object.isRequired,
+ roomActions: PropTypes.object.isRequired,
socketSend: PropTypes.func.isRequired
};
+const mapStateToProps = (state) => state.rooms;
+
+const mapDispatchToProps = (dispatch) => ({
+ roomActions: bindActionCreators(roomActions, dispatch)
+});
+
export default connect(
- state => state.rooms
+ mapStateToProps,
+ mapDispatchToProps
)(RoomsPane);
diff --git a/src/reducers/rooms.js b/src/reducers/rooms.js
index 6491df3..afd3ed9 100644
--- a/src/reducers/rooms.js
+++ b/src/reducers/rooms.js
@@ -1,7 +1,8 @@
-import { SOCKET_RECEIVE_MESSAGE } from "../constants/ActionTypes";
+import { ROOM_SELECT, SOCKET_RECEIVE_MESSAGE } from "../constants/ActionTypes";
const initialState = {
- rooms: new Map()
+ rooms: new Map(),
+ selected: null
};
const reduceRoomList = (old_rooms, room_list) => {
@@ -47,6 +48,10 @@ export default (state = initialState, action) => {
switch (type) {
case SOCKET_RECEIVE_MESSAGE:
return reduceReceiveMessage(state, payload);
+
+ case ROOM_SELECT:
+ return { ...state, selected: payload };
+
default:
return state;
}
diff --git a/src/styles/styles.scss b/src/styles/styles.scss
index 95df057..531deae 100644
--- a/src/styles/styles.scss
+++ b/src/styles/styles.scss
@@ -6,4 +6,104 @@ body {
-moz-font-smoothing: antialiased;
font-smoothing: antialiased;
font-weight: 300;
+ padding: 0 !important;
+ margin: 0 !important;
+ height: 100%;
+}
+
+html {
+ padding: 0;
+ margin: 0;
+ height: 100vh;
+}
+
+#app, #solstice-app {
+ height: 100%;
+ margin: 0;
+ padding: 0;
+}
+
+#solstice-app {
+ display: flex;
+ flex-flow: column;
+}
+
+header {
+ margin: 0;
+ padding: 1.5em 2em;
+}
+
+header h1 {
+ margin: 0;
+}
+
+footer {
+ display: flex;
+}
+
+main {
+ height: 85%;
+ margin: 0;
+ padding: 0;
+}
+
+#rooms-pane {
+ display: flex;
+ border: solid grey 0.1em;
+ height: 100%;
+}
+
+#room-chat {
+ border: solid grey 0.1em;
+ padding: 2em;
+}
+
+#room-list {
+ flex: 1;
+ display: flex;
+ flex-flow: column;
+ border: solid grey 0.1em;
+ height: 100%;
+ overflow: auto;
+}
+
+#room-chat {
+ flex: 3;
+}
+
+#room-list-header {
+ display: flex;
+ flex-flow: row;
+ border: solid grey 0.1em;
+}
+
+#room-list-header div {
+ flex: 1;
+ border: solid grey 0.1em;
+}
+
+#room-list ul {
+ list-style: none;
+ padding: 0;
+ margin: 0;
+}
+
+.room {
+ display: flex;
+ color: inherit;
+ text-decoration: inherit;
+ padding: .5em 1em;
+ border: solid grey 0.1em;
+}
+
+.room:hover {
+ background: lightgrey;
+}
+
+.room:active {
+ background: grey;
+}
+
+#login-status-pane, #socket-status-pane {
+ flex: 1;
}