'use client'; import { Alert, AlertDescription } from '@/components/ui/alert'; import { Button } from '@/components/ui/button'; import { Checkbox } from '@/components/ui/checkbox'; import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage } from '@/components/ui/form'; import { Input } from '@/components/ui/input'; import { authClient } from '@/lib/auth/client'; import { cn } from '@/lib/utils'; import { zodResolver } from '@hookform/resolvers/zod'; import { Loader2 } from 'lucide-react'; import Link from 'next/link'; import type { ComponentPropsWithoutRef } from 'react'; import { useForm } from 'react-hook-form'; import { z } from 'zod'; const signInSchema = z.object({ email: z.string().email('Please enter a valid email'), password: z.string().min(1, 'Password is required'), rememberMe: z.boolean().default(false), }); type SignInFormData = z.infer; export function SignInForm({ className, redirectUrl = '/', ...props }: ComponentPropsWithoutRef<'form'> & { redirectUrl?: string }) { const decodedRedirectUrl = decodeURIComponent(redirectUrl); const form = useForm({ resolver: zodResolver(signInSchema), defaultValues: { email: '', password: '', rememberMe: false, }, }); const onSubmit = async (data: SignInFormData) => { await authClient.signIn.email(data, { onSuccess: async () => { const session = await authClient.getSession(); const userRole = session.data?.user.role; const isAdminOrIssuer = userRole === 'issuer' || userRole === 'admin'; const adminRedirect = decodedRedirectUrl.trim() || '/admin'; const targetUrl = isAdminOrIssuer ? adminRedirect : '/portfolio'; window.location.replace(targetUrl); }, onError: (ctx) => { form.setError('root', { message: ctx.error.message, }); }, }); }; return (
{ e.preventDefault(); form.handleSubmit(onSubmit)(e); }} {...props} >

Login to your account

Enter your email below to login to your account

{form.formState.errors.root && ( {form.formState.errors.root.message} )}
( Email )} /> ( Password )} /> ( Remember me )} />
Don't have an account?{' '} Sign up
); }