| 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
 
 
  |