0
0
mirror of https://github.com/naturalcrit/homebrewery.git synced 2026-01-03 19:12:41 +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,33 +78,10 @@ const BrewRenderer = (props)=>{
} }
useEffect(() => { useEffect(() => {
const locationHash = window.location.hash; const elementId = window.location.hash.slice(1);
const pageIdRegex = /^#p\d+$/; if (elementId && state.isMounted) {
const element = document.getElementById(elementId);
console.log(state); element.scrollIntoView({ block: 'start' });
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));
}
}
}
}
}
} }
return () => { return () => {
@@ -112,22 +89,6 @@ const BrewRenderer = (props)=>{
}; };
}, [state.isMounted]); }, [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 = ()=>{ const updateSize = ()=>{
setState((prevState)=>({ setState((prevState)=>({
...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 updateCurrentPage = useCallback(_.throttle((e)=>{
const { scrollTop, clientHeight, scrollHeight } = e.target; const { scrollTop, clientHeight, scrollHeight } = e.target;
const totalScrollableHeight = scrollHeight - clientHeight; 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 const emitClick = ()=>{ // Allow clicks inside iFrame to interact with dropdowns, etc. from outside
if(!window || !document) return; if(!window || !document) return;