import React, { useCallback, useState } from "react"; import { Header, HeaderLogo, LeftNav, RightNav } from "../Header"; import { UserMenuContainer } from "../UserMenuContainer"; import { useHistory } from "react-router-dom"; import { FieldRow, InputField, ErrorMessage } from "../Input"; import { Button } from "../button"; import { randomString } from "matrix-js-sdk/src/randomstring"; import { createRoom, useInteractiveRegistration, roomAliasFromRoomName, } from "../ConferenceCallManagerHooks"; import { useModalTriggerState } from "../Modal"; import { JoinExistingCallModal } from "../JoinExistingCallModal"; import { useRecaptcha } from "../useRecaptcha"; import { Body, Caption, Link, Headline } from "../typography/Typography"; import { Form } from "../form/Form"; import styles from "./UnauthenticatedView.module.css"; import commonStyles from "./common.module.css"; export function UnauthenticatedView() { const [loading, setLoading] = useState(false); const [error, setError] = useState(); const [{ privacyPolicyUrl, recaptchaKey }, register] = useInteractiveRegistration(); const { execute, reset, recaptchaId } = useRecaptcha(recaptchaKey); const onSubmit = useCallback( (e) => { e.preventDefault(); const data = new FormData(e.target); const roomName = data.get("callName"); const userName = data.get("userName"); async function submit() { setError(undefined); setLoading(true); const recaptchaResponse = await execute(); const client = await register( userName, randomString(16), recaptchaResponse, true ); const roomIdOrAlias = await createRoom(client, roomName); if (roomIdOrAlias) { history.push(`/room/${roomIdOrAlias}`); } } submit().catch((error) => { if (error.errcode === "M_ROOM_IN_USE") { setExistingRoomId(roomAliasFromRoomName(roomName)); setLoading(false); setError(undefined); modalState.open(); } else { console.error(error); setLoading(false); setError(error); reset(); } }); }, [register, reset, execute] ); const { modalState, modalProps } = useModalTriggerState(); const [existingRoomId, setExistingRoomId] = useState(); const history = useHistory(); const onJoinExistingRoom = useCallback(() => { history.push(`/${existingRoomId}`); }, [history, existingRoomId]); return ( <>
Enter a call name
This site is protected by ReCAPTCHA and the Google{" "} Privacy Policy {" "} and{" "} Terms of Service {" "} apply.
By clicking "Go", you agree to our{" "} Terms and conditions {error && ( {error.message} )}
{modalState.isOpen && ( )} ); }