From b26d81ca08c85815860e5fd4125daf7e116e8ce0 Mon Sep 17 00:00:00 2001 From: Trevor Buckner Date: Sat, 12 Sep 2026 12:30:21 -0400 Subject: [PATCH] Move UnsavedChangesRef into common hook and clean syncing useEffect --- client/homebrew/pages/editPage/editPage.jsx | 7 +------ client/homebrew/pages/homePage/homePage.jsx | 7 +------ client/homebrew/pages/newPage/newPage.jsx | 7 +------ client/homebrew/utils/commonEditPageFunctions.js | 5 ++++- 4 files changed, 7 insertions(+), 19 deletions(-) diff --git a/client/homebrew/pages/editPage/editPage.jsx b/client/homebrew/pages/editPage/editPage.jsx index 75043aa44..003fc64ec 100644 --- a/client/homebrew/pages/editPage/editPage.jsx +++ b/client/homebrew/pages/editPage/editPage.jsx @@ -78,11 +78,6 @@ const EditPage = (props)=>{ const lastSavedBrew = useRef(_.cloneDeep(props.brew)); const saveTimeout = useRef(null); const warnUnsavedTimeout = useRef(null); - const unsavedChangesRef = useRef(unsavedChanges); // Similarly, onBeforeUnload lives outside React and needs ref to unsavedChanges - - useEffect(()=>{ - unsavedChangesRef.current = unsavedChanges; - }); const handleSplitMove = ()=>{ editorRef.current?.update(); @@ -344,7 +339,7 @@ const EditPage = (props)=>{ autoSaveEnabled, setAutoSaveEnabled, setWarnUnsavedChanges, - unsavedChangesRef, + unsavedChanges, setUnsavedChanges, trySave, sandbox, diff --git a/client/homebrew/pages/homePage/homePage.jsx b/client/homebrew/pages/homePage/homePage.jsx index 2c0de0e0a..1adb77e9a 100644 --- a/client/homebrew/pages/homePage/homePage.jsx +++ b/client/homebrew/pages/homePage/homePage.jsx @@ -65,11 +65,6 @@ const HomePage =(props)=>{ const editorRef = useRef(null); const lastSavedBrew = useRef(_.cloneDeep(props.brew)); const warnUnsavedTimeout = useRef(null); - const unsavedChangesRef = useRef(unsavedChanges); - - useEffect(()=>{ - unsavedChangesRef.current = unsavedChanges; - }, [unsavedChanges]); const save = ()=>{ request.post('/api') @@ -168,7 +163,7 @@ const HomePage =(props)=>{ autoSaveEnabled, setAutoSaveEnabled, setWarnUnsavedChanges, - unsavedChangesRef, + unsavedChanges, setUnsavedChanges, sandbox, lastSavedBrew diff --git a/client/homebrew/pages/newPage/newPage.jsx b/client/homebrew/pages/newPage/newPage.jsx index c4f21c982..ea15199c8 100644 --- a/client/homebrew/pages/newPage/newPage.jsx +++ b/client/homebrew/pages/newPage/newPage.jsx @@ -66,7 +66,6 @@ const NewPage = (props)=>{ const lastSavedBrew = useRef(_.cloneDeep(props.brew)); // const saveTimeout = useRef(null); const warnUnsavedTimeout = useRef(null); - const unsavedChangesRef = useRef(unsavedChanges); // Similarly, onBeforeUnload lives outside React and needs ref to unsavedChanges useEffect(()=>{ loadBrew(); @@ -101,10 +100,6 @@ const NewPage = (props)=>{ window.history.replaceState({}, window.location.title, '/new/'); }; - useEffect(()=>{ - unsavedChangesRef.current = unsavedChanges; - }); - const handleSplitMove = ()=>{ editorRef.current.update(); }; @@ -222,7 +217,7 @@ const NewPage = (props)=>{ autoSaveEnabled, setAutoSaveEnabled, setWarnUnsavedChanges, - unsavedChangesRef, + unsavedChanges, setUnsavedChanges, trySave, sandbox, diff --git a/client/homebrew/utils/commonEditPageFunctions.js b/client/homebrew/utils/commonEditPageFunctions.js index 96368d15b..4a75feaf8 100644 --- a/client/homebrew/utils/commonEditPageFunctions.js +++ b/client/homebrew/utils/commonEditPageFunctions.js @@ -24,11 +24,13 @@ export default function useCommonEditPageFunctions(dependencies) { trySave = ()=>{}, sandbox, saveGoogle = false, - unsavedChangesRef, + unsavedChanges, setUnsavedChanges, lastSavedBrew } = dependencies; + const unsavedChangesRef = useRef(unsavedChanges); // onBeforeUnload lives outside React and needs ref to unsavedChanges + //==--------- Page setup ----------==// useEffect(()=>{ const autoSavePref = !sandbox && JSON.parse(localStorage.getItem(AUTOSAVE_KEY) ?? true); @@ -63,6 +65,7 @@ export default function useCommonEditPageFunctions(dependencies) { useEffect(()=>{ const hasChange = !_.isEqual(currentBrew, lastSavedBrew.current); setUnsavedChanges(hasChange); + unsavedChangesRef.current = hasChange; if(autoSaveEnabled) trySave(false, hasChange, saveGoogle); }, [currentBrew]);