import { FC, useEffect, useRef, useState } from "react" import { RoomState, UserState } from "../../lib/types" import { Socket } from "socket.io-client" import { ClientToServerEvents, ServerToClientEvents } from "../../lib/socket" import UserItem from "./UserItem" interface Props { socket: Socket } const UserList: FC = ({ socket }) => { const [users, _setUsers] = useState([]) const userRef = useRef(users) const setUsers = (newUsers: UserState[]) => { userRef.current = newUsers _setUsers(newUsers) } const [owner, _setOwner] = useState("") const ownerRef = useRef(owner) const setOwner = (newOwner: string) => { ownerRef.current = newOwner _setOwner(newOwner) } useEffect(() => { socket.on("update", (room: RoomState) => { if (ownerRef.current !== room.ownerId) { setOwner(room.ownerId) } setUsers(room.users) }) socket.emit("fetch") }, [socket]) return (
{users.map((user) => ( { const newUser = JSON.parse(JSON.stringify(user)) newUser.name = name socket.emit("updateUser", newUser) }} /> ))}
) } export default UserList