Fix preloading of reader pages
There were different issues with the direction the pages got preloaded. - when resuming a chapter with an initial page > 1, it incorrectly preloaded leading pages instead of trailing ones. - when going to the previous/next rendered chapter no pages got preloaded at all
This commit is contained in:
@@ -103,7 +103,7 @@ const BaseReaderChapterViewer = ({
|
|||||||
| 'retryFailedPagesKeyPrefix'
|
| 'retryFailedPagesKeyPrefix'
|
||||||
| 'setTransitionPageMode'
|
| 'setTransitionPageMode'
|
||||||
> &
|
> &
|
||||||
Omit<ReaderPagerProps, 'pages' | 'totalPages' | 'pageLoadStates'> &
|
Omit<ReaderPagerProps, 'pages' | 'totalPages' | 'pageLoadStates' | 'handleAsInitialRender' | 'resumeMode'> &
|
||||||
Pick<
|
Pick<
|
||||||
IReaderSettings,
|
IReaderSettings,
|
||||||
'readingMode' | 'shouldOffsetDoubleSpreads' | 'readingDirection' | 'readerWidth' | 'pageScaleMode'
|
'readingMode' | 'shouldOffsetDoubleSpreads' | 'readingDirection' | 'readerWidth' | 'pageScaleMode'
|
||||||
@@ -450,6 +450,8 @@ const BaseReaderChapterViewer = ({
|
|||||||
scrollbarYSize={scrollbarYSize}
|
scrollbarYSize={scrollbarYSize}
|
||||||
readerNavBarWidth={readerNavBarWidth}
|
readerNavBarWidth={readerNavBarWidth}
|
||||||
isPreloadMode={isPreloadMode}
|
isPreloadMode={isPreloadMode}
|
||||||
|
resumeMode={resumeMode}
|
||||||
|
handleAsInitialRender={scrollIntoView}
|
||||||
/>
|
/>
|
||||||
{showNextTransitionPage && (
|
{showNextTransitionPage && (
|
||||||
<ReaderTransitionPage chapterId={chapterId} type={ReaderTransitionPageMode.NEXT} />
|
<ReaderTransitionPage chapterId={chapterId} type={ReaderTransitionPageMode.NEXT} />
|
||||||
|
|||||||
@@ -10,10 +10,18 @@ import { forwardRef, memo, ReactNode, useCallback, useEffect, useMemo, useRef }
|
|||||||
import Box, { BoxProps } from '@mui/material/Box';
|
import Box, { BoxProps } from '@mui/material/Box';
|
||||||
import { getPageIndexesToLoad, isATransitionPageVisible } from '@/modules/reader/utils/ReaderPager.utils.tsx';
|
import { getPageIndexesToLoad, isATransitionPageVisible } from '@/modules/reader/utils/ReaderPager.utils.tsx';
|
||||||
import { ReaderStatePages } from '@/modules/reader/types/ReaderProgressBar.types.ts';
|
import { ReaderStatePages } from '@/modules/reader/types/ReaderProgressBar.types.ts';
|
||||||
import { IReaderSettings, ReaderPagerProps, ReaderTransitionPageMode } from '@/modules/reader/types/Reader.types.ts';
|
import {
|
||||||
|
IReaderSettings,
|
||||||
|
ReaderPagerProps,
|
||||||
|
ReaderResumeMode,
|
||||||
|
ReaderTransitionPageMode,
|
||||||
|
} from '@/modules/reader/types/Reader.types.ts';
|
||||||
import { applyStyles } from '@/modules/core/utils/ApplyStyles.ts';
|
import { applyStyles } from '@/modules/core/utils/ApplyStyles.ts';
|
||||||
import { isContinuousReadingMode } from '@/modules/reader/utils/ReaderSettings.utils.tsx';
|
import { isContinuousReadingMode } from '@/modules/reader/utils/ReaderSettings.utils.tsx';
|
||||||
|
|
||||||
|
const getPreviousCurrentPageIndex = (resumeMode: ReaderResumeMode): number =>
|
||||||
|
resumeMode === ReaderResumeMode.END ? Number.MAX_SAFE_INTEGER : -1;
|
||||||
|
|
||||||
const BaseBasePager = forwardRef<
|
const BaseBasePager = forwardRef<
|
||||||
HTMLDivElement,
|
HTMLDivElement,
|
||||||
Omit<ReaderPagerProps, 'pageLoadStates' | 'retryFailedPagesKeyPrefix' | 'isPreloadMode'> &
|
Omit<ReaderPagerProps, 'pageLoadStates' | 'retryFailedPagesKeyPrefix' | 'isPreloadMode'> &
|
||||||
@@ -56,10 +64,17 @@ const BaseBasePager = forwardRef<
|
|||||||
scrollbarXSize,
|
scrollbarXSize,
|
||||||
scrollbarYSize,
|
scrollbarYSize,
|
||||||
readerNavBarWidth,
|
readerNavBarWidth,
|
||||||
|
resumeMode,
|
||||||
|
handleAsInitialRender,
|
||||||
},
|
},
|
||||||
ref,
|
ref,
|
||||||
) => {
|
) => {
|
||||||
const previousCurrentPageIndex = useRef(currentPageIndex > 0 ? Number.MAX_SAFE_INTEGER : -1);
|
const previousCurrentPageIndex = useRef(getPreviousCurrentPageIndex(resumeMode));
|
||||||
|
|
||||||
|
if (handleAsInitialRender) {
|
||||||
|
previousCurrentPageIndex.current = getPreviousCurrentPageIndex(resumeMode);
|
||||||
|
}
|
||||||
|
|
||||||
const pagesIndexesToRender = useMemo(
|
const pagesIndexesToRender = useMemo(
|
||||||
() =>
|
() =>
|
||||||
getPageIndexesToLoad(
|
getPageIndexesToLoad(
|
||||||
|
|||||||
@@ -292,6 +292,8 @@ export interface ReaderPagerProps
|
|||||||
isPreviousChapter: boolean;
|
isPreviousChapter: boolean;
|
||||||
isNextChapter: boolean;
|
isNextChapter: boolean;
|
||||||
isPreloadMode: boolean;
|
isPreloadMode: boolean;
|
||||||
|
resumeMode: ReaderResumeMode;
|
||||||
|
handleAsInitialRender: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
export enum PageInViewportType {
|
export enum PageInViewportType {
|
||||||
|
|||||||
Reference in New Issue
Block a user