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//
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 (
<>
@@ -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}
@@ -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}
@@ -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}
@@ -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}