From bc4b6fa00777c07b191abe0bf1bab258502a3ecb Mon Sep 17 00:00:00 2001
From: Patrick Fic <>
Date: Wed, 20 Jul 2022 14:16:41 -0700
Subject: [PATCH] IO-1988 Download LMS as zip.
---
...jobs-documents-local-gallery.container.jsx | 2 +
.../jobs-documents-local-gallery.download.jsx | 74 +++++++++++++++++++
2 files changed, 76 insertions(+)
create mode 100644 client/src/components/jobs-documents-local-gallery/jobs-documents-local-gallery.download.jsx
diff --git a/client/src/components/jobs-documents-local-gallery/jobs-documents-local-gallery.container.jsx b/client/src/components/jobs-documents-local-gallery/jobs-documents-local-gallery.container.jsx
index 92ba94f17..f58c8025c 100644
--- a/client/src/components/jobs-documents-local-gallery/jobs-documents-local-gallery.container.jsx
+++ b/client/src/components/jobs-documents-local-gallery/jobs-documents-local-gallery.container.jsx
@@ -14,6 +14,7 @@ import { selectAllMedia } from "../../redux/media/media.selectors";
import { selectBodyshop } from "../../redux/user/user.selectors";
import { CreateExplorerLinkForJob } from "../../utils/localmedia";
import DocumentsLocalUploadComponent from "../documents-local-upload/documents-local-upload.component";
+import JobsLocalGalleryDownloadButton from "./jobs-documents-local-gallery.download";
import JobsDocumentsLocalGalleryReassign from "./jobs-documents-local-gallery.reassign.component";
import JobsDocumentsLocalGallerySelectAllComponent from "./jobs-documents-local-gallery.selectall.component";
@@ -78,6 +79,7 @@ export function JobsDocumentsLocalGallery({
+
({
+ //setUserLanguage: language => dispatch(setUserLanguage(language))
+});
+export default connect(
+ mapStateToProps,
+ mapDispatchToProps
+)(JobsLocalGalleryDownloadButton);
+
+export function JobsLocalGalleryDownloadButton({
+ bodyshop,
+ galleryImages,
+ allMedia,
+ job,
+}) {
+ const { t } = useTranslation();
+ const [download, setDownload] = useState(null);
+
+ function downloadProgress(progressEvent) {
+ setDownload((currentDownloadState) => {
+ return {
+ downloaded: progressEvent.loaded || 0,
+ speed:
+ (progressEvent.loaded || 0) -
+ ((currentDownloadState && currentDownloadState.downloaded) || 0),
+ };
+ });
+ }
+
+ const handleDownload = async () => {
+ const theDownloadedZip = await cleanAxios.post(
+ `${bodyshop.localmediaserverhttp}/jobs/download`,
+ {
+ jobid: job.id,
+ files: ((allMedia && allMedia[job.id]) || [])
+ .filter((i) => i.isSelected)
+ .map((i) => i.filename),
+ },
+ {
+ headers: { ims_token: bodyshop.localmediatoken },
+ responseType: "arraybuffer",
+ onDownloadProgress: downloadProgress,
+ }
+ );
+ setDownload(null);
+ standardMediaDownload(theDownloadedZip.data, job.ro_number);
+ };
+
+ return (
+
+ );
+}
+
+function standardMediaDownload(bufferData, filename) {
+ const a = document.createElement("a");
+ const url = window.URL.createObjectURL(new Blob([bufferData]));
+ a.href = url;
+ a.download = `${filename}.zip`;
+ a.click();
+}