From 2f335cf57ac0964faea086d2247563efb32ce831 Mon Sep 17 00:00:00 2001
From: Regalijan <r@regalijan.com>
Date: Tue, 26 Mar 2024 02:16:47 -0400
Subject: [PATCH] Make XHR requests async

---
 app/routes/report.tsx | 62 ++++++++++++++++++++++++-------------------
 1 file changed, 35 insertions(+), 27 deletions(-)

diff --git a/app/routes/report.tsx b/app/routes/report.tsx
index a75fe06..6a19a88 100644
--- a/app/routes/report.tsx
+++ b/app/routes/report.tsx
@@ -33,6 +33,10 @@ export function meta() {
     {
       title: "Report an Exploiter - Car Crushers",
     },
+    {
+      name: "description",
+      content: "Use this page to report a cheater",
+    },
   ];
 }
 
@@ -170,33 +174,37 @@ export default function () {
     };
 
     for (let i = 0; i < upload_urls.length; i++) {
-      const xhr = new XMLHttpRequest();
-
-      xhr.open("PUT", upload_urls[i], false);
-      xhr.setRequestHeader(
-        "content-type",
-        (files[i].name.split(".").at(-1) as string).toLowerCase() === "mov"
-          ? "video/mp4"
-          : files[i].type ||
-              fileTypes[files[i].name.split(".").at(-1) as string],
-      );
-
-      xhr.upload.addEventListener("progress", increaseProgress);
-      xhr.upload.onabort = () => {
-        shouldRecall = true;
-        setUploading(false);
-        setFileProgress(0);
-      };
-      xhr.upload.onerror = () => {
-        shouldRecall = true;
-        setUploading(false);
-        setFileProgress(0);
-      };
-      xhr.upload.onloadend = () => {
-        if (i === upload_urls.length - 1) setUploading(false);
-      };
-
-      xhr.send(files[i]);
+      await new Promise((resolve) => {
+        const xhr = new XMLHttpRequest();
+
+        xhr.open("PUT", upload_urls[i], true);
+        xhr.setRequestHeader(
+          "content-type",
+          (files[i].name.split(".").at(-1) as string).toLowerCase() === "mov"
+            ? "video/mp4"
+            : files[i].type ||
+                fileTypes[files[i].name.split(".").at(-1) as string],
+        );
+
+        xhr.upload.addEventListener("progress", increaseProgress);
+        xhr.upload.onabort = () => {
+          shouldRecall = true;
+          setUploading(false);
+          setFileProgress(0);
+        };
+        xhr.upload.onerror = () => {
+          shouldRecall = true;
+          setUploading(false);
+          setFileProgress(0);
+        };
+        xhr.upload.onloadend = () => {
+          if (i === upload_urls.length - 1) setUploading(false);
+
+          resolve(null);
+        };
+
+        xhr.send(files[i]);
+      });
     }
 
     if (shouldRecall) {