Merge branch 'Development' into SIPS-Sprint-3-270325

This commit is contained in:
2025-03-27 13:25:10 +00:00
3 changed files with 101 additions and 59 deletions
@@ -944,8 +944,10 @@ export const RenderFileUpload = (field) => {
return "/assets/images/documenttypes/zip.png"; return "/assets/images/documenttypes/zip.png";
break; break;
case "image/jpeg": case "image/jpeg":
return "/assets/images/documenttypes/jpg.png";
case "image/png": case "image/png":
return URL.createObjectURL(fileObj); return "/assets/images/documenttypes/jpg.png";
//return URL.createObjectURL(fileObj);
break; break;
default: default:
return "/assets/images/documenttypes/default.png"; return "/assets/images/documenttypes/default.png";
@@ -1074,6 +1076,7 @@ export const RenderFileUpload = (field) => {
// Handle accepted files (clear error message when files are accepted) // Handle accepted files (clear error message when files are accepted)
const handleDropAccepted = () => { const handleDropAccepted = () => {
setErrorMessage(null);
setRejectedFiles([]); // Clear any previously rejected file errorsss setRejectedFiles([]); // Clear any previously rejected file errorsss
}; };
@@ -1169,6 +1172,12 @@ export const RenderFileUpload = (field) => {
// Object.assign(values, { // Object.assign(values, {
// "fileList": buildAppealFilesArray, // "fileList": buildAppealFilesArray,
// }); // });
data.invalidFiles.length > 0 &&
(setRejectedFiles(data.invalidFiles),
setUploadCountMessage(
renamedAcceptedFiles.length -
data.invalidFiles.length
));
getFilesFromBlobproxy( getFilesFromBlobproxy(
field.containerID, field.containerID,
field.ticketnumber + field.ticketnumber +
@@ -1215,32 +1224,16 @@ export const RenderFileUpload = (field) => {
) )
</em> </em>
</div> </div>
<aside>{thumbs}</aside> {/* <aside>{thumbs}</aside> */}
{uploadCountMessage > 0 &&
completedUploadFiles == false && (
<div className="govuk-body govuk-!-font-size-14">
{t("home:uploading-files-label", {
number: uploadCountMessage,
})}
</div>
)}
{completedUploadFiles > 0 &&
uploadCountMessage > 0 && (
<div className="govuk-body govuk-!-font-size-14">
{t(
"home:completed-uploading-files-label",
{
number: uploadCountMessage,
}
)}
</div>
)}
</section> </section>
</> </>
)} )}
</Dropzone> </Dropzone>
{rejectedFiles.length > 0 && ( {rejectedFiles.length > 0 && completedUploadFiles == true && (
<div style={{ color: "red", marginTop: "10px" }}> <div
style={{ color: "red", marginTop: "10px" }}
className="govuk-body govuk-!-font-size-14 "
>
<ul> <ul>
{rejectedFiles.map((error, index) => ( {rejectedFiles.map((error, index) => (
<li key={index}>{error}</li> <li key={index}>{error}</li>
@@ -1248,6 +1241,20 @@ export const RenderFileUpload = (field) => {
</ul> </ul>
</div> </div>
)} )}
{uploadCountMessage > 0 && completedUploadFiles == false && (
<div className="govuk-body govuk-!-font-size-14">
{t("home:uploading-files-label", {
number: uploadCountMessage,
})}
</div>
)}
{completedUploadFiles > 0 && uploadCountMessage >= 0 && (
<div className="govuk-body govuk-!-font-size-14">
{t("home:completed-uploading-files-label", {
number: uploadCountMessage,
})}
</div>
)}
{field.meta.touched && field.meta.error && ( {field.meta.touched && field.meta.error && (
<span className="error">{field.meta.error}</span> <span className="error">{field.meta.error}</span>
)} )}
+30 -25
View File
@@ -1851,8 +1851,10 @@ const RenderFileUpload = (field) => {
return "/assets/images/documenttypes/zip.png"; return "/assets/images/documenttypes/zip.png";
break; break;
case "image/jpeg": case "image/jpeg":
return "/assets/images/documenttypes/jpg.png";
case "image/png": case "image/png":
return URL.createObjectURL(fileObj); return "/assets/images/documenttypes/png.png";
//return URL.createObjectURL(fileObj);
break; break;
default: default:
return "/assets/images/documenttypes/default.png"; return "/assets/images/documenttypes/default.png";
@@ -2036,13 +2038,12 @@ const RenderFileUpload = (field) => {
); );
field.input.onChange(renamedAcceptedFiles); field.input.onChange(renamedAcceptedFiles);
setUploadCountMessage(renamedAcceptedFiles.length);
console.log("werwerw");
field.setFileCount( field.setFileCount(
field.uploadCount + renamedAcceptedFiles.length field.uploadCount + renamedAcceptedFiles.length
); );
setUploadCountMessage(renamedAcceptedFiles.length);
uploadSingleFile( uploadSingleFile(
renamedAcceptedFiles, renamedAcceptedFiles,
field.containerID, field.containerID,
@@ -2089,6 +2090,12 @@ const RenderFileUpload = (field) => {
Object.assign(values, { Object.assign(values, {
"filesList": buildAppealFilesArray, "filesList": buildAppealFilesArray,
}); });
data.invalidFiles.length > 0 &&
(setRejectedFiles(data.invalidFiles),
setUploadCountMessage(
renamedAcceptedFiles.length -
data.invalidFiles.length
));
getFilesFromBlobproxy( getFilesFromBlobproxy(
field.containerID, field.containerID,
field.ticketnumber field.ticketnumber
@@ -2123,31 +2130,15 @@ const RenderFileUpload = (field) => {
</em> </em>
</div> </div>
{/* <aside>{thumbs}</aside> */} {/* <aside>{thumbs}</aside> */}
{uploadCountMessage > 0 &&
completedUploadFiles == false && (
<div className="govuk-body govuk-!-font-size-14">
{t("home:uploading-files-label", {
number: uploadCountMessage,
})}
</div>
)}
{completedUploadFiles > 0 &&
uploadCountMessage > 0 && (
<div className="govuk-body govuk-!-font-size-14">
{t(
"home:completed-uploading-files-label",
{
number: uploadCountMessage,
}
)}
</div>
)}
</section> </section>
</> </>
)} )}
</Dropzone> </Dropzone>
{rejectedFiles.length > 0 && ( {rejectedFiles.length > 0 && completedUploadFiles == true && (
<div style={{ color: "red", marginTop: "10px" }}> <div
style={{ color: "red", marginTop: "10px" }}
className="govuk-body govuk-!-font-size-14 "
>
<ul> <ul>
{rejectedFiles.map((error, index) => ( {rejectedFiles.map((error, index) => (
<li key={index}>{error}</li> <li key={index}>{error}</li>
@@ -2155,6 +2146,20 @@ const RenderFileUpload = (field) => {
</ul> </ul>
</div> </div>
)} )}
{uploadCountMessage > 0 && completedUploadFiles == false && (
<div className="govuk-body govuk-!-font-size-14">
{t("home:uploading-files-label", {
number: uploadCountMessage,
})}
</div>
)}
{completedUploadFiles > 0 && uploadCountMessage >= 0 && (
<div className="govuk-body govuk-!-font-size-14">
{t("home:completed-uploading-files-label", {
number: uploadCountMessage,
})}
</div>
)}
{field.meta.touched && field.meta.error && ( {field.meta.touched && field.meta.error && (
<span className="error">{field.meta.error}</span> <span className="error">{field.meta.error}</span>
)} )}
+41 -11
View File
@@ -38,6 +38,20 @@ ApiProxy.post(async (req, res) => {
]; ];
var allowedFilesFormData = {}; var allowedFilesFormData = {};
var invalidFiles = []; // To store the names of invalid files
// for (const [fileName, fileDetails] of Object.entries(req.files)) {
// if (allowedMimeTypes.includes(fileDetails[0].headers["content-type"])) {
// allowedFilesFormData[fileName] = fileDetails.map((file) => ({
// fieldName: file.fieldName,
// originalFilename: file.originalFilename,
// path: file.path,
// size: file.size,
// headers: file.headers,
// contentType: file.headers["content-type"],
// }));
// }
// }
// for (const [fileName, fileDetails] of Object.entries(req.files)) { // for (const [fileName, fileDetails] of Object.entries(req.files)) {
// if (allowedMimeTypes.includes(fileDetails[0].headers["content-type"])) { // if (allowedMimeTypes.includes(fileDetails[0].headers["content-type"])) {
@@ -81,39 +95,55 @@ ApiProxy.post(async (req, res) => {
console.log( console.log(
`\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\n\nFile ${fileName} has an invalid MIME type based on its content.\n\n\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\` `\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\n\nFile ${fileName} has an invalid MIME type based on its content.\n\n\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\`
); );
return res invalidFiles.push(fileName); // Track invalid file
.status(400)
.json({ error: `Invalid file type for ${fileName}` }); // return res
// .status(400)
// .json({ error: `Invalid file type for ${fileName}` });
} }
} catch (error) { } catch (error) {
console.log( console.log(
`Error reading file ${fileName} for MIME type validation`, `Error reading file ${fileName} for MIME type validation`,
error error
); );
return res // return res
.status(500) // .status(500)
.json({ error: "Failed to validate file type" }); // .json({ error: "Failed to validate file type" });
} }
} else { } else {
console.log( console.log(
`\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\n\nFile ${fileName} has an unsupported MIME type: ${fileMimeType}\n\n\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\` `\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\n\nFile ${fileName} has an unsupported MIME type: ${fileMimeType}\n\n\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\`
); );
return res.status(400).json({ invalidFiles.push(fileName); // Track invalid file
error: `Unsupported MIME type for ${fileName}`,
}); // return res.status(400).json({
// error: `Unsupported MIME type for ${fileName}`,
// });
} }
} }
//console.log("allowedFilesFormData: ", allowedFilesFormData); //console.log("allowedFilesFormData: ", allowedFilesFormData);
// If no valid files are found
// if (Object.keys(allowedFilesFormData).length === 0) {
// return res.status(400).json({
// error: "No valid files found",
// invalidFiles: invalidFiles, // Return the list of invalid files
// });
// }
invalidFiles = invalidFiles.map((fileName) => {
return `${fileName} - Invalid file`;
});
try { try {
const data = await uploadSingleFile( const data = await uploadSingleFile(
allowedFilesFormData, allowedFilesFormData,
containerID, containerID,
casefolderID casefolderID
).then((data) => { ).then((data) => {
return res.status(200).json({ data }); return res.status(200).json({ data, invalidFiles });
}); });
return res.status(200).json({ data }); return res.status(200).json({ data, invalidFiles });
} catch (error) { } catch (error) {
consoleLogger(error); consoleLogger(error);
return res.status(500).json({ error: "Failed to upload files" }); return res.status(500).json({ error: "Failed to upload files" });