import { Dialog, DialogBackdrop, DialogPanel, DialogTitle, } from '@headlessui/react' import { zodResolver } from '@hookform/resolvers/zod' import { useEffect } from 'react' import toast from 'react-hot-toast' import { useFetcher, useRouteLoaderData } 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 { InputFile } from '~/components/ui/input-file' import { useAdminContext } from '~/contexts/admin' import type { loader } from '~/routes/_admin.lg-admin' export const profileSchema = z.object({ name: z.string().min(1, 'Wajib diisi'), email: z.string().email('Email tidak valid'), profile_picture: z.string().url({ message: 'URL tidak valid', }), }) export type TProfileSchema = z.infer export const DialogProfile = () => { const { editProfile, setEditProfile } = useAdminContext() const loaderData = useRouteLoaderData('routes/_admin.lg-admin') const { staffData } = loaderData || {} const fetcher = useFetcher() const formMethods = useRemixForm({ mode: 'onSubmit', fetcher, resolver: zodResolver(profileSchema), values: { name: staffData?.name || '', email: staffData?.email || '', profile_picture: staffData?.profile_picture || '', }, }) const { handleSubmit } = formMethods useEffect(() => { if (!fetcher.data?.success && fetcher.data?.message) { toast.error(fetcher.data.message) } if (fetcher.data?.success) { setEditProfile(false) } // eslint-disable-next-line react-hooks/exhaustive-deps }, [fetcher.data]) return ( { if (fetcher.state === 'idle') { setEditProfile(false) } }} className="relative z-50" transition >
Update Profile
) }