Skip to content

Commit 9a733ab

Browse files
06-effects crud complete
1 parent 626bf67 commit 9a733ab

File tree

3 files changed

+67
-5
lines changed

3 files changed

+67
-5
lines changed

src/app/books/actions/books-api.actions.ts

+25-1
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,9 @@ import { Action } from "@ngrx/store";
33

44
export enum BooksApiActionTypes {
55
BooksLoaded = '[Books API] Books Loaded Success',
6+
BookCreated = '[Books API] Book Created',
7+
BookUpdated = '[Books API] Book Updated',
8+
BookDeleted = '[Books API] Book Deleted',
69
}
710

811
export class BooksLoaded implements Action {
@@ -11,5 +14,26 @@ export class BooksLoaded implements Action {
1114
constructor(public books: Book[]) {}
1215
}
1316

17+
export class BookCreated implements Action {
18+
readonly type = BooksApiActionTypes.BookCreated;
19+
20+
constructor(public book: Book) {}
21+
}
22+
23+
export class BookUpdated implements Action {
24+
readonly type = BooksApiActionTypes.BookUpdated;
25+
26+
constructor(public book: Book) {}
27+
}
28+
29+
export class BookDeleted implements Action {
30+
readonly type = BooksApiActionTypes.BookDeleted;
31+
32+
constructor(public book: Book) {}
33+
}
34+
1435
export type BooksApiActions =
15-
| BooksLoaded;
36+
| BooksLoaded
37+
| BookCreated
38+
| BookUpdated
39+
| BookDeleted;

src/app/books/books-api.effects.ts

+36
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,42 @@ export class BooksApiEffects {
2020
)
2121
);
2222

23+
@Effect()
24+
createBook$ = this.actions$.pipe(
25+
ofType(BooksPageActions.BooksActionTypes.CreateBook),
26+
mergeMap(action =>
27+
this.booksService.create(action.book)
28+
.pipe(
29+
map(book => new BooksApiActions.BookCreated(book)),
30+
catchError(() => EMPTY)
31+
)
32+
)
33+
);
34+
35+
@Effect()
36+
updateBook$ = this.actions$.pipe(
37+
ofType(BooksPageActions.BooksActionTypes.UpdateBook),
38+
mergeMap(action =>
39+
this.booksService.update(action.book.id, action.book)
40+
.pipe(
41+
map(book => new BooksApiActions.BookUpdated(book)),
42+
catchError(() => EMPTY)
43+
)
44+
)
45+
);
46+
47+
@Effect()
48+
deleteBook$ = this.actions$.pipe(
49+
ofType(BooksPageActions.BooksActionTypes.DeleteBook),
50+
mergeMap(action =>
51+
this.booksService.delete(action.book.id)
52+
.pipe(
53+
map(() => new BooksApiActions.BookDeleted(action.book)),
54+
catchError(() => EMPTY)
55+
)
56+
)
57+
);
58+
2359
constructor(
2460
private booksService: BooksService,
2561
private actions$: Actions<BooksPageActions.BooksActions | BooksApiActions.BooksApiActions>

src/app/shared/state/books.reducer.ts

+6-4
Original file line numberDiff line numberDiff line change
@@ -44,18 +44,20 @@ export function reducer(state = initialState, action: BooksPageActions.BooksActi
4444
...state,
4545
activeBookId: action.bookId
4646
};
47+
4748
case BooksPageActions.BooksActionTypes.ClearSelectedBook:
4849
return {
4950
...state,
5051
activeBookId: null
5152
};
52-
case BooksPageActions.BooksActionTypes.CreateBook:
53-
return adapter.addOne(action.book, state);
5453

55-
case BooksPageActions.BooksActionTypes.UpdateBook:
54+
case BooksApiActions.BooksApiActionTypes.BookCreated:
55+
return adapter.addOne(action.book, {...state, activeBookId: action.book.id});
56+
57+
case BooksApiActions.BooksApiActionTypes.BookUpdated:
5658
return adapter.updateOne({id: action.book.id, changes: action.book}, {...state, activeBookId: action.book.id});
5759

58-
case BooksPageActions.BooksActionTypes.DeleteBook:
60+
case BooksApiActions.BooksApiActionTypes.BookDeleted:
5961
return adapter.removeOne(action.book.id, {...state, activeBookId: null});
6062

6163
default:

0 commit comments

Comments
 (0)