Skip to content

Commit 6138fad

Browse files
committed
added private chat and bug fixes
1 parent fa1cacb commit 6138fad

5 files changed

Lines changed: 59 additions & 24 deletions

File tree

server/server.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,12 @@ io.on('connection', (socket) => {
7777
sendMessageToChat(currentUser, data.chatId, data.message)
7878
})
7979

80+
socket.on('PRIVATE_MESSAGE', ({receiver, author})=>{
81+
const newChat = createChat({ name:`${receiver.name}&${author.name}`, users:[receiver, author] })
82+
socket.to(receiver.id).emit('PRIVATE_MESSAGE', newChat)
83+
socket.emit('PRIVATE_MESSAGE', newChat)
84+
})
85+
8086
})
8187

8288

src/components/ConversationList/index.js

Lines changed: 20 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,8 @@ import './ConversationList.css';
1010
export default class ConversationList extends Component {
1111

1212
state = {
13-
category: 'chats'
13+
category: 'chats',
14+
newReceiver : null
1415
}
1516

1617
render() {
@@ -34,24 +35,29 @@ export default class ConversationList extends Component {
3435

3536
{(this.state.category === 'online')?
3637
(this.props.users.map(user =>{
37-
return(
38-
<div key={user.id}>
39-
<div className="conversation-list-item">
40-
<div className="conversation-info">
41-
<h1 className="conversation-title">{ user.name }</h1>
42-
<p className="conversation-snippet">Active</p>
43-
</div>
44-
</div>
45-
</div>
46-
)}
38+
if(user.id !== this.props.user.id){
39+
return(
40+
<div key={user.id} onClick={() => {this.props.addPrivateChat({id:user.id, name: user.name})}}>
41+
<div className="conversation-list-item">
42+
<div className="conversation-info">
43+
<h1 className="conversation-title">{ user.name }</h1>
44+
<p className="conversation-snippet">Active</p>
45+
</div>
46+
</div>
47+
</div>
48+
)}
49+
else return null
50+
51+
}
4752
)):
4853

4954
(this.props.chats.map(chat =>{
5055
if(chat.name){
5156
const lastMessage = chat.messages[chat.messages.length - 1];
52-
const chatSideName = chat.users.find((name)=>{
53-
return name !== this.props.user.name
54-
}) || "Community"
57+
const receiver = chat.users.find((user)=>{
58+
return user.name !== this.props.user.name
59+
})
60+
const chatSideName = (receiver && receiver.name) ? (receiver.name):('Community')
5561
const classNames = (this.props.activeChat && this.props.activeChat.id === chat.id) ? 'active' : ''
5662
return(
5763
<div key={chat.id} onClick={ ()=>{ this.props.setActiveChat(chat) } }>

src/components/Login.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ class Login extends Component {
2020
e.preventDefault()
2121
const { socket } = this.props
2222
const { name } = this.state
23+
if (name === '' || null) return
2324
socket.emit("VERIFY_USER", name, this.setUser)
2425
}
2526

src/components/MessageList/index.js

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,11 @@ export default class MessageList extends Component {
1515
};
1616
}
1717

18-
componentDidMount() {
19-
this.setState({
20-
messages: this.props.activeChat.messages
21-
})
22-
}
18+
// componentDidMount() {
19+
// this.setState({
20+
// messages: this.props.activeChat.messages
21+
// })
22+
// }
2323

2424
handleSubmit = (e)=>{
2525
e.preventDefault()
@@ -36,11 +36,11 @@ export default class MessageList extends Component {
3636

3737
renderMessages() {
3838
let i = 0;
39-
let messageCount = this.state.messages.length;
39+
let messageCount = this.props.activeChat.messages.length;
4040
let messages = [];
4141

4242
while (i < messageCount) {
43-
let current = this.state.messages[i];
43+
let current = this.props.activeChat.messages[i];
4444
let isMine = current.author.name === this.props.user.name;
4545

4646
messages.push(
@@ -56,10 +56,14 @@ export default class MessageList extends Component {
5656
}
5757

5858
render() {
59+
const receiver = this.props.activeChat.users.find((user)=>{
60+
return user.name !== this.props.user.name
61+
})
62+
const chatTitle = (receiver && receiver.name) ? (receiver.name):('Community')
5963
return(
6064
<div className="message-list">
6165
<Toolbar
62-
title={this.props.activeChat.name}
66+
title={chatTitle}
6367
rightItems={[
6468
<ToolbarButton key="info" icon="ion-ios-information-circle-outline" />,
6569
<ToolbarButton key="video" icon="ion-ios-videocam" />,

src/components/Messenger/Messenger.js

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ class Messenger extends Component {
1919
componentDidMount(){
2020
height = window.innerHeight
2121
this.props.socket.emit('COM_CHAT', this.resetChat)
22+
this.props.socket.on('PRIVATE_MESSAGE', this.addChat)
2223
this.updateUserList()
2324
this.scrollDown()
2425
}
@@ -47,7 +48,7 @@ class Messenger extends Component {
4748
let newChats = chats.map((chat)=>{
4849
if(chat.id === chatId)
4950
chat.messages.push(message)
50-
console.log(chat.messages);
51+
// console.log(chat.messages, chat.name);
5152
return chat
5253
})
5354

@@ -62,7 +63,7 @@ class Messenger extends Component {
6263

6364
setActiveChat = (chat) => {
6465
this.setState({activeChat: chat})
65-
console.log(this.state.activeChat);
66+
// console.log(this.state.activeChat);
6667
}
6768

6869
sendMessage = (chatId, message) => {
@@ -74,6 +75,22 @@ class Messenger extends Component {
7475
container.scrollTop = container.scrollHeight
7576
}
7677

78+
addPrivateChat = (receiver) => {
79+
const {socket, user} = this.props
80+
const duplicate = this.checkDuplicate(receiver.name)
81+
if(duplicate) return null
82+
socket.emit('PRIVATE_MESSAGE', {receiver, author:user})
83+
}
84+
85+
checkDuplicate = (recName) => {
86+
const isDup = this.state.chats.find((chat) => {
87+
return chat.name === (`${recName}&${this.props.user.name}` || `${this.props.user.name}&${recName}` )
88+
})
89+
if(isDup){
90+
return true
91+
}else return false
92+
}
93+
7794
render(){
7895

7996
return(
@@ -86,6 +103,7 @@ class Messenger extends Component {
86103
logout={this.props.logout}
87104
chats={this.state.chats}
88105
setActiveChat={this.setActiveChat}
106+
addPrivateChat={this.addPrivateChat}
89107
activeChat={this.state.activeChat}/></div>): ''}
90108
</Col>
91109

0 commit comments

Comments
 (0)