Add dedicated store access util functions

Makes it easier to find the specific store slice usage
This commit is contained in:
schroda
2025-09-21 00:50:19 +02:00
parent ed488f76dd
commit 525173e05e
28 changed files with 247 additions and 161 deletions

View File

@@ -48,7 +48,13 @@ import { ChapterIdInfo, TChapterReader } from '@/features/chapter/Chapter.types.
import { awaitConfirmation } from '@/base/utils/AwaitableDialog.tsx';
import { defaultPromiseErrorHandler } from '@/lib/DefaultPromiseErrorHandler.ts';
import { TReaderProgressCurrentPage } from '@/features/reader/overlay/progress-bar/ReaderProgressBar.types.ts';
import { getReaderStore } from '@/features/reader/stores/ReaderStore.ts';
import {
getReaderChaptersStore,
getReaderOverlayStore,
getReaderPagesStore,
getReaderSettingsStore,
getReaderTapZoneStore,
} from '@/features/reader/stores/ReaderStore.ts';
const getScrollDirectionInvert = (
scrollDirection: ScrollDirection,
@@ -118,7 +124,7 @@ export class ReaderControls {
const getNewScrollPosition = (currentPos: number, elementSize: number) =>
currentPos + elementSize * scrollAmount * scrollDirection;
getReaderStore().overlay.setIsVisible(false);
getReaderOverlayStore().setIsVisible(false);
setShowPreview(false);
const doScroll = (
@@ -162,16 +168,15 @@ export class ReaderControls {
scrollIntoView: boolean = true,
): void {
const {
chapters: {
currentChapter,
previousChapter,
nextChapter,
chapters,
visibleChapters: { lastLeadingChapterSourceOrder, lastTrailingChapterSourceOrder },
setReaderStateChapters,
},
settings: { shouldInformAboutMissingChapter, shouldInformAboutScanlatorChange, shouldUseInfiniteScroll },
} = getReaderStore();
currentChapter,
previousChapter,
nextChapter,
chapters,
visibleChapters: { lastLeadingChapterSourceOrder, lastTrailingChapterSourceOrder },
setReaderStateChapters,
} = getReaderChaptersStore();
const { shouldInformAboutMissingChapter, shouldInformAboutScanlatorChange, shouldUseInfiniteScroll } =
getReaderSettingsStore();
if (!currentChapter) {
return;
@@ -311,10 +316,9 @@ export class ReaderControls {
}
static openPage(page: number | 'previous' | 'next', forceDirection?: Direction, hideOverlay: boolean = true): void {
const {
pages: { currentPageIndex, setPageToScrollToIndex, pages, transitionPageMode, setTransitionPageMode },
settings: { readingDirection, readingMode, shouldShowTransitionPage },
} = getReaderStore();
const { currentPageIndex, setPageToScrollToIndex, pages, transitionPageMode, setTransitionPageMode } =
getReaderPagesStore();
const { readingDirection, readingMode, shouldShowTransitionPage } = getReaderSettingsStore();
const direction = READING_DIRECTION_TO_THEME_DIRECTION[readingDirection.value];
@@ -336,8 +340,8 @@ export class ReaderControls {
const isContinuousReadingModeActive = isContinuousReadingMode(readingMode.value);
if (hideOverlay) {
getReaderStore().overlay.setIsVisible(false);
getReaderStore().tapZone.setShowPreview(false);
getReaderOverlayStore().setIsVisible(false);
getReaderTapZoneStore().setShowPreview(false);
}
const hideTransitionPage = () => setTransitionPageMode(ReaderTransitionPageMode.NONE);
@@ -360,7 +364,7 @@ export class ReaderControls {
isFirstPage &&
(!shouldShowTransitionPage || isPreviousTransitionPageVisible) &&
convertedPage === 'previous' &&
!!getReaderStore().chapters.previousChapter;
!!getReaderChaptersStore().previousChapter;
if (shouldOpenPreviousChapter) {
ReaderControls.openChapter('previous');
return;
@@ -370,7 +374,7 @@ export class ReaderControls {
isLastPage &&
(!shouldShowTransitionPage || isNextTransitionPageVisible) &&
convertedPage === 'next' &&
!!getReaderStore().chapters.nextChapter;
!!getReaderChaptersStore().nextChapter;
if (shouldOpenNextChapter) {
ReaderControls.openChapter('next');
return;
@@ -415,17 +419,15 @@ export class ReaderControls {
return useCallback(
(pageIndex, debounceChapterUpdate = true, endReached = false) => {
const { currentPageIndex, setCurrentPageIndex } = getReaderPagesStore();
const {
pages: { currentPageIndex, setCurrentPageIndex },
chapters: {
currentChapter,
chapters,
previousChapter,
nextChapter,
visibleChapters,
setReaderStateChapters,
},
} = getReaderStore();
currentChapter,
chapters,
previousChapter,
nextChapter,
visibleChapters,
setReaderStateChapters,
} = getReaderChaptersStore();
if (pageIndex === currentPageIndex && !endReached) {
return;
@@ -526,14 +528,14 @@ export class ReaderControls {
return;
}
const { readingMode, readingDirection, isStaticNav, scrollAmount } = getReaderStore().settings;
const { readingMode, readingDirection, isStaticNav, scrollAmount } = getReaderSettingsStore();
const rect = e.currentTarget.getBoundingClientRect();
const rectRelativeX = e.clientX - rect.left;
const rectRelativeY = e.clientY - rect.top;
const action = ReaderTapZoneService.getAction(rectRelativeX, rectRelativeY);
getReaderStore().tapZone.setShowPreview(false);
getReaderTapZoneStore().setShowPreview(false);
const isContinuousReadingModeActive = isContinuousReadingMode(readingMode.value);
const scrollDirection =
@@ -541,7 +543,7 @@ export class ReaderControls {
switch (action) {
case TapZoneRegionType.MENU:
getReaderStore().overlay.setIsVisible(isStaticNav || !getReaderStore().overlay.isVisible);
getReaderOverlayStore().setIsVisible(isStaticNav || !getReaderOverlayStore().isVisible);
break;
case TapZoneRegionType.PREVIOUS:
case TapZoneRegionType.NEXT:
@@ -552,7 +554,7 @@ export class ReaderControls {
readingMode.value,
readingDirection.value,
scrollElement,
getReaderStore().tapZone.setShowPreview,
getReaderTapZoneStore().setShowPreview,
scrollAmount,
);
} else {

View File

@@ -46,7 +46,12 @@ import { getErrorMessage } from '@/lib/HelperFunctions.ts';
import { FALLBACK_MANGA } from '@/features/manga/Manga.constants.ts';
import { getMetadataKey } from '@/features/metadata/Metadata.utils.ts';
import { DirectionOffset } from '@/base/Base.types.ts';
import { getReaderStore, useReaderStore } from '@/features/reader/stores/ReaderStore.ts';
import {
getReaderChaptersStore,
getReaderSettingsStore,
getReaderStore,
useReaderSettingsStore,
} from '@/features/reader/stores/ReaderStore.ts';
import { ReactRouter } from '@/lib/react-router/ReactRouter.ts';
const DIRECTION_TO_INVERTED: Record<Direction, Direction> = {
@@ -152,11 +157,9 @@ export class ReaderService {
return useCallback(
(patch) => {
const {
manga,
chapters: { currentChapter, mangaChapters, chapters },
settings: { shouldSkipDupChapters },
} = getReaderStore();
const { manga } = getReaderStore();
const { currentChapter, mangaChapters, chapters } = getReaderChaptersStore();
const { shouldSkipDupChapters } = getReaderSettingsStore();
if (!manga || !currentChapter || !mangaChapters) {
return;
@@ -227,7 +230,7 @@ export class ReaderService {
static useGetThemeDirection(): Direction {
const { direction } = useTheme();
const readingDirection = useReaderStore((state) => state.settings.readingDirection.value);
const readingDirection = useReaderSettingsStore((state) => state.settings.readingDirection.value);
return DIRECTION_TO_READING_DIRECTION[direction] === readingDirection
? direction
@@ -336,7 +339,7 @@ export class ReaderService {
static useOverlayMode(): { mode: ReaderOverlayMode; isDesktop: boolean; isMobile: boolean } {
const isTouchDevice = MediaQuery.useIsTouchDevice();
const overlayMode = useReaderStore((state) => state.settings.overlayMode);
const overlayMode = useReaderSettingsStore((state) => state.settings.overlayMode);
const isAutoModeSelected = overlayMode === ReaderOverlayMode.AUTO;
const isDesktopModeSelected = overlayMode === ReaderOverlayMode.DESKTOP;
@@ -353,7 +356,7 @@ export class ReaderService {
}
static useExit(): () => void {
const exitMode = useReaderStore((state) => state.settings.exitMode);
const exitMode = useReaderSettingsStore((state) => state.settings.exitMode);
const handleBack = useBackButton();
const navigate = useNavigate();