import { useCallback, useState } from 'react' import { Link } from 'react-router-dom' import { Button, FormControl, FormErrorMessage, Input, Link as ChakraLink, Heading, } from '@chakra-ui/react' import { Field, FieldAttributes, FieldProps, Form, Formik, FormikHelpers, } from 'formik' import * as Yup from 'yup' import cx from 'classnames' import { Helmet } from 'react-helmet-async' import AccountAPI from '@/client/idp/account' import Logo from '@/components/common/logo' import LayoutFull from '@/components/layout/layout-full' type FormValues = { fullName: string email: string password: string passwordConfirmation: string } const SignUpPage = () => { const [isConfirmationVisible, setIsConfirmationVisible] = useState(false) const formSchema = Yup.object().shape({ fullName: Yup.string().required('Name is required'), email: Yup.string() .email('Email is not valid') .required('Email is required'), password: Yup.string().required('Password is required'), passwordConfirmation: Yup.string() .oneOf([Yup.ref('password'), undefined], 'Passwords must match') .required('Confirm your password'), }) const handleSubmit = useCallback( async ( { fullName, email, password }: FormValues, { setSubmitting }: FormikHelpers, ) => { try { await AccountAPI.create({ fullName, email, password, }) setIsConfirmationVisible(true) } finally { setSubmitting(false) } }, [], ) return ( <> Sign Up to Voltaserve {isConfirmationVisible && (
Thanks! We just sent you a confirmation email Just open your inbox, find the email, and click on the confirmation link.
)} {!isConfirmationVisible && (
Sign Up to Voltaserve {({ errors, touched, isSubmitting }) => (
{({ field }: FieldAttributes) => ( {errors.fullName} )} {({ field }: FieldAttributes) => ( {errors.email} )} {({ field }: FieldAttributes) => ( {errors.password} )} {({ field }: FieldAttributes) => ( {errors.passwordConfirmation} )}
)}
Already a member? Sign In
)}
) } export default SignUpPage