Advertisement
Guest User

Untitled

a guest
Nov 17th, 2023
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import { zodResolver } from '@hookform/resolvers/zod';
  2. import { ArrowRight } from '@phosphor-icons/react';
  3. import React from 'react';
  4. import { type SubmitHandler, useForm } from 'react-hook-form';
  5. import { Button } from '~/components/ui/Button';
  6. import { ErrorMessage } from '~/components/ui/ErrorMessage';
  7. import { Input } from '~/components/ui/Input';
  8. import { Label } from '~/components/ui/Label';
  9. import { RadioGroup, RadioGroupItem } from '~/components/ui/RadioGroup';
  10. import { RegisterStepOneDto } from '~/config/form/auth/register-dto';
  11. import { type RegisterFormStepProps } from '~/types/register-form';
  12.  
  13. export const RegisterFormStepOne = ({ data, onGoToNextStep }: RegisterFormStepProps) => {
  14.     const {
  15.         register,
  16.         handleSubmit,
  17.         formState: { errors },
  18.         setError,
  19.         setValue,
  20.     } = useForm<RegisterStepOneDto>({
  21.         defaultValues: {
  22.             ...data,
  23.         },
  24.         resolver: zodResolver(RegisterStepOneDto),
  25.     });
  26.  
  27.     const onSubmit: SubmitHandler<RegisterStepOneDto> = data => {
  28.         if (data.password !== data.passwordConfirmation) {
  29.             setError('passwordConfirmation', {
  30.                 message: 'Wachtwoorden komen niet overeen',
  31.                 type: 'manual',
  32.             });
  33.  
  34.             return;
  35.         }
  36.  
  37.         onGoToNextStep(data);
  38.     };
  39.  
  40.     return (
  41.         <form
  42.             onSubmit={handleSubmit(onSubmit)}
  43.             className="flex flex-col gap-y-3"
  44.         >
  45.             <Label htmlFor="email">
  46.                 E-mailadres
  47.             </Label>
  48.             <Input
  49.                 id="email"
  50.                 type="email"
  51.                 autoCapitalize="none"
  52.                 autoComplete="email"
  53.                 autoCorrect="off"
  54.                 error={errors.email}
  55.                 defaultValue={data.email}
  56.                 {...register('email')}
  57.             />
  58.             {errors.email?.message && <ErrorMessage message={errors.email.message} />}
  59.             <Label htmlFor="firstName">
  60.                 Voornaam
  61.             </Label>
  62.             <Input
  63.                 id="firstName"
  64.                 type="text"
  65.                 autoComplete="given-name"
  66.                 autoCorrect="off"
  67.                 error={errors.firstName}
  68.                 defaultValue={data.firstName}
  69.                 {...register('firstName')}
  70.             />
  71.             {errors.firstName?.message && <ErrorMessage message={errors.firstName.message} />}
  72.             <Label htmlFor="gender">
  73.                 Geslacht
  74.             </Label>
  75.             <RadioGroup
  76.                 onValueChange={genderValue => {
  77.                     setValue('gender', genderValue as ('female' | 'male'));
  78.                 }}
  79.                 defaultValue={data.gender}
  80.             >
  81.                 <div className="flex items-center space-x-2">
  82.                     <RadioGroupItem
  83.                         value="male"
  84.                         id="male"
  85.                     />
  86.                     <Label htmlFor="male">Man</Label>
  87.                 </div>
  88.                 <div className="flex items-center space-x-2">
  89.                     <RadioGroupItem
  90.                         value="female"
  91.                         id="female"
  92.                     />
  93.                     <Label htmlFor="female">Vrouw</Label>
  94.                 </div>
  95.             </RadioGroup>
  96.             {errors.gender?.message && <ErrorMessage message={errors.gender.message} />}
  97.             <Label htmlFor="lastName">
  98.                 Achternaam
  99.             </Label>
  100.             <Input
  101.                 id="lastName"
  102.                 type="text"
  103.                 autoComplete="family-name"
  104.                 autoCorrect="off"
  105.                 error={errors.lastName}
  106.                 defaultValue={data.lastName}
  107.                 {...register('lastName')}
  108.             />
  109.             {errors.lastName?.message && <ErrorMessage message={errors.lastName.message} />}
  110.             <Label htmlFor="password">
  111.                 Wachtwoord
  112.             </Label>
  113.             <Input
  114.                 id="password"
  115.                 type="password"
  116.                 autoCapitalize="none"
  117.                 autoComplete="password"
  118.                 autoCorrect="off"
  119.                 error={errors.password}
  120.                 defaultValue={data.password}
  121.                 {...register('password')}
  122.             />
  123.             {errors.password?.message && <ErrorMessage message={errors.password.message} />}
  124.             <Label htmlFor="passwordConfirmation">
  125.                 Wachtwoord bevestiging
  126.             </Label>
  127.             <Input
  128.                 id="passwordConfirmation"
  129.                 type="password"
  130.                 autoCapitalize="none"
  131.                 autoComplete="password"
  132.                 autoCorrect="off"
  133.                 error={errors.passwordConfirmation}
  134.                 defaultValue={data.passwordConfirmation}
  135.                 {...register('passwordConfirmation')}
  136.             />
  137.             {errors.passwordConfirmation?.message && <ErrorMessage message={errors.passwordConfirmation.message} />}
  138.             <Button variant="outline">
  139.                 Volgende stap <ArrowRight
  140.                     size={16}
  141.                     className="ml-2"
  142.                 />
  143.             </Button>
  144.         </form>
  145.     );
  146. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement