mirror of
https://github.com/naturalcrit/homebrewery.git
synced 2026-09-20 16:42:58 +00:00
Move UnsavedChangesRef into common hook and clean syncing useEffect
This commit is contained in:
@@ -78,11 +78,6 @@ const EditPage = (props)=>{
|
|||||||
const lastSavedBrew = useRef(_.cloneDeep(props.brew));
|
const lastSavedBrew = useRef(_.cloneDeep(props.brew));
|
||||||
const saveTimeout = useRef(null);
|
const saveTimeout = useRef(null);
|
||||||
const warnUnsavedTimeout = 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 = ()=>{
|
const handleSplitMove = ()=>{
|
||||||
editorRef.current?.update();
|
editorRef.current?.update();
|
||||||
@@ -344,7 +339,7 @@ const EditPage = (props)=>{
|
|||||||
autoSaveEnabled,
|
autoSaveEnabled,
|
||||||
setAutoSaveEnabled,
|
setAutoSaveEnabled,
|
||||||
setWarnUnsavedChanges,
|
setWarnUnsavedChanges,
|
||||||
unsavedChangesRef,
|
unsavedChanges,
|
||||||
setUnsavedChanges,
|
setUnsavedChanges,
|
||||||
trySave,
|
trySave,
|
||||||
sandbox,
|
sandbox,
|
||||||
|
|||||||
@@ -65,11 +65,6 @@ const HomePage =(props)=>{
|
|||||||
const editorRef = useRef(null);
|
const editorRef = useRef(null);
|
||||||
const lastSavedBrew = useRef(_.cloneDeep(props.brew));
|
const lastSavedBrew = useRef(_.cloneDeep(props.brew));
|
||||||
const warnUnsavedTimeout = useRef(null);
|
const warnUnsavedTimeout = useRef(null);
|
||||||
const unsavedChangesRef = useRef(unsavedChanges);
|
|
||||||
|
|
||||||
useEffect(()=>{
|
|
||||||
unsavedChangesRef.current = unsavedChanges;
|
|
||||||
}, [unsavedChanges]);
|
|
||||||
|
|
||||||
const save = ()=>{
|
const save = ()=>{
|
||||||
request.post('/api')
|
request.post('/api')
|
||||||
@@ -168,7 +163,7 @@ const HomePage =(props)=>{
|
|||||||
autoSaveEnabled,
|
autoSaveEnabled,
|
||||||
setAutoSaveEnabled,
|
setAutoSaveEnabled,
|
||||||
setWarnUnsavedChanges,
|
setWarnUnsavedChanges,
|
||||||
unsavedChangesRef,
|
unsavedChanges,
|
||||||
setUnsavedChanges,
|
setUnsavedChanges,
|
||||||
sandbox,
|
sandbox,
|
||||||
lastSavedBrew
|
lastSavedBrew
|
||||||
|
|||||||
@@ -66,7 +66,6 @@ const NewPage = (props)=>{
|
|||||||
const lastSavedBrew = useRef(_.cloneDeep(props.brew));
|
const lastSavedBrew = useRef(_.cloneDeep(props.brew));
|
||||||
// const saveTimeout = useRef(null);
|
// const saveTimeout = useRef(null);
|
||||||
const warnUnsavedTimeout = useRef(null);
|
const warnUnsavedTimeout = useRef(null);
|
||||||
const unsavedChangesRef = useRef(unsavedChanges); // Similarly, onBeforeUnload lives outside React and needs ref to unsavedChanges
|
|
||||||
|
|
||||||
useEffect(()=>{
|
useEffect(()=>{
|
||||||
loadBrew();
|
loadBrew();
|
||||||
@@ -101,10 +100,6 @@ const NewPage = (props)=>{
|
|||||||
window.history.replaceState({}, window.location.title, '/new/');
|
window.history.replaceState({}, window.location.title, '/new/');
|
||||||
};
|
};
|
||||||
|
|
||||||
useEffect(()=>{
|
|
||||||
unsavedChangesRef.current = unsavedChanges;
|
|
||||||
});
|
|
||||||
|
|
||||||
const handleSplitMove = ()=>{
|
const handleSplitMove = ()=>{
|
||||||
editorRef.current.update();
|
editorRef.current.update();
|
||||||
};
|
};
|
||||||
@@ -222,7 +217,7 @@ const NewPage = (props)=>{
|
|||||||
autoSaveEnabled,
|
autoSaveEnabled,
|
||||||
setAutoSaveEnabled,
|
setAutoSaveEnabled,
|
||||||
setWarnUnsavedChanges,
|
setWarnUnsavedChanges,
|
||||||
unsavedChangesRef,
|
unsavedChanges,
|
||||||
setUnsavedChanges,
|
setUnsavedChanges,
|
||||||
trySave,
|
trySave,
|
||||||
sandbox,
|
sandbox,
|
||||||
|
|||||||
@@ -24,11 +24,13 @@ export default function useCommonEditPageFunctions(dependencies) {
|
|||||||
trySave = ()=>{},
|
trySave = ()=>{},
|
||||||
sandbox,
|
sandbox,
|
||||||
saveGoogle = false,
|
saveGoogle = false,
|
||||||
unsavedChangesRef,
|
unsavedChanges,
|
||||||
setUnsavedChanges,
|
setUnsavedChanges,
|
||||||
lastSavedBrew
|
lastSavedBrew
|
||||||
} = dependencies;
|
} = dependencies;
|
||||||
|
|
||||||
|
const unsavedChangesRef = useRef(unsavedChanges); // onBeforeUnload lives outside React and needs ref to unsavedChanges
|
||||||
|
|
||||||
//==--------- Page setup ----------==//
|
//==--------- Page setup ----------==//
|
||||||
useEffect(()=>{
|
useEffect(()=>{
|
||||||
const autoSavePref = !sandbox && JSON.parse(localStorage.getItem(AUTOSAVE_KEY) ?? true);
|
const autoSavePref = !sandbox && JSON.parse(localStorage.getItem(AUTOSAVE_KEY) ?? true);
|
||||||
@@ -63,6 +65,7 @@ export default function useCommonEditPageFunctions(dependencies) {
|
|||||||
useEffect(()=>{
|
useEffect(()=>{
|
||||||
const hasChange = !_.isEqual(currentBrew, lastSavedBrew.current);
|
const hasChange = !_.isEqual(currentBrew, lastSavedBrew.current);
|
||||||
setUnsavedChanges(hasChange);
|
setUnsavedChanges(hasChange);
|
||||||
|
unsavedChangesRef.current = hasChange;
|
||||||
|
|
||||||
if(autoSaveEnabled) trySave(false, hasChange, saveGoogle);
|
if(autoSaveEnabled) trySave(false, hasChange, saveGoogle);
|
||||||
}, [currentBrew]);
|
}, [currentBrew]);
|
||||||
|
|||||||
Reference in New Issue
Block a user