"use client"; import { zodResolver } from "@hookform/resolvers/zod"; import { SubmitHandler, useForm } from "react-hook-form"; import { z } from "zod"; import { Input } from "./ui/input"; import { Button } from "./ui/button"; import { login } from "@/utils/signIn"; import { Label } from "./ui/label"; import { useState } from "react"; import { Eye, EyeOff, Loader2 } from "lucide-react"; import Link from "next/link"; const schema = z.object({ email: z.string().email(), password: z.string().min(8), }); type FormFields = z.infer; const SignInForm = () => { const [showPassword, setShowPassword] = useState(false); const { register, handleSubmit, setError, formState: { errors, isSubmitting }, } = useForm({ defaultValues: {}, resolver: zodResolver(schema), }); const onSubmit: SubmitHandler = async (data) => { try { const res = await login(data.email, data.password); if (res && "ok" in res && !res.ok) { setError("root", { message: res.message || "Gagal login" }); } // On success, server action will redirect to "/". } catch (error) { setError("root", { message: "Terjadi kesalahan. Coba lagi." }); } }; const togglePasswordVisibility = () => { setShowPassword(!showPassword); }; return ( <>
{errors.email && (
{errors.email.message}
)}
{errors.password && (
{errors.password.message}
)} {errors.root && (
{errors.root.message}
)}
Lupa password?
); }; export default SignInForm;