From dd863c92192272faf8027e49257d03b804af0ba9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Losada=20Hern=C3=A1ndez?= Date: Tue, 22 Sep 2026 11:22:28 +0200 Subject: [PATCH] track changes to pages in brewrenderer --- client/homebrew/brewRenderer/brewRenderer.jsx | 20 +++++++++++++++---- client/homebrew/pages/editPage/editPage.jsx | 1 + client/homebrew/pages/homePage/homePage.jsx | 1 + client/homebrew/pages/newPage/newPage.jsx | 1 + client/homebrew/pages/sharePage/sharePage.jsx | 1 + 5 files changed, 20 insertions(+), 4 deletions(-) diff --git a/client/homebrew/brewRenderer/brewRenderer.jsx b/client/homebrew/brewRenderer/brewRenderer.jsx index 75a07c7d1..a37671219 100644 --- a/client/homebrew/brewRenderer/brewRenderer.jsx +++ b/client/homebrew/brewRenderer/brewRenderer.jsx @@ -85,6 +85,7 @@ const BrewPage = (props)=>{ //v=====--------------------< Brew Renderer Component >-------------------=====v// let renderedPages = []; +let renderedPageTexts = []; const pageTemplates = []; let rawPages = []; @@ -92,6 +93,7 @@ const BrewRenderer = (props)=>{ props = { text : '', style : '', + version : 1, renderer : 'legacy', lang : '', errors : [], @@ -230,12 +232,15 @@ const BrewRenderer = (props)=>{ if(rawPages.length != renderedPages.length) { // Re-render all pages when page count changes renderedPages.length = 0; + renderedPageTexts.length = 0; pageTemplates.length = 0; } // Render currently-edited page first so cross-page effects (variables, links) can propagate out first - if(rawPages.length > props.currentEditorCursorPageNum -1) + if(rawPages.length > props.currentEditorCursorPageNum -1) { renderedPages[props.currentEditorCursorPageNum - 1] = renderPage(rawPages[props.currentEditorCursorPageNum - 1], props.currentEditorCursorPageNum - 1); + renderedPageTexts[props.currentEditorCursorPageNum - 1] = rawPages[props.currentEditorCursorPageNum - 1]; + } _.forEach(rawPages, (page, index)=>{ const varsOnPageRegex = /([!$]?)\[((?!\s*\])(?:\\.|[^\[\]\\])+)\]/g; // Find out if there are any vars on the page. @@ -243,8 +248,12 @@ const BrewRenderer = (props)=>{ !props.hoisted && (page.match(varsOnPageRegex)); // forceRender forces pages outside of the PPR range to render if true. // This is necessary on the first load to fully populate the variable table. - if((isInView(index) || !renderedPages[index] || forceRender) && typeof window !== 'undefined'){ - renderedPages[index] = renderPage(page, index); // Render any page not yet rendered, but only re-render those in PPR range + + const pageTextChanged = renderedPageTexts[index] !== page; + + if(((isInView(index) && pageTextChanged) || !renderedPages[index] || forceRender) && typeof window !== 'undefined') { + renderedPages[index] = renderPage(page, index); // Render any page not yet rendered, but only re-render changed pages in PPR range + renderedPageTexts[index] = page; } }); if(!props.hoisted) { props.hoisted = true; } // Only fully hoist once. @@ -313,7 +322,10 @@ const BrewRenderer = (props)=>{ }; const renderedStyle = useMemo(()=>renderStyle(), [props.style, props.themeBundle]); - renderedPages = useMemo(()=>renderPages(), [props.text, displayOptions]); + renderedPages = useMemo( + ()=>renderPages(), + [props.version, props.currentBrewRendererPageNum, props.currentEditorCursorPageNum, displayOptions] + ); return ( <> diff --git a/client/homebrew/pages/editPage/editPage.jsx b/client/homebrew/pages/editPage/editPage.jsx index 57667ca6e..c0ed712f9 100644 --- a/client/homebrew/pages/editPage/editPage.jsx +++ b/client/homebrew/pages/editPage/editPage.jsx @@ -289,6 +289,7 @@ const EditPage = (props)=>{ text={currentBrew.text} style={currentBrew.style} renderer={currentBrew.renderer} + version={currentBrew.version} themeBundle={themeBundle} errors={HTMLErrors} lang={currentBrew.lang} diff --git a/client/homebrew/pages/homePage/homePage.jsx b/client/homebrew/pages/homePage/homePage.jsx index 0ac78f0e1..477934506 100644 --- a/client/homebrew/pages/homePage/homePage.jsx +++ b/client/homebrew/pages/homePage/homePage.jsx @@ -138,6 +138,7 @@ const HomePage =(props)=>{ text={currentBrew.text} style={currentBrew.style} renderer={currentBrew.renderer} + version={currentBrew.version} themeBundle={themeBundle} onPageChange={setCurrentBrewRendererPageNum} currentEditorCursorPageNum={currentEditorCursorPageNum} diff --git a/client/homebrew/pages/newPage/newPage.jsx b/client/homebrew/pages/newPage/newPage.jsx index c7b6c7160..92fda514a 100644 --- a/client/homebrew/pages/newPage/newPage.jsx +++ b/client/homebrew/pages/newPage/newPage.jsx @@ -183,6 +183,7 @@ const NewPage = (props)=>{ text={currentBrew.text} style={currentBrew.style} renderer={currentBrew.renderer} + version={currentBrew.version} themeBundle={themeBundle} errors={HTMLErrors} lang={currentBrew.lang} diff --git a/client/homebrew/pages/sharePage/sharePage.jsx b/client/homebrew/pages/sharePage/sharePage.jsx index 8d2a5b0f0..a8a6802fd 100644 --- a/client/homebrew/pages/sharePage/sharePage.jsx +++ b/client/homebrew/pages/sharePage/sharePage.jsx @@ -159,6 +159,7 @@ const SharePage = (props)=>{ style={currentBrew.style} lang={currentBrew.lang} renderer={currentBrew.renderer} + version={currentBrew.version} theme={currentBrew.theme} themeBundle={themeBundle} onPageChange={handleBrewRendererPageChange}