mirror of
https://github.com/naturalcrit/homebrewery.git
synced 2026-01-03 19:12:41 +00:00
simplify logic
This commit is contained in:
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user