@@ -13,44 +13,35 @@ export const FormManageCollectionBooks: React.FC<{
1313 onSubmitAction : ( v : string [ ] ) => Promise < string >
1414 books : Book [ ]
1515} > = ( { initialBooks, initialBookIDs, onSubmitAction, books } ) => {
16- const [ selectedBookIDs , setSelectedBookIDs ] = useState < Set < string > > (
17- new Set ( initialBookIDs )
16+ const [ selectedBooks , setSelectedBooks ] = useState < Map < string , Book > > (
17+ new Map ( initialBooks . map ( ( book ) => [ book . id , book ] ) )
1818 )
1919
20- // Combine initial books with fetched books, avoiding duplicates
21- const allBooks = useMemo ( ( ) => {
22- const initialBookIds = new Set ( initialBooks . map ( ( b ) => b . id ) )
23- const uniqueFetchedBooks = books . filter (
24- ( book ) => ! initialBookIds . has ( book . id )
25- )
26- return initialBooks . concat ( uniqueFetchedBooks )
27- } , [ initialBooks , books ] )
28-
29- const selectedBooks = useMemo (
30- ( ) => allBooks . filter ( ( book ) => selectedBookIDs . has ( book . id ) ) ,
31- [ allBooks , selectedBookIDs ]
20+ const selectedBooksArray = useMemo (
21+ ( ) => Array . from ( selectedBooks . values ( ) ) ,
22+ [ selectedBooks ]
3223 )
3324
3425 const unselectedBooks = useMemo (
35- ( ) => allBooks . filter ( ( book ) => ! selectedBookIDs . has ( book . id ) ) ,
36- [ allBooks , selectedBookIDs ]
26+ ( ) => books . filter ( ( book ) => ! selectedBooks . has ( book . id ) ) ,
27+ [ books , selectedBooks ]
3728 )
3829
39- const toggleBookSelection = ( bookId : string ) => {
30+ const toggleBookSelection = ( book : Book ) => {
4031 startTransition ( ( ) =>
41- setSelectedBookIDs ( ( prev ) => {
42- const next = new Set ( prev )
43- if ( next . has ( bookId ) ) {
44- next . delete ( bookId )
32+ setSelectedBooks ( ( prev ) => {
33+ const next = new Map ( prev )
34+ if ( next . has ( book . id ) ) {
35+ next . delete ( book . id )
4536 } else {
46- next . add ( bookId )
37+ next . set ( book . id , book )
4738 }
4839 return next
4940 } )
5041 )
5142 }
5243
53- const selectedBookIDsArray = Array . from ( selectedBookIDs )
44+ const selectedBookIDsArray = selectedBooksArray . map ( ( book ) => book . id )
5445 const hasSameNumber = initialBookIDs . length === selectedBookIDsArray . length
5546 const hasEveryBook = initialBookIDs . every ( ( id ) =>
5647 selectedBookIDsArray . includes ( id )
@@ -63,7 +54,7 @@ export const FormManageCollectionBooks: React.FC<{
6354 }
6455
6556 const deselectAll = ( ) => {
66- setSelectedBookIDs ( new Set ( ) )
57+ setSelectedBooks ( new Map ( ) )
6758 }
6859
6960 return (
@@ -72,21 +63,21 @@ export const FormManageCollectionBooks: React.FC<{
7263 < Button
7364 variant = "outline"
7465 onClick = { deselectAll }
75- disabled = { selectedBookIDs . size === 0 }
66+ disabled = { selectedBooks . size === 0 }
7667 className = "h-full"
7768 >
7869 < X className = "mr-2 h-4 w-4" />
79- Deselect All ({ selectedBookIDs . size } )
70+ Deselect All ({ selectedBooks . size } )
8071 </ Button >
8172 < Button onClick = { onSubmit } className = "h-full" disabled = { isNoChange } >
8273 < Plus className = "mr-2 h-4 w-4" />
83- Save Selection ({ selectedBookIDs . size } )
74+ Save Selection ({ selectedBooks . size } )
8475 </ Button >
8576 </ div >
8677
87- { selectedBooks . length > 0 && (
78+ { selectedBooksArray . length > 0 && (
8879 < div className = "flex items-end overflow-x-scroll p-6 isolate" >
89- { selectedBooks . map ( ( b ) => (
80+ { selectedBooksArray . map ( ( b ) => (
9081 < SelectedBook
9182 key = { b . id }
9283 book = { b }
0 commit comments