mirror of
https://github.com/naturalcrit/homebrewery.git
synced 2026-01-08 03:12:40 +00:00
"Refactor BrewRenderer component: removed unnecessary code, reorganized useEffect hooks, and simplified getPageContainingElement function."
This commit is contained in:
@@ -43,7 +43,6 @@ const BrewPage = (props)=>{
|
|||||||
</div>;
|
</div>;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
//v=====--------------------< Brew Renderer Component >-------------------=====v//
|
//v=====--------------------< Brew Renderer Component >-------------------=====v//
|
||||||
const renderedPages = [];
|
const renderedPages = [];
|
||||||
let rawPages = [];
|
let rawPages = [];
|
||||||
@@ -75,27 +74,46 @@ const BrewRenderer = (props)=>{
|
|||||||
rawPages = props.text.split(/^\\page$/gm);
|
rawPages = props.text.split(/^\\page$/gm);
|
||||||
}
|
}
|
||||||
|
|
||||||
useEffect(()=>{ // Unmounting steps
|
|
||||||
return ()=>{window.removeEventListener('resize', updateSize);};
|
|
||||||
}, []);
|
|
||||||
|
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
const elementId = window.location.hash.slice(1); // Remove the leading '#'
|
const locationHash = window.location.hash;
|
||||||
|
const iframe = document.getElementById('BrewRenderer');
|
||||||
if (elementId) {
|
|
||||||
const iframe = document.getElementById('BrewRenderer');
|
// Regular expression to match page IDs like '#p1'
|
||||||
getPageContainingElement(iframe, elementId)
|
const pageIdRegex = /^#p\d+$/;
|
||||||
.then(pageNumber => {
|
iframe.addEventListener('load', () => {
|
||||||
if (pageNumber !== -1) {
|
setTimeout(() => {
|
||||||
scrollToPage(iframe, pageNumber);
|
if (pageIdRegex.test(locationHash)) {
|
||||||
}
|
// Extract page number from the ID
|
||||||
})
|
const pageNumber = parseInt(locationHash.slice(2));
|
||||||
.catch(error => {
|
console.log('scrolling to page ', pageNumber);
|
||||||
console.error('Error:', error);
|
if (!isNaN(pageNumber)) {
|
||||||
});
|
scrollToPage(iframe, pageNumber);
|
||||||
}
|
} else {
|
||||||
}, []);
|
console.error('Invalid page ID:', locationHash);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// Treat it as an element ID
|
||||||
|
const elementId = locationHash.slice(1); // Remove the leading '#'
|
||||||
|
if (elementId) {
|
||||||
|
getPageContainingElement(iframe, elementId)
|
||||||
|
.then((pageNumber) => {
|
||||||
|
if (pageNumber !== -1) {
|
||||||
|
scrollToPage(iframe, pageNumber);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.catch((error) => {
|
||||||
|
console.error('Error:', error);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}, 100);
|
||||||
|
});
|
||||||
|
|
||||||
|
// Cleanup function for removing the resize event listener
|
||||||
|
return () => {
|
||||||
|
window.removeEventListener('resize', updateSize);
|
||||||
|
};
|
||||||
|
}, []);
|
||||||
|
|
||||||
|
|
||||||
const scrollToPage = (iframe, pageNumber) => {
|
const scrollToPage = (iframe, pageNumber) => {
|
||||||
@@ -111,32 +129,21 @@ const BrewRenderer = (props)=>{
|
|||||||
};
|
};
|
||||||
|
|
||||||
const getPageContainingElement = (iframe, elementId) => {
|
const getPageContainingElement = (iframe, elementId) => {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve) => {
|
||||||
iframe.addEventListener('load', () => {
|
const brewRenderer =
|
||||||
|
iframe.contentWindow.document.querySelector('.brewRenderer');
|
||||||
const brewRenderer = iframe.contentWindow.document.querySelector('.brewRenderer');
|
const pages = brewRenderer.querySelectorAll('.page');
|
||||||
console.log('brewRenderer:', brewRenderer);
|
for (let i = 0; i < pages.length; i++) {
|
||||||
|
if (pages[i].querySelector(`#${elementId}`)) {
|
||||||
setTimeout(() => {
|
resolve(i);
|
||||||
const pages = brewRenderer.querySelectorAll('.page');
|
return;
|
||||||
console.log('Number of pages found:', pages.length);
|
}
|
||||||
|
}
|
||||||
for (let i = 0; i < pages.length; i++) {
|
|
||||||
if (pages[i].querySelector(`#${elementId}`)) {
|
|
||||||
resolve(i);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
console.log('Element with ID not found in any page.');
|
|
||||||
resolve(-1);
|
|
||||||
}, 100); // Adjust delay as needed
|
|
||||||
});
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
console.log('Element with ID not found in any page.');
|
||||||
|
resolve(-1);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
const updateSize = ()=>{
|
const updateSize = ()=>{
|
||||||
setState((prevState)=>({
|
setState((prevState)=>({
|
||||||
@@ -302,4 +309,4 @@ const BrewRenderer = (props)=>{
|
|||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
module.exports = BrewRenderer;
|
module.exports = BrewRenderer;
|
||||||
Reference in New Issue
Block a user