"use client"; import { useState } from "react"; import { useRouter } from "next/navigation"; import { ActionButton } from "@/components/ui/action-button"; import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage, } from "@/components/ui/form"; import { Input } from "@/components/ui/input"; import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs"; import { useClientConfig } from "@/lib/clientConfig"; import { api } from "@/lib/trpc"; import { zodResolver } from "@hookform/resolvers/zod"; import { TRPCClientError } from "@trpc/client"; import { signIn } from "next-auth/react"; import { useForm } from "react-hook-form"; import { z } from "zod"; import { zSignUpSchema } from "@hoarder/shared/types/users"; const signInSchema = z.object({ email: z.string().email(), password: z.string(), }); function SignIn() { const [signinError, setSigninError] = useState(false); const router = useRouter(); const form = useForm>({ resolver: zodResolver(signInSchema), }); return (
{ const resp = await signIn("credentials", { redirect: false, email: value.email, password: value.password, }); if (!resp || !resp?.ok) { setSigninError(true); return; } router.replace("/"); })} >
{signinError && (

Incorrect username or password

)} { return ( Email ); }} /> { return ( Password ); }} /> Sign In
); } function SignUp() { const clientConfig = useClientConfig(); const form = useForm>({ resolver: zodResolver(zSignUpSchema), }); const [errorMessage, setErrorMessage] = useState(""); const router = useRouter(); const createUserMutation = api.users.create.useMutation(); return (
{ try { await createUserMutation.mutateAsync(value); } catch (e) { if (e instanceof TRPCClientError) { setErrorMessage(e.message); } return; } const resp = await signIn("credentials", { redirect: false, email: value.email, password: value.password, }); if (!resp || !resp.ok) { setErrorMessage("Hit an unexpected error while signing in"); return; } router.replace("/"); })} >
{errorMessage && (

{errorMessage}

)} { return ( Name ); }} /> { return ( Email ); }} /> { return ( Password ); }} /> { return ( Confirm Password ); }} /> Sign Up
); } export default function CredentialsForm() { return ( Sign In Sign Up ); }