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 00:07:57 +02:00
parent 4a07198af6
commit f6b94c838b
8 changed files with 44 additions and 35 deletions

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 {

View File

@@ -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;

View File

@@ -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 } }),
},
});

View File

@@ -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 } }),
},
});

View File

@@ -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') {

View File

@@ -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;

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;

View File

@@ -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 } }),
},
});