import React, { useMemo } from 'react'; import { Box, Text, color } from 'folds'; import { Link, useSearchParams } from 'react-router-dom'; import { SSOAction } from 'matrix-js-sdk'; import { useAuthServer } from '../../../hooks/useAuthServer'; import { RegisterFlowStatus, useAuthFlows } from '../../../hooks/useAuthFlows'; import { useParsedLoginFlows } from '../../../hooks/useParsedLoginFlows'; import { PasswordRegisterForm, SUPPORTED_REGISTER_STAGES } from '../register/PasswordRegisterForm'; import { OrDivider } from '../OrDivider'; import { SSOLogin } from '../SSOLogin'; import { SupportedUIAFlowsLoader } from '../../../components/SupportedUIAFlowsLoader'; import { getLoginPath } from '../../pathUtils'; import { usePathWithOrigin } from '../../../hooks/usePathWithOrigin'; import { RegisterPathSearchParams } from '../../paths'; const useRegisterSearchParams = (searchParams: URLSearchParams): RegisterPathSearchParams => useMemo( () => ({ username: searchParams.get('username') ?? undefined, email: searchParams.get('email') ?? undefined, token: searchParams.get('token') ?? undefined, }), [searchParams] ); export function Register() { const server = useAuthServer(); const { loginFlows, registerFlows } = useAuthFlows(); const [searchParams] = useSearchParams(); const registerSearchParams = useRegisterSearchParams(searchParams); const { sso } = useParsedLoginFlows(loginFlows.flows); // redirect to /login because only that path handle m.login.token const ssoRedirectUrl = usePathWithOrigin(getLoginPath(server)); return ( Register {registerFlows.status === RegisterFlowStatus.RegistrationDisabled && !sso && ( Registration has been disabled on this homeserver. )} {registerFlows.status === RegisterFlowStatus.RateLimited && !sso && ( You have been rate-limited! Please try after some time. )} {registerFlows.status === RegisterFlowStatus.InvalidRequest && !sso && ( Invalid Request! Failed to get any registration options. )} {registerFlows.status === RegisterFlowStatus.FlowRequired && ( <> {(supportedFlows) => supportedFlows.length === 0 ? ( This application does not support registration on this homeserver. ) : ( ) } {sso && } )} {sso && ( <> )} Already have an account? Login ); }