diff --git a/packages/web_ui/src/components/Dropzone.tsx b/packages/web_ui/src/components/Dropzone.tsx
new file mode 100644
index 00000000..0af48ff4
--- /dev/null
+++ b/packages/web_ui/src/components/Dropzone.tsx
@@ -0,0 +1,42 @@
+import { InboxOutlined } from "@ant-design/icons";
+import { DraggingContext } from "../model/is_dragging";
+import { useContext } from "react";
+
+// This component is used to display a dropzone when a file is being dragged over the parent component
+export function Dropzone() {
+ const isDroppingFile = useContext(DraggingContext);
+
+ return
+
+
+
+ Drop to upload
+
+
+
;
+}
diff --git a/packages/web_ui/src/components/ModsPage.tsx b/packages/web_ui/src/components/ModsPage.tsx
index 7b2e85ed..2637d1cc 100644
--- a/packages/web_ui/src/components/ModsPage.tsx
+++ b/packages/web_ui/src/components/ModsPage.tsx
@@ -3,7 +3,6 @@ import { useNavigate } from "react-router-dom";
import { Button, Form, Input, Modal, Popconfirm, Space, Table, Typography, Upload } from "antd";
import ImportOutlined from "@ant-design/icons/ImportOutlined";
import PlusOutlined from "@ant-design/icons/PlusOutlined";
-import UploadOutlined from "@ant-design/icons/UploadOutlined";
import * as lib from "@clusterio/lib";
@@ -17,7 +16,8 @@ import PageLayout from "./PageLayout";
import PluginExtra from "./PluginExtra";
import SectionHeader from "./SectionHeader";
import ModDetails from "./ModDetails";
-import { InboxOutlined } from "@ant-design/icons";
+import { Dropzone } from "./Dropzone";
+import UploadButton from "./UploadButton";
const strcmp = new Intl.Collator(undefined, { numeric: true, sensitivity: "base" }).compare;
@@ -134,7 +134,6 @@ export default function ModsPage() {
let navigate = useNavigate();
let [mods] = useMods();
let [modPacks] = useModPacks();
- const [isDroppingFile, setIsDroppingFile] = useState(false);
function actions(mod: lib.ModInfo) {
return
@@ -176,27 +175,13 @@ export default function ModsPage() {
name="file"
accept=".zip"
multiple
+ showUploadList={false}
headers={{
"X-Access-Token": control.connector.token || "",
}}
action={`${webRoot}api/upload-mod`}
>
-
+
;
}
@@ -256,50 +241,8 @@ export default function ModsPage() {
position: "relative",
zIndex: "1010",
}}
- onDragEnter={e => {
- setIsDroppingFile(true);
- }}
- onDragLeave={e => {
- if ((e.currentTarget as Node).contains(e.relatedTarget as Node)) {
- return;
- }
- setIsDroppingFile(false);
- }}
- onDrop={e => setIsDroppingFile(false)}
>
-