From 50ea8ddc1fdeb1795e96e9332f1a812097916548 Mon Sep 17 00:00:00 2001
From: Keane Chan <e0425601@u.nus.edu>
Date: Sat, 15 Oct 2022 10:14:06 +0800
Subject: [PATCH] [resumes][feat] skip upload of file if not changed (#380)

---
 apps/portal/src/pages/resumes/[resumeId].tsx |  2 +-
 apps/portal/src/pages/resumes/submit.tsx     | 26 +++++++++++---------
 2 files changed, 16 insertions(+), 12 deletions(-)

diff --git a/apps/portal/src/pages/resumes/[resumeId].tsx b/apps/portal/src/pages/resumes/[resumeId].tsx
index 611f0204..e192dcfd 100644
--- a/apps/portal/src/pages/resumes/[resumeId].tsx
+++ b/apps/portal/src/pages/resumes/[resumeId].tsx
@@ -101,7 +101,7 @@ export default function ResumeReviewPage() {
   return (
     <>
       {(detailsQuery.isError || detailsQuery.data === null) && ErrorPage}
-      {detailsQuery.isLoading && (
+      {detailsQuery.isFetching && (
         <div className="w-full pt-4">
           {' '}
           <Spinner display="block" size="lg" />{' '}
diff --git a/apps/portal/src/pages/resumes/submit.tsx b/apps/portal/src/pages/resumes/submit.tsx
index 12568b25..31eb563b 100644
--- a/apps/portal/src/pages/resumes/submit.tsx
+++ b/apps/portal/src/pages/resumes/submit.tsx
@@ -96,7 +96,7 @@ export default function SubmitResumeForm({
     handleSubmit,
     setValue,
     reset,
-    formState: { errors, isDirty },
+    formState: { errors, isDirty, dirtyFields },
   } = useForm<IFormInput>({
     defaultValues: {
       isChecked: false,
@@ -170,17 +170,21 @@ export default function SubmitResumeForm({
       return;
     }
     setIsLoading(true);
+    let fileUrl = initFormDetails?.url ?? '';
 
-    const formData = new FormData();
-    formData.append('key', RESUME_STORAGE_KEY);
-    formData.append('file', resumeFile);
+    // Only update file in fs when it changes
+    if (dirtyFields.file) {
+      const formData = new FormData();
+      formData.append('key', RESUME_STORAGE_KEY);
+      formData.append('file', resumeFile);
 
-    const res = await axios.post('/api/file-storage', formData, {
-      headers: {
-        'Content-Type': 'multipart/form-data',
-      },
-    });
-    const { url } = res.data;
+      const res = await axios.post('/api/file-storage', formData, {
+        headers: {
+          'Content-Type': 'multipart/form-data',
+        },
+      });
+      fileUrl = res.data.url;
+    }
 
     resumeUpsertMutation.mutate(
       {
@@ -190,7 +194,7 @@ export default function SubmitResumeForm({
         location: data.location,
         role: data.role,
         title: data.title,
-        url,
+        url: fileUrl,
       },
       {
         onError(error) {