Extract "reader pages store slice" into file
This commit is contained in:
94
src/features/reader/stores/ReaderPagesStore.ts
Normal file
94
src/features/reader/stores/ReaderPagesStore.ts
Normal 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;
|
||||||
|
}),
|
||||||
|
},
|
||||||
|
});
|
||||||
@@ -6,39 +6,7 @@
|
|||||||
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { ReaderStateChapters, ReaderStatePages, ReaderTransitionPageMode } from '@/features/reader/Reader.types.ts';
|
import { ReaderStateChapters } 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: '',
|
|
||||||
};
|
|
||||||
|
|
||||||
export const READER_DEFAULT_CHAPTERS_STATE = {
|
export const READER_DEFAULT_CHAPTERS_STATE = {
|
||||||
chapters: {
|
chapters: {
|
||||||
|
|||||||
@@ -18,16 +18,9 @@ import {
|
|||||||
createReaderAutoScrollStoreSlice,
|
createReaderAutoScrollStoreSlice,
|
||||||
ReaderAutoScrollStoreSlice,
|
ReaderAutoScrollStoreSlice,
|
||||||
} from '@/features/reader/auto-scroll/ReaderAutoScrollStore.ts';
|
} from '@/features/reader/auto-scroll/ReaderAutoScrollStore.ts';
|
||||||
import {
|
import { IReaderSettingsWithDefaultFlag, ReaderStateChapters } from '@/features/reader/Reader.types.ts';
|
||||||
IReaderSettingsWithDefaultFlag,
|
|
||||||
ReaderStateChapters,
|
|
||||||
ReaderStatePages,
|
|
||||||
} from '@/features/reader/Reader.types.ts';
|
|
||||||
import { ImmerStateCreator } from '@/lib/zustand/Zustand.types.ts';
|
import { ImmerStateCreator } from '@/lib/zustand/Zustand.types.ts';
|
||||||
import {
|
import { READER_DEFAULT_CHAPTERS_STATE } from '@/features/reader/stores/ReaderStore.constants.ts';
|
||||||
READER_DEFAULT_CHAPTERS_STATE,
|
|
||||||
READER_DEFAULT_PAGES_STATE,
|
|
||||||
} from '@/features/reader/stores/ReaderStore.constants.ts';
|
|
||||||
import { DEFAULT_READER_SETTINGS_WITH_DEFAULT_FLAG } from '@/features/reader/settings/ReaderSettingsMetadata.ts';
|
import { DEFAULT_READER_SETTINGS_WITH_DEFAULT_FLAG } from '@/features/reader/settings/ReaderSettingsMetadata.ts';
|
||||||
import {
|
import {
|
||||||
createReaderProgressBarStoreSlice,
|
createReaderProgressBarStoreSlice,
|
||||||
@@ -37,12 +30,7 @@ import {
|
|||||||
createReaderTapZoneStoreSlice,
|
createReaderTapZoneStoreSlice,
|
||||||
ReaderTapZoneStoreSlice,
|
ReaderTapZoneStoreSlice,
|
||||||
} from '@/features/reader/tap-zones/ReaderTapZoneStore.tsx';
|
} from '@/features/reader/tap-zones/ReaderTapZoneStore.tsx';
|
||||||
|
import { createReaderPagesStoreSlice, ReaderPagesStoreSlice } from '@/features/reader/stores/ReaderPagesStore.ts';
|
||||||
interface ReaderPagesStoreSlice {
|
|
||||||
pages: ReaderStatePages & {
|
|
||||||
reset: () => void;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
interface ReaderChaptersStoreSlice {
|
interface ReaderChaptersStoreSlice {
|
||||||
chapters: ReaderStateChapters & {
|
chapters: ReaderStateChapters & {
|
||||||
@@ -79,52 +67,6 @@ const DEFAULT_STATE = {
|
|||||||
},
|
},
|
||||||
} satisfies Pick<ReaderStore, 'manga'> & { scrollbar: Pick<ReaderStore['scrollbar'], 'xSize' | 'ySize'> };
|
} 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>(
|
const createReaderChaptersStoreSlice = <T extends ReaderChaptersStoreSlice>(
|
||||||
...[set, get]: Parameters<ImmerStateCreator<T>>
|
...[set, get]: Parameters<ImmerStateCreator<T>>
|
||||||
): ReaderChaptersStoreSlice => ({
|
): ReaderChaptersStoreSlice => ({
|
||||||
|
|||||||
Reference in New Issue
Block a user