From 6b65da7f6655adef3e589e088173a8fce52290d7 Mon Sep 17 00:00:00 2001 From: Sucukdeluxe Date: Fri, 27 Feb 2026 16:36:52 +0100 Subject: [PATCH] Improve UI responsiveness for control actions and drag overlay --- src/renderer/App.tsx | 51 +++++++++++++++++++++++++++++++++++++------- 1 file changed, 43 insertions(+), 8 deletions(-) diff --git a/src/renderer/App.tsx b/src/renderer/App.tsx index be6c9f3..a85013a 100644 --- a/src/renderer/App.tsx +++ b/src/renderer/App.tsx @@ -80,6 +80,8 @@ export function App(): ReactElement { const draggedPackageIdRef = useRef(null); const [collapsedPackages, setCollapsedPackages] = useState>({}); const [downloadSearch, setDownloadSearch] = useState(""); + const [actionBusy, setActionBusy] = useState(false); + const dragOverRef = useRef(false); const currentCollectorTab = collectorTabs.find((t) => t.id === activeCollectorTab) ?? collectorTabs[0]; @@ -283,6 +285,7 @@ export function App(): ReactElement { const onDrop = async (event: DragEvent): Promise => { event.preventDefault(); + dragOverRef.current = false; setDragOver(false); const files = Array.from(event.dataTransfer.files ?? []) as File[]; const dlc = files.filter((f) => f.name.toLowerCase().endsWith(".dlc")).map((f) => (f as unknown as { path?: string }).path).filter((v): v is string => !!v); @@ -344,7 +347,19 @@ export function App(): ReactElement { }; const performQuickAction = async (action: () => Promise): Promise => { - try { await action(); } catch (error) { showToast(`Fehler: ${String(error)}`, 2600); } + if (actionBusy) { + return; + } + setActionBusy(true); + try { + await action(); + } catch (error) { + showToast(`Fehler: ${String(error)}`, 2600); + } finally { + setTimeout(() => { + setActionBusy(false); + }, 100); + } }; const movePackage = useCallback((packageId: string, direction: "up" | "down") => { @@ -449,8 +464,19 @@ export function App(): ReactElement { return (
{ e.preventDefault(); setDragOver(true); }} - onDragLeave={() => setDragOver(false)} + onDragOver={(e) => { + e.preventDefault(); + if (!dragOverRef.current) { + dragOverRef.current = true; + setDragOver(true); + } + }} + onDragLeave={() => { + if (dragOverRef.current) { + dragOverRef.current = false; + setDragOver(false); + } + }} onDrop={onDrop} >
@@ -469,15 +495,24 @@ export function App(): ReactElement {
- - - + -