import React, { useState, ChangeEvent } from 'react' import faker from 'faker' import debounce from 'lodash/debounce' import { RoomWrapper, H4, Title, Button, Grid, Input } from './Components' import Client from './Client' interface User { id: string name: string } interface RoomProps { slug: string removeRoom: () => void } const createUser = (): User => ({ id: faker.random.uuid(), name: `${faker.name.firstName()} ${faker.name.lastName()}` }) const Room: React.FC = ({ slug, removeRoom }) => { const [users, setUsers] = useState([createUser(), createUser()]) const [roomSlug, setRoomSlug] = useState(slug) const [isRemounted, setRemountState] = useState(false) const remount = debounce(() => { setRemountState(true) setTimeout(setRemountState, 50, false) }, 300) const changeSlug = (e: ChangeEvent) => { setRoomSlug(e.target.value) remount() } const addUser = () => setUsers(users => users.concat(createUser())) const removeUser = (userId: string) => setUsers(users => users.filter((u: User) => u.id !== userId)) return ( <H4>Document slug:</H4> <Input type="text" value={roomSlug} onChange={changeSlug} /> <Button type="button" onClick={addUser}> Add random user </Button> <Button type="button" onClick={removeRoom}> Remove Room </Button> {users.map((user: User) => isRemounted ? null : ( ) )} ) } export default Room