@@ -2,7 +2,7 @@ import { createEntityAdapter, EntityAdapter, EntityState } from "@ngrx/entity";
22import { Book } from "src/app/shared/models/book.model" ;
33import { BooksPageActions } from "src/app/books/actions" ;
44
5- const initialBooks : Book [ ] = [
5+ export const initialBooks : Book [ ] = [
66 {
77 id : "1" ,
88 name : "Fellowship of the Ring" ,
@@ -23,54 +23,51 @@ const initialBooks: Book[] = [
2323 }
2424] ;
2525
26- const createBook = ( books : Book [ ] , book : Book ) => [ ...books , book ] ;
27- const updateBook = ( books : Book [ ] , book : Book ) =>
28- books . map ( w => {
29- return w . id === book . id ? Object . assign ( { } , book ) : w ;
30- } ) ;
31- const deleteBook = ( books : Book [ ] , book : Book ) =>
32- books . filter ( w => book . id !== w . id ) ;
33-
34- export interface State {
26+ export interface State extends EntityState < Book > {
3527 activeBookId : string | null ;
36- books : Book [ ] ;
3728}
3829
39- export const initialState = {
40- activeBookId : null ,
41- books : initialBooks
42- } ;
30+ export const adapter = createEntityAdapter < Book > ( ) ;
31+
32+ export const initialState = adapter . getInitialState ( {
33+ activeBookId : null
34+ } ) ;
4335
4436export function reducer (
4537 state = initialState ,
4638 action : BooksPageActions . BooksActions
4739) : State {
4840 switch ( action . type ) {
41+ case BooksPageActions . BooksActionTypes . Enter :
42+ return adapter . addAll ( initialBooks , state ) ;
43+
4944 case BooksPageActions . BooksActionTypes . SelectBook :
5045 return {
51- activeBookId : action . bookId ,
52- books : state . books
46+ ... state ,
47+ activeBookId : action . bookId
5348 } ;
49+
5450 case BooksPageActions . BooksActionTypes . ClearSelectedBook :
5551 return {
56- activeBookId : null ,
57- books : state . books
52+ ... state ,
53+ activeBookId : null
5854 } ;
55+
5956 case BooksPageActions . BooksActionTypes . CreateBook :
60- return {
61- activeBookId : state . activeBookId ,
62- books : createBook ( state . books , action . book )
63- } ;
57+ return adapter . addOne ( action . book , state ) ;
58+
6459 case BooksPageActions . BooksActionTypes . UpdateBook :
65- return {
66- activeBookId : state . activeBookId ,
67- books : updateBook ( state . books , action . book )
68- } ;
60+ return adapter . updateOne (
61+ { id : action . book . id , changes : action . book } ,
62+ { ...state , activeBookId : action . book . id }
63+ ) ;
64+
6965 case BooksPageActions . BooksActionTypes . DeleteBook :
70- return {
71- activeBookId : null ,
72- books : deleteBook ( state . books , action . book )
73- } ;
66+ return adapter . removeOne ( action . book . id , {
67+ ...state ,
68+ activeBookId : null
69+ } ) ;
70+
7471 default :
7572 return state ;
7673 }
0 commit comments