in app/providers/MeetingStatusProvider.tsx [28:90]
export default function MeetingStatusProvider(props: Props) {
const MeetingStatusContext = getMeetingStatusContext();
const { children } = props;
const chime: ChimeSdkWrapper | null = useContext(getChimeContext());
const [meetingStatus, setMeetingStatus] = useState<{
meetingStatus: MeetingStatus;
errorMessage?: string;
}>({
meetingStatus: MeetingStatus.Loading
});
const [state] = useContext(getUIStateContext());
const history = useHistory();
const query = new URLSearchParams(useLocation().search);
const audioElement = useRef(null);
useEffect(() => {
const start = async () => {
try {
await chime?.createRoom(
query.get('title'),
query.get('name'),
query.get('region'),
state.classMode === ClassMode.Student ? 'student' : 'teacher',
query.get('optionalFeature')
);
setMeetingStatus({
meetingStatus: MeetingStatus.Succeeded
});
chime?.audioVideo?.addObserver({
audioVideoDidStop: (sessionStatus: MeetingSessionStatus): void => {
if (
sessionStatus.statusCode() ===
MeetingSessionStatusCode.AudioCallEnded
) {
history.push('/');
chime?.leaveRoom(state.classMode === ClassMode.Teacher);
}
}
});
await chime?.joinRoom(audioElement.current);
} catch (error) {
// eslint-disable-next-line
console.error(error);
setMeetingStatus({
meetingStatus: MeetingStatus.Failed,
errorMessage: error.message
});
}
};
start();
}, []);
return (
<MeetingStatusContext.Provider value={meetingStatus}>
{/* eslint-disable-next-line */}
<audio ref={audioElement} style={{ display: 'none' }} />
{children}
</MeetingStatusContext.Provider>
);
}