import { zodResolver } from '@hookform/resolvers/zod' import { useEffect, useState, type ChangeEvent } from 'react' import { useFetcher, useNavigate } 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 { TitleDashboard } from '~/components/ui/title-dashboard' import { urlFriendlyCode } from '~/utils/formatter' export const createCategorySchema = z.object({ code: z.string().min(3, 'Kode minimal 3 karakter'), name: z.string().min(3, 'Nama minimal 3 karakter'), }) export type TCategorySchema = z.infer export const FormCategoryPage = () => { const fetcher = useFetcher() const navigate = useNavigate() const formMethods = useRemixForm({ mode: 'onSubmit', fetcher, resolver: zodResolver(createCategorySchema), }) const [error, setError] = useState() const [disabled, setDisabled] = useState(false) const [code, setCode] = useState('') const [name, setName] = useState('') const { handleSubmit } = formMethods useEffect(() => { if (!fetcher.data?.success) { setError(fetcher.data?.message) setDisabled(false) return } navigate('/lg-admin/categories') setDisabled(true) setError(undefined) // eslint-disable-next-line react-hooks/exhaustive-deps }, [fetcher]) const handelCodeAuto = (name: ChangeEvent) => { const inputName = name.target.value setName(inputName) setCode(urlFriendlyCode(inputName)) } return (
{error && (
{error}
)}
) }