import Container from '@mui/material/Container'; import { MessageForm } from './messageForm/MessageForm'; import Button from '@mui/material/Button'; import { UserInfo } from './userInfo/UserInfo'; import { Userslist } from './usersList/UsersList'; import Box from '@mui/material/Box'; import {io} from 'socket.io-client'; import { useEffect, useState} from 'react'; import './chatPage.scss'; import moment from 'moment-timezone'; export const ChatPage = ({ onExit, token }) => { const newtoken = token; const [socket, setSocket] = useState(null); const [messages, setMessages] = useState([]) const [user, setUser] = useState({}) const [usersOnline, setUsersOnline] = useState([]) const [allUsers, setAllUsers] = useState([]) useEffect(() => { if(newtoken){ try { const SERVER_URL = 'http://localhost:5000'; setSocket(io.connect(SERVER_URL, { auth: {token: newtoken} }) ) } catch (error) { console.log(error) } } }, []) const sendMessage = (data) => { if (data.message && data.message.length < 200) { console.log('send..' , data) socket.emit('message', data); } }; useEffect(() => { if(socket){ socket.on('connected', (data) => { setUser(data); console.log( data , 'connected to chat...'); }).on('error', (e) => { console.log(e) }); socket.on('allmessages', (data) => { setMessages(data) console.log( data , 'get messasges useEffect'); }).on('error', (e) => { console.log(e) }); socket.on('usersOnline', (data) => { console.log( data , 'online'); setUsersOnline(data) }).on('error', (e) => { console.log(e) }); socket.on('allDbUsers', (data) => { console.log( data , 'all users from db'); setAllUsers(data); }).on('error', (e) => { console.log(e) }); socket.on('disconnect', (data) => { console.log( data, 'token'); // if(data == 'io server disconnect') { // localStorage.removeItem('token'); // onExit(); // } }).on('error', (e) => { console.log(e) }); socket.on('message', (data) => { setMessages((messages) => [...messages, data] ) }).on('error', (e) => { console.log(e) }); } }, [socket]) return ( { messages.map((item) =>
{item.userName}

{item.text}

{item.createDate}
)}
{ sendMessage(data) }}>
{ user.isAdmin ? allUsers.map((item) =>
{item.userName}
{usersOnline.map( user =>{ if(item.userName == user.userName){ return online }} ) }
) : usersOnline.map((item) =>
{item.userName}
online
)}
) }