Browse Source

Tweak RoomChatHeader code and appearance.

pull/1/head
Titouan Rigoudy 9 years ago
parent
commit
85ad7c2e40
3 changed files with 47 additions and 25 deletions
  1. +22
    -16
      src/components/RoomChatHeader.js
  2. +9
    -6
      src/containers/RoomChat.js
  3. +16
    -3
      src/styles/styles.scss

+ 22
- 16
src/components/RoomChatHeader.js View File

@ -1,39 +1,45 @@
import React, { PropTypes } from "react"; import React, { PropTypes } from "react";
import ImmutablePropTypes from "react-immutable-proptypes"; import ImmutablePropTypes from "react-immutable-proptypes";
const ID = "room-chat-header";
const make_header = (title, button) => (
<div id="room-chat-header">
<div id="room-chat-header-title">{title}</div>
{button}
</div>
);
const RoomChatHeader = ({ membership, room_name, roomActions }) => {
switch (membership) {
const RoomChatHeader = ({ room, roomActions }) => {
if (!room) {
return make_header("Select a room");
}
switch (room.membership) {
case "Member": case "Member":
{ {
const onClick = (event) => { const onClick = (event) => {
roomActions.leave(room_name);
roomActions.select(null); roomActions.select(null);
event.preventDefault();
roomActions.leave(room.name);
}; };
return (
<div id={ID}>
{room_name}
<button onClick={onClick}>Leave</button>
</div>
);
const button = <button onClick={onClick}>Leave</button>;
return make_header(room.name, button);
} }
case "NonMember": case "NonMember":
return <div id={ID}>Not a member of {room_name}</div>;
return make_header(`Not a member of ${room.name}`);
case "Joining": case "Joining":
return <div id={ID}>Joining {room_name}</div>;
return make_header(`Joining ${room.name}`);
case "Leaving": case "Leaving":
return <div id={ID}>Leaving {room_name}</div>;
return make_header(`Leaving ${room.name}`);
} }
}; };
RoomChatHeader.propTypes = { RoomChatHeader.propTypes = {
membership: PropTypes.string.isRequired,
room_name: PropTypes.string.isRequired,
room: PropTypes.shape({
membership: PropTypes.string.isRequired,
name: PropTypes.string.isRequired
}),
roomActions: PropTypes.shape({ roomActions: PropTypes.shape({
leave: PropTypes.func.isRequired, leave: PropTypes.func.isRequired,
select: PropTypes.func.isRequired select: PropTypes.func.isRequired


+ 9
- 6
src/containers/RoomChat.js View File

@ -30,17 +30,21 @@ class RoomChat extends React.Component {
render() { render() {
const { login_user_name, name, room, roomActions } = this.props; const { login_user_name, name, room, roomActions } = this.props;
// If no room is selected, just tell the user to select one.
if (!name || !room) { if (!name || !room) {
return <div id={ID}>Select a room</div>;
return (
<div id={ID}>
<RoomChatHeader
roomActions={roomActions}
/>
</div>
);
} }
if (room.membership != "Member") { if (room.membership != "Member") {
return ( return (
<div id={ID}> <div id={ID}>
<RoomChatHeader <RoomChatHeader
room_name={name}
membership={room.membership}
room={{ membership: room.membership, name}}
roomActions={roomActions} roomActions={roomActions}
/> />
</div> </div>
@ -51,8 +55,7 @@ class RoomChat extends React.Component {
return ( return (
<div id={ID}> <div id={ID}>
<RoomChatHeader <RoomChatHeader
room_name={name}
membership={room.membership}
room={{ membership: room.membership, name}}
roomActions={roomActions} roomActions={roomActions}
/> />
<RoomChatMessageList <RoomChatMessageList


+ 16
- 3
src/styles/styles.scss View File

@ -81,15 +81,28 @@ main {
#room-chat-header { #room-chat-header {
flex: 1; flex: 1;
text-align: center;
font-size: 1.3em;
padding: 0.8em; padding: 0.8em;
border: solid grey 0.1em; border: solid grey 0.1em;
display: flex;
flex-flow: row;
justify-content: space-between;
align-items: center;
}
#room-chat-header-title {
font-size: 1.3em;
text-align: center;
flex: 1;
}
#room-chat-header > button {
padding: 0.5em 1em;
} }
#room-chat-message-list { #room-chat-message-list {
display: block; display: block;
height: 84%;
height: 83%;
width: 100%; width: 100%;
box-sizing: border-box; box-sizing: border-box;
margin: 0; margin: 0;


Loading…
Cancel
Save