import { useForm } from 'react-hook-form' import { Link } from 'react-router-dom' import { Button, Card, ControlledTextField, Typography } from '../../ui' import { DevTool } from '@hookform/devtools' import { zodResolver } from '@hookform/resolvers/zod' import { omit } from 'remeda' import { z } from 'zod' import s from './sign-up.module.scss' const schema = z .object({ email: z.string().email('Invalid email address').nonempty('Enter email'), password: z.string().nonempty('Enter password'), passwordConfirmation: z.string().nonempty('Confirm your password'), }) .superRefine((data, ctx) => { if (data.password !== data.passwordConfirmation) { ctx.addIssue({ code: z.ZodIssueCode.custom, message: 'Passwords do not match', path: ['passwordConfirmation'], }) } return data }) type FormType = z.infer type Props = { onSubmit: (data: Omit) => void } export const SignUp = (props: Props) => { const { control, handleSubmit } = useForm({ defaultValues: { email: '', password: '', passwordConfirmation: '', }, mode: 'onSubmit', resolver: zodResolver(schema), }) const handleFormSubmitted = handleSubmit(data => props.onSubmit(omit(data, ['passwordConfirmation'])) ) return ( <> Sign Up
{/* eslint-disable-next-line react/no-unescaped-entities */} Already have an account? Sign In
) }