Skip to content

Commit f8167bd

Browse files
committed
Update with chatroom
1 parent 2697a8e commit f8167bd

File tree

3 files changed

+60
-36
lines changed

3 files changed

+60
-36
lines changed

app/src/components/bottom/chatRoom.tsx

Lines changed: 38 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,41 +1,33 @@
1-
import React, { useState, useEffect } from 'react';
2-
import { useDispatch, useSelector } from 'react-redux';
1+
import React, { useEffect } from 'react';
2+
import { useSelector } from 'react-redux';
33
import { RootState } from '../../redux/store';
4-
import Box from '@mui/material/Box';
5-
import {
6-
initializeSocket,
7-
getSocket,
8-
emitEvent,
9-
disconnectSocket
10-
} from '../../helperFunctions/socket';
4+
import { emitEvent } from '../../helperFunctions/socket';
115

126
const Chatroom = (props): JSX.Element => {
137
const collaborationRoom = useSelector((store: RootState) => store.roomSlice);
14-
// const newMessage = useSelector(
15-
// (store: RootState) => store.roomSlice.newMessage
16-
// );
17-
const socket = getSocket();
8+
9+
const newMessage = useSelector(
10+
(store: RootState) => store.roomSlice.newMessage
11+
);
1812

1913
const nickName = collaborationRoom.userName;
2014
const roomCode = collaborationRoom.roomCode;
21-
// const newMessage = collaborationRoom.newMessage;
2215

2316
const wrapperStyles = {
2417
border: `2px solid #f2fbf8`,
2518
borderRadius: '8px',
2619
width: '70%',
27-
height: '90%',
20+
height: '100%',
2821
display: 'column',
2922
padding: '20px',
30-
// justifyContent: 'center',
3123
backgroundColor: '#42464C',
3224
overflow: 'auto'
33-
// scrollTop: 'scrollHeight'
3425
};
3526

3627
const inputContainerStyles = {
3728
width: '100%',
38-
padding: '10px',
29+
paddingLeft: '30px',
30+
paddingTop: '10px',
3931
display: 'flex',
4032
justifyContent: 'center'
4133
};
@@ -52,7 +44,7 @@ const Chatroom = (props): JSX.Element => {
5244
const buttonStyles = {
5345
padding: '10px',
5446
marginLeft: '10px',
55-
backgroundColor: '#4CAF50',
47+
backgroundColor: '#0070BA',
5648
color: 'white',
5749
border: 'none',
5850
borderRadius: '5px',
@@ -64,31 +56,44 @@ const Chatroom = (props): JSX.Element => {
6456
const messageInput = document.getElementById(
6557
'message-input'
6658
) as HTMLInputElement;
67-
const message = messageInput.value;
68-
emitEvent('send-chat-message', roomCode, { message, nickName });
69-
messageInput.value = '';
59+
const message = messageInput.value.trim();
60+
if (message !== '') {
61+
emitEvent('send-chat-message', roomCode, { message, nickName });
62+
messageInput.value = '';
63+
}
64+
};
65+
66+
const handleMessageStyle = (messageNickName: string) => {
67+
return {
68+
color: messageNickName === nickName ? '#66C4EB' : 'white'
69+
};
7070
};
7171

72-
socket.on('new chat message', (remoteData) => {
73-
const messageContainer = document.getElementById('message-container');
74-
const messageElement = document.createElement('div');
75-
messageElement.innerText =
76-
nickName === remoteData.nickName
77-
? `You: ${remoteData.message}`
78-
: `${remoteData.nickName}: ${remoteData.message}`;
79-
messageContainer.append(messageElement);
80-
});
72+
useEffect(() => {
73+
if (newMessage.nickName !== '' && newMessage.message !== '') {
74+
const messageContainer = document.getElementById('message-container');
75+
const messageElement = document.createElement('div');
76+
messageElement.innerText =
77+
nickName === newMessage.nickName
78+
? `You: ${newMessage.message}`
79+
: `${newMessage.nickName}: ${newMessage.message}`;
80+
messageElement.style.color = handleMessageStyle(
81+
newMessage.nickName
82+
).color;
83+
messageContainer.append(messageElement);
84+
}
85+
}, [newMessage]);
8186

8287
return (
8388
<div
8489
className="livechat-panel"
8590
style={{ paddingLeft: '10px', width: '100%', height: '100%' }}
8691
>
87-
<div className="roomInfo" style={{ paddingLeft: '10px' }}>
92+
<div className="roomInfo" style={{ paddingLeft: '70px' }}>
8893
<p>Current room: {roomCode}</p>
8994
<p>Your Nickname: {nickName}</p>
9095
</div>
91-
<div style={{ justifyContent: 'center', display: 'flex', height: '90%' }}>
96+
<div style={{ justifyContent: 'center', display: 'flex', height: '80%' }}>
9297
<div id="message-container" style={{ ...wrapperStyles }}></div>
9398
</div>
9499
<form

app/src/components/left/RoomsContainer.tsx

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,8 @@ import {
4040
setRoomCode,
4141
setUserName,
4242
setUserJoined,
43-
setUserList
43+
setUserList,
44+
setNewMessage
4445
} from '../../redux/reducers/slice/roomSlice';
4546
import { codePreviewCooperative } from '../../redux/reducers/slice/codePreviewSlice';
4647
import { cooperativeStyle } from '../../redux/reducers/slice/styleSlice';
@@ -69,6 +70,9 @@ const RoomsContainer = () => {
6970
const userJoined = useSelector(
7071
(store: RootState) => store.roomSlice.userJoined
7172
);
73+
const newMessage = useSelector(
74+
(store: RootState) => store.roomSlice.newMessage
75+
);
7276

7377
// for websockets - initialize socket connection passing in roomCode
7478
function initSocketConnection(roomCode: string) {
@@ -106,6 +110,12 @@ const RoomsContainer = () => {
106110
dispatch(setUserList(newUserList));
107111
});
108112

113+
socket.on('new chat message', (messageData) => {
114+
if (JSON.stringify(messageData) !== JSON.stringify(newMessage)) {
115+
dispatch(setNewMessage(messageData));
116+
}
117+
});
118+
109119
// dispatch add child to local state when element has been added by another user
110120
socket.on('child data from server', (childData: object) => {
111121
// console.log('child data received by users', childData);

app/src/redux/reducers/slice/roomSlice.ts

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { createSlice } from '@reduxjs/toolkit';
44
const initialState = {
55
roomCode: '',
66
userName: '',
7+
newMessage: { nickName: '', message: '' },
78
userList: [],
89
userJoined: false
910
};
@@ -24,12 +25,20 @@ const roomSlice = createSlice({
2425
},
2526
setUserJoined: (state, action) => {
2627
state.userJoined = action.payload;
28+
},
29+
setNewMessage: (state, action) => {
30+
state.newMessage = action.payload;
2731
}
2832
}
2933
});
3034

3135
// Exports the action creator function to be used with useDispatch
32-
export const { setRoomCode, setUserName, setUserList, setUserJoined } =
33-
roomSlice.actions;
36+
export const {
37+
setRoomCode,
38+
setUserName,
39+
setUserList,
40+
setUserJoined,
41+
setNewMessage
42+
} = roomSlice.actions;
3443
// Exports so we can combine in rootReducer
3544
export default roomSlice.reducer;

0 commit comments

Comments
 (0)