track changes to pages in brewrenderer

This commit is contained in:
Víctor Losada Hernández
2026-09-22 11:22:28 +02:00
parent d082e424be
commit dd863c9219
5 changed files with 20 additions and 4 deletions
+16 -4
View File
@@ -85,6 +85,7 @@ const BrewPage = (props)=>{
//v=====--------------------< Brew Renderer Component >-------------------=====v// //v=====--------------------< Brew Renderer Component >-------------------=====v//
let renderedPages = []; let renderedPages = [];
let renderedPageTexts = [];
const pageTemplates = []; const pageTemplates = [];
let rawPages = []; let rawPages = [];
@@ -92,6 +93,7 @@ const BrewRenderer = (props)=>{
props = { props = {
text : '', text : '',
style : '', style : '',
version : 1,
renderer : 'legacy', renderer : 'legacy',
lang : '', lang : '',
errors : [], errors : [],
@@ -230,12 +232,15 @@ const BrewRenderer = (props)=>{
if(rawPages.length != renderedPages.length) { // Re-render all pages when page count changes if(rawPages.length != renderedPages.length) { // Re-render all pages when page count changes
renderedPages.length = 0; renderedPages.length = 0;
renderedPageTexts.length = 0;
pageTemplates.length = 0; pageTemplates.length = 0;
} }
// Render currently-edited page first so cross-page effects (variables, links) can propagate out first // 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); renderedPages[props.currentEditorCursorPageNum - 1] = renderPage(rawPages[props.currentEditorCursorPageNum - 1], props.currentEditorCursorPageNum - 1);
renderedPageTexts[props.currentEditorCursorPageNum - 1] = rawPages[props.currentEditorCursorPageNum - 1];
}
_.forEach(rawPages, (page, index)=>{ _.forEach(rawPages, (page, index)=>{
const varsOnPageRegex = /([!$]?)\[((?!\s*\])(?:\\.|[^\[\]\\])+)\]/g; // Find out if there are any vars on the page. const varsOnPageRegex = /([!$]?)\[((?!\s*\])(?:\\.|[^\[\]\\])+)\]/g; // Find out if there are any vars on the page.
@@ -243,8 +248,12 @@ const BrewRenderer = (props)=>{
!props.hoisted && !props.hoisted &&
(page.match(varsOnPageRegex)); // forceRender forces pages outside of the PPR range to render if true. (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. // 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. 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]); 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 ( return (
<> <>
@@ -289,6 +289,7 @@ const EditPage = (props)=>{
text={currentBrew.text} text={currentBrew.text}
style={currentBrew.style} style={currentBrew.style}
renderer={currentBrew.renderer} renderer={currentBrew.renderer}
version={currentBrew.version}
themeBundle={themeBundle} themeBundle={themeBundle}
errors={HTMLErrors} errors={HTMLErrors}
lang={currentBrew.lang} lang={currentBrew.lang}
@@ -138,6 +138,7 @@ const HomePage =(props)=>{
text={currentBrew.text} text={currentBrew.text}
style={currentBrew.style} style={currentBrew.style}
renderer={currentBrew.renderer} renderer={currentBrew.renderer}
version={currentBrew.version}
themeBundle={themeBundle} themeBundle={themeBundle}
onPageChange={setCurrentBrewRendererPageNum} onPageChange={setCurrentBrewRendererPageNum}
currentEditorCursorPageNum={currentEditorCursorPageNum} currentEditorCursorPageNum={currentEditorCursorPageNum}
@@ -183,6 +183,7 @@ const NewPage = (props)=>{
text={currentBrew.text} text={currentBrew.text}
style={currentBrew.style} style={currentBrew.style}
renderer={currentBrew.renderer} renderer={currentBrew.renderer}
version={currentBrew.version}
themeBundle={themeBundle} themeBundle={themeBundle}
errors={HTMLErrors} errors={HTMLErrors}
lang={currentBrew.lang} lang={currentBrew.lang}
@@ -159,6 +159,7 @@ const SharePage = (props)=>{
style={currentBrew.style} style={currentBrew.style}
lang={currentBrew.lang} lang={currentBrew.lang}
renderer={currentBrew.renderer} renderer={currentBrew.renderer}
version={currentBrew.version}
theme={currentBrew.theme} theme={currentBrew.theme}
themeBundle={themeBundle} themeBundle={themeBundle}
onPageChange={handleBrewRendererPageChange} onPageChange={handleBrewRendererPageChange}