import { Field, Label, Input as HeadlessInput } from '@headlessui/react' import { CloudArrowUpIcon } from '@heroicons/react/20/solid' import { useEffect, type ComponentProps, type ReactNode } from 'react' import { get, type FieldError, type RegisterOptions } from 'react-hook-form' import { useRemixFormContext } from 'remix-hook-form' import { twMerge } from 'tailwind-merge' import { useAdminContext, type TUpload } from '~/contexts/admin' import { Button } from './button' type TInputProperties = Omit, 'size'> & { id: string label?: ReactNode name: string rules?: RegisterOptions containerClassName?: string labelClassName?: string category: TUpload } export const InputFile = (properties: TInputProperties) => { const { id, label, name, rules, placeholder, disabled, className, containerClassName, labelClassName, category, ...restProperties } = properties const { setIsUploadOpen, uploadedFile, setUploadedFile, isUploadOpen } = useAdminContext() const { register, formState: { errors }, setValue, } = useRemixFormContext() const error: FieldError = get(errors, name) useEffect(() => { if (uploadedFile && isUploadOpen === (category || name)) { setValue(name, uploadedFile) setUploadedFile(undefined) setIsUploadOpen(undefined) } // eslint-disable-next-line react-hooks/exhaustive-deps }, [uploadedFile]) return ( ) }