Skip to content

Commit f7ddca1

Browse files
authored
Merge pull request #3983 from runningonsideprojects/upload-files-bug-and-refactor
fix: file uploader styling refactor
2 parents 280fb38 + 3b19e7d commit f7ddca1

2 files changed

Lines changed: 42 additions & 1 deletion

File tree

client/modules/IDE/actions/uploader.js

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,23 @@ export function dropzoneCompleteCallback(file) {
8282
content: file.content
8383
};
8484
dispatch(handleCreateFile(formParams, false));
85+
} else if (file.status === 'error' || file.xhr.status >= 400) {
86+
let uploadFileErrorMessage = 'Uploading file to AWS failed.';
87+
if (file.xhr?.response) {
88+
const parser = new DOMParser();
89+
const xmlDoc = parser.parseFromString(file.xhr.response, 'text/xml');
90+
const message = xmlDoc.getElementsByTagName('Message')[0]?.textContent;
91+
const code = xmlDoc.getElementsByTagName('Code')[0]?.textContent;
92+
uploadFileErrorMessage = `${code}: ${message}`;
93+
}
94+
file.previewElement.classList.add('dz-error');
95+
file.previewElement.classList.remove('dz-success');
96+
const dzErrorMessageElement = file.previewElement?.querySelector(
97+
'[data-dz-errormessage]'
98+
);
99+
if (dzErrorMessageElement) {
100+
dzErrorMessageElement.textContent = uploadFileErrorMessage;
101+
}
85102
}
86103
};
87104
}

client/modules/IDE/components/FileUploader.jsx

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,13 +23,36 @@ const StyledUploader = styled.div`
2323
.dz-preview.dz-image-preview {
2424
background-color: transparent;
2525
}
26+
.dz-image img {
27+
width: 100%;
28+
height: auto;
29+
}
30+
.dz-details .dz-filename:hover {
31+
overflow: hidden;
32+
}
33+
.dz-error-message span {
34+
width: 100%;
35+
height: auto;
36+
overflow: hidden;
37+
display: block;
38+
}
39+
.dz-error-mark:hover {
40+
cursor: pointer !important;
41+
}
2642
`;
2743

2844
function FileUploader() {
2945
const { t } = useTranslation();
3046
const dispatch = useDispatch();
3147
const userId = useSelector((state) => state.user.id);
32-
48+
const deleteUploadErrorFiles = (uploader, file) => {
49+
if (file.status === 'error') {
50+
file.previewElement.addEventListener('click', (e) => {
51+
e.stopPropagation();
52+
uploader.removeFile(file);
53+
});
54+
}
55+
};
3356
useEffect(() => {
3457
const uploader = new Dropzone('div#uploader', {
3558
url: s3BucketHttps,
@@ -52,6 +75,7 @@ function FileUploader() {
5275
});
5376
uploader.on('complete', (file) => {
5477
dispatch(dropzoneCompleteCallback(file));
78+
deleteUploadErrorFiles(uploader, file);
5579
});
5680
return () => {
5781
uploader.destroy();

0 commit comments

Comments
 (0)