From 7bb1f1694654d97045dbfdd1fab7a653905b1504 Mon Sep 17 00:00:00 2001 From: Trevor Buckner Date: Tue, 20 Feb 2024 22:56:37 -0500 Subject: [PATCH] Always render currently-edited page first, so variables update across pages properly --- client/homebrew/brewRenderer/brewRenderer.jsx | 16 +++++++----- client/homebrew/pages/editPage/editPage.jsx | 2 +- client/homebrew/pages/homePage/homePage.jsx | 17 ++++++++---- client/homebrew/pages/newPage/newPage.jsx | 26 +++++++++++++------ 4 files changed, 40 insertions(+), 21 deletions(-) diff --git a/client/homebrew/brewRenderer/brewRenderer.jsx b/client/homebrew/brewRenderer/brewRenderer.jsx index b4049d005..4c87b9de5 100644 --- a/client/homebrew/brewRenderer/brewRenderer.jsx +++ b/client/homebrew/brewRenderer/brewRenderer.jsx @@ -89,15 +89,16 @@ const BrewRenderer = (props)=>{ })); }; - const shouldRender = (index)=>{ - if(!state.isMounted) return false; + const isInView = (index)=>{ + if(!state.isMounted) + return false; + + if(index == props.currentEditorPage) //Already rendered before this step + return false; if(Math.abs(index - state.viewablePageNumber) <= 3) return true; - if(index + 1 == props.currentEditorPage) - return true; - return false; }; @@ -150,10 +151,11 @@ const BrewRenderer = (props)=>{ if(rawPages.length != renderedPages.length) // Re-render all pages when page count changes renderedPages.length = 0; - //TODO ALWAYS RENDER CURRENT EDITOR PAGE FIRST SO CHANGES CAN POPOGATE OUT. MOVE OUT OF "SHOULDRENDER" + // Render currently-edited page first so cross-page effects (variables, links) can propagate out first + renderedPages[props.currentEditorPage] = renderPage(rawPages[props.currentEditorPage], props.currentEditorPage) _.forEach(rawPages, (page, index)=>{ - if((shouldRender(index) || !renderedPages[index]) && typeof window !== 'undefined'){ + if((isInView(index) || !renderedPages[index]) && typeof window !== 'undefined'){ renderedPages[index] = renderPage(page, index); // Render any page not yet rendered, but only re-render those in PPR range } }); diff --git a/client/homebrew/pages/editPage/editPage.jsx b/client/homebrew/pages/editPage/editPage.jsx index bec60d6a8..d5af310b5 100644 --- a/client/homebrew/pages/editPage/editPage.jsx +++ b/client/homebrew/pages/editPage/editPage.jsx @@ -113,7 +113,7 @@ const EditPage = createClass({ brew : { ...prevState.brew, text: text }, isPending : true, htmlErrors : htmlErrors, - currentEditorPage : this.refs.editor.getCurrentPage() + currentEditorPage : this.refs.editor.getCurrentPage() - 1 //Offset index since Marked starts pages at 0 }), ()=>{if(this.state.autoSave) this.trySave();}); }, diff --git a/client/homebrew/pages/homePage/homePage.jsx b/client/homebrew/pages/homePage/homePage.jsx index 9802517b1..3d3139e74 100644 --- a/client/homebrew/pages/homePage/homePage.jsx +++ b/client/homebrew/pages/homePage/homePage.jsx @@ -31,9 +31,10 @@ const HomePage = createClass({ }, getInitialState : function() { return { - brew : this.props.brew, - welcomeText : this.props.brew.text, - error : undefined + brew : this.props.brew, + welcomeText : this.props.brew.text, + error : undefined, + currentEditorPage : 0 }; }, handleSave : function(){ @@ -53,7 +54,8 @@ const HomePage = createClass({ }, handleTextChange : function(text){ this.setState((prevState)=>({ - brew : { ...prevState.brew, text: text } + brew : { ...prevState.brew, text: text }, + currentEditorPage : this.refs.editor.getCurrentPage() - 1 //Offset index since Marked starts pages at 0 })); }, renderNavbar : function(){ @@ -85,7 +87,12 @@ const HomePage = createClass({ renderer={this.state.brew.renderer} showEditButtons={false} /> - + diff --git a/client/homebrew/pages/newPage/newPage.jsx b/client/homebrew/pages/newPage/newPage.jsx index 470c90b89..9877651c2 100644 --- a/client/homebrew/pages/newPage/newPage.jsx +++ b/client/homebrew/pages/newPage/newPage.jsx @@ -38,11 +38,12 @@ const NewPage = createClass({ const brew = this.props.brew; return { - brew : brew, - isSaving : false, - saveGoogle : (global.account && global.account.googleId ? true : false), - error : null, - htmlErrors : Markdown.validate(brew.text) + brew : brew, + isSaving : false, + saveGoogle : (global.account && global.account.googleId ? true : false), + error : null, + htmlErrors : Markdown.validate(brew.text), + currentEditorPage : 0 }; }, @@ -104,8 +105,9 @@ const NewPage = createClass({ if(htmlErrors.length) htmlErrors = Markdown.validate(text); this.setState((prevState)=>({ - brew : { ...prevState.brew, text: text }, - htmlErrors : htmlErrors + brew : { ...prevState.brew, text: text }, + htmlErrors : htmlErrors, + currentEditorPage : this.refs.editor.getCurrentPage() - 1 //Offset index since Marked starts pages at 0 })); localStorage.setItem(BREWKEY, text); }, @@ -220,7 +222,15 @@ const NewPage = createClass({ onMetaChange={this.handleMetaChange} renderer={this.state.brew.renderer} /> - + ;