| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 | 
							- import type { ChangeEvent, FC } from 'react'
 
- import { useState } from 'react'
 
- import { useLocalFileUploader } from './hooks'
 
- import type { ImageFile } from '@/types/app'
 
- import { ALLOW_FILE_EXTENSIONS } from '@/types/app'
 
- type UploaderProps = {
 
-   children: (hovering: boolean) => JSX.Element
 
-   onUpload: (imageFile: ImageFile) => void
 
-   closePopover?: () => void
 
-   limit?: number
 
-   disabled?: boolean
 
- }
 
- const Uploader: FC<UploaderProps> = ({
 
-   children,
 
-   onUpload,
 
-   closePopover,
 
-   limit,
 
-   disabled,
 
- }) => {
 
-   const [hovering, setHovering] = useState(false)
 
-   const { handleLocalFileUpload } = useLocalFileUploader({
 
-     limit,
 
-     onUpload,
 
-     disabled,
 
-   })
 
-   const handleChange = (e: ChangeEvent<HTMLInputElement>) => {
 
-     const file = e.target.files?.[0]
 
-     if (!file)
 
-       return
 
-     handleLocalFileUpload(file)
 
-     closePopover?.()
 
-   }
 
-   return (
 
-     <div
 
-       className='relative'
 
-       onMouseEnter={() => setHovering(true)}
 
-       onMouseLeave={() => setHovering(false)}
 
-     >
 
-       {children(hovering)}
 
-       <input
 
-         className='absolute block inset-0 opacity-0 text-[0] w-full disabled:cursor-not-allowed cursor-pointer'
 
-         onClick={e => ((e.target as HTMLInputElement).value = '')}
 
-         type='file'
 
-         accept={ALLOW_FILE_EXTENSIONS.map(ext => `.${ext}`).join(',')}
 
-         onChange={handleChange}
 
-         disabled={disabled}
 
-       />
 
-     </div>
 
-   )
 
- }
 
- export default Uploader
 
 
  |