frontend/hooks/use-reading-tracker.ts

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 };
};