import { type FC, useCallback, useEffect, useState } from 'react' import { useTranslation } from 'react-i18next' import { useDropzone } from 'react-dropzone' import { CloseCircle } from 'iconsax-react' type Props = { label: string, isMultiple?: boolean, onChange?: (file: File[]) => void; isReset?: boolean; } const UploadBox: FC = (props: Props) => { const { t } = useTranslation('global') const [files, setFiles] = useState([]) const onDrop = useCallback((acceptedFiles: File[]) => { if (props.isMultiple) { const array = [...files] array.push(acceptedFiles[0]) setFiles(array) if (props.onChange) { props.onChange(array); } } else { setFiles([acceptedFiles[0]]) if (props.onChange) { props.onChange([acceptedFiles[0]]) } } // eslint-disable-next-line react-hooks/exhaustive-deps }, [files]) const { getRootProps, getInputProps } = useDropzone({ onDrop }) const handleRemove = (index: number) => { const array = [...files] array.splice(index, 1) setFiles(array) if (props.onChange) { props.onChange(array) } } useEffect(() => { if (props.isReset) { setFiles([]) } }, [props.isReset]) return (
{props.label}
{ files?.map((item, index) => (
handleRemove(index)} size={16} color='red' />
{item.name}
)) }
{ files?.map((item, index) => (
handleRemove(index)} size={16} color='red' />
{item.name}
)) }
) } export default UploadBox