import { ReactElement, Suspense, useState } from 'react'; import { ErrorMessage, Form, Formik } from 'formik'; import { Alert, Autocomplete, Button, FormControl, IconButton, InputAdornment, InputLabel, Link, OutlinedInput, Paper, Skeleton, Stack, TextField, Typography, } from '@mui/material'; import { CATEGORY_NAMES } from '../Vendors/Vendors'; import signupBanner from 'assets/authentication-banners/green.png'; import IconifyIcon from 'components/base/IconifyIcon'; import logo from 'assets/logo/favicon-logo.png'; import Image from 'components/base/Image'; import { axiosInstance } from '../../axiosApi.js'; import PasswordStrengthChecker from '../../components/PasswordStrengthChecker'; import { useNavigate } from 'react-router-dom'; type SignUpValues = { email: string; first_name: string; last_name: string; password: string; password2: string; ownerType: string; vendorType?: string; }; const SignUp = (): ReactElement => { const [showPassword, setShowPassword] = useState(false); const [showPassword2, setShowPassword2] = useState(false); const [password, setPassword] = useState(''); const [errorMessage, setErrorMessage] = useState(null); const handleClickShowPassword = () => setShowPassword(!showPassword); const handleClickShowPassword2 = () => setShowPassword2(!showPassword2); const navigate = useNavigate(); const handleSignUp = async ({ email, first_name, last_name, ownerType, password, password2, vendorType, }: SignUpValues): Promise => { try { const response = await axiosInstance.post('register/', { email: email, first_name: first_name, last_name: last_name, user_type: ownerType, vendor_type: ownerType === 'vendor' ? vendorType : undefined, password: password, password2: password2, }); console.log(response); if (response.status == 201) { navigate('/authentication/login'); console.log('Good response'); } else { console.log(`No good: ${response}`); } } catch (error) { const hasErrors = Object.keys(error.response.data).length > 0; if (hasErrors) { setErrorMessage(error.response.data); } else { setErrorMessage(null); } } }; return ( theme.shadows[3]} width={{ md: 960 }} > Signup {({ setFieldValue, values }) => (
{errorMessage ? (
    {Object.entries(errorMessage).map(([fieldName, errorMessages]) => (
  • {fieldName} {errorMessages.length > 0 ? (
      {errorMessages.map((message, index) => (
    • {message}
    • // Key for each message ))}
    ) : ( No specific errors for this field. )}
  • ))}
) : null} First Name setFieldValue('first_name', event.target.value)} placeholder="Enter your first name" id="first_name" InputProps={{ endAdornment: ( ), }} />
Last Name setFieldValue('last_name', event.target.value)} placeholder="Enter your last name" id="last_name" InputProps={{ endAdornment: ( ), }} /> Email } sx={{ width: 1, backgroundColor: 'action.focus', }} onChange={(event) => setFieldValue('email', event.target.value)} /> I am a... {[ { value: 'property_owner', label: 'Home Buyer/Seller', icon: 'mdi:home-account' }, { value: 'attorney', label: 'Attorney', icon: 'mdi:gavel' }, { value: 'vendor', label: 'Vendor', icon: 'mdi:briefcase' }, ].map((type) => ( setFieldValue('ownerType', type.value)} sx={{ p: 2, flex: 1, cursor: 'pointer', display: 'flex', flexDirection: 'column', alignItems: 'center', gap: 1, borderColor: values.ownerType === type.value ? 'primary.main' : 'divider', bgcolor: values.ownerType === type.value ? 'action.selected' : 'background.paper', transition: 'all 0.2s', '&:hover': { borderColor: 'primary.main', bgcolor: 'action.hover', }, }} > {type.label} ))} {/* Vendor Category Selection */} {values.ownerType === 'vendor' && ( setFieldValue('vendorType', value)} renderInput={(params) => ( )} /> )} Password { setFieldValue('password', event.target.value); setPassword(event.target.value); }} type={showPassword ? 'text' : 'password'} id="password" InputProps={{ endAdornment: ( {showPassword ? ( ) : ( )} ), }} /> {/**/} Confirm Password setFieldValue('password2', event.target.value)} type={showPassword2 ? 'text' : 'password'} id="password" InputProps={{ endAdornment: ( {showPassword ? ( ) : ( )} ), }} />
)}
Already have an account ?{' '} theme.typography.body1.fontSize} > Log in
} > Signup banner
); }; export default SignUp;