date synced

This commit is contained in:
Sergey Yarkov 2020-08-25 04:24:33 +03:00
parent 1c4937d31a
commit 1b9a4ebb22
5 changed files with 21 additions and 11 deletions

1
.gitignore vendored
View File

@ -1 +1,2 @@
node_modules node_modules
.idea

View File

@ -12,24 +12,25 @@ const ChatBox = ({ user }) => {
const sendMessage = e => { const sendMessage = e => {
e.preventDefault() e.preventDefault()
const message = e.target.elements.message const message = e.target.elements.message
const date = new Date()
socket.emit('chat:message', message.value, user.username) socket.emit('chat:message', message.value, user.username, `${date.getHours()}:${(`0${date.getMinutes()}`).slice(-2)}`)
message.value = '' message.value = ''
} }
const ChatContent = () => <div ref={chatContentElement} className="chat-content"> const ChatContent = () => <div ref={chatContentElement} className="chat-content">
{messages.map((obj, i) => { {messages.map((client, i) => {
const date = new Date()
return ( return (
<div key={i} className='message'> <div key={i} className='message'>
<div className="message-username"> <div className="message-username">
<p> <p>
{obj.username} {client.username}
<span>{`${date.getHours()}:${date.getMinutes()}`}</span> <span>{client.date}</span>
</p> </p>
</div> </div>
<div className="message-text"> <div className="message-text">
{obj.message} {client.message}
</div> </div>
</div> </div>
) )
@ -52,8 +53,8 @@ const ChatBox = ({ user }) => {
} }
React.useEffect(() => { React.useEffect(() => {
socket.on('chat:message', (message, username) => { socket.on('chat:message', (message, username, date) => {
setMessages(messages => ([...messages, { message, username }])) setMessages(messages => ([...messages, { message, username, date }]))
chatContentElement.current.scrollTop = chatContentElement.current.scrollHeight chatContentElement.current.scrollTop = chatContentElement.current.scrollHeight
inputMessageElement.current.focus() inputMessageElement.current.focus()
}) })

View File

@ -15,12 +15,17 @@ const EnterChat = ({ setUser }) => {
return return
} }
if (username.match(/\d/)) {
setAuthError({ status: true, message: '*Numbers are not allowed!' })
return
}
if (username.length >= maxUserameLength) { if (username.length >= maxUserameLength) {
setAuthError({ status: true, message: `*Max username length: ${maxUserameLength}` }) setAuthError({ status: true, message: `*Max username length: ${maxUserameLength}` })
return return
} }
setUser({ username: username, isLoggedIn: true }) setUser({ username: username[0].toUpperCase() + username.slice(1), isLoggedIn: true })
setAuthError({ status: false, message: '' }) setAuthError({ status: false, message: '' })
} }

View File

@ -10,6 +10,9 @@
"type": "git", "type": "git",
"url": "git+https://github.com/sergeyyarkov/react-chat-app.git" "url": "git+https://github.com/sergeyyarkov/react-chat-app.git"
}, },
"dependencies": {
"concurrently": "^5.3.0"
},
"keywords": [], "keywords": [],
"author": "", "author": "",
"license": "ISC", "license": "ISC",

View File

@ -9,8 +9,8 @@ server.get('/', (req, res) => {
}) })
io.on('connection', (socket) => { io.on('connection', (socket) => {
socket.on('chat:message', (message, username) => { socket.on('chat:message', (message, username, date) => {
io.emit('chat:message', message, username) io.emit('chat:message', message, username, date)
}) })
}) })