53 lines
1.4 KiB
TypeScript
53 lines
1.4 KiB
TypeScript
import { useCallback } from "react";
|
|
|
|
interface ReadingTrackerData {
|
|
chapterPage: { [chapterId: number]: number };
|
|
}
|
|
|
|
export const useReadingTracker = () => {
|
|
const setCurrentChapterPage = useCallback(
|
|
(id: number, pageNumber: number) => {
|
|
const jsonString = localStorage.getItem("readingTrackerData");
|
|
|
|
let readingTrackerData: ReadingTrackerData;
|
|
try {
|
|
readingTrackerData = jsonString
|
|
? JSON.parse(jsonString)
|
|
: { chapterPage: {} };
|
|
} catch (error) {
|
|
console.error("Error parsing reading tracker data:", error);
|
|
readingTrackerData = { chapterPage: {} };
|
|
}
|
|
|
|
const updatedData = {
|
|
...readingTrackerData,
|
|
chapterPage: {
|
|
...readingTrackerData.chapterPage,
|
|
[id]: pageNumber,
|
|
},
|
|
};
|
|
|
|
localStorage.setItem("readingTrackerData", JSON.stringify(updatedData));
|
|
},
|
|
[],
|
|
);
|
|
|
|
const getCurrentChapterPage = useCallback(
|
|
(id: number): number | undefined => {
|
|
const jsonString = localStorage.getItem("readingTrackerData");
|
|
if (!jsonString) return undefined;
|
|
|
|
try {
|
|
const readingTrackerData: ReadingTrackerData = JSON.parse(jsonString);
|
|
return readingTrackerData.chapterPage[id];
|
|
} catch (error) {
|
|
console.error("Error parsing reading tracker data:", error);
|
|
return undefined;
|
|
}
|
|
},
|
|
[],
|
|
);
|
|
|
|
return { setCurrentChapterPage, getCurrentChapterPage };
|
|
};
|