// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. // SPDX-License-Identifier: Apache-2.0 import React, { useState, useContext, ChangeEvent } from 'react'; import { useHistory } from 'react-router-dom'; import { Input, Flex, Heading, FormField, PrimaryButton, useMeetingManager, Modal, ModalBody, ModalHeader } from 'amazon-chime-sdk-component-library-react'; import { getErrorContext } from '../../providers/ErrorProvider'; import routes from '../../constants/routes'; import Card from '../../components/Card'; import Spinner from '../../components/Spinner'; import DevicePermissionPrompt from '../DevicePermissionPrompt'; import RegionSelection from './RegionSelection'; import { fetchMeeting, createGetAttendeeCallback, getBreakouts } from '../../utils/api'; import { useAppState } from '../../providers/AppStateProvider'; const MeetingForm: React.FC = () => { const meetingManager = useMeetingManager(); const { setAppMeetingInfo, region: appRegion, meetingId: appMeetingId, isBreakout: appIsBreakout, localUserName : appLocalUserName, mainMeetingId : appMainMeetingId } = useAppState(); const [meetingId, setMeetingId] = useState(appMeetingId); const [meetingErr, setMeetingErr] = useState(false); const [name, setName] = useState(appLocalUserName); const [nameErr, setNameErr] = useState(false); const [region, setRegion] = useState(appRegion); const [isLoading, setIsLoading] = useState(false); const { errorMessage, updateErrorMessage } = useContext(getErrorContext()); const history = useHistory(); const handleJoinMeeting = async (e: React.FormEvent) => { e.preventDefault(); const id = meetingId.trim().toLocaleLowerCase(); const attendeeName = name.trim(); if (!id || !attendeeName) { if (!attendeeName) { setNameErr(true); } if (!id) { setMeetingErr(true); } return; } setIsLoading(true); meetingManager.getAttendee = createGetAttendeeCallback(id); try { const { JoinInfo } = await fetchMeeting(id, attendeeName, region); await meetingManager.join({ meetingInfo: JoinInfo.Meeting, attendeeInfo: JoinInfo.Attendee }); //load breakout rooms const currentBreakoutRooms = await getBreakouts(appIsBreakout? appMainMeetingId:meetingId); setAppMeetingInfo(id, attendeeName, region, currentBreakoutRooms); history.push(routes.DEVICE); } catch (error) { if (error instanceof Error) { updateErrorMessage(error.message); } } }; const closeError = (): void => { updateErrorMessage(''); setMeetingId(''); setName(''); setIsLoading(false); }; return (
); }; export default MeetingForm;