Move reader "scrollbar state" to "reader store"
This commit is contained in:
@@ -334,7 +334,6 @@ export interface ReaderPagerProps
|
|||||||
| 'shouldStretchPage'
|
| 'shouldStretchPage'
|
||||||
| 'readerWidth'
|
| 'readerWidth'
|
||||||
>,
|
>,
|
||||||
Pick<TReaderScrollbarContext, 'scrollbarXSize' | 'scrollbarYSize'>,
|
|
||||||
Pick<NavbarContextType, 'readerNavBarWidth'> {
|
Pick<NavbarContextType, 'readerNavBarWidth'> {
|
||||||
onLoad?: (pagesIndex: number, url: string, isPrimary?: boolean) => void;
|
onLoad?: (pagesIndex: number, url: string, isPrimary?: boolean) => void;
|
||||||
onError?: (pageIndex: number, url: string) => void;
|
onError?: (pageIndex: number, url: string) => void;
|
||||||
@@ -370,13 +369,6 @@ export interface ReaderOpenChapterLocationState {
|
|||||||
updateInitialChapter?: boolean;
|
updateInitialChapter?: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
export type TReaderScrollbarContext = {
|
|
||||||
scrollbarXSize: number;
|
|
||||||
setScrollbarXSize: (size: number) => void;
|
|
||||||
scrollbarYSize: number;
|
|
||||||
setScrollbarYSize: (size: number) => void;
|
|
||||||
};
|
|
||||||
|
|
||||||
export type TReaderStateSettingsContext = {
|
export type TReaderStateSettingsContext = {
|
||||||
settings: IReaderSettingsWithDefaultFlag;
|
settings: IReaderSettingsWithDefaultFlag;
|
||||||
setSettings: (settings: IReaderSettingsWithDefaultFlag) => void;
|
setSettings: (settings: IReaderSettingsWithDefaultFlag) => void;
|
||||||
|
|||||||
@@ -8,12 +8,19 @@
|
|||||||
|
|
||||||
import { create } from 'zustand';
|
import { create } from 'zustand';
|
||||||
import { immer } from 'zustand/middleware/immer';
|
import { immer } from 'zustand/middleware/immer';
|
||||||
|
import { useShallow } from 'zustand/react/shallow';
|
||||||
import { TMangaReader } from '@/features/manga/Manga.types.ts';
|
import { TMangaReader } from '@/features/manga/Manga.types.ts';
|
||||||
|
|
||||||
interface ReaderStore {
|
interface ReaderStore {
|
||||||
reset: () => void;
|
reset: () => void;
|
||||||
manga: TMangaReader | undefined;
|
manga: TMangaReader | undefined;
|
||||||
setManga: (manga: TMangaReader | undefined) => void;
|
setManga: (manga: TMangaReader | undefined) => void;
|
||||||
|
scrollbar: {
|
||||||
|
scrollbarXSize: number;
|
||||||
|
setScrollbarXSize: (size: number) => void;
|
||||||
|
scrollbarYSize: number;
|
||||||
|
setScrollbarYSize: (size: number) => void;
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
const DEFAULT_STATE = {
|
const DEFAULT_STATE = {
|
||||||
@@ -31,5 +38,20 @@ export const useReaderStore = create<ReaderStore>()(
|
|||||||
set((draft) => {
|
set((draft) => {
|
||||||
draft.manga = manga;
|
draft.manga = manga;
|
||||||
}),
|
}),
|
||||||
|
scrollbar: {
|
||||||
|
scrollbarXSize: 0,
|
||||||
|
setScrollbarXSize: (size) =>
|
||||||
|
set((draft) => {
|
||||||
|
draft.scrollbar.scrollbarXSize = size;
|
||||||
|
}),
|
||||||
|
scrollbarYSize: 0,
|
||||||
|
setScrollbarYSize: (size) =>
|
||||||
|
set((draft) => {
|
||||||
|
draft.scrollbar.scrollbarYSize = size;
|
||||||
|
}),
|
||||||
|
},
|
||||||
})),
|
})),
|
||||||
);
|
);
|
||||||
|
export const useReaderStoreShallow = <T>(selector: (state: ReaderStore) => T): T =>
|
||||||
|
useReaderStore(useShallow(selector));
|
||||||
|
export const getReaderStore = () => useReaderStore.getState();
|
||||||
|
|||||||
@@ -8,7 +8,6 @@
|
|||||||
|
|
||||||
import { ReactNode } from 'react';
|
import { ReactNode } from 'react';
|
||||||
import { ReaderStateContextProvider } from '@/features/reader/contexts/state/ReaderStateContextProvider.tsx';
|
import { ReaderStateContextProvider } from '@/features/reader/contexts/state/ReaderStateContextProvider.tsx';
|
||||||
import { ReaderScrollbarContextProvider } from '@/features/reader/contexts/ReaderScrollbarContext.tsx';
|
|
||||||
import { ReaderAutoScrollContextProvider } from '@/features/reader/auto-scroll/ReaderAutoScrollContext.tsx';
|
import { ReaderAutoScrollContextProvider } from '@/features/reader/auto-scroll/ReaderAutoScrollContext.tsx';
|
||||||
import { ReaderOverlayContextProvider } from '@/features/reader/overlay/ReaderOverlayContext.tsx';
|
import { ReaderOverlayContextProvider } from '@/features/reader/overlay/ReaderOverlayContext.tsx';
|
||||||
import { ReaderProgressBarContextProvider } from '@/features/reader/overlay/progress-bar/ReaderProgressBarContext.tsx';
|
import { ReaderProgressBarContextProvider } from '@/features/reader/overlay/progress-bar/ReaderProgressBarContext.tsx';
|
||||||
@@ -19,9 +18,7 @@ export const ReaderContextProvider = ({ children }: { children?: ReactNode }) =>
|
|||||||
<ReaderTapZoneContextProvider>
|
<ReaderTapZoneContextProvider>
|
||||||
<ReaderOverlayContextProvider>
|
<ReaderOverlayContextProvider>
|
||||||
<ReaderProgressBarContextProvider>
|
<ReaderProgressBarContextProvider>
|
||||||
<ReaderScrollbarContextProvider>
|
<ReaderAutoScrollContextProvider>{children}</ReaderAutoScrollContextProvider>
|
||||||
<ReaderAutoScrollContextProvider>{children}</ReaderAutoScrollContextProvider>
|
|
||||||
</ReaderScrollbarContextProvider>
|
|
||||||
</ReaderProgressBarContextProvider>
|
</ReaderProgressBarContextProvider>
|
||||||
</ReaderOverlayContextProvider>
|
</ReaderOverlayContextProvider>
|
||||||
</ReaderTapZoneContextProvider>
|
</ReaderTapZoneContextProvider>
|
||||||
|
|||||||
@@ -1,31 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) Contributors to the Suwayomi project
|
|
||||||
*
|
|
||||||
* This Source Code Form is subject to the terms of the Mozilla Public
|
|
||||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
||||||
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
|
||||||
*/
|
|
||||||
|
|
||||||
import { createContext, ReactNode, useContext, useMemo, useState } from 'react';
|
|
||||||
import { TReaderScrollbarContext } from '@/features/reader/Reader.types.ts';
|
|
||||||
|
|
||||||
export const ReaderScrollbarContext = createContext<TReaderScrollbarContext>({
|
|
||||||
scrollbarXSize: 0,
|
|
||||||
setScrollbarXSize: () => undefined,
|
|
||||||
scrollbarYSize: 0,
|
|
||||||
setScrollbarYSize: () => undefined,
|
|
||||||
});
|
|
||||||
|
|
||||||
export const useReaderScrollbarContext = () => useContext(ReaderScrollbarContext);
|
|
||||||
|
|
||||||
export const ReaderScrollbarContextProvider = ({ children }: { children: ReactNode }) => {
|
|
||||||
const [scrollbarXSize, setScrollbarXSize] = useState(0);
|
|
||||||
const [scrollbarYSize, setScrollbarYSize] = useState(0);
|
|
||||||
|
|
||||||
const value = useMemo(
|
|
||||||
() => ({ scrollbarXSize, setScrollbarXSize, scrollbarYSize, setScrollbarYSize }),
|
|
||||||
[scrollbarXSize, scrollbarYSize],
|
|
||||||
);
|
|
||||||
|
|
||||||
return <ReaderScrollbarContext.Provider value={value}>{children}</ReaderScrollbarContext.Provider>;
|
|
||||||
};
|
|
||||||
@@ -9,7 +9,7 @@
|
|||||||
import { memo } from 'react';
|
import { memo } from 'react';
|
||||||
import { withPropsFrom } from '@/base/hoc/withPropsFrom.tsx';
|
import { withPropsFrom } from '@/base/hoc/withPropsFrom.tsx';
|
||||||
import { useReaderInfiniteScrollUpdateChapter } from '@/features/reader/infinite-scroll/useReaderInfiniteScrollUpdateChapter.ts';
|
import { useReaderInfiniteScrollUpdateChapter } from '@/features/reader/infinite-scroll/useReaderInfiniteScrollUpdateChapter.ts';
|
||||||
import { IReaderSettings, TReaderScrollbarContext } from '@/features/reader/Reader.types.ts';
|
import { IReaderSettings } from '@/features/reader/Reader.types.ts';
|
||||||
import { ReaderControls } from '@/features/reader/services/ReaderControls.ts';
|
import { ReaderControls } from '@/features/reader/services/ReaderControls.ts';
|
||||||
import { ReaderService } from '@/features/reader/services/ReaderService.ts';
|
import { ReaderService } from '@/features/reader/services/ReaderService.ts';
|
||||||
import { ChapterIdInfo } from '@/features/chapter/Chapter.types.ts';
|
import { ChapterIdInfo } from '@/features/chapter/Chapter.types.ts';
|
||||||
@@ -26,12 +26,9 @@ const BaseReaderInfiniteScrollUpdateChapter = ({
|
|||||||
isNextChapterVisible,
|
isNextChapterVisible,
|
||||||
imageWrapper,
|
imageWrapper,
|
||||||
openChapter,
|
openChapter,
|
||||||
scrollbarXSize,
|
|
||||||
scrollbarYSize,
|
|
||||||
scrollElement,
|
scrollElement,
|
||||||
shouldShowTransitionPage,
|
shouldShowTransitionPage,
|
||||||
}: Pick<IReaderSettings, 'shouldShowTransitionPage'> &
|
}: Pick<IReaderSettings, 'shouldShowTransitionPage'> &
|
||||||
Pick<TReaderScrollbarContext, 'scrollbarXSize' | 'scrollbarYSize'> &
|
|
||||||
Pick<IReaderSettings, 'readingMode' | 'readingDirection' | 'shouldUseInfiniteScroll'> & {
|
Pick<IReaderSettings, 'readingMode' | 'readingDirection' | 'shouldUseInfiniteScroll'> & {
|
||||||
chapterId: ChapterIdInfo['id'];
|
chapterId: ChapterIdInfo['id'];
|
||||||
previousChapterId?: ChapterIdInfo['id'];
|
previousChapterId?: ChapterIdInfo['id'];
|
||||||
@@ -54,8 +51,6 @@ const BaseReaderInfiniteScrollUpdateChapter = ({
|
|||||||
shouldUseInfiniteScroll,
|
shouldUseInfiniteScroll,
|
||||||
openChapter,
|
openChapter,
|
||||||
imageWrapper,
|
imageWrapper,
|
||||||
scrollbarXSize,
|
|
||||||
scrollbarYSize,
|
|
||||||
scrollElement,
|
scrollElement,
|
||||||
shouldShowTransitionPage,
|
shouldShowTransitionPage,
|
||||||
);
|
);
|
||||||
@@ -70,8 +65,6 @@ const BaseReaderInfiniteScrollUpdateChapter = ({
|
|||||||
shouldUseInfiniteScroll,
|
shouldUseInfiniteScroll,
|
||||||
openChapter,
|
openChapter,
|
||||||
imageWrapper,
|
imageWrapper,
|
||||||
scrollbarXSize,
|
|
||||||
scrollbarYSize,
|
|
||||||
scrollElement,
|
scrollElement,
|
||||||
shouldShowTransitionPage,
|
shouldShowTransitionPage,
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ import {
|
|||||||
import { READING_DIRECTION_TO_THEME_DIRECTION } from '@/features/reader/settings/ReaderSettings.constants.tsx';
|
import { READING_DIRECTION_TO_THEME_DIRECTION } from '@/features/reader/settings/ReaderSettings.constants.tsx';
|
||||||
import { getOptionForDirection } from '@/features/theme/services/ThemeCreator.ts';
|
import { getOptionForDirection } from '@/features/theme/services/ThemeCreator.ts';
|
||||||
import { useIntersectionObserver } from '@/base/hooks/useIntersectionObserver.tsx';
|
import { useIntersectionObserver } from '@/base/hooks/useIntersectionObserver.tsx';
|
||||||
|
import { getReaderStore } from '@/features/reader/ReaderStore.ts';
|
||||||
|
|
||||||
interface ElementIntersection {
|
interface ElementIntersection {
|
||||||
start: boolean;
|
start: boolean;
|
||||||
@@ -246,8 +247,6 @@ export const useReaderInfiniteScrollUpdateChapter = (
|
|||||||
shouldUseInfiniteScroll: boolean,
|
shouldUseInfiniteScroll: boolean,
|
||||||
openChapter: ReturnType<typeof ReaderControls.useOpenChapter>,
|
openChapter: ReturnType<typeof ReaderControls.useOpenChapter>,
|
||||||
image: HTMLElement | null,
|
image: HTMLElement | null,
|
||||||
scrollbarXSize: number,
|
|
||||||
scrollbarYSize: number,
|
|
||||||
scrollElement: HTMLElement | null,
|
scrollElement: HTMLElement | null,
|
||||||
shouldShowTransitionPage: boolean,
|
shouldShowTransitionPage: boolean,
|
||||||
) => {
|
) => {
|
||||||
@@ -321,8 +320,8 @@ export const useReaderInfiniteScrollUpdateChapter = (
|
|||||||
const elementIntersectionInfo = getElementIntersectionInfo(
|
const elementIntersectionInfo = getElementIntersectionInfo(
|
||||||
readingDirection,
|
readingDirection,
|
||||||
entry.target.getBoundingClientRect(),
|
entry.target.getBoundingClientRect(),
|
||||||
scrollbarXSize,
|
getReaderStore().scrollbar.scrollbarXSize,
|
||||||
scrollbarYSize,
|
getReaderStore().scrollbar.scrollbarYSize,
|
||||||
);
|
);
|
||||||
const { start: isStartIntersecting, end: isEndIntersecting } = getElementIntersection(
|
const { start: isStartIntersecting, end: isEndIntersecting } = getElementIntersection(
|
||||||
elementIntersectionInfo,
|
elementIntersectionInfo,
|
||||||
@@ -362,8 +361,6 @@ export const useReaderInfiniteScrollUpdateChapter = (
|
|||||||
shouldUseInfiniteScroll,
|
shouldUseInfiniteScroll,
|
||||||
shouldShowTransitionPage,
|
shouldShowTransitionPage,
|
||||||
openChapter,
|
openChapter,
|
||||||
scrollbarXSize,
|
|
||||||
scrollbarYSize,
|
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
useMemo(
|
useMemo(
|
||||||
|
|||||||
@@ -16,21 +16,19 @@ import {
|
|||||||
ProgressBarType,
|
ProgressBarType,
|
||||||
ReaderStatePages,
|
ReaderStatePages,
|
||||||
ReadingDirection,
|
ReadingDirection,
|
||||||
TReaderScrollbarContext,
|
|
||||||
} from '@/features/reader/Reader.types.ts';
|
} from '@/features/reader/Reader.types.ts';
|
||||||
import { userReaderStatePagesContext } from '@/features/reader/contexts/state/ReaderStatePagesContext.tsx';
|
import { userReaderStatePagesContext } from '@/features/reader/contexts/state/ReaderStatePagesContext.tsx';
|
||||||
import { getPage } from '@/features/reader/overlay/progress-bar/ReaderProgressBar.utils.tsx';
|
import { getPage } from '@/features/reader/overlay/progress-bar/ReaderProgressBar.utils.tsx';
|
||||||
import { useNavBarContext } from '@/features/navigation-bar/NavbarContext.tsx';
|
import { useNavBarContext } from '@/features/navigation-bar/NavbarContext.tsx';
|
||||||
import { useReaderProgressBarContext } from '@/features/reader/overlay/progress-bar/ReaderProgressBarContext.tsx';
|
import { useReaderProgressBarContext } from '@/features/reader/overlay/progress-bar/ReaderProgressBarContext.tsx';
|
||||||
import { useReaderScrollbarContext } from '@/features/reader/contexts/ReaderScrollbarContext.tsx';
|
|
||||||
import { reverseString } from '@/base/utils/Strings.ts';
|
import { reverseString } from '@/base/utils/Strings.ts';
|
||||||
import { NavbarContextType } from '@/features/navigation-bar/NavigationBar.types.ts';
|
import { NavbarContextType } from '@/features/navigation-bar/NavigationBar.types.ts';
|
||||||
import { TReaderProgressBarContext } from '@/features/reader/overlay/progress-bar/ReaderProgressBar.types.ts';
|
import { TReaderProgressBarContext } from '@/features/reader/overlay/progress-bar/ReaderProgressBar.types.ts';
|
||||||
import { withPropsFrom } from '@/base/hoc/withPropsFrom.tsx';
|
import { withPropsFrom } from '@/base/hoc/withPropsFrom.tsx';
|
||||||
|
import { useReaderStore } from '@/features/reader/ReaderStore.ts';
|
||||||
|
|
||||||
const BaseReaderPageNumber = ({
|
const BaseReaderPageNumber = ({
|
||||||
isDesktop,
|
isDesktop,
|
||||||
scrollbarXSize,
|
|
||||||
readerNavBarWidth,
|
readerNavBarWidth,
|
||||||
isMaximized,
|
isMaximized,
|
||||||
currentPageIndex,
|
currentPageIndex,
|
||||||
@@ -39,12 +37,13 @@ const BaseReaderPageNumber = ({
|
|||||||
progressBarType,
|
progressBarType,
|
||||||
shouldShowPageNumber,
|
shouldShowPageNumber,
|
||||||
readingDirection,
|
readingDirection,
|
||||||
}: Pick<TReaderScrollbarContext, 'scrollbarXSize'> &
|
}: Pick<ReturnType<typeof ReaderService.useOverlayMode>, 'isDesktop'> &
|
||||||
Pick<ReturnType<typeof ReaderService.useOverlayMode>, 'isDesktop'> &
|
|
||||||
Pick<NavbarContextType, 'readerNavBarWidth'> &
|
Pick<NavbarContextType, 'readerNavBarWidth'> &
|
||||||
Pick<TReaderProgressBarContext, 'isMaximized'> &
|
Pick<TReaderProgressBarContext, 'isMaximized'> &
|
||||||
Pick<ReaderStatePages, 'currentPageIndex' | 'pages' | 'totalPages'> &
|
Pick<ReaderStatePages, 'currentPageIndex' | 'pages' | 'totalPages'> &
|
||||||
Pick<IReaderSettings, 'progressBarType' | 'shouldShowPageNumber' | 'readingDirection'>) => {
|
Pick<IReaderSettings, 'progressBarType' | 'shouldShowPageNumber' | 'readingDirection'>) => {
|
||||||
|
const scrollbarXSize = useReaderStore((state) => state.scrollbar.scrollbarXSize);
|
||||||
|
|
||||||
const pageName = useMemo(() => {
|
const pageName = useMemo(() => {
|
||||||
const currentPageName = getPage(currentPageIndex, pages).name;
|
const currentPageName = getPage(currentPageIndex, pages).name;
|
||||||
const SEPARATOR = '/';
|
const SEPARATOR = '/';
|
||||||
@@ -97,7 +96,6 @@ export const ReaderPageNumber = withPropsFrom(
|
|||||||
BaseReaderPageNumber,
|
BaseReaderPageNumber,
|
||||||
[
|
[
|
||||||
ReaderService.useOverlayMode,
|
ReaderService.useOverlayMode,
|
||||||
useReaderScrollbarContext,
|
|
||||||
useNavBarContext,
|
useNavBarContext,
|
||||||
useReaderProgressBarContext,
|
useReaderProgressBarContext,
|
||||||
userReaderStatePagesContext,
|
userReaderStatePagesContext,
|
||||||
@@ -105,7 +103,6 @@ export const ReaderPageNumber = withPropsFrom(
|
|||||||
],
|
],
|
||||||
[
|
[
|
||||||
'isDesktop',
|
'isDesktop',
|
||||||
'scrollbarXSize',
|
|
||||||
'readerNavBarWidth',
|
'readerNavBarWidth',
|
||||||
'isMaximized',
|
'isMaximized',
|
||||||
'currentPageIndex',
|
'currentPageIndex',
|
||||||
|
|||||||
@@ -24,28 +24,28 @@ import { makeToast } from '@/base/utils/Toast.ts';
|
|||||||
import { MobileHeaderProps } from '@/features/reader/overlay/ReaderOverlay.types.ts';
|
import { MobileHeaderProps } from '@/features/reader/overlay/ReaderOverlay.types.ts';
|
||||||
import { LoadingPlaceholder } from '@/base/components/feedback/LoadingPlaceholder.tsx';
|
import { LoadingPlaceholder } from '@/base/components/feedback/LoadingPlaceholder.tsx';
|
||||||
import { AppRoutes } from '@/base/AppRoute.constants.ts';
|
import { AppRoutes } from '@/base/AppRoute.constants.ts';
|
||||||
import { ReaderStateChapters, TReaderScrollbarContext } from '@/features/reader/Reader.types.ts';
|
import { ReaderStateChapters } from '@/features/reader/Reader.types.ts';
|
||||||
import { withPropsFrom } from '@/base/hoc/withPropsFrom.tsx';
|
import { withPropsFrom } from '@/base/hoc/withPropsFrom.tsx';
|
||||||
import { useReaderStateChaptersContext } from '@/features/reader/contexts/state/ReaderStateChaptersContext.tsx';
|
import { useReaderStateChaptersContext } from '@/features/reader/contexts/state/ReaderStateChaptersContext.tsx';
|
||||||
import { useReaderScrollbarContext } from '@/features/reader/contexts/ReaderScrollbarContext.tsx';
|
|
||||||
import { ReaderLibraryButton } from '@/features/reader/overlay/navigation/components/ReaderLibraryButton.tsx';
|
import { ReaderLibraryButton } from '@/features/reader/overlay/navigation/components/ReaderLibraryButton.tsx';
|
||||||
import { ReaderBookmarkButton } from '@/features/reader/overlay/navigation/components/ReaderBookmarkButton.tsx';
|
import { ReaderBookmarkButton } from '@/features/reader/overlay/navigation/components/ReaderBookmarkButton.tsx';
|
||||||
import { FALLBACK_CHAPTER } from '@/features/chapter/Chapter.constants.ts';
|
import { FALLBACK_CHAPTER } from '@/features/chapter/Chapter.constants.ts';
|
||||||
import { FALLBACK_MANGA } from '@/features/manga/Manga.constants.ts';
|
import { FALLBACK_MANGA } from '@/features/manga/Manga.constants.ts';
|
||||||
import { ReaderExitButton } from '@/features/reader/overlay/navigation/components/ReaderExitButton.tsx';
|
import { ReaderExitButton } from '@/features/reader/overlay/navigation/components/ReaderExitButton.tsx';
|
||||||
import { requestManager } from '@/lib/requests/RequestManager.ts';
|
import { requestManager } from '@/lib/requests/RequestManager.ts';
|
||||||
import { useReaderStoreShallow } from '@/features/reader/ReaderStore.ts';
|
import { useReaderStore, useReaderStoreShallow } from '@/features/reader/ReaderStore.ts';
|
||||||
|
|
||||||
const DEFAULT_MANGA = { ...FALLBACK_MANGA, title: '' };
|
const DEFAULT_MANGA = { ...FALLBACK_MANGA, title: '' };
|
||||||
|
|
||||||
const BaseReaderOverlayHeaderMobile = forwardRef<
|
const BaseReaderOverlayHeaderMobile = forwardRef<
|
||||||
HTMLDivElement,
|
HTMLDivElement,
|
||||||
MobileHeaderProps & Pick<ReaderStateChapters, 'currentChapter'> & Pick<TReaderScrollbarContext, 'scrollbarYSize'>
|
MobileHeaderProps & Pick<ReaderStateChapters, 'currentChapter'>
|
||||||
>(({ isVisible, currentChapter, scrollbarYSize }, ref) => {
|
>(({ isVisible, currentChapter }, ref) => {
|
||||||
const { t } = useTranslation();
|
const { t } = useTranslation();
|
||||||
const popupState = usePopupState({ popupId: 'reader-overlay-more-menu', variant: 'popover' });
|
const popupState = usePopupState({ popupId: 'reader-overlay-more-menu', variant: 'popover' });
|
||||||
|
|
||||||
const manga = useReaderStoreShallow((state) => state.manga);
|
const manga = useReaderStoreShallow((state) => state.manga);
|
||||||
|
const scrollbarYSize = useReaderStore((state) => state.scrollbar.scrollbarYSize);
|
||||||
|
|
||||||
const { id: mangaId, title } = manga ?? DEFAULT_MANGA;
|
const { id: mangaId, title } = manga ?? DEFAULT_MANGA;
|
||||||
const { id: chapterId, name, realUrl, isBookmarked } = currentChapter ?? FALLBACK_CHAPTER;
|
const { id: chapterId, name, realUrl, isBookmarked } = currentChapter ?? FALLBACK_CHAPTER;
|
||||||
@@ -131,6 +131,6 @@ const BaseReaderOverlayHeaderMobile = forwardRef<
|
|||||||
|
|
||||||
export const ReaderOverlayHeaderMobile = withPropsFrom(
|
export const ReaderOverlayHeaderMobile = withPropsFrom(
|
||||||
memo(BaseReaderOverlayHeaderMobile),
|
memo(BaseReaderOverlayHeaderMobile),
|
||||||
[useReaderStateChaptersContext, useReaderScrollbarContext],
|
[useReaderStateChaptersContext],
|
||||||
['currentChapter', 'scrollbarYSize'],
|
['currentChapter'],
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -24,26 +24,23 @@ import { MobileReaderProgressBar } from '@/features/reader/overlay/progress-bar/
|
|||||||
import { ReaderChapterList } from '@/features/reader/overlay/navigation/components/ReaderChapterList.tsx';
|
import { ReaderChapterList } from '@/features/reader/overlay/navigation/components/ReaderChapterList.tsx';
|
||||||
import { ReaderBottomBarMobileQuickSettings } from '@/features/reader/overlay/navigation/mobile/quick-settings/ReaderBottomBarMobileQuickSettings.tsx';
|
import { ReaderBottomBarMobileQuickSettings } from '@/features/reader/overlay/navigation/mobile/quick-settings/ReaderBottomBarMobileQuickSettings.tsx';
|
||||||
import { useReaderStateChaptersContext } from '@/features/reader/contexts/state/ReaderStateChaptersContext.tsx';
|
import { useReaderStateChaptersContext } from '@/features/reader/contexts/state/ReaderStateChaptersContext.tsx';
|
||||||
import { useReaderScrollbarContext } from '@/features/reader/contexts/ReaderScrollbarContext.tsx';
|
import { ReaderStateChapters } from '@/features/reader/Reader.types.ts';
|
||||||
import { ReaderStateChapters, TReaderScrollbarContext } from '@/features/reader/Reader.types.ts';
|
|
||||||
import { withPropsFrom } from '@/base/hoc/withPropsFrom.tsx';
|
import { withPropsFrom } from '@/base/hoc/withPropsFrom.tsx';
|
||||||
import { useResizeObserver } from '@/base/hooks/useResizeObserver.tsx';
|
import { useResizeObserver } from '@/base/hooks/useResizeObserver.tsx';
|
||||||
|
import { useReaderStoreShallow } from '@/features/reader/ReaderStore.ts';
|
||||||
|
|
||||||
const BaseReaderBottomBarMobile = ({
|
const BaseReaderBottomBarMobile = ({
|
||||||
openSettings,
|
openSettings,
|
||||||
isVisible,
|
isVisible,
|
||||||
currentChapter,
|
currentChapter,
|
||||||
chapters,
|
chapters,
|
||||||
scrollbarXSize,
|
|
||||||
scrollbarYSize,
|
|
||||||
topOffset = 0,
|
topOffset = 0,
|
||||||
}: ReaderBottomBarMobileProps &
|
}: ReaderBottomBarMobileProps & Pick<ReaderStateChapters, 'currentChapter' | 'chapters'> & { topOffset?: number }) => {
|
||||||
Pick<ReaderStateChapters, 'currentChapter' | 'chapters'> &
|
|
||||||
Pick<TReaderScrollbarContext, 'scrollbarXSize' | 'scrollbarYSize'> & { topOffset?: number }) => {
|
|
||||||
const { t } = useTranslation();
|
const { t } = useTranslation();
|
||||||
|
|
||||||
const chapterListPopupState = usePopupState({ variant: 'dialog', popupId: 'reader-chapter-list-dialog' });
|
const chapterListPopupState = usePopupState({ variant: 'dialog', popupId: 'reader-chapter-list-dialog' });
|
||||||
const quickSettingsPopupState = usePopupState({ variant: 'dialog', popupId: 'reader-quick-settings-dialog' });
|
const quickSettingsPopupState = usePopupState({ variant: 'dialog', popupId: 'reader-quick-settings-dialog' });
|
||||||
|
const { scrollbarXSize, scrollbarYSize } = useReaderStoreShallow((state) => state.scrollbar);
|
||||||
|
|
||||||
const [bottomBarRefHeight, setBottomBarRefHeight] = useState(0);
|
const [bottomBarRefHeight, setBottomBarRefHeight] = useState(0);
|
||||||
const bottomBarRef = useRef<HTMLDivElement>(null);
|
const bottomBarRef = useRef<HTMLDivElement>(null);
|
||||||
@@ -135,6 +132,6 @@ const BaseReaderBottomBarMobile = ({
|
|||||||
|
|
||||||
export const ReaderBottomBarMobile = withPropsFrom(
|
export const ReaderBottomBarMobile = withPropsFrom(
|
||||||
memo(BaseReaderBottomBarMobile),
|
memo(BaseReaderBottomBarMobile),
|
||||||
[useReaderStateChaptersContext, useReaderScrollbarContext],
|
[useReaderStateChaptersContext],
|
||||||
['currentChapter', 'chapters', 'scrollbarXSize', 'scrollbarYSize'],
|
['currentChapter', 'chapters'],
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ import { memo, useCallback, useState } from 'react';
|
|||||||
import { ReaderProgressBar } from '@/features/reader/overlay/progress-bar/ReaderProgressBar.tsx';
|
import { ReaderProgressBar } from '@/features/reader/overlay/progress-bar/ReaderProgressBar.tsx';
|
||||||
import { userReaderStatePagesContext } from '@/features/reader/contexts/state/ReaderStatePagesContext.tsx';
|
import { userReaderStatePagesContext } from '@/features/reader/contexts/state/ReaderStatePagesContext.tsx';
|
||||||
import { ReaderService } from '@/features/reader/services/ReaderService.ts';
|
import { ReaderService } from '@/features/reader/services/ReaderService.ts';
|
||||||
import { IReaderSettings, ProgressBarType, TReaderScrollbarContext } from '@/features/reader/Reader.types.ts';
|
import { IReaderSettings, ProgressBarType } from '@/features/reader/Reader.types.ts';
|
||||||
import { applyStyles } from '@/base/utils/ApplyStyles.ts';
|
import { applyStyles } from '@/base/utils/ApplyStyles.ts';
|
||||||
import { getProgressBarPositionInfo } from '@/features/reader/overlay/progress-bar/ReaderProgressBar.utils.tsx';
|
import { getProgressBarPositionInfo } from '@/features/reader/overlay/progress-bar/ReaderProgressBar.utils.tsx';
|
||||||
import { ReaderProgressBarDirectionWrapper } from '@/features/reader/overlay/progress-bar/components/ReaderProgressBarDirectionWrapper.tsx';
|
import { ReaderProgressBarDirectionWrapper } from '@/features/reader/overlay/progress-bar/components/ReaderProgressBarDirectionWrapper.tsx';
|
||||||
@@ -23,10 +23,10 @@ import { NavbarContextType } from '@/features/navigation-bar/NavigationBar.types
|
|||||||
import { withPropsFrom } from '@/base/hoc/withPropsFrom.tsx';
|
import { withPropsFrom } from '@/base/hoc/withPropsFrom.tsx';
|
||||||
import { useNavBarContext } from '@/features/navigation-bar/NavbarContext.tsx';
|
import { useNavBarContext } from '@/features/navigation-bar/NavbarContext.tsx';
|
||||||
import { useReaderProgressBarContext } from '@/features/reader/overlay/progress-bar/ReaderProgressBarContext.tsx';
|
import { useReaderProgressBarContext } from '@/features/reader/overlay/progress-bar/ReaderProgressBarContext.tsx';
|
||||||
import { useReaderScrollbarContext } from '@/features/reader/contexts/ReaderScrollbarContext.tsx';
|
|
||||||
import { ReaderProgressBarSlotDesktop } from '@/features/reader/overlay/progress-bar/desktop/components/ReaderProgressBarSlotDesktop.tsx';
|
import { ReaderProgressBarSlotDesktop } from '@/features/reader/overlay/progress-bar/desktop/components/ReaderProgressBarSlotDesktop.tsx';
|
||||||
import { useResizeObserver } from '@/base/hooks/useResizeObserver.tsx';
|
import { useResizeObserver } from '@/base/hooks/useResizeObserver.tsx';
|
||||||
import { getProgressBarPosition } from '@/features/reader/settings/ReaderSettings.utils.tsx';
|
import { getProgressBarPosition } from '@/features/reader/settings/ReaderSettings.utils.tsx';
|
||||||
|
import { useReaderStoreShallow } from '@/features/reader/ReaderStore.ts';
|
||||||
|
|
||||||
const BaseStandardReaderProgressBar = ({
|
const BaseStandardReaderProgressBar = ({
|
||||||
readerNavBarWidth,
|
readerNavBarWidth,
|
||||||
@@ -38,8 +38,6 @@ const BaseStandardReaderProgressBar = ({
|
|||||||
progressBarPosition,
|
progressBarPosition,
|
||||||
progressBarPositionAutoVertical,
|
progressBarPositionAutoVertical,
|
||||||
readerDirection,
|
readerDirection,
|
||||||
scrollbarXSize,
|
|
||||||
scrollbarYSize,
|
|
||||||
totalPages,
|
totalPages,
|
||||||
}: Pick<NavbarContextType, 'readerNavBarWidth'> &
|
}: Pick<NavbarContextType, 'readerNavBarWidth'> &
|
||||||
Pick<TReaderProgressBarContext, 'isMaximized' | 'setIsMaximized' | 'isDragging'> &
|
Pick<TReaderProgressBarContext, 'isMaximized' | 'setIsMaximized' | 'isDragging'> &
|
||||||
@@ -47,12 +45,13 @@ const BaseStandardReaderProgressBar = ({
|
|||||||
IReaderSettings,
|
IReaderSettings,
|
||||||
'progressBarType' | 'progressBarSize' | 'progressBarPosition' | 'progressBarPositionAutoVertical'
|
'progressBarType' | 'progressBarSize' | 'progressBarPosition' | 'progressBarPositionAutoVertical'
|
||||||
> &
|
> &
|
||||||
Pick<TReaderScrollbarContext, 'scrollbarXSize' | 'scrollbarYSize'> &
|
|
||||||
Pick<ReaderProgressBarProps, 'totalPages'> & {
|
Pick<ReaderProgressBarProps, 'totalPages'> & {
|
||||||
readerDirection: ReturnType<typeof ReaderService.useGetThemeDirection>;
|
readerDirection: ReturnType<typeof ReaderService.useGetThemeDirection>;
|
||||||
}) => {
|
}) => {
|
||||||
const theme = useTheme();
|
const theme = useTheme();
|
||||||
|
|
||||||
|
const { scrollbarXSize, scrollbarYSize } = useReaderStoreShallow((state) => state.scrollbar);
|
||||||
|
|
||||||
const [, setRefreshProgressBarPosition] = useState({});
|
const [, setRefreshProgressBarPosition] = useState({});
|
||||||
useResizeObserver(
|
useResizeObserver(
|
||||||
window.document.documentElement,
|
window.document.documentElement,
|
||||||
@@ -255,7 +254,6 @@ export const StandardReaderProgressBar = withPropsFrom(
|
|||||||
useReaderProgressBarContext,
|
useReaderProgressBarContext,
|
||||||
ReaderService.useSettingsWithoutDefaultFlag,
|
ReaderService.useSettingsWithoutDefaultFlag,
|
||||||
() => ({ readerDirection: ReaderService.useGetThemeDirection() }),
|
() => ({ readerDirection: ReaderService.useGetThemeDirection() }),
|
||||||
useReaderScrollbarContext,
|
|
||||||
userReaderStatePagesContext,
|
userReaderStatePagesContext,
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
@@ -268,8 +266,6 @@ export const StandardReaderProgressBar = withPropsFrom(
|
|||||||
'progressBarPosition',
|
'progressBarPosition',
|
||||||
'progressBarPositionAutoVertical',
|
'progressBarPositionAutoVertical',
|
||||||
'readerDirection',
|
'readerDirection',
|
||||||
'scrollbarXSize',
|
|
||||||
'scrollbarYSize',
|
|
||||||
'totalPages',
|
'totalPages',
|
||||||
],
|
],
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -22,12 +22,7 @@ import {
|
|||||||
getProgressBarPositionInfo,
|
getProgressBarPositionInfo,
|
||||||
} from '@/features/reader/overlay/progress-bar/ReaderProgressBar.utils.tsx';
|
} from '@/features/reader/overlay/progress-bar/ReaderProgressBar.utils.tsx';
|
||||||
import { getOptionForDirection } from '@/features/theme/services/ThemeCreator.ts';
|
import { getOptionForDirection } from '@/features/theme/services/ThemeCreator.ts';
|
||||||
import {
|
import { IReaderSettings, ProgressBarPosition, ReaderStateChapters } from '@/features/reader/Reader.types.ts';
|
||||||
IReaderSettings,
|
|
||||||
ProgressBarPosition,
|
|
||||||
ReaderStateChapters,
|
|
||||||
TReaderScrollbarContext,
|
|
||||||
} from '@/features/reader/Reader.types.ts';
|
|
||||||
import { ReaderProgressBarDirectionWrapper } from '@/features/reader/overlay/progress-bar/components/ReaderProgressBarDirectionWrapper.tsx';
|
import { ReaderProgressBarDirectionWrapper } from '@/features/reader/overlay/progress-bar/components/ReaderProgressBarDirectionWrapper.tsx';
|
||||||
import { useReaderProgressBarContext } from '@/features/reader/overlay/progress-bar/ReaderProgressBarContext.tsx';
|
import { useReaderProgressBarContext } from '@/features/reader/overlay/progress-bar/ReaderProgressBarContext.tsx';
|
||||||
import { useReaderOverlayContext } from '@/features/reader/overlay/ReaderOverlayContext.tsx';
|
import { useReaderOverlayContext } from '@/features/reader/overlay/ReaderOverlayContext.tsx';
|
||||||
@@ -42,8 +37,8 @@ import { userReaderStatePagesContext } from '@/features/reader/contexts/state/Re
|
|||||||
import { applyStyles } from '@/base/utils/ApplyStyles.ts';
|
import { applyStyles } from '@/base/utils/ApplyStyles.ts';
|
||||||
import { useResizeObserver } from '@/base/hooks/useResizeObserver.tsx';
|
import { useResizeObserver } from '@/base/hooks/useResizeObserver.tsx';
|
||||||
import { getProgressBarPosition } from '@/features/reader/settings/ReaderSettings.utils.tsx';
|
import { getProgressBarPosition } from '@/features/reader/settings/ReaderSettings.utils.tsx';
|
||||||
import { useReaderScrollbarContext } from '@/features/reader/contexts/ReaderScrollbarContext.tsx';
|
|
||||||
import { ReaderControls } from '@/features/reader/services/ReaderControls.ts';
|
import { ReaderControls } from '@/features/reader/services/ReaderControls.ts';
|
||||||
|
import { useReaderStore } from '@/features/reader/ReaderStore.ts';
|
||||||
|
|
||||||
const PROGRESS_BAR_POSITION_TO_SLIDE_DIRECTION: Record<ProgressBarPosition, SlideProps['direction']> = {
|
const PROGRESS_BAR_POSITION_TO_SLIDE_DIRECTION: Record<ProgressBarPosition, SlideProps['direction']> = {
|
||||||
[ProgressBarPosition.BOTTOM]: 'up',
|
[ProgressBarPosition.BOTTOM]: 'up',
|
||||||
@@ -66,18 +61,17 @@ const BaseMobileReaderProgressBar = ({
|
|||||||
progressBarPositionAutoVertical,
|
progressBarPositionAutoVertical,
|
||||||
topOffset = 0,
|
topOffset = 0,
|
||||||
bottomOffset = 0,
|
bottomOffset = 0,
|
||||||
scrollbarXSize,
|
|
||||||
}: Pick<ReaderStateChapters, 'previousChapter' | 'nextChapter'> &
|
}: Pick<ReaderStateChapters, 'previousChapter' | 'nextChapter'> &
|
||||||
Pick<TReaderOverlayContext, 'isVisible'> &
|
Pick<TReaderOverlayContext, 'isVisible'> &
|
||||||
Pick<TReaderProgressBarContext, 'setIsMaximized' | 'isDragging'> &
|
Pick<TReaderProgressBarContext, 'setIsMaximized' | 'isDragging'> &
|
||||||
Pick<ReaderProgressBarProps, 'currentPageIndex' | 'pages'> &
|
Pick<ReaderProgressBarProps, 'currentPageIndex' | 'pages'> &
|
||||||
Pick<IReaderSettings, 'progressBarPosition' | 'progressBarPositionAutoVertical'> &
|
Pick<IReaderSettings, 'progressBarPosition' | 'progressBarPositionAutoVertical'> & {
|
||||||
Pick<TReaderScrollbarContext, 'scrollbarXSize'> & {
|
|
||||||
direction: ReturnType<typeof ReaderService.useGetThemeDirection>;
|
direction: ReturnType<typeof ReaderService.useGetThemeDirection>;
|
||||||
topOffset?: number;
|
topOffset?: number;
|
||||||
bottomOffset?: number;
|
bottomOffset?: number;
|
||||||
}) => {
|
}) => {
|
||||||
const openChapter = ReaderControls.useOpenChapter();
|
const openChapter = ReaderControls.useOpenChapter();
|
||||||
|
const scrollbarXSize = useReaderStore((state) => state.scrollbar.scrollbarXSize);
|
||||||
|
|
||||||
const [, setRefreshProgressBarPosition] = useState({});
|
const [, setRefreshProgressBarPosition] = useState({});
|
||||||
useResizeObserver(
|
useResizeObserver(
|
||||||
@@ -372,7 +366,6 @@ export const MobileReaderProgressBar = withPropsFrom(
|
|||||||
userReaderStatePagesContext,
|
userReaderStatePagesContext,
|
||||||
() => ({ direction: ReaderService.useGetThemeDirection() }),
|
() => ({ direction: ReaderService.useGetThemeDirection() }),
|
||||||
ReaderService.useSettingsWithoutDefaultFlag,
|
ReaderService.useSettingsWithoutDefaultFlag,
|
||||||
useReaderScrollbarContext,
|
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
'previousChapter',
|
'previousChapter',
|
||||||
@@ -385,6 +378,5 @@ export const MobileReaderProgressBar = withPropsFrom(
|
|||||||
'direction',
|
'direction',
|
||||||
'progressBarPosition',
|
'progressBarPosition',
|
||||||
'progressBarPositionAutoVertical',
|
'progressBarPositionAutoVertical',
|
||||||
'scrollbarXSize',
|
|
||||||
],
|
],
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -83,8 +83,6 @@ const BaseReaderChapterViewer = ({
|
|||||||
resumeMode,
|
resumeMode,
|
||||||
customFilter,
|
customFilter,
|
||||||
shouldStretchPage,
|
shouldStretchPage,
|
||||||
scrollbarXSize,
|
|
||||||
scrollbarYSize,
|
|
||||||
readerNavBarWidth,
|
readerNavBarWidth,
|
||||||
onSizeChange,
|
onSizeChange,
|
||||||
minWidth,
|
minWidth,
|
||||||
@@ -419,8 +417,6 @@ const BaseReaderChapterViewer = ({
|
|||||||
isPreviousChapterVisible={isPreviousChapterVisible}
|
isPreviousChapterVisible={isPreviousChapterVisible}
|
||||||
isNextChapterVisible={isNextChapterVisible}
|
isNextChapterVisible={isNextChapterVisible}
|
||||||
imageWrapper={pagerRef.current}
|
imageWrapper={pagerRef.current}
|
||||||
scrollbarXSize={scrollbarXSize}
|
|
||||||
scrollbarYSize={scrollbarYSize}
|
|
||||||
scrollElement={scrollElement}
|
scrollElement={scrollElement}
|
||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
@@ -449,8 +445,6 @@ const BaseReaderChapterViewer = ({
|
|||||||
customFilter={customFilter}
|
customFilter={customFilter}
|
||||||
shouldStretchPage={shouldStretchPage}
|
shouldStretchPage={shouldStretchPage}
|
||||||
readerWidth={readerWidth}
|
readerWidth={readerWidth}
|
||||||
scrollbarXSize={scrollbarXSize}
|
|
||||||
scrollbarYSize={scrollbarYSize}
|
|
||||||
readerNavBarWidth={readerNavBarWidth}
|
readerNavBarWidth={readerNavBarWidth}
|
||||||
isPreloadMode={isPreloadMode}
|
isPreloadMode={isPreloadMode}
|
||||||
resumeMode={resumeMode}
|
resumeMode={resumeMode}
|
||||||
|
|||||||
@@ -31,10 +31,8 @@ import {
|
|||||||
ReaderStatePages,
|
ReaderStatePages,
|
||||||
ReadingDirection,
|
ReadingDirection,
|
||||||
ReadingMode,
|
ReadingMode,
|
||||||
TReaderScrollbarContext,
|
|
||||||
} from '@/features/reader/Reader.types.ts';
|
} from '@/features/reader/Reader.types.ts';
|
||||||
import { userReaderStatePagesContext } from '@/features/reader/contexts/state/ReaderStatePagesContext.tsx';
|
import { userReaderStatePagesContext } from '@/features/reader/contexts/state/ReaderStatePagesContext.tsx';
|
||||||
import { useReaderScrollbarContext } from '@/features/reader/contexts/ReaderScrollbarContext.tsx';
|
|
||||||
import { MediaQuery } from '@/base/utils/MediaQuery.tsx';
|
import { MediaQuery } from '@/base/utils/MediaQuery.tsx';
|
||||||
import { ReaderControls } from '@/features/reader/services/ReaderControls.ts';
|
import { ReaderControls } from '@/features/reader/services/ReaderControls.ts';
|
||||||
import {
|
import {
|
||||||
@@ -69,6 +67,7 @@ import { NavbarContextType } from '@/features/navigation-bar/NavigationBar.types
|
|||||||
import { useReaderPreserveScrollPosition } from '@/features/reader/viewer/hooks/useReaderPreserveScrollPosition.ts';
|
import { useReaderPreserveScrollPosition } from '@/features/reader/viewer/hooks/useReaderPreserveScrollPosition.ts';
|
||||||
|
|
||||||
import { ChapterIdInfo } from '@/features/chapter/Chapter.types.ts';
|
import { ChapterIdInfo } from '@/features/chapter/Chapter.types.ts';
|
||||||
|
import { getReaderStore } from '@/features/reader/ReaderStore.ts';
|
||||||
|
|
||||||
const READING_MODE_TO_IN_VIEWPORT_TYPE: Record<ReadingMode, PageInViewportType> = {
|
const READING_MODE_TO_IN_VIEWPORT_TYPE: Record<ReadingMode, PageInViewportType> = {
|
||||||
[ReadingMode.SINGLE_PAGE]: PageInViewportType.X,
|
[ReadingMode.SINGLE_PAGE]: PageInViewportType.X,
|
||||||
@@ -105,8 +104,6 @@ const BaseReaderViewer = forwardRef(
|
|||||||
shouldStretchPage,
|
shouldStretchPage,
|
||||||
isStaticNav,
|
isStaticNav,
|
||||||
readerNavBarWidth,
|
readerNavBarWidth,
|
||||||
setScrollbarXSize,
|
|
||||||
setScrollbarYSize,
|
|
||||||
isVisible: isOverlayVisible,
|
isVisible: isOverlayVisible,
|
||||||
setIsVisible: setIsOverlayVisible,
|
setIsVisible: setIsOverlayVisible,
|
||||||
updateCurrentPageIndex,
|
updateCurrentPageIndex,
|
||||||
@@ -147,7 +144,6 @@ const BaseReaderViewer = forwardRef(
|
|||||||
| 'shouldStretchPage'
|
| 'shouldStretchPage'
|
||||||
| 'isStaticNav'
|
| 'isStaticNav'
|
||||||
> &
|
> &
|
||||||
Pick<TReaderScrollbarContext, 'setScrollbarXSize' | 'setScrollbarYSize'> &
|
|
||||||
Pick<NavbarContextType, 'readerNavBarWidth'> &
|
Pick<NavbarContextType, 'readerNavBarWidth'> &
|
||||||
Pick<TReaderOverlayContext, 'isVisible' | 'setIsVisible'> &
|
Pick<TReaderOverlayContext, 'isVisible' | 'setIsVisible'> &
|
||||||
Pick<
|
Pick<
|
||||||
@@ -183,8 +179,9 @@ const BaseReaderViewer = forwardRef(
|
|||||||
const scrollbarXSize = MediaQuery.useGetScrollbarSize('width', scrollElementRef.current);
|
const scrollbarXSize = MediaQuery.useGetScrollbarSize('width', scrollElementRef.current);
|
||||||
const scrollbarYSize = MediaQuery.useGetScrollbarSize('height', scrollElementRef.current);
|
const scrollbarYSize = MediaQuery.useGetScrollbarSize('height', scrollElementRef.current);
|
||||||
useLayoutEffect(() => {
|
useLayoutEffect(() => {
|
||||||
setScrollbarXSize(scrollbarXSize);
|
const { scrollbar } = getReaderStore();
|
||||||
setScrollbarYSize(scrollbarYSize);
|
scrollbar.setScrollbarXSize(scrollbarXSize);
|
||||||
|
scrollbar.setScrollbarYSize(scrollbarYSize);
|
||||||
}, [scrollbarXSize, scrollbarYSize]);
|
}, [scrollbarXSize, scrollbarYSize]);
|
||||||
|
|
||||||
const handleClick = ReaderControls.useHandleClick(scrollElementRef.current);
|
const handleClick = ReaderControls.useHandleClick(scrollElementRef.current);
|
||||||
@@ -432,8 +429,6 @@ const BaseReaderViewer = forwardRef(
|
|||||||
imagePreLoadAmount={imagePreLoadAmount}
|
imagePreLoadAmount={imagePreLoadAmount}
|
||||||
customFilter={customFilter}
|
customFilter={customFilter}
|
||||||
shouldStretchPage={shouldStretchPage}
|
shouldStretchPage={shouldStretchPage}
|
||||||
scrollbarXSize={scrollbarXSize}
|
|
||||||
scrollbarYSize={scrollbarYSize}
|
|
||||||
readerNavBarWidth={readerNavBarWidth}
|
readerNavBarWidth={readerNavBarWidth}
|
||||||
onSizeChange={onChapterViewSizeChange}
|
onSizeChange={onChapterViewSizeChange}
|
||||||
minWidth={isChapterSizeSourceChapter ? 0 : minChapterViewWidth}
|
minWidth={isChapterSizeSourceChapter ? 0 : minChapterViewWidth}
|
||||||
@@ -452,7 +447,6 @@ export const ReaderViewer = withPropsFrom(
|
|||||||
[
|
[
|
||||||
userReaderStatePagesContext,
|
userReaderStatePagesContext,
|
||||||
ReaderService.useSettingsWithoutDefaultFlag,
|
ReaderService.useSettingsWithoutDefaultFlag,
|
||||||
useReaderScrollbarContext,
|
|
||||||
useReaderOverlayContext,
|
useReaderOverlayContext,
|
||||||
() => ({ updateCurrentPageIndex: ReaderControls.useUpdateCurrentPageIndex() }),
|
() => ({ updateCurrentPageIndex: ReaderControls.useUpdateCurrentPageIndex() }),
|
||||||
useReaderTapZoneContext,
|
useReaderTapZoneContext,
|
||||||
@@ -484,8 +478,6 @@ export const ReaderViewer = withPropsFrom(
|
|||||||
'isStaticNav',
|
'isStaticNav',
|
||||||
'readerNavBarWidth',
|
'readerNavBarWidth',
|
||||||
'transitionPageMode',
|
'transitionPageMode',
|
||||||
'setScrollbarXSize',
|
|
||||||
'setScrollbarYSize',
|
|
||||||
'isVisible',
|
'isVisible',
|
||||||
'setIsVisible',
|
'setIsVisible',
|
||||||
'updateCurrentPageIndex',
|
'updateCurrentPageIndex',
|
||||||
|
|||||||
@@ -8,12 +8,7 @@
|
|||||||
|
|
||||||
import { memo, useCallback } from 'react';
|
import { memo, useCallback } from 'react';
|
||||||
import { SpinnerImage, SpinnerImageProps } from '@/base/components/SpinnerImage.tsx';
|
import { SpinnerImage, SpinnerImageProps } from '@/base/components/SpinnerImage.tsx';
|
||||||
import {
|
import { IReaderSettings, ReaderCustomFilter, ReaderPagerProps } from '@/features/reader/Reader.types.ts';
|
||||||
IReaderSettings,
|
|
||||||
ReaderCustomFilter,
|
|
||||||
ReaderPagerProps,
|
|
||||||
TReaderScrollbarContext,
|
|
||||||
} from '@/features/reader/Reader.types.ts';
|
|
||||||
import {
|
import {
|
||||||
getImageMarginStyling,
|
getImageMarginStyling,
|
||||||
getImagePlaceholderStyling,
|
getImagePlaceholderStyling,
|
||||||
@@ -22,6 +17,7 @@ import {
|
|||||||
import { applyStyles } from '@/base/utils/ApplyStyles.ts';
|
import { applyStyles } from '@/base/utils/ApplyStyles.ts';
|
||||||
import { MediaQuery } from '@/base/utils/MediaQuery.tsx';
|
import { MediaQuery } from '@/base/utils/MediaQuery.tsx';
|
||||||
import { NavbarContextType } from '@/features/navigation-bar/NavigationBar.types.ts';
|
import { NavbarContextType } from '@/features/navigation-bar/NavigationBar.types.ts';
|
||||||
|
import { useReaderStoreShallow } from '@/features/reader/ReaderStore.ts';
|
||||||
|
|
||||||
const getCustomFilterString = (customFilter: ReaderCustomFilter): string =>
|
const getCustomFilterString = (customFilter: ReaderCustomFilter): string =>
|
||||||
Object.keys(customFilter)
|
Object.keys(customFilter)
|
||||||
@@ -66,8 +62,6 @@ const BaseReaderPage = ({
|
|||||||
pageScaleMode,
|
pageScaleMode,
|
||||||
shouldStretchPage,
|
shouldStretchPage,
|
||||||
readerWidth,
|
readerWidth,
|
||||||
scrollbarXSize,
|
|
||||||
scrollbarYSize,
|
|
||||||
onLoad,
|
onLoad,
|
||||||
onError,
|
onError,
|
||||||
setRef,
|
setRef,
|
||||||
@@ -76,7 +70,6 @@ const BaseReaderPage = ({
|
|||||||
...props
|
...props
|
||||||
}: Omit<SpinnerImageProps, 'spinnerStyle' | 'imgStyle' | 'onLoad' | 'onError'> &
|
}: Omit<SpinnerImageProps, 'spinnerStyle' | 'imgStyle' | 'onLoad' | 'onError'> &
|
||||||
Pick<IReaderSettings, 'readingMode' | 'customFilter' | 'pageScaleMode' | 'shouldStretchPage' | 'readerWidth'> &
|
Pick<IReaderSettings, 'readingMode' | 'customFilter' | 'pageScaleMode' | 'shouldStretchPage' | 'readerWidth'> &
|
||||||
Pick<TReaderScrollbarContext, 'scrollbarXSize' | 'scrollbarYSize'> &
|
|
||||||
Pick<NavbarContextType, 'readerNavBarWidth'> & {
|
Pick<NavbarContextType, 'readerNavBarWidth'> & {
|
||||||
pageIndex: number;
|
pageIndex: number;
|
||||||
pagesIndex: number;
|
pagesIndex: number;
|
||||||
@@ -93,6 +86,7 @@ const BaseReaderPage = ({
|
|||||||
const { src } = props;
|
const { src } = props;
|
||||||
|
|
||||||
const isTabletWidth = MediaQuery.useIsTabletWidth();
|
const isTabletWidth = MediaQuery.useIsTabletWidth();
|
||||||
|
const { scrollbarXSize, scrollbarYSize } = useReaderStoreShallow((state) => state.scrollbar);
|
||||||
|
|
||||||
const handleLoad = useCallback(
|
const handleLoad = useCallback(
|
||||||
() => onLoad?.(pagesIndex, src, isPrimaryPage),
|
() => onLoad?.(pagesIndex, src, isPrimaryPage),
|
||||||
|
|||||||
@@ -13,14 +13,12 @@ import Button from '@mui/material/Button';
|
|||||||
import { Link } from 'react-router-dom';
|
import { Link } from 'react-router-dom';
|
||||||
import { ComponentProps, memo, useMemo } from 'react';
|
import { ComponentProps, memo, useMemo } from 'react';
|
||||||
import { alpha, useTheme } from '@mui/material/styles';
|
import { alpha, useTheme } from '@mui/material/styles';
|
||||||
import { useReaderScrollbarContext } from '@/features/reader/contexts/ReaderScrollbarContext.tsx';
|
|
||||||
import { useReaderStateChaptersContext } from '@/features/reader/contexts/state/ReaderStateChaptersContext.tsx';
|
import { useReaderStateChaptersContext } from '@/features/reader/contexts/state/ReaderStateChaptersContext.tsx';
|
||||||
import {
|
import {
|
||||||
IReaderSettings,
|
IReaderSettings,
|
||||||
ReaderStatePages,
|
ReaderStatePages,
|
||||||
ReaderTransitionPageMode,
|
ReaderTransitionPageMode,
|
||||||
ReadingMode,
|
ReadingMode,
|
||||||
TReaderScrollbarContext,
|
|
||||||
} from '@/features/reader/Reader.types.ts';
|
} from '@/features/reader/Reader.types.ts';
|
||||||
import { isTransitionPageVisible } from '@/features/reader/viewer/pager/ReaderPager.utils.tsx';
|
import { isTransitionPageVisible } from '@/features/reader/viewer/pager/ReaderPager.utils.tsx';
|
||||||
import { useBackButton } from '@/base/hooks/useBackButton.ts';
|
import { useBackButton } from '@/base/hooks/useBackButton.ts';
|
||||||
@@ -90,12 +88,9 @@ const BaseReaderTransitionPage = ({
|
|||||||
previousChapterScanlator,
|
previousChapterScanlator,
|
||||||
nextChapterName,
|
nextChapterName,
|
||||||
nextChapterScanlator,
|
nextChapterScanlator,
|
||||||
scrollbarXSize,
|
|
||||||
scrollbarYSize,
|
|
||||||
readerNavBarWidth,
|
readerNavBarWidth,
|
||||||
handleBack,
|
handleBack,
|
||||||
}: Pick<IReaderSettings, 'readingMode' | 'backgroundColor' | 'shouldShowTransitionPage'> &
|
}: Pick<IReaderSettings, 'readingMode' | 'backgroundColor' | 'shouldShowTransitionPage'> &
|
||||||
Pick<TReaderScrollbarContext, 'scrollbarXSize' | 'scrollbarYSize'> &
|
|
||||||
Pick<ReaderStatePages, 'transitionPageMode'> &
|
Pick<ReaderStatePages, 'transitionPageMode'> &
|
||||||
Pick<NavbarContextType, 'readerNavBarWidth'> & {
|
Pick<NavbarContextType, 'readerNavBarWidth'> & {
|
||||||
// gets used in the "source props creators" of the "withPropsFrom" call
|
// gets used in the "source props creators" of the "withPropsFrom" call
|
||||||
@@ -112,6 +107,7 @@ const BaseReaderTransitionPage = ({
|
|||||||
}) => {
|
}) => {
|
||||||
const { t } = useTranslation();
|
const { t } = useTranslation();
|
||||||
const manga = useReaderStoreShallow((state) => state.manga);
|
const manga = useReaderStoreShallow((state) => state.manga);
|
||||||
|
const { scrollbarXSize, scrollbarYSize } = useReaderStoreShallow((state) => state.scrollbar);
|
||||||
|
|
||||||
const isPreviousType = type === ReaderTransitionPageMode.PREVIOUS;
|
const isPreviousType = type === ReaderTransitionPageMode.PREVIOUS;
|
||||||
const isNextType = type === ReaderTransitionPageMode.NEXT;
|
const isNextType = type === ReaderTransitionPageMode.NEXT;
|
||||||
@@ -255,7 +251,6 @@ export const ReaderTransitionPage = withPropsFrom(
|
|||||||
nextChapterScanlator: nextChapter?.scanlator,
|
nextChapterScanlator: nextChapter?.scanlator,
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
useReaderScrollbarContext,
|
|
||||||
useNavBarContext,
|
useNavBarContext,
|
||||||
userReaderStatePagesContext,
|
userReaderStatePagesContext,
|
||||||
ReaderService.useSettingsWithoutDefaultFlag,
|
ReaderService.useSettingsWithoutDefaultFlag,
|
||||||
@@ -289,8 +284,6 @@ export const ReaderTransitionPage = withPropsFrom(
|
|||||||
'previousChapterScanlator',
|
'previousChapterScanlator',
|
||||||
'nextChapterName',
|
'nextChapterName',
|
||||||
'nextChapterScanlator',
|
'nextChapterScanlator',
|
||||||
'scrollbarXSize',
|
|
||||||
'scrollbarYSize',
|
|
||||||
'readerNavBarWidth',
|
'readerNavBarWidth',
|
||||||
'backgroundColor',
|
'backgroundColor',
|
||||||
'transitionPageMode',
|
'transitionPageMode',
|
||||||
|
|||||||
@@ -17,7 +17,6 @@ import {
|
|||||||
ReaderTransitionPageMode,
|
ReaderTransitionPageMode,
|
||||||
ReadingDirection,
|
ReadingDirection,
|
||||||
ReadingMode,
|
ReadingMode,
|
||||||
TReaderScrollbarContext,
|
|
||||||
} from '@/features/reader/Reader.types.ts';
|
} from '@/features/reader/Reader.types.ts';
|
||||||
import { applyStyles } from '@/base/utils/ApplyStyles.ts';
|
import { applyStyles } from '@/base/utils/ApplyStyles.ts';
|
||||||
import {
|
import {
|
||||||
@@ -295,8 +294,6 @@ export const createReaderPage = (
|
|||||||
pageScaleMode: IReaderSettings['pageScaleMode'],
|
pageScaleMode: IReaderSettings['pageScaleMode'],
|
||||||
shouldStretchPage: IReaderSettings['shouldStretchPage'],
|
shouldStretchPage: IReaderSettings['shouldStretchPage'],
|
||||||
readerWidth: IReaderSettings['readerWidth'],
|
readerWidth: IReaderSettings['readerWidth'],
|
||||||
scrollbarXSize: TReaderScrollbarContext['scrollbarXSize'],
|
|
||||||
scrollbarYSize: TReaderScrollbarContext['scrollbarYSize'],
|
|
||||||
readerNavBarWidth: NavbarContextType['readerNavBarWidth'],
|
readerNavBarWidth: NavbarContextType['readerNavBarWidth'],
|
||||||
retryKeyPrefix?: string,
|
retryKeyPrefix?: string,
|
||||||
position?: 'left' | 'right',
|
position?: 'left' | 'right',
|
||||||
@@ -327,8 +324,6 @@ export const createReaderPage = (
|
|||||||
pageScaleMode={pageScaleMode}
|
pageScaleMode={pageScaleMode}
|
||||||
shouldStretchPage={shouldStretchPage}
|
shouldStretchPage={shouldStretchPage}
|
||||||
readerWidth={readerWidth}
|
readerWidth={readerWidth}
|
||||||
scrollbarXSize={scrollbarXSize}
|
|
||||||
scrollbarYSize={scrollbarYSize}
|
|
||||||
readerNavBarWidth={readerNavBarWidth}
|
readerNavBarWidth={readerNavBarWidth}
|
||||||
/>
|
/>
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -37,8 +37,6 @@ const BaseBasePager = forwardRef<
|
|||||||
pageScaleMode: ReaderPagerProps['pageScaleMode'],
|
pageScaleMode: ReaderPagerProps['pageScaleMode'],
|
||||||
shouldStretchPage: ReaderPagerProps['shouldStretchPage'],
|
shouldStretchPage: ReaderPagerProps['shouldStretchPage'],
|
||||||
readerWidth: ReaderPagerProps['readerWidth'],
|
readerWidth: ReaderPagerProps['readerWidth'],
|
||||||
scrollbarXSize: ReaderPagerProps['scrollbarXSize'],
|
|
||||||
scrollbarYSize: ReaderPagerProps['scrollbarYSize'],
|
|
||||||
readerNavBarWidth: ReaderPagerProps['readerNavBarWidth'],
|
readerNavBarWidth: ReaderPagerProps['readerNavBarWidth'],
|
||||||
) => ReactNode;
|
) => ReactNode;
|
||||||
slots?: { boxProps?: BoxProps };
|
slots?: { boxProps?: BoxProps };
|
||||||
@@ -61,8 +59,6 @@ const BaseBasePager = forwardRef<
|
|||||||
pageScaleMode,
|
pageScaleMode,
|
||||||
shouldStretchPage,
|
shouldStretchPage,
|
||||||
readerWidth,
|
readerWidth,
|
||||||
scrollbarXSize,
|
|
||||||
scrollbarYSize,
|
|
||||||
readerNavBarWidth,
|
readerNavBarWidth,
|
||||||
resumeMode,
|
resumeMode,
|
||||||
handleAsInitialRender,
|
handleAsInitialRender,
|
||||||
@@ -147,8 +143,6 @@ const BaseBasePager = forwardRef<
|
|||||||
pageScaleMode,
|
pageScaleMode,
|
||||||
shouldStretchPage,
|
shouldStretchPage,
|
||||||
readerWidth,
|
readerWidth,
|
||||||
scrollbarXSize,
|
|
||||||
scrollbarYSize,
|
|
||||||
readerNavBarWidth,
|
readerNavBarWidth,
|
||||||
),
|
),
|
||||||
)}
|
)}
|
||||||
|
|||||||
Reference in New Issue
Block a user