1- import { createContext , useContext , useState , useEffect , useCallback , useMemo , useRef } from "react" ;
1+ import { createContext , useContext , useState , useEffect , useCallback , useMemo } from "react" ;
22import type { BookData } from "../utils/bookData" ;
33import { bookData as initialBookData } from "../utils/bookData" ;
44import { convertDataSet } from "../utils/convertDataSet" ;
@@ -20,8 +20,6 @@ export function BookCacheProvider({ children }: { children: React.ReactNode }) {
2020 const [ books , setBooks ] = useState < Map < string , BookData > > ( new Map ( ) ) ;
2121 const [ loading , setLoading ] = useState ( true ) ;
2222
23- const booksRef = useRef < Map < string , BookData > > ( new Map ( ) ) ;
24-
2523 const normalizeBook = useCallback ( async ( book : BookData | any ) : Promise < BookData > => {
2624 if ( book . id && book . title && book . author && typeof book . publishedYear === 'number' ) {
2725 return {
@@ -82,7 +80,6 @@ export function BookCacheProvider({ children }: { children: React.ReactNode }) {
8280 }
8381 } ) ;
8482
85- booksRef . current = bookMap ;
8683 setBooks ( bookMap ) ;
8784 saveToStorage ( bookMap ) ;
8885 } catch ( error ) {
@@ -93,7 +90,6 @@ export function BookCacheProvider({ children }: { children: React.ReactNode }) {
9390 initialNormalized . forEach ( ( book ) => {
9491 bookMap . set ( book . id , book ) ;
9592 } ) ;
96- booksRef . current = bookMap ;
9793 setBooks ( bookMap ) ;
9894 saveToStorage ( bookMap ) ;
9995 } finally {
@@ -102,34 +98,30 @@ export function BookCacheProvider({ children }: { children: React.ReactNode }) {
10298 } ) ( ) ;
10399 } , [ normalizeBook , saveToStorage ] ) ;
104100
105- useEffect ( ( ) => {
106- booksRef . current = books ;
107- } , [ books ] ) ;
108-
109101 const getBook = useCallback ( ( bookId : string ) : BookData | undefined => {
110- return booksRef . current . get ( bookId ) ;
111- } , [ ] ) ;
102+ return books ? .get ( bookId ) ;
103+ } , [ books ] ) ;
112104
113105 const getBooks = useCallback ( ( bookIds ?: string [ ] ) : BookData [ ] => {
114- const currentBooks = booksRef . current ;
106+ const currentBooks = books ;
115107 if ( ! bookIds ) {
116108 return Array . from ( currentBooks . values ( ) ) ;
117109 }
118110 return bookIds
119111 . map ( ( id ) => currentBooks . get ( id ) )
120112 . filter ( ( book ) : book is BookData => book !== undefined ) ;
121- } , [ ] ) ;
113+ } , [ books ] ) ;
122114
123115 const hasBook = useCallback ( ( bookId : string ) : boolean => {
124- return booksRef . current . has ( bookId ) ;
125- } , [ ] ) ;
116+ return books . has ( bookId ) ;
117+ } , [ books ] ) ;
126118
127119 const addBook = useCallback ( async ( book : BookData | any ) => {
128120 const normalized = await normalizeBook ( book ) ;
129121 setBooks ( ( prev ) => {
130122 const updated = new Map ( prev ) ;
131123 updated . set ( normalized . id , normalized ) ;
132- booksRef . current = updated ;
124+ setBooks ( updated ) ;
133125 saveToStorage ( updated ) ;
134126 return updated ;
135127 } ) ;
@@ -138,13 +130,12 @@ export function BookCacheProvider({ children }: { children: React.ReactNode }) {
138130 const addBooks = useCallback ( async ( booksToAdd : ( BookData | any ) [ ] ) : Promise < BookData [ ] > => {
139131 const normalizedPromises = booksToAdd . map ( ( book ) => normalizeBook ( book ) ) ;
140132 const normalizedBooks = await Promise . all ( normalizedPromises ) ;
141- const updated = new Map ( booksRef . current ) ;
133+ const updated = new Map ( books ) ;
142134
143135 normalizedBooks . forEach ( ( book ) => {
144136 updated . set ( book . id , book ) ;
145137 } ) ;
146-
147- booksRef . current = updated ;
138+
148139 setBooks ( updated ) ;
149140 saveToStorage ( updated ) ;
150141
@@ -158,7 +149,6 @@ export function BookCacheProvider({ children }: { children: React.ReactNode }) {
158149 normalized . forEach ( ( book ) => {
159150 bookMap . set ( book . id , book ) ;
160151 } ) ;
161- booksRef . current = bookMap ;
162152 setBooks ( bookMap ) ;
163153 saveToStorage ( bookMap ) ;
164154 } , [ normalizeBook , saveToStorage ] ) ;
0 commit comments