diff --git a/src/features/reader/stores/ReaderPagesStore.ts b/src/features/reader/stores/ReaderPagesStore.ts new file mode 100644 index 00000000..5ba6240a --- /dev/null +++ b/src/features/reader/stores/ReaderPagesStore.ts @@ -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 = ( + ...[set, get]: Parameters> +): 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; + }), + }, +}); diff --git a/src/features/reader/stores/ReaderStore.constants.ts b/src/features/reader/stores/ReaderStore.constants.ts index bdd699bd..c081b0f7 100644 --- a/src/features/reader/stores/ReaderStore.constants.ts +++ b/src/features/reader/stores/ReaderStore.constants.ts @@ -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: { diff --git a/src/features/reader/stores/ReaderStore.ts b/src/features/reader/stores/ReaderStore.ts index a82b8169..a96d2ff4 100644 --- a/src/features/reader/stores/ReaderStore.ts +++ b/src/features/reader/stores/ReaderStore.ts @@ -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 & { scrollbar: Pick }; -const createReaderPagesStoreSlice = ( - ...[set, get]: Parameters> -): 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 = ( ...[set, get]: Parameters> ): ReaderChaptersStoreSlice => ({