@@ -3,7 +3,7 @@ import { Book } from 'src/app/shared/models/book.model';
33import { BooksPageActions } from 'src/app/books/actions' ;
44
55
6- const initialBooks : Book [ ] = [
6+ export const initialBooks : Book [ ] = [
77 {
88 id : "1" ,
99 name : "Fellowship of the Ring" ,
@@ -24,50 +24,42 @@ const initialBooks: Book[] = [
2424 } ,
2525] ;
2626
27- const createBook = ( books : Book [ ] , book : Book ) => [ ...books , book ] ;
28- const updateBook = ( books : Book [ ] , book : Book ) => books . map ( w => {
29- return w . id === book . id ? Object . assign ( { } , book ) : w ;
30- } ) ;
31- const deleteBook = ( books : Book [ ] , book : Book ) => books . filter ( w => book . id !== w . id ) ;
32-
33- export interface State {
27+ export interface State extends EntityState < Book > {
3428 activeBookId : string | null ;
35- books : Book [ ] ;
3629}
3730
38- export const initialState = {
39- activeBookId : null ,
40- books : initialBooks
41- } ;
31+ export const adapter = createEntityAdapter < Book > ( ) ;
32+
33+ export const initialState = adapter . getInitialState ( {
34+ activeBookId : null
35+ } ) ;
4236
4337export function reducer ( state = initialState , action : BooksPageActions . BooksActions ) : State {
4438 switch ( action . type ) {
39+ case BooksPageActions . BooksActionTypes . Enter :
40+ return adapter . addAll ( initialBooks , state ) ;
41+
4542 case BooksPageActions . BooksActionTypes . SelectBook :
4643 return {
47- activeBookId : action . bookId ,
48- books : state . books
44+ ... state ,
45+ activeBookId : action . bookId
4946 } ;
5047 case BooksPageActions . BooksActionTypes . ClearSelectedBook :
5148 return {
52- activeBookId : null ,
53- books : state . books
49+ ... state ,
50+ activeBookId : null
5451 } ;
5552 case BooksPageActions . BooksActionTypes . CreateBook :
56- return {
57- activeBookId : state . activeBookId ,
58- books : createBook ( state . books , action . book )
59- } ;
53+ return adapter . addOne ( action . book , state ) ;
54+
6055 case BooksPageActions . BooksActionTypes . UpdateBook :
61- return {
62- activeBookId : state . activeBookId ,
63- books : updateBook ( state . books , action . book )
64- } ;
56+ return adapter . updateOne ( { id : action . book . id , changes : action . book } , { ...state , activeBookId : action . book . id } ) ;
57+
6558 case BooksPageActions . BooksActionTypes . DeleteBook :
66- return {
67- activeBookId : null ,
68- books : deleteBook ( state . books , action . book )
69- } ;
59+ return adapter . removeOne ( action . book . id , { ...state , activeBookId : null } ) ;
60+
7061 default :
7162 return state ;
7263 }
73- }
64+ }
65+
0 commit comments