forked from akai/readest
feat: provide reading progress indicator for each books in the bookshelf (#153)
* feat: provide reading progress indicator for each books in the bookshelf * refactor: simplify bookshelf component and remove unused hook; enhance reading progress calculation - Removed the `useBookConfigLoader` hook as it was no longer needed. - Simplified the bookshelf items generation by eliminating the use of `useMemo`. - Improved the reading progress calculation in the `ReadingProgress` component to directly use the book's progress data. - Updated the `Book` type to include a `progress` field for better tracking of reading status. * fix formatting for readerStore
This commit is contained in:
committed by
GitHub
parent
ba82203629
commit
46fdea3522
@@ -64,7 +64,10 @@ export const useReaderStore = create<ReaderStore>((set, get) => ({
|
||||
getView: (key: string | null) => (key && get().viewStates[key]?.view) || null,
|
||||
setView: (key: string, view) =>
|
||||
set((state) => ({
|
||||
viewStates: { ...state.viewStates, [key]: { ...state.viewStates[key]!, view } },
|
||||
viewStates: {
|
||||
...state.viewStates,
|
||||
[key]: { ...state.viewStates[key]!, view },
|
||||
},
|
||||
})),
|
||||
getViews: () => Object.values(get().viewStates).map((state) => state.view!),
|
||||
getViewsById: (id: string) => {
|
||||
@@ -213,13 +216,31 @@ export const useReaderStore = create<ReaderStore>((set, get) => ({
|
||||
const bookData = useBookDataStore.getState().booksData[id];
|
||||
const viewState = state.viewStates[key];
|
||||
if (!viewState || !bookData) return state;
|
||||
|
||||
const progress: [number, number] = [pageinfo.current, pageinfo.total];
|
||||
|
||||
// Update library book progress
|
||||
const { library, setLibrary } = useLibraryStore.getState();
|
||||
const bookIndex = library.findIndex((b) => b.hash === id);
|
||||
if (bookIndex !== -1) {
|
||||
const updatedLibrary = [...library];
|
||||
const existingBook = updatedLibrary[bookIndex]!;
|
||||
updatedLibrary[bookIndex] = {
|
||||
...existingBook,
|
||||
progress,
|
||||
updatedAt: Date.now(),
|
||||
};
|
||||
setLibrary(updatedLibrary);
|
||||
}
|
||||
|
||||
const oldConfig = bookData.config;
|
||||
const newConfig = {
|
||||
...bookData.config,
|
||||
updatedAt: Date.now(),
|
||||
progress: [pageinfo.current, pageinfo.total] as [number, number],
|
||||
progress,
|
||||
location,
|
||||
};
|
||||
|
||||
useBookDataStore.setState((state) => ({
|
||||
booksData: {
|
||||
...state.booksData,
|
||||
@@ -229,6 +250,7 @@ export const useReaderStore = create<ReaderStore>((set, get) => ({
|
||||
},
|
||||
},
|
||||
}));
|
||||
|
||||
return {
|
||||
viewStates: {
|
||||
...state.viewStates,
|
||||
@@ -248,7 +270,6 @@ export const useReaderStore = create<ReaderStore>((set, get) => ({
|
||||
},
|
||||
};
|
||||
}),
|
||||
|
||||
setBookmarkRibbonVisibility: (key: string, visible: boolean) =>
|
||||
set((state) => ({
|
||||
viewStates: {
|
||||
|
||||
Reference in New Issue
Block a user