@@ -2,7 +2,7 @@ import { createEntityAdapter, EntityAdapter, EntityState } from "@ngrx/entity";
2
2
import { Book } from "src/app/shared/models/book.model" ;
3
3
import { BooksPageActions } from "src/app/books/actions" ;
4
4
5
- const initialBooks : Book [ ] = [
5
+ export const initialBooks : Book [ ] = [
6
6
{
7
7
id : "1" ,
8
8
name : "Fellowship of the Ring" ,
@@ -23,54 +23,51 @@ const initialBooks: Book[] = [
23
23
}
24
24
] ;
25
25
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 > {
35
27
activeBookId : string | null ;
36
- books : Book [ ] ;
37
28
}
38
29
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
+ } ) ;
43
35
44
36
export function reducer (
45
37
state = initialState ,
46
38
action : BooksPageActions . BooksActions
47
39
) : State {
48
40
switch ( action . type ) {
41
+ case BooksPageActions . BooksActionTypes . Enter :
42
+ return adapter . addAll ( initialBooks , state ) ;
43
+
49
44
case BooksPageActions . BooksActionTypes . SelectBook :
50
45
return {
51
- activeBookId : action . bookId ,
52
- books : state . books
46
+ ... state ,
47
+ activeBookId : action . bookId
53
48
} ;
49
+
54
50
case BooksPageActions . BooksActionTypes . ClearSelectedBook :
55
51
return {
56
- activeBookId : null ,
57
- books : state . books
52
+ ... state ,
53
+ activeBookId : null
58
54
} ;
55
+
59
56
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
+
64
59
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
+
69
65
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
+
74
71
default :
75
72
return state ;
76
73
}
0 commit comments