From f6b94c838b372cf6baf1b7900b5c76917bf94e50 Mon Sep 17 00:00:00 2001 From: schroda <50052685+schroda@users.noreply.github.com> Date: Mon, 22 Sep 2025 00:07:57 +0200 Subject: [PATCH] Fix reset of reader store After the slice states got reset, the base reset function just reverted all those resets and only reset the base states in the store (manga, scrollbar, ...) --- src/features/reader/Reader.types.ts | 15 +++++----- .../auto-scroll/ReaderAutoScrollStore.ts | 7 ++--- .../reader/overlay/ReaderOverlayStore.ts | 4 +-- .../progress-bar/ReaderProgressBarStore.tsx | 4 +-- .../reader/stores/ReaderChaptersStore.ts | 13 +++++++-- .../reader/stores/ReaderPagesStore.ts | 4 +-- src/features/reader/stores/ReaderStore.ts | 28 +++++++++++-------- .../reader/tap-zones/ReaderTapZoneStore.tsx | 4 +-- 8 files changed, 44 insertions(+), 35 deletions(-) diff --git a/src/features/reader/Reader.types.ts b/src/features/reader/Reader.types.ts index 65019ab9..08243380 100644 --- a/src/features/reader/Reader.types.ts +++ b/src/features/reader/Reader.types.ts @@ -206,7 +206,7 @@ export interface ReaderStateChapters { * E.g., in case read chapters are filtered out. This would then lead to the removal of the current chapter * after the end of the chapter is reached. */ - mangaChapters?: TChapterReader[]; + mangaChapters: TChapterReader[] | undefined; /** * Actual chapters that have been filtered * @@ -215,11 +215,11 @@ export interface ReaderStateChapters { * - Manga chapter list filters */ chapters: TChapterReader[]; - chapterForDuplicatesHandling?: TChapterReader | null; - initialChapter?: TChapterReader | null; - currentChapter?: TChapterReader | null; - nextChapter?: TChapterReader; - previousChapter?: TChapterReader; + chapterForDuplicatesHandling: TChapterReader | null | undefined; + initialChapter: TChapterReader | null | undefined; + currentChapter: TChapterReader | null | undefined; + nextChapter: TChapterReader | undefined; + previousChapter: TChapterReader | undefined; isCurrentChapterReady: boolean; /** * Based from the initial chapter index @@ -232,9 +232,8 @@ export interface ReaderStateChapters { isLeadingChapterPreloadMode: boolean; isTrailingChapterPreloadMode: boolean; scrollIntoView: boolean; - resumeMode?: ReaderResumeMode; + resumeMode: ReaderResumeMode | undefined; }; - setReaderStateChapters: React.Dispatch>>; } interface ReaderSettingsTypeBaseProps { diff --git a/src/features/reader/auto-scroll/ReaderAutoScrollStore.ts b/src/features/reader/auto-scroll/ReaderAutoScrollStore.ts index 1f30cd71..048ada79 100644 --- a/src/features/reader/auto-scroll/ReaderAutoScrollStore.ts +++ b/src/features/reader/auto-scroll/ReaderAutoScrollStore.ts @@ -27,7 +27,7 @@ export interface ReaderAutoScrollStoreSlice { invert: boolean; setInvert: (invert: boolean) => void; direction: ScrollOffset; - reset: () => void; + reset: () => ReaderAutoScrollStoreSlice; }; } @@ -63,10 +63,7 @@ export const createReaderAutoScrollStoreSlice = - set((draft) => { - draft.autoScroll = { ...get().autoScroll, ...DEFAULT_STATE }; - }), + reset: () => ({ autoScroll: { ...get().autoScroll, ...DEFAULT_STATE } }), setIsActive: (active) => set((draft) => { draft.autoScroll.isActive = active; diff --git a/src/features/reader/overlay/ReaderOverlayStore.ts b/src/features/reader/overlay/ReaderOverlayStore.ts index ab617a2f..0dec878a 100644 --- a/src/features/reader/overlay/ReaderOverlayStore.ts +++ b/src/features/reader/overlay/ReaderOverlayStore.ts @@ -12,7 +12,7 @@ export interface ReaderOverlayStoreSlice { overlay: { isVisible: boolean; setIsVisible: (visible: boolean) => void; - reset: () => void; + reset: () => ReaderOverlayStoreSlice; }; } @@ -29,6 +29,6 @@ export const createReaderOverlayStoreSlice = set((draft) => { draft.overlay.isVisible = visible; }), - reset: () => set(() => ({ overlay: { ...get().overlay, ...DEFAULT_STATE } })), + reset: () => ({ overlay: { ...get().overlay, ...DEFAULT_STATE } }), }, }); diff --git a/src/features/reader/overlay/progress-bar/ReaderProgressBarStore.tsx b/src/features/reader/overlay/progress-bar/ReaderProgressBarStore.tsx index 64402301..6a1b99fb 100644 --- a/src/features/reader/overlay/progress-bar/ReaderProgressBarStore.tsx +++ b/src/features/reader/overlay/progress-bar/ReaderProgressBarStore.tsx @@ -11,7 +11,7 @@ import { TReaderProgressBarContext } from '@/features/reader/overlay/progress-ba export interface ReaderProgressBarStoreSlice { progressBar: TReaderProgressBarContext & { - reset: () => void; + reset: () => ReaderProgressBarStoreSlice; }; } @@ -33,6 +33,6 @@ export const createReaderProgressBarStoreSlice = { draft.progressBar.isDragging = dragging; }), - reset: () => set(() => ({ progressBar: { ...get().progressBar, ...DEFAULT_STATE } })), + reset: () => ({ progressBar: { ...get().progressBar, ...DEFAULT_STATE } }), }, }); diff --git a/src/features/reader/stores/ReaderChaptersStore.ts b/src/features/reader/stores/ReaderChaptersStore.ts index 56727409..3796e802 100644 --- a/src/features/reader/stores/ReaderChaptersStore.ts +++ b/src/features/reader/stores/ReaderChaptersStore.ts @@ -11,13 +11,22 @@ import { ReaderStateChapters } from '@/features/reader/Reader.types.ts'; export interface ReaderChaptersStoreSlice { chapters: ReaderStateChapters & { - reset: () => void; + setReaderStateChapters: ( + state: ((state: ReaderStateChapters) => ReaderStateChapters) | ReaderStateChapters, + ) => void; + reset: () => ReaderChaptersStoreSlice; }; } export const READER_DEFAULT_CHAPTERS_STATE = { chapters: { + mangaChapters: undefined, chapters: [], + chapterForDuplicatesHandling: undefined, + initialChapter: undefined, + currentChapter: undefined, + nextChapter: undefined, + previousChapter: undefined, isCurrentChapterReady: false, visibleChapters: { leading: 0, @@ -39,7 +48,7 @@ export const createReaderChaptersStoreSlice = ({ chapters: { ...READER_DEFAULT_CHAPTERS_STATE.chapters, - reset: () => set(() => ({ chapters: { ...get().chapters, ...READER_DEFAULT_CHAPTERS_STATE.chapters } })), + reset: () => ({ chapters: { ...get().chapters, ...READER_DEFAULT_CHAPTERS_STATE.chapters } }), setReaderStateChapters: (state) => set((draft) => { if (typeof state === 'function') { diff --git a/src/features/reader/stores/ReaderPagesStore.ts b/src/features/reader/stores/ReaderPagesStore.ts index 5ba6240a..dcecd4be 100644 --- a/src/features/reader/stores/ReaderPagesStore.ts +++ b/src/features/reader/stores/ReaderPagesStore.ts @@ -12,7 +12,7 @@ import { requestManager } from '@/lib/requests/RequestManager.ts'; export interface ReaderPagesStoreSlice { pages: ReaderStatePages & { - reset: () => void; + reset: () => ReaderPagesStoreSlice; }; } @@ -52,7 +52,7 @@ export const createReaderPagesStoreSlice = ( ): ReaderPagesStoreSlice => ({ pages: { ...READER_DEFAULT_PAGES_STATE, - reset: () => set(() => ({ pages: { ...get().pages, ...READER_DEFAULT_PAGES_STATE } })), + reset: () => ({ pages: { ...get().pages, ...READER_DEFAULT_PAGES_STATE } }), setCurrentPageIndex: (index) => set((draft) => { draft.pages.currentPageIndex = index; diff --git a/src/features/reader/stores/ReaderStore.ts b/src/features/reader/stores/ReaderStore.ts index fa841086..94f4d52d 100644 --- a/src/features/reader/stores/ReaderStore.ts +++ b/src/features/reader/stores/ReaderStore.ts @@ -67,20 +67,24 @@ const readerStore = create()( immer((set, get, store) => ({ ...DEFAULT_STATE, reset: () => - set((draft) => { - draft.manga = DEFAULT_STATE.manga; - draft.scrollbar = { ...get().scrollbar, ...DEFAULT_STATE.scrollbar }; - get().overlay.reset(); - get().autoScroll.reset(); - get().pages.reset(); - get().chapters.reset(); - draft.settings = { + set(() => ({ + ...get(), + ...DEFAULT_STATE, + scrollbar: { + ...get().scrollbar, + ...DEFAULT_STATE.scrollbar, + }, + settings: { ...get().settings, ...DEFAULT_READER_SETTINGS_WITH_DEFAULT_FLAG, - }; - get().progressBar.reset(); - get().tapZone.reset(); - }), + }, + ...get().overlay.reset(), + ...get().autoScroll.reset(), + ...get().pages.reset(), + ...get().chapters.reset(), + ...get().progressBar.reset(), + ...get().tapZone.reset(), + })), setManga: (manga) => set((draft) => { draft.manga = manga; diff --git a/src/features/reader/tap-zones/ReaderTapZoneStore.tsx b/src/features/reader/tap-zones/ReaderTapZoneStore.tsx index 359ccc2a..6d8e3dbf 100644 --- a/src/features/reader/tap-zones/ReaderTapZoneStore.tsx +++ b/src/features/reader/tap-zones/ReaderTapZoneStore.tsx @@ -11,7 +11,7 @@ import { TReaderTapZoneContext } from '@/features/reader/tap-zones/TapZoneLayout export interface ReaderTapZoneStoreSlice { tapZone: TReaderTapZoneContext & { - reset: () => void; + reset: () => ReaderTapZoneStoreSlice; }; } @@ -28,6 +28,6 @@ export const createReaderTapZoneStoreSlice = set((draft) => { draft.tapZone.showPreview = showPreview; }), - reset: () => set(() => ({ tapZone: { ...get().tapZone, ...DEFAULT_STATE } })), + reset: () => ({ tapZone: { ...get().tapZone, ...DEFAULT_STATE } }), }, });