diff --git a/client/homebrew/pages/editPage/editPage.jsx b/client/homebrew/pages/editPage/editPage.jsx index 088f13765..3875b3d04 100644 --- a/client/homebrew/pages/editPage/editPage.jsx +++ b/client/homebrew/pages/editPage/editPage.jsx @@ -84,6 +84,7 @@ const EditPage = (props)=>{ const { handleBrewChange } = useCommonEditPageFunctions({ + saveGoogle, setError, setThemeBundle, HTMLErrors, @@ -101,8 +102,9 @@ const EditPage = (props)=>{ setWarnUnsavedChanges, trySaveRef, unsavedChangesRef, + setUnsavedChanges, sandbox, - saveGoogle + lastSavedBrew }); useEffect(()=>{ @@ -110,13 +112,6 @@ const EditPage = (props)=>{ unsavedChangesRef.current = unsavedChanges; }); - useEffect(()=>{ - const hasChange = !_.isEqual(currentBrew, lastSavedBrew.current); - setUnsavedChanges(hasChange); - - if(autoSaveEnabled) trySave(false, hasChange, saveGoogle); - }, [currentBrew]); - const handleSplitMove = ()=>{ editorRef.current?.update(); }; diff --git a/client/homebrew/pages/homePage/homePage.jsx b/client/homebrew/pages/homePage/homePage.jsx index 29e5b70e2..278ec6eb3 100644 --- a/client/homebrew/pages/homePage/homePage.jsx +++ b/client/homebrew/pages/homePage/homePage.jsx @@ -88,7 +88,9 @@ const HomePage =(props)=>{ setWarnUnsavedChanges, trySaveRef, unsavedChangesRef, - sandbox + setUnsavedChanges, + sandbox, + lastSavedBrew }); useEffect(()=>{ @@ -108,13 +110,6 @@ const HomePage =(props)=>{ }); }; - useEffect(()=>{ - const hasChange = !_.isEqual(currentBrew, lastSavedBrew.current); - setUnsavedChanges(hasChange); - - if(autoSaveEnabled) trySave(false, hasChange); - }, [currentBrew]); - const handleSplitMove = ()=>{ editorRef.current.update(); }; diff --git a/client/homebrew/pages/newPage/newPage.jsx b/client/homebrew/pages/newPage/newPage.jsx index 3208af496..fed59493e 100644 --- a/client/homebrew/pages/newPage/newPage.jsx +++ b/client/homebrew/pages/newPage/newPage.jsx @@ -93,7 +93,9 @@ const NewPage = (props)=>{ setWarnUnsavedChanges, trySaveRef, unsavedChangesRef, - sandbox + setUnsavedChanges, + sandbox, + lastSavedBrew }); const loadBrew = ()=>{ @@ -125,13 +127,6 @@ const NewPage = (props)=>{ window.history.replaceState({}, window.location.title, '/new/'); }; - useEffect(()=>{ - const hasChange = !_.isEqual(currentBrew, lastSavedBrew.current); - setUnsavedChanges(hasChange); - - if(autoSaveEnabled) trySave(false, hasChange); - }, [currentBrew]); - useEffect(()=>{ trySaveRef.current = trySave; unsavedChangesRef.current = unsavedChanges; diff --git a/client/homebrew/utils/commonEditPageFunctions.js b/client/homebrew/utils/commonEditPageFunctions.js index 8f41ce421..df6185506 100644 --- a/client/homebrew/utils/commonEditPageFunctions.js +++ b/client/homebrew/utils/commonEditPageFunctions.js @@ -1,5 +1,6 @@ import React, { useState, useEffect, useRef } from 'react'; import { printCurrentBrew, fetchThemeBundle } from '@shared/helpers.js'; +import _ from 'lodash'; const AUTOSAVE_KEY = 'HB_editor_autoSaveOn'; @@ -23,7 +24,9 @@ export default function useCommonEditPageFunctions(dependencies) { trySaveRef, sandbox, saveGoogle = false, - unsavedChangesRef + unsavedChangesRef, + setUnsavedChanges, + lastSavedBrew } = dependencies; //==--------- Page setup ----------==// @@ -56,6 +59,15 @@ export default function useCommonEditPageFunctions(dependencies) { }; }, []); + //======----- Check for unsaved changes and autosave if enabled -----====== + useEffect(()=>{ + const hasChange = !_.isEqual(currentBrew, lastSavedBrew.current); + setUnsavedChanges(hasChange); + + if(autoSaveEnabled) trySaveRef.current(false, hasChange, saveGoogle); + }, [currentBrew]); + + const handleBrewChange = (field)=>(value, subfield)=>{ //'text', 'style', 'snippets', 'metadata' if(subfield == 'renderer' || subfield == 'theme') fetchThemeBundle(setError, setThemeBundle, value.renderer, value.theme);