import { zodResolver } from '@hookform/resolvers/zod' import { useEffect } from 'react' import toast from 'react-hot-toast' import { useFetcher, useNavigate } from 'react-router' import { RemixFormProvider, useRemixForm } from 'remix-hook-form' import { z } from 'zod' import type { TAdResponse } from '~/apis/common/get-ads' import { Button } from '~/components/ui/button' import { Input } from '~/components/ui/input' import { InputFile } from '~/components/ui/input-file' import { TitleDashboard } from '~/components/ui/title-dashboard' import { dateInput } from '~/utils/formatter' export const adsSchema = z.object({ id: z.string().optional(), image: z.string().url({ message: 'URL tidak valid', }), url: z.string().url({ message: 'URL tidak valid', }), start_date: z.string().min(1, { message: 'Pilih tanggal', }), end_date: z.string().min(1, { message: 'Pilih tanggal', }), }) export type TAdsSchema = z.infer type TProperties = { adData?: TAdResponse } export const FormAdvertisementsPage = (properties: TProperties) => { const { adData } = properties || {} const fetcher = useFetcher() const navigate = useNavigate() const formMethods = useRemixForm({ mode: 'onSubmit', fetcher, resolver: zodResolver(adsSchema), values: { id: adData?.id || undefined, image: adData?.image_url || '', url: adData?.url || '', start_date: adData?.start_date ? dateInput(adData.start_date) : '', end_date: adData?.end_date ? dateInput(adData.end_date) : '', }, }) const { handleSubmit } = formMethods useEffect(() => { if (!fetcher.data?.success && fetcher.data?.message) { toast.error(fetcher.data.message) } if (fetcher.data?.success) { toast.success(`Spanduk iklan berhasil ${adData ? 'diupdate' : 'dibuat'}!`) navigate('/lg-admin/advertisements') } // eslint-disable-next-line react-hooks/exhaustive-deps }, [fetcher.data]) return (
) }