0
0
mirror of https://github.com/naturalcrit/homebrewery.git synced 2025-12-27 02:52:43 +00:00

simplify logic

This commit is contained in:
Víctor Losada Hernández
2024-09-17 19:50:39 +02:00
parent 1b577c4030
commit 2e5ebb861e

View File

@@ -78,56 +78,17 @@ const BrewRenderer = (props)=>{
}
useEffect(() => {
const locationHash = window.location.hash;
const pageIdRegex = /^#p\d+$/;
console.log(state);
if (locationHash) {
if (state.isMounted) {
if (pageIdRegex.test(locationHash)) {
const pageNumber = parseInt(locationHash.slice(2));
scrollToPage(pageNumber - 1);
} else {
const elementId = locationHash.slice(1);
if (elementId) {
const element = document.getElementById(elementId);
console.log(element);
if (element) {
const page = element.closest(".page");
// Ensure `page` exists before proceeding
if (page) {
console.log(page.getAttribute("Id").slice(1));
scrollToPage(page.getAttribute("Id").slice(1));
}
}
}
}
}
const elementId = window.location.hash.slice(1);
if (elementId && state.isMounted) {
const element = document.getElementById(elementId);
element.scrollIntoView({ block: 'start' });
}
return () => {
window.removeEventListener('resize', updateSize);
};
}, [state.isMounted]);
const scrollToPage = (pageNumber) => {
const iframe = document.getElementById('BrewRenderer');
if (iframe && iframe.contentWindow) {
const brewRenderer =
iframe.contentWindow.document.querySelector('.brewRenderer');
if (brewRenderer) {
const pages = brewRenderer.querySelectorAll('.page');
if (pageNumber > pages.length) {
console.log('page not found');
} else {
pages[pageNumber].scrollIntoView({ block: 'start' });
}
}
}
};
const updateSize = ()=>{
setState((prevState)=>({
...prevState,
@@ -135,6 +96,19 @@ const BrewRenderer = (props)=>{
}));
};
const frameDidMount = ()=>{ //This triggers when iFrame finishes internal "componentDidMount"
setTimeout(()=>{ //We still see a flicker where the style isn't applied yet, so wait 100ms before showing iFrame
updateSize();
window.addEventListener('resize', updateSize);
renderPages(); //Make sure page is renderable before showing
setState((prevState)=>({
...prevState,
isMounted : true,
visibility : 'visible'
}));
}, 100);
};
const updateCurrentPage = useCallback(_.throttle((e)=>{
const { scrollTop, clientHeight, scrollHeight } = e.target;
const totalScrollableHeight = scrollHeight - clientHeight;
@@ -207,18 +181,6 @@ const BrewRenderer = (props)=>{
}
};
const frameDidMount = ()=>{ //This triggers when iFrame finishes internal "componentDidMount"
setTimeout(()=>{ //We still see a flicker where the style isn't applied yet, so wait 100ms before showing iFrame
updateSize();
window.addEventListener('resize', updateSize);
renderPages(); //Make sure page is renderable before showing
setState((prevState)=>({
...prevState,
isMounted : true,
visibility : 'visible'
}));
}, 100);
};
const emitClick = ()=>{ // Allow clicks inside iFrame to interact with dropdowns, etc. from outside
if(!window || !document) return;