fix: bugs in open image dialog (#2)

This commit is contained in:
trafficlunar 2025-11-23 15:50:28 +00:00
parent e7dd18bbc0
commit 8b5d35e177

View file

@ -55,8 +55,8 @@ function OpenImage({ close }: DialogProps) {
falling: false, falling: false,
}); });
// Used for centering the canvas // Changed from ref to state so React re-renders when it changes
const isFinished = useRef(false); const [isFinished, setIsFinished] = useState(false);
useEffect(() => { useEffect(() => {
if (acceptedFiles[0]) { if (acceptedFiles[0]) {
@ -104,7 +104,7 @@ function OpenImage({ close }: DialogProps) {
if (image) { if (image) {
const oldBlocks = [...blocks]; const oldBlocks = [...blocks];
isFinished.current = false; setIsFinished(false);
setLoading(true); setLoading(true);
// Wait for loading indicator to appear // Wait for loading indicator to appear
@ -146,22 +146,23 @@ function OpenImage({ close }: DialogProps) {
} }
setLoading(false); setLoading(false);
isFinished.current = true; setIsFinished(true);
} }
}; };
// Trying to center and close above doesn't work for some reason // This effect now properly triggers when isFinished changes
useEffect(() => { useEffect(() => {
if (!isFinished.current) return; if (!isFinished) return;
// Wrap in requestAnimationFrame() to fix bug where canvas is black // Wrap in requestAnimationFrame() to fix bug where canvas is black
requestAnimationFrame(() => { requestAnimationFrame(() => {
centerCanvas(); centerCanvas();
close();
}); });
close();
// Cleanup
return () => { return () => {
isFinished.current = false; setIsFinished(false);
}; };
}, [isFinished, centerCanvas, close]); }, [isFinished, centerCanvas, close]);
@ -187,13 +188,13 @@ function OpenImage({ close }: DialogProps) {
return newState; return newState;
}); });
}, [selectedBlocks]); }, [selectedBlocks, blockData]);
useEffect(() => { useEffect(() => {
if (!userModifiedBlocks.current) { if (!userModifiedBlocks.current) {
setSelectedBlocks(Object.keys(blockData)); setSelectedBlocks(Object.keys(blockData));
} }
}, [version]); }, [version, blockData]);
useEffect(() => { useEffect(() => {
if (!divRef.current) return; if (!divRef.current) return;