fix: bugs in open image dialog (#2)
This commit is contained in:
parent
e7dd18bbc0
commit
8b5d35e177
1 changed files with 11 additions and 10 deletions
|
|
@ -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;
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue