import React, { useState, useEffect, useRef, useContext } from 'react'; import { TokenContext } from '../utilities/token-provider'; import { io } from 'socket.io-client'; import '../../styles/popup-chat.css'; const socket = io(`${process.env.CHAT_URI}/chat`); const PopupChat = props => { const [open, setOpen] = useState(false); const [chatlog, setChatlog] = useState([]); const inputRef = useRef(); const sendRef = useRef(); const endRef = useRef(); const authTokens = useContext(TokenContext); const pushChatlog = line => setChatlog(prevChatlog => [...prevChatlog, line]); useEffect(() => { socket.on('message', message => pushChatlog(message)); socket.on('backlog', messages => setChatlog(prev => [...prev, ...messages])); socket.on('disconnect', reason => pushChatlog({ emphasis: true, text: 'Lost connection' })); }, []); useEffect(() => { if (open) { endRef.current.scrollIntoView(); } }, [chatlog, open]); if (!open) { return (