From 44bc27b567f0bc5c1863c9f92450f20cf3748705 Mon Sep 17 00:00:00 2001 From: julius Date: Wed, 12 Feb 2025 16:53:06 +0100 Subject: [PATCH] feat: deferred `loadImage` --- src/Analysis.tsx | 49 ++++++++++++++++++++++++++++++++++++------------ src/App.css | 2 +- 2 files changed, 38 insertions(+), 13 deletions(-) diff --git a/src/Analysis.tsx b/src/Analysis.tsx index bca9c7a..782f112 100644 --- a/src/Analysis.tsx +++ b/src/Analysis.tsx @@ -1,6 +1,22 @@ import { useEffect, useState } from "react"; import { baseUrl } from "./api"; +//const debounce = void>( +// func: T, +// delay: number +//): ((...args: Parameters) => void) => { +// let timeoutId: number | null = null; +// return (...args: Parameters) => { +// if (timeoutId !== null) { +// clearTimeout(timeoutId); +// } +// console.log(timeoutId); +// timeoutId = setTimeout(() => { +// func(...args); +// }, delay); +// }; +//}; +// interface Prop { name: string; min: string; @@ -19,6 +35,13 @@ interface Params { popularity: boolean; } +interface DeferredProps { + timeout: number; + func: () => void; +} + + +let timeoutID: number | null = null; export default function Analysis() { const [image, setImage] = useState(""); const [params, setParams] = useState({ @@ -50,8 +73,15 @@ export default function Analysis() { }); } useEffect(() => { - loadImage(); - }, []); + if (timeoutID) { + console.log(timeoutID); + clearTimeout(timeoutID); + } + timeoutID = setTimeout(() => { + console.log("fire"); + loadImage(); + }, 1500); + }, [params]); return (
@@ -62,21 +92,21 @@ export default function Analysis() {
- setParams({ ...params, weighting: evt.target.checked })} - onMouseUp={() => loadImage()} - />
+ /> + +
- { setParams({ ...params, popularity: evt.target.checked }); loadImage() }} + onChange={(evt) => setParams({ ...params, popularity: evt.target.checked })} /> +
@@ -89,7 +119,6 @@ export default function Analysis() { step="0.05" value={params.distance} onChange={(evt) => setParams({ ...params, distance: Number(evt.target.value) })} - onMouseUp={() => loadImage()} /> {params.distance} @@ -101,7 +130,6 @@ export default function Analysis() { max="3000" value={params.nodeSize} onChange={(evt) => setParams({ ...params, nodeSize: Number(evt.target.value) })} - onMouseUp={() => loadImage()} /> {params.nodeSize} @@ -114,7 +142,6 @@ export default function Analysis() { max="24" value={params.fontSize} onChange={(evt) => setParams({ ...params, fontSize: Number(evt.target.value) })} - onMouseUp={() => loadImage()} /> {params.fontSize} @@ -128,7 +155,6 @@ export default function Analysis() { step="0.1" value={params.edgeWidth} onChange={(evt) => setParams({ ...params, edgeWidth: Number(evt.target.value) })} - onMouseUp={() => loadImage()} /> {params.edgeWidth} @@ -141,7 +167,6 @@ export default function Analysis() { max="50" value={params.arrowSize} onChange={(evt) => setParams({ ...params, arrowSize: Number(evt.target.value) })} - onMouseUp={() => loadImage()} /> {params.arrowSize} diff --git a/src/App.css b/src/App.css index 85e3def..1720fec 100644 --- a/src/App.css +++ b/src/App.css @@ -148,7 +148,7 @@ button { align-items: center; justify-content: center; border: 2px solid #404040; - padding: 8px; + padding: 8px 16px; } @media only screen and (max-width: 1000px) {