Feature/reader skip duplicate chapters (#262)
* Skip duplicate chapters in the Reader * Debounce "end of page" handling in the reader * Update keyboard event listener In case the "go" function changed, the listeners have to be updated
This commit is contained in:
@@ -185,7 +185,7 @@ export default function DoublePagedPager(props: IReaderProps) {
|
||||
document.removeEventListener('keydown', keyboardControl);
|
||||
selfRef.current?.removeEventListener('click', clickControl);
|
||||
};
|
||||
}, [selfRef, curPage, settings.readerType]);
|
||||
}, [selfRef, curPage, settings.readerType, prevChapter, nextChapter]);
|
||||
|
||||
useEffect(() => {
|
||||
setCurPage(initialPage);
|
||||
|
||||
@@ -134,7 +134,7 @@ export default function HorizontalPager(props: IReaderProps) {
|
||||
document.removeEventListener('scroll', handleLoadNextonEnding);
|
||||
selfRef.current?.removeEventListener('mousedown', clickControl);
|
||||
};
|
||||
}, [selfRef, curPage]);
|
||||
}, [selfRef, curPage, prevChapter, nextChapter]);
|
||||
|
||||
useEffect(() => {
|
||||
const handleScroll = () => {
|
||||
|
||||
@@ -85,7 +85,7 @@ export default function PagedReader(props: IReaderProps) {
|
||||
document.removeEventListener('keydown', keyboardControl);
|
||||
selfRef.current?.removeEventListener('click', clickControl);
|
||||
};
|
||||
}, [selfRef, curPage, settings.readerType]);
|
||||
}, [selfRef, curPage, settings.readerType, prevChapter, nextChapter]);
|
||||
|
||||
useEffect(() => {
|
||||
// Delay scrolling to next cycle
|
||||
|
||||
@@ -42,10 +42,17 @@ export default function VerticalPager(props: IReaderProps) {
|
||||
const pagesRef = useRef<HTMLDivElement[]>([]);
|
||||
|
||||
useEffect(() => {
|
||||
let handlingEndOfPage = false;
|
||||
const handleScroll = () => {
|
||||
if (!selfRef.current) return;
|
||||
|
||||
if (isAtBottom()) {
|
||||
if (handlingEndOfPage) {
|
||||
return;
|
||||
}
|
||||
|
||||
handlingEndOfPage = true;
|
||||
|
||||
// If scroll is moved all the way to the bottom
|
||||
// This handles cases when last page is show, but is smaller then
|
||||
// window, in which case it would never get marked as read.
|
||||
@@ -58,6 +65,8 @@ export default function VerticalPager(props: IReaderProps) {
|
||||
nextChapter();
|
||||
}
|
||||
} else {
|
||||
handlingEndOfPage = false;
|
||||
|
||||
// Update current page in parent
|
||||
const currentPage = findCurrentPageIndex(selfRef.current);
|
||||
if (currentPage !== currentPageRef.current) {
|
||||
@@ -71,7 +80,7 @@ export default function VerticalPager(props: IReaderProps) {
|
||||
return () => {
|
||||
window.removeEventListener('scroll', handleScroll);
|
||||
};
|
||||
}, [settings.loadNextOnEnding]);
|
||||
}, [settings.loadNextOnEnding, nextChapter]);
|
||||
|
||||
const go = useCallback(
|
||||
(direction: 'up' | 'down') => {
|
||||
@@ -114,7 +123,7 @@ export default function VerticalPager(props: IReaderProps) {
|
||||
return () => {
|
||||
document.removeEventListener('keydown', handleKeyboard);
|
||||
};
|
||||
}, []);
|
||||
}, [go]);
|
||||
|
||||
useEffect(() => {
|
||||
// Delay scrolling to next cycle
|
||||
|
||||
Reference in New Issue
Block a user