import { useCallback, useState } from 'react' import { Stack, TextField, PrimaryButton, useTheme, Label, Spinner, } from '@fluentui/react' import type { FormEvent, FC } from 'react' import { classes } from './styles' import { useJoinFormState, useLocalState, useRemoteState } from '../state' import { commonClasses } from '../utils/theme/common-styles' interface JoinProps {} const JoinMeeting: FC = () => { const [userNameError, setUserNameError] = useState('') const theme = useTheme() const [socket] = useRemoteState(state => [state.socket]) const [preferences] = useLocalState(state => [state.preferences]) const { loading, error, userName, roomId } = useJoinFormState() const setState = useJoinFormState.setState const handleSubmit = useCallback( (e: FormEvent) => { e.preventDefault() if (!userName.trim()) { setUserNameError('Please enter your name') return } if (loading) return setState({ loading: true, error: null, }) socket.emit('request:join_room', { userName, roomId }, err => { if (err) { setState({ error: err.message, }) } setState({ loading: false, }) // should redirect to room via event listener in Eagle component }) useLocalState.setState({ preferences: { ...preferences, userName, }, }) }, [loading, preferences, roomId, setState, socket, userName], ) return (
setState({ roomId })} label="Meeting link or id" required /> { setState({ userName }) if (userNameError) { setUserNameError('') } }} placeholder="Your name" errorMessage={userNameError} required /> {loading ? : 'Join'}
) } export default JoinMeeting