fix: clear dropzone state after upload (#150)

* fix: clear dropzone state after upload

* fix: avoid state update on unmounted component
This commit is contained in:
Cafe137
2021-06-20 11:39:34 +02:00
committed by GitHub
parent 6f645dc6c3
commit b190cac706
+11 -3
View File
@@ -15,6 +15,7 @@ import SelectStamp from './SelectStamp'
const MAX_FILE_SIZE = 1_000_000_000 // 1 gigabyte const MAX_FILE_SIZE = 1_000_000_000 // 1 gigabyte
export default function Files(): ReactElement { export default function Files(): ReactElement {
const [dropzoneKey, setDropzoneKey] = useState(0)
const [file, setFile] = useState<File | null>(null) const [file, setFile] = useState<File | null>(null)
const [uploadReference, setUploadReference] = useState('') const [uploadReference, setUploadReference] = useState('')
const [isUploadingFile, setIsUploadingFile] = useState(false) const [isUploadingFile, setIsUploadingFile] = useState(false)
@@ -43,8 +44,11 @@ export default function Files(): ReactElement {
beeApi.files beeApi.files
.uploadFile(selectedStamp.batchID, file) .uploadFile(selectedStamp.batchID, file)
.then(hash => { .then(hash => {
setUploadReference(hash) window.setTimeout(() => {
setFile(null) setFile(null)
setUploadReference(hash)
setDropzoneKey(dropzoneKey + 1)
}, 0)
}) })
.catch(e => enqueueSnackbar(`Error uploading: ${e.message}`, { variant: 'error' })) .catch(e => enqueueSnackbar(`Error uploading: ${e.message}`, { variant: 'error' }))
.finally(() => { .finally(() => {
@@ -55,14 +59,18 @@ export default function Files(): ReactElement {
const handleChange = (files?: File[]) => { const handleChange = (files?: File[]) => {
if (files) { if (files) {
setFile(files[0]) setFile(files[0])
setUploadReference('')
} }
} }
return ( return (
<div> <div>
<div> <div>
<DropzoneArea onChange={handleChange} filesLimit={1} maxFileSize={MAX_FILE_SIZE} /> <DropzoneArea
key={'dropzone-' + dropzoneKey}
onChange={handleChange}
filesLimit={1}
maxFileSize={MAX_FILE_SIZE}
/>
<div style={{ marginTop: '15px' }}> <div style={{ marginTop: '15px' }}>
{selectedStamp && ( {selectedStamp && (
<div style={{ display: 'flex' }}> <div style={{ display: 'flex' }}>