import { useEffect, useState, useMemo, useRef, Fragment} from 'react'; import { MessageForm } from './messageForm/MessageForm'; import {Button,Avatar, Box} from '@mui/material'; import { UserInfo } from './userInfo/UserInfo'; import { dateFormat } from './utils/dateFormat'; import {io} from 'socket.io-client'; import './chatPage.scss'; import { scrollToBottom } from './utils/scrollToBottom'; import { banUser } from './service/banUser'; import { muteUser } from './service/muteUser'; import {sendMessage} from './service/sendMessage'; import { store } from '../../store'; import { removeToken} from '../../reducers/userDataReducer' import { useDispatch } from 'react-redux'; export const ChatPage = () => { const [socket, setSocket] = useState(null); const [messages, setMessages] = useState([]) const [user, setUser] = useState({}) const [usersOnline, setUsersOnline] = useState([]) const [allUsers, setAllUsers] = useState([]) const randomColor = require('randomcolor'); const endMessages = useRef(null); const token = localStorage.getItem('token'); const dispatch = useDispatch(); useEffect(() => { if(token){ try { setSocket(io.connect( process.env.REACT_APP_SERVER_URL || 'http://localhost:5000', {auth: {token}}) ) } catch (error) { console.log(error) } } }, [token]) useEffect(() => { if(socket){ socket.on('connected', (data) => { setUser(data); }).on('error', (e) => { console.log('On connected', e) }); socket.on('allmessages', (data) => { setMessages(data) }).on('error', (e) => { console.log('allmessages', e) }); socket.on('usersOnline', (data) => { setUsersOnline(data) }).on('error', (e) => { console.log(e) }); socket.on('allDbUsers', (data) => { setAllUsers(data); }).on('error', (e) => { console.log(e) }); socket.on('disconnect', (data) => { if(data === 'io server disconnect') { socket.disconnect(); store.dispatch(removeToken()); } }).on('error', (e) => { console.log('error token', e) }); socket.on('message', (data) => { setMessages((messages) => [...messages, data] ) }).on('error', (e) => { console.log(e) }); } // return () => { // socket.off('connected'); // socket.off('allmessages'); // } }, [socket]) useEffect(() => { scrollToBottom(endMessages) }, [messages]); let userColor = useMemo(() => randomColor(),[]);//color for myavatar return (
{ messages.map((item, i) => { if(item.userName == current.userName ) { return current.color } } )), fontSize: 10, width: '60px', height: '60px', color:'black' } }> {item.userName}
{ if(e.target.className.includes('myMessage')){ e.currentTarget.className += ' editMessage' } //add function to edit message }} className={ (item.userName ==user.userName) ? 'message myMessage' : 'message'} >

{item.text}

{dateFormat(item).time}
{dateFormat(item).year}
)}
sendMessage(data, socket)}>
{ user.isAdmin ? allUsers.map((item) =>
{ if(item.userName == current.userName ) { return current.color } }))}}>{item.userName}
{ usersOnline.map((user, i) =>{ if(item.userName == user.userName){ return online } }) }
) : usersOnline.map((item, i) =>
{item.userName}
online
) }
) }