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, ...)
This commit is contained in:
schroda
2025-09-22 01:10:35 +02:00
parent 4a07198af6
commit f6b94c838b
8 changed files with 44 additions and 35 deletions
+7 -8
View File
@@ -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<React.SetStateAction<Omit<ReaderStateChapters, 'setReaderStateChapters'>>>;
}
interface ReaderSettingsTypeBaseProps {
@@ -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 = <T extends ReaderAutoScrollStore
({
autoScroll: {
...DEFAULT_STATE,
reset: () =>
set((draft) => {
draft.autoScroll = { ...get().autoScroll, ...DEFAULT_STATE };
}),
reset: () => ({ autoScroll: { ...get().autoScroll, ...DEFAULT_STATE } }),
setIsActive: (active) =>
set((draft) => {
draft.autoScroll.isActive = active;
@@ -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 = <T extends ReaderOverlayStoreSlice>
set((draft) => {
draft.overlay.isVisible = visible;
}),
reset: () => set(() => ({ overlay: { ...get().overlay, ...DEFAULT_STATE } })),
reset: () => ({ overlay: { ...get().overlay, ...DEFAULT_STATE } }),
},
});
@@ -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 = <T extends ReaderProgressBarSto
set((draft) => {
draft.progressBar.isDragging = dragging;
}),
reset: () => set(() => ({ progressBar: { ...get().progressBar, ...DEFAULT_STATE } })),
reset: () => ({ progressBar: { ...get().progressBar, ...DEFAULT_STATE } }),
},
});
@@ -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 = <T extends ReaderChaptersStoreSlic
): ReaderChaptersStoreSlice => ({
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') {
@@ -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 = <T extends ReaderPagesStoreSlice>(
): 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;
+16 -12
View File
@@ -67,20 +67,24 @@ const readerStore = create<ReaderStore>()(
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;
@@ -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 = <T extends ReaderTapZoneStoreSlice>
set((draft) => {
draft.tapZone.showPreview = showPreview;
}),
reset: () => set(() => ({ tapZone: { ...get().tapZone, ...DEFAULT_STATE } })),
reset: () => ({ tapZone: { ...get().tapZone, ...DEFAULT_STATE } }),
},
});