浏览代码

Got rid of eventToAsync

Samuel Maier 3 年之前
父节点
当前提交
aefb7d56db
共有 1 个文件被更改,包括 8 次插入23 次删除
  1. 8 23
      src/App.tsx

+ 8 - 23
src/App.tsx

@@ -63,9 +63,7 @@ function useKeyboardCtrlIntercept(
       reaction(event);
     };
     const controller = new AbortController();
-    window.addEventListener("keydown", wrappedReaction, {
-      signal: controller.signal,
-    });
+    window.addEventListener("keydown", wrappedReaction, {signal: controller.signal});
 
     return () => controller.abort();
   }, [key, reaction]);
@@ -92,28 +90,15 @@ function downloadUri(uri: string, filename: string) {
   downloadAnchor.click();
 }
 
-async function eventToAsync<EventType extends keyof HTMLElementEventMap>(
-  element: HTMLElement,
-  eventType: EventType
-) {
-  const abortController = new AbortController();
-  const evt = await new Promise<HTMLElementEventMap[EventType]>((resolve) => {
-    element.addEventListener(eventType, (event) => resolve(event), {
-      signal: abortController.signal,
-    });
-  });
-  abortController.abort();
-  return evt;
-}
-
-/**
- * This appears to be the best way to upload a file.
- */
-async function uploadFile() {
+async function getFileUploadWithDialog() {
   const uploadInput = document.createElement("input");
   uploadInput.type = "file";
   uploadInput.click();
-  await eventToAsync(uploadInput, "change");
+  const controller = new AbortController();
+  // await the user-input (selecting the file)
+  await new Promise((resolve) => uploadInput.addEventListener("change", resolve, {signal: controller.signal}));
+  controller.abort();
+  console.log("reached", uploadInput.files?.length);
   const files = uploadInput.files;
   if (files?.length !== 1) return;
   return files[0];
@@ -356,7 +341,7 @@ function App() {
               mt={1}
               flex="auto"
               onClick={async () => {
-                const file = await uploadFile();
+                const file = await getFileUploadWithDialog();
                 if (!file) return;
                 handleUploadFile(file);
               }}