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