69 lines
2.2 KiB
JavaScript
69 lines
2.2 KiB
JavaScript
import Dropzone from "dropzone/dist/dropzone";
|
|
|
|
Dropzone.autoDiscover = false;
|
|
|
|
// File upload progress animation
|
|
Dropzone.prototype.uploadFiles = function (files) {
|
|
const minSteps = 6;
|
|
const maxSteps = 60;
|
|
const timeBetweenSteps = 100;
|
|
const bytesPerStep = 100000;
|
|
const isUploadSuccess = true;
|
|
|
|
const self = this;
|
|
|
|
for (let i = 0; i < files.length; i++) {
|
|
const file = files[i];
|
|
const totalSteps = Math.round(
|
|
Math.min(maxSteps, Math.max(minSteps, file.size / bytesPerStep)),
|
|
);
|
|
|
|
for (let step = 0; step < totalSteps; step++) {
|
|
const duration = timeBetweenSteps * (step + 1);
|
|
|
|
setTimeout(
|
|
(function (file, totalSteps, step) {
|
|
return function () {
|
|
file.upload = {
|
|
progress: (100 * (step + 1)) / totalSteps,
|
|
total: file.size,
|
|
bytesSent: ((step + 1) * file.size) / totalSteps,
|
|
};
|
|
|
|
self.emit(
|
|
"uploadprogress",
|
|
file,
|
|
file.upload.progress,
|
|
file.upload.bytesSent,
|
|
);
|
|
if (file.upload.progress === 100) {
|
|
if (isUploadSuccess) {
|
|
file.status = Dropzone.SUCCESS;
|
|
self.emit("success", file, "success", null);
|
|
} else {
|
|
file.status = Dropzone.ERROR;
|
|
self.emit(
|
|
"error",
|
|
file,
|
|
"Some upload error",
|
|
null,
|
|
);
|
|
}
|
|
|
|
self.emit("complete", file);
|
|
self.processQueue();
|
|
}
|
|
};
|
|
})(file, totalSteps, step),
|
|
duration,
|
|
);
|
|
}
|
|
}
|
|
};
|
|
|
|
try {
|
|
window.Dropzone = Dropzone;
|
|
} catch (e) {}
|
|
|
|
export { Dropzone };
|