From c5630ca5ce0bfcd4115dc12e03870a03dbd9b7bf Mon Sep 17 00:00:00 2001 From: schroda <50052685+schroda@users.noreply.github.com> Date: Sat, 28 Dec 2024 01:28:12 +0100 Subject: [PATCH] Reset "pageToScrollToIndex" after page selection In case the current page changed after selecting a page, the previously selected page couldn't be selected again since the "pageToScrollToIndex" was still set to this page --- src/modules/reader/components/viewer/ReaderViewer.tsx | 8 ++++++++ .../reader/contexts/state/ReaderStatePagesContext.tsx | 2 +- .../contexts/state/ReaderStatePagesContextProvider.tsx | 2 +- src/modules/reader/screens/Reader.tsx | 4 ++-- src/modules/reader/types/ReaderProgressBar.types.ts | 4 ++-- 5 files changed, 14 insertions(+), 6 deletions(-) diff --git a/src/modules/reader/components/viewer/ReaderViewer.tsx b/src/modules/reader/components/viewer/ReaderViewer.tsx index f846aaee..951949cb 100644 --- a/src/modules/reader/components/viewer/ReaderViewer.tsx +++ b/src/modules/reader/components/viewer/ReaderViewer.tsx @@ -70,6 +70,7 @@ const BaseReaderViewer = forwardRef( { currentPageIndex, pageToScrollToIndex, + setPageToScrollToIndex, pages, setPages, totalPages, @@ -90,6 +91,7 @@ const BaseReaderViewer = forwardRef( ReaderStatePages, | 'currentPageIndex' | 'pageToScrollToIndex' + | 'setPageToScrollToIndex' | 'pages' | 'setPages' | 'totalPages' @@ -228,6 +230,10 @@ const BaseReaderViewer = forwardRef( // handle user page selection useLayoutEffect(() => { + if (pageToScrollToIndex == null) { + return; + } + const pageToScrollTo = getPage(pageToScrollToIndex, pages); if (isContinuousReadingModeActive) { @@ -251,6 +257,7 @@ const BaseReaderViewer = forwardRef( const newPageIndex = getNextIndexFromPage(pageToScrollTo); const isLastPage = newPageIndex === totalPages - 1; + setPageToScrollToIndex(null); updateCurrentPageIndex(newPageIndex, !isLastPage); }, [pageToScrollToIndex]); @@ -386,6 +393,7 @@ export const ReaderViewer = withPropsFrom( [ 'currentPageIndex', 'pageToScrollToIndex', + 'setPageToScrollToIndex', 'pages', 'setPages', 'totalPages', diff --git a/src/modules/reader/contexts/state/ReaderStatePagesContext.tsx b/src/modules/reader/contexts/state/ReaderStatePagesContext.tsx index 127864f9..730b75cf 100644 --- a/src/modules/reader/contexts/state/ReaderStatePagesContext.tsx +++ b/src/modules/reader/contexts/state/ReaderStatePagesContext.tsx @@ -14,7 +14,7 @@ export const ReaderStatePagesContext = createContext({ totalPages: 0, currentPageIndex: 0, setCurrentPageIndex: () => undefined, - pageToScrollToIndex: 0, + pageToScrollToIndex: null, setPageToScrollToIndex: () => undefined, setTotalPages: () => undefined, pageUrls: [], diff --git a/src/modules/reader/contexts/state/ReaderStatePagesContextProvider.tsx b/src/modules/reader/contexts/state/ReaderStatePagesContextProvider.tsx index b27e6999..db9c3f73 100644 --- a/src/modules/reader/contexts/state/ReaderStatePagesContextProvider.tsx +++ b/src/modules/reader/contexts/state/ReaderStatePagesContextProvider.tsx @@ -15,7 +15,7 @@ import { ReaderStatePages } from '@/modules/reader/types/ReaderProgressBar.types export const ReaderStatePagesContextProvider = ({ children }: { children: ReactNode }) => { const [totalPages, setTotalPages] = useState(0); const [currentPageIndex, setCurrentPageIndex] = useState(0); - const [pageToScrollToIndex, setPageToScrollToIndex] = useState(0); + const [pageToScrollToIndex, setPageToScrollToIndex] = useState(null); const [pageUrls, setPageUrls] = useState([]); const [pageLoadStates, setPageLoadStates] = useState([{ loaded: false }]); const [pages, setPages] = useState([createPageData('', 0)]); diff --git a/src/modules/reader/screens/Reader.tsx b/src/modules/reader/screens/Reader.tsx index ac1e12a0..71d50bd0 100644 --- a/src/modules/reader/screens/Reader.tsx +++ b/src/modules/reader/screens/Reader.tsx @@ -181,7 +181,7 @@ const BaseReader = ({ }); setCurrentPageIndex(0); - setPageToScrollToIndex(0); + setPageToScrollToIndex(null); setTotalPages(0); setPages([createPageData('', 0)]); setPageUrls([]); @@ -216,7 +216,7 @@ const BaseReader = ({ } else { setArePagesFetched(false); setCurrentPageIndex(0); - setPageToScrollToIndex(0); + setPageToScrollToIndex(null); setTotalPages(0); setPages([createPageData('', 0)]); setPageUrls([]); diff --git a/src/modules/reader/types/ReaderProgressBar.types.ts b/src/modules/reader/types/ReaderProgressBar.types.ts index 0dce182d..d4838fcc 100644 --- a/src/modules/reader/types/ReaderProgressBar.types.ts +++ b/src/modules/reader/types/ReaderProgressBar.types.ts @@ -27,8 +27,8 @@ export interface ReaderStatePages { setTotalPages: React.Dispatch>; currentPageIndex: number; setCurrentPageIndex: React.Dispatch>; - pageToScrollToIndex: number; - setPageToScrollToIndex: React.Dispatch>; + pageToScrollToIndex: number | null; + setPageToScrollToIndex: React.Dispatch>; pageUrls: string[]; setPageUrls: React.Dispatch>; pageLoadStates: { loaded: boolean; error?: boolean }[];