import { useEffect, useState, useMemo, useRef, Fragment} from 'react'; import { MessageForm } from './messageForm/MessageForm'; import {Button,Avatar, Box, Container} 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'; export const ChatPage = ({ onExit, token }) => { 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 audio = useRef(null) 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(); onExit(); } }).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}

{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
) }
) }