From 0af8c8932b5607aacc02ff365dca2a71b8cda7b4 Mon Sep 17 00:00:00 2001 From: simoleo89 Date: Sat, 6 Jun 2026 15:48:19 +0200 Subject: [PATCH] fix(furni-editor): clear CopyValue reset timer on unmount Move the 'copied!' 1s reset into a useEffect with cleanup so the timer can't fire setState after the component unmounts. --- .../furni-editor/views/FurniEditorEditView.tsx | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/src/components/furni-editor/views/FurniEditorEditView.tsx b/src/components/furni-editor/views/FurniEditorEditView.tsx index 4fb7cb7..a40e913 100644 --- a/src/components/furni-editor/views/FurniEditorEditView.tsx +++ b/src/components/furni-editor/views/FurniEditorEditView.tsx @@ -92,11 +92,20 @@ const CopyValue: FC<{ value: string | number }> = ({ value }) => const copy = useCallback(() => { const text = String(value); - const done = () => { setCopied(true); window.setTimeout(() => setCopied(false), 1000); }; - if(navigator.clipboard?.writeText) navigator.clipboard.writeText(text).then(done).catch(() => done()); - else done(); + if(navigator.clipboard?.writeText) navigator.clipboard.writeText(text).then(() => setCopied(true)).catch(() => setCopied(true)); + else setCopied(true); }, [ value ]); + // Reset the "copied!" flag after 1s, with cleanup so the timer never fires after unmount. + useEffect(() => + { + if(!copied) return; + + const handle = window.setTimeout(() => setCopied(false), 1000); + + return () => window.clearTimeout(handle); + }, [ copied ]); + return (