Extract "reader pages store slice" into file

This commit is contained in:
schroda
2025-09-20 17:56:43 +02:00
parent 6da8a3fd87
commit 9f5db5496f
3 changed files with 98 additions and 94 deletions

View File

@@ -0,0 +1,94 @@
/*
* 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 { ReaderStatePages, ReaderTransitionPageMode } from '@/features/reader/Reader.types.ts';
import { ImmerStateCreator } from '@/lib/zustand/Zustand.types.ts';
import { requestManager } from '@/lib/requests/RequestManager.ts';
export interface ReaderPagesStoreSlice {
pages: ReaderStatePages & {
reset: () => void;
};
}
export const READER_DEFAULT_PAGES_STATE: Omit<
ReaderStatePages,
| 'setCurrentPageIndex'
| 'setPageToScrollToIndex'
| 'setTotalPages'
| 'setPageUrls'
| 'setPageLoadStates'
| 'setPages'
| 'setTransitionPageMode'
| 'setRetryFailedPagesKeyPrefix'
| 'reset'
> = {
totalPages: 0,
currentPageIndex: 0,
pageToScrollToIndex: null,
pageUrls: [],
pageLoadStates: [{ url: '', loaded: false }],
pages: [
{
name: '1',
primary: {
index: 0,
alt: `Page #1`,
url: `${requestManager.getBaseUrl()}`,
},
},
],
transitionPageMode: ReaderTransitionPageMode.NONE,
retryFailedPagesKeyPrefix: '',
};
export const createReaderPagesStoreSlice = <T extends ReaderPagesStoreSlice>(
...[set, get]: Parameters<ImmerStateCreator<T>>
): ReaderPagesStoreSlice => ({
pages: {
...READER_DEFAULT_PAGES_STATE,
reset: () => set(() => ({ pages: { ...get().pages, ...READER_DEFAULT_PAGES_STATE } })),
setCurrentPageIndex: (index) =>
set((draft) => {
draft.pages.currentPageIndex = index;
}),
setPageToScrollToIndex: (index) =>
set((draft) => {
draft.pages.pageToScrollToIndex = index;
}),
setTotalPages: (total) =>
set((draft) => {
draft.pages.totalPages = total;
}),
setPageUrls: (urls) =>
set((draft) => {
draft.pages.pageUrls = urls;
}),
setPageLoadStates: (loadStates) =>
set((draft) => {
if (typeof loadStates === 'function') {
draft.pages.pageLoadStates = loadStates(get().pages.pageLoadStates);
return;
}
draft.pages.pageLoadStates = loadStates;
}),
setPages: (pages) =>
set((draft) => {
draft.pages.pages = pages;
}),
setTransitionPageMode: (mode) =>
set((draft) => {
draft.pages.transitionPageMode = mode;
}),
setRetryFailedPagesKeyPrefix: (prefix) =>
set((draft) => {
draft.pages.retryFailedPagesKeyPrefix = prefix;
}),
},
});

View File

@@ -6,39 +6,7 @@
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*/
import { ReaderStateChapters, ReaderStatePages, ReaderTransitionPageMode } from '@/features/reader/Reader.types.ts';
import { requestManager } from '@/lib/requests/RequestManager.ts';
export const READER_DEFAULT_PAGES_STATE: Omit<
ReaderStatePages,
| 'setCurrentPageIndex'
| 'setPageToScrollToIndex'
| 'setTotalPages'
| 'setPageUrls'
| 'setPageLoadStates'
| 'setPages'
| 'setTransitionPageMode'
| 'setRetryFailedPagesKeyPrefix'
| 'reset'
> = {
totalPages: 0,
currentPageIndex: 0,
pageToScrollToIndex: null,
pageUrls: [],
pageLoadStates: [{ url: '', loaded: false }],
pages: [
{
name: '1',
primary: {
index: 0,
alt: `Page #1`,
url: `${requestManager.getBaseUrl()}`,
},
},
],
transitionPageMode: ReaderTransitionPageMode.NONE,
retryFailedPagesKeyPrefix: '',
};
import { ReaderStateChapters } from '@/features/reader/Reader.types.ts';
export const READER_DEFAULT_CHAPTERS_STATE = {
chapters: {

View File

@@ -18,16 +18,9 @@ import {
createReaderAutoScrollStoreSlice,
ReaderAutoScrollStoreSlice,
} from '@/features/reader/auto-scroll/ReaderAutoScrollStore.ts';
import {
IReaderSettingsWithDefaultFlag,
ReaderStateChapters,
ReaderStatePages,
} from '@/features/reader/Reader.types.ts';
import { IReaderSettingsWithDefaultFlag, ReaderStateChapters } from '@/features/reader/Reader.types.ts';
import { ImmerStateCreator } from '@/lib/zustand/Zustand.types.ts';
import {
READER_DEFAULT_CHAPTERS_STATE,
READER_DEFAULT_PAGES_STATE,
} from '@/features/reader/stores/ReaderStore.constants.ts';
import { READER_DEFAULT_CHAPTERS_STATE } from '@/features/reader/stores/ReaderStore.constants.ts';
import { DEFAULT_READER_SETTINGS_WITH_DEFAULT_FLAG } from '@/features/reader/settings/ReaderSettingsMetadata.ts';
import {
createReaderProgressBarStoreSlice,
@@ -37,12 +30,7 @@ import {
createReaderTapZoneStoreSlice,
ReaderTapZoneStoreSlice,
} from '@/features/reader/tap-zones/ReaderTapZoneStore.tsx';
interface ReaderPagesStoreSlice {
pages: ReaderStatePages & {
reset: () => void;
};
}
import { createReaderPagesStoreSlice, ReaderPagesStoreSlice } from '@/features/reader/stores/ReaderPagesStore.ts';
interface ReaderChaptersStoreSlice {
chapters: ReaderStateChapters & {
@@ -79,52 +67,6 @@ const DEFAULT_STATE = {
},
} satisfies Pick<ReaderStore, 'manga'> & { scrollbar: Pick<ReaderStore['scrollbar'], 'xSize' | 'ySize'> };
const createReaderPagesStoreSlice = <T extends ReaderPagesStoreSlice>(
...[set, get]: Parameters<ImmerStateCreator<T>>
): ReaderPagesStoreSlice => ({
pages: {
...READER_DEFAULT_PAGES_STATE,
reset: () => set(() => ({ pages: { ...get().pages, ...READER_DEFAULT_PAGES_STATE } })),
setCurrentPageIndex: (index) =>
set((draft) => {
draft.pages.currentPageIndex = index;
}),
setPageToScrollToIndex: (index) =>
set((draft) => {
draft.pages.pageToScrollToIndex = index;
}),
setTotalPages: (total) =>
set((draft) => {
draft.pages.totalPages = total;
}),
setPageUrls: (urls) =>
set((draft) => {
draft.pages.pageUrls = urls;
}),
setPageLoadStates: (loadStates) =>
set((draft) => {
if (typeof loadStates === 'function') {
draft.pages.pageLoadStates = loadStates(get().pages.pageLoadStates);
return;
}
draft.pages.pageLoadStates = loadStates;
}),
setPages: (pages) =>
set((draft) => {
draft.pages.pages = pages;
}),
setTransitionPageMode: (mode) =>
set((draft) => {
draft.pages.transitionPageMode = mode;
}),
setRetryFailedPagesKeyPrefix: (prefix) =>
set((draft) => {
draft.pages.retryFailedPagesKeyPrefix = prefix;
}),
},
});
const createReaderChaptersStoreSlice = <T extends ReaderChaptersStoreSlice>(
...[set, get]: Parameters<ImmerStateCreator<T>>
): ReaderChaptersStoreSlice => ({