From 9b0da36365d8a6d9b2f3d967a0a6cce00f7b8cec Mon Sep 17 00:00:00 2001 From: "G.Ambatte" Date: Tue, 25 Feb 2025 19:56:23 +1300 Subject: [PATCH] Rework isPending & hasChanges --- client/homebrew/pages/editPage/editPage.jsx | 42 +++++++++++++-------- 1 file changed, 26 insertions(+), 16 deletions(-) diff --git a/client/homebrew/pages/editPage/editPage.jsx b/client/homebrew/pages/editPage/editPage.jsx index 9b08327b1..40c74f9a8 100644 --- a/client/homebrew/pages/editPage/editPage.jsx +++ b/client/homebrew/pages/editPage/editPage.jsx @@ -102,6 +102,14 @@ const EditPage = createClass({ window.onbeforeunload = function(){}; document.removeEventListener('keydown', this.handleControlKeys); }, + componentDidUpdate : function(){ + const hasChange = this.hasChanges(); + if(this.state.isPending != hasChange){ + this.setState({ + isPending : hasChange + }); + } + }, handleControlKeys : function(e){ if(!(e.ctrlKey || e.metaKey)) return; @@ -138,15 +146,13 @@ const EditPage = createClass({ this.setState((prevState)=>({ brew : { ...prevState.brew, text: text }, - isPending : true, htmlErrors : htmlErrors, }), ()=>{if(this.state.autoSave) this.trySave();}); }, handleStyleChange : function(style){ this.setState((prevState)=>({ - brew : { ...prevState.brew, style: style }, - isPending : true + brew : { ...prevState.brew, style: style } }), ()=>{if(this.state.autoSave) this.trySave();}); }, @@ -158,8 +164,7 @@ const EditPage = createClass({ brew : { ...prevState.brew, ...metadata - }, - isPending : true, + } }), ()=>{if(this.state.autoSave) this.trySave();}); }, @@ -312,7 +317,14 @@ const EditPage = createClass({ }, renderSaveButton : function(){ - if(this.state.autoSaveWarning && this.hasChanges()){ + + // #1 - Currently saving, show SAVING + if(this.state.isSaving){ + return saving...; + } + + // #2 - Unsaved changes exist, autosave is OFF and warning timer has expired, show AUTOSAVE WARNING + if(this.state.isPending && this.state.autoSaveWarning){ this.setAutosaveWarning(); const elapsedTime = Math.round((new Date() - this.state.unsavedTime) / 1000 / 60); const text = elapsedTime == 0 ? 'Autosave is OFF.' : `Autosave is OFF, and you haven't saved for ${elapsedTime} minutes.`; @@ -325,19 +337,17 @@ const EditPage = createClass({ ; } - if(this.state.isSaving){ - return saving...; + // #3 - Unsaved changes exist, click to save, show SAVE NOW + // Use trySave(true) instead of save() to use debounced save function + if(this.state.isPending){ + return this.trySave(true)} color='blue' icon='fas fa-save'>Save Now; } - if(this.state.isPending && this.hasChanges()){ - return Save Now; - } - if(!this.state.isPending && !this.state.isSaving && this.state.autoSave){ + // #4 - No unsaved changes, autosave is ON, show AUTO-SAVED + if(this.state.autoSave){ return auto-saved.; } - if(!this.state.isPending && !this.state.isSaving){ - return saved.; - } - return no changes.; + // DEFAULT - No unsaved changes, show SAVED + return saved.; }, handleAutoSave : function(){