import { zodResolver } from '@hookform/resolvers/zod' import { useEffect, useState } from 'react' import { useFetcher } from 'react-router' import { RemixFormProvider, useRemixForm } from 'remix-hook-form' import { z } from 'zod' import { Button } from '~/components/ui/button' import { Input } from '~/components/ui/input' import type { NewsContextProperties } from '~/contexts/news' export const loginSchema = z.object({ email: z.string().email('Email tidak valid'), password: z.string().min(6, 'Kata sandi minimal 6 karakter'), }) export type TLoginSchema = z.infer type TProperties = { setIsRegisterOpen: NewsContextProperties['setIsRegisterOpen'] setIsLoginOpen: NewsContextProperties['setIsLoginOpen'] setIsForgetOpen: NewsContextProperties['setForgetOpen'] setIsInitSubscribeOpen: NewsContextProperties['setIsInitSubscribeOpen'] } export const FormLogin = (properties: TProperties) => { const { setIsRegisterOpen, setIsLoginOpen, setIsForgetOpen, setIsInitSubscribeOpen, } = properties const fetcher = useFetcher() const [error, setError] = useState() const [disabled, setDisabled] = useState(false) const formMethods = useRemixForm({ mode: 'onSubmit', fetcher, resolver: zodResolver(loginSchema), }) const { handleSubmit } = formMethods useEffect(() => { if (fetcher.state !== 'idle' || fetcher.data?.success) { setDisabled(true) return } setDisabled(false) }, [fetcher]) useEffect(() => { if (fetcher.data?.success) { setIsInitSubscribeOpen(true) setIsLoginOpen(false) return } setError(fetcher.data?.message) // eslint-disable-next-line react-hooks/exhaustive-deps }, [fetcher]) return (
{error && (
{error}
)} {/* Lupa Kata Sandi */}
Lupa Kata Sandi?
{/* Tombol Masuk */}
{/* Link Daftar */}
Belum punya akun?{' '}
) }