| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 | 
							- 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
 
-   limit?: number
 
-   disabled?: boolean
 
- }
 
- const Uploader: FC<UploaderProps> = ({
 
-   children,
 
-   onUpload,
 
-   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)
 
-   }
 
-   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
 
 
  |