125 lines
4.1 KiB
TypeScript
125 lines
4.1 KiB
TypeScript
'use client';
|
|
|
|
import React from 'react'
|
|
import {useForm} from "react-hook-form";
|
|
import {Button} from "@/components/ui/button";
|
|
import InputField from "@/components/forms/InputField";
|
|
import SelectField from "@/components/forms/SelectField";
|
|
import {INVESTMENT_GOALS, PREFERRED_INDUSTRIES, RISK_TOLERANCE_OPTIONS} from "@/lib/constants";
|
|
import {CountrySelectField} from "@/components/forms/CountrySelectField";
|
|
import FooterLink from "@/components/forms/FooterLink";
|
|
import Link from "next/link";
|
|
import OpenDevSocietyBranding from "@/components/OpenDevSocietyBranding";
|
|
|
|
const SignUp = () => {
|
|
const {
|
|
register,
|
|
handleSubmit,
|
|
control,
|
|
formState: {errors, isSubmitting},
|
|
} = useForm<SignUpFormData>({
|
|
defaultValues: {
|
|
fullName: '',
|
|
email: '',
|
|
password: '',
|
|
country: 'IN',
|
|
investmentGoals: 'Growth',
|
|
riskTolerance: 'Medium',
|
|
preferredIndustry: 'Technology'
|
|
},
|
|
mode: 'onBlur'
|
|
});
|
|
const onSubmit = async(data: SignUpFormData) => {
|
|
try{
|
|
console.log(data)
|
|
} catch(e){
|
|
console.log(e);
|
|
}
|
|
}
|
|
return (
|
|
<>
|
|
<h1 className="form-title">Sign Up & Personalize</h1>
|
|
|
|
<form onSubmit={handleSubmit(onSubmit)} className="space-y-5">
|
|
<InputField
|
|
name="fullName"
|
|
label="Full Name"
|
|
placeholder="Your Name"
|
|
register={register}
|
|
error={errors.fullName}
|
|
validation={{required: 'Full name is required', minLength: 2 }}
|
|
/>
|
|
|
|
<InputField
|
|
name="email"
|
|
label="Email"
|
|
placeholder="Your email"
|
|
register={register}
|
|
error={errors.email}
|
|
validation={{required: 'Email is required', pattern: /^\w+@\w+$/, message: 'Email is required' }}
|
|
/>
|
|
|
|
<InputField
|
|
name="password"
|
|
label="Password"
|
|
placeholder="Enter password"
|
|
type="password"
|
|
register={register}
|
|
error={errors.password}
|
|
validation={{required: 'Password is required', minLength: 8}}
|
|
/>
|
|
|
|
<CountrySelectField
|
|
name="country"
|
|
label="Country"
|
|
control={control}
|
|
error={errors.country}
|
|
required
|
|
/>
|
|
|
|
<SelectField
|
|
name="investmentGoals"
|
|
label="Investment Goals"
|
|
placeholder="Select your investment goal"
|
|
options={INVESTMENT_GOALS}
|
|
control={control}
|
|
error={errors.investmentGoals}
|
|
/>
|
|
|
|
<SelectField
|
|
name="riskTolerance"
|
|
label="Risk Tolerance"
|
|
placeholder="Select your risk level"
|
|
options={RISK_TOLERANCE_OPTIONS}
|
|
control={control}
|
|
error={errors.riskTolerance}
|
|
/>
|
|
|
|
<SelectField
|
|
name="preferredIndustry"
|
|
label="Preferred Industry"
|
|
placeholder="Select your investment goal"
|
|
options={PREFERRED_INDUSTRIES}
|
|
control={control}
|
|
error={errors.preferredIndustry}
|
|
/>
|
|
|
|
<Button type="submit" disabled={isSubmitting} className="yellow-btn w-full mt-5">
|
|
{isSubmitting ? 'Creating account...' : 'Start Your Investing Journey'}
|
|
</Button>
|
|
|
|
<FooterLink
|
|
text="Already have an account?"
|
|
linkText="Sign in"
|
|
href="/sign-in"
|
|
/>
|
|
</form>
|
|
|
|
|
|
<OpenDevSocietyBranding outerClassName="mt-10 flex justify-center"/>
|
|
|
|
</>
|
|
)
|
|
}
|
|
export default SignUp
|