// eslint-disable-next-line import React, { Component, useState } from 'react'; import { connect } from 'react-redux'; import { Form, Field } from 'react-final-form'; import { OnChange } from 'react-final-form-listeners'; import setFieldTouched from 'final-form-set-field-touched' import Button from '@material-ui/core/Button'; import Typography from '@material-ui/core/Typography'; import { CountryDropdown, InputField, KnownHosts } from 'components'; import { useReduxEffect } from 'hooks'; import { ServerTypes } from 'store'; import { FormKey } from 'types'; import './RegisterForm.css'; const RegisterForm = ({ onSubmit }: RegisterFormProps) => { const [emailRequired, setEmailRequired] = useState(false); const [error, setError] = useState(null); const [emailError, setEmailError] = useState(null); const [passwordError, setPasswordError] = useState(null); const [userNameError, setUserNameError] = useState(null); const onHostChange = (host) => setEmailRequired(false); const onEmailChange = () => emailError && setEmailError(null); const onPasswordChange = () => passwordError && setPasswordError(null); const onUserNameChange = () => userNameError && setUserNameError(null); useReduxEffect(() => { setEmailRequired(true); }, ServerTypes.REGISTRATION_REQUIRES_EMAIL); useReduxEffect(({ error }) => { setError(error); }, ServerTypes.REGISTRATION_FAILED); useReduxEffect(({ error }) => { setEmailError(error); }, ServerTypes.REGISTRATION_EMAIL_ERROR); useReduxEffect(({ error }) => { setPasswordError(error); }, ServerTypes.REGISTRATION_PASSWORD_ERROR); useReduxEffect(({ error }) => { setUserNameError(error); }, ServerTypes.REGISTRATION_USERNAME_ERROR); const handleOnSubmit = form => { setError(null); onSubmit(form); } const validate = values => { const errors: any = {}; if (!values.userName) { errors.userName = 'Required'; } else if (userNameError) { errors.userName = userNameError; } if (!values.password) { errors.password = 'Required'; } else if (values.password.length < 8) { errors.password = 'Minimum of 8 characters required'; } else if (passwordError) { errors.password = passwordError; } if (!values.passwordConfirm) { errors.passwordConfirm = 'Required'; } else if (values.password !== values.passwordConfirm) { errors.passwordConfirm = 'Passwords don\'t match' } if (!values.selectedHost) { errors.selectedHost = 'Required'; } if (emailRequired && !values.email) { errors.email = 'Required'; } else if (emailError) { errors.email = emailError; } return errors; } return (
{ error && (