import { Alert } from 'antd'; import { observer } from 'mobx-react-lite'; import React, { ChangeEvent, FormEvent, useEffect, useRef, useState, } from 'react'; import ReCAPTCHA from 'react-google-recaptcha'; import { toast } from 'react-toastify'; import { PASSWORD_POLICY } from 'App/constants'; import { SITE_ID_STORAGE_KEY } from 'App/constants/storageKeys'; import { useStore } from 'App/mstore'; import { login } from 'App/routes'; import { validatePassword } from 'App/validate'; import { Button, Form, Input, Link } from 'UI'; import Select from 'Shared/Select'; const LOGIN_ROUTE = login(); const SignupForm = () => { const { userStore } = useStore(); const tenants = userStore.tenants; const signup = userStore.signup; const errors = userStore.signUpRequest.errors; const loading = userStore.signUpRequest.loading; const [state, setState] = useState({ tenantId: '', fullname: '', password: '', email: '', projectName: '', organizationName: '', reload: false, CAPTCHA_ENABLED: window.env.CAPTCHA_ENABLED === 'true', }); const recaptchaRef = useRef(null); const [passwordError, setPasswordError] = useState(null); const handleSubmit = (token: string) => { const { tenantId, fullname, password, email, projectName, organizationName, auth, } = state; if (!validatePassword(password)) return; localStorage.removeItem(SITE_ID_STORAGE_KEY); signup({ tenantId, fullname, password, email, projectName, organizationName, auth, 'g-recaptcha-response': token, }).then((resp: any) => { if ( resp && resp.errors && Array.isArray(resp.errors) && resp.errors.length > 0 ) { if ((resp.errors[0] as string).includes('in use')) { toast.error( "This email is already linked to an account or team on OpenReplay and can't be used again." ); } else { resp.errors[0] ? toast.error(resp.errors[0]) : toast.error('Something went wrong'); } } }); setState({ ...state, reload: true }); }; const write = ({ target: { value, name } }: ChangeEvent) => setState({ ...state, [name]: value }); const writeOption = ({ name, value, }: { name: string; value: { value: string }; }) => setState({ ...state, [name]: value.value }); const onSubmit = (e: FormEvent) => { e.preventDefault(); const { CAPTCHA_ENABLED } = state; if (CAPTCHA_ENABLED && recaptchaRef.current) { recaptchaRef.current.execute(); } else if (!CAPTCHA_ENABLED) { handleSubmit(''); } }; useEffect(() => { if (state.password && !validatePassword(state.password)) { setPasswordError('Password must be at least 8 characters long'); } else { setPasswordError(null); } }, [state.password]); return (
Logo

Create Account

<> {state.CAPTCHA_ENABLED && ( handleSubmit(token || '')} /> )}
{tenants.length > 0 && ( {passwordError && ( // )} {errors && errors.length && ( )}
By signing up, you agree to our{' '} terms of service {' '} and{' '} privacy policy .
Already having an account?{' '} Login
); }; export default observer(SignupForm);