Skip to content

Commit 12babe3

Browse files
committed
10-more-effects
1 parent 587f964 commit 12babe3

File tree

2 files changed

+34
-21
lines changed

2 files changed

+34
-21
lines changed

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

Lines changed: 32 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { Injectable } from "@angular/core";
22
import { Effect, Actions, ofType } from "@ngrx/effects";
3-
import { mergeMap, map } from "rxjs/operators";
3+
import { mergeMap, map, exhaustMap, concatMap } from "rxjs/operators";
44
import { BooksService } from "../shared/services/book.service";
55
import { BooksPageActions, BooksApiActions } from "./actions";
66

@@ -9,12 +9,42 @@ export class BooksApiEffects {
99
@Effect()
1010
loadBooks$ = this.actions$.pipe(
1111
ofType(BooksPageActions.enter),
12-
mergeMap(() =>
12+
exhaustMap(() =>
1313
this.booksService
1414
.all()
1515
.pipe(map(books => BooksApiActions.booksLoaded({ books })))
1616
)
1717
);
1818

19+
@Effect()
20+
createBook$ = this.actions$.pipe(
21+
ofType(BooksPageActions.createBook),
22+
mergeMap(action =>
23+
this.booksService
24+
.create(action.book)
25+
.pipe(map(book => BooksApiActions.bookCreated({ book })))
26+
)
27+
);
28+
29+
@Effect()
30+
updateBook$ = this.actions$.pipe(
31+
ofType(BooksPageActions.updateBook),
32+
concatMap(action =>
33+
this.booksService
34+
.update(action.bookId, action.changes)
35+
.pipe(map(book => BooksApiActions.bookUpdated({ book })))
36+
)
37+
);
38+
39+
@Effect()
40+
deleteBook$ = this.actions$.pipe(
41+
ofType(BooksPageActions.deleteBook),
42+
mergeMap(action =>
43+
this.booksService
44+
.delete(action.bookId)
45+
.pipe(map(() => BooksApiActions.bookDeleted({ bookId: action.bookId })))
46+
)
47+
);
48+
1949
constructor(private booksService: BooksService, private actions$: Actions) {}
2050
}

src/app/books/components/books-page/books-page.component.ts

Lines changed: 2 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,7 @@ import {
88
selectBooksEarningsTotals
99
} from "src/app/shared/state";
1010
import { BookModel, BookRequiredProps } from "src/app/shared/models/book.model";
11-
import { BooksService } from "src/app/shared/services/book.service";
12-
import { BooksPageActions, BooksApiActions } from "../../actions";
11+
import { BooksPageActions } from "../../actions";
1312

1413
@Component({
1514
selector: "app-books",
@@ -21,7 +20,7 @@ export class BooksPageComponent implements OnInit {
2120
currentBook$: Observable<BookModel | null>;
2221
total$: Observable<number>;
2322

24-
constructor(private booksService: BooksService, private store: Store<State>) {
23+
constructor(private store: Store<State>) {
2524
this.books$ = store.select(selectAllBooks);
2625
this.currentBook$ = store.select(selectActiveBook);
2726
this.total$ = store.select(selectBooksEarningsTotals);
@@ -53,31 +52,15 @@ export class BooksPageComponent implements OnInit {
5352

5453
saveBook(bookProps: BookRequiredProps) {
5554
this.store.dispatch(BooksPageActions.createBook({ book: bookProps }));
56-
57-
this.booksService.create(bookProps).subscribe(book => {
58-
this.removeSelectedBook();
59-
60-
this.store.dispatch(BooksApiActions.bookCreated({ book }));
61-
});
6255
}
6356

6457
updateBook(book: BookModel) {
6558
this.store.dispatch(
6659
BooksPageActions.updateBook({ bookId: book.id, changes: book })
6760
);
68-
69-
this.booksService.update(book.id, book).subscribe(book => {
70-
this.store.dispatch(BooksApiActions.bookUpdated({ book }));
71-
});
7261
}
7362

7463
onDelete(book: BookModel) {
7564
this.store.dispatch(BooksPageActions.deleteBook({ bookId: book.id }));
76-
77-
this.booksService.delete(book.id).subscribe(() => {
78-
this.removeSelectedBook();
79-
80-
this.store.dispatch(BooksApiActions.bookDeleted({ bookId: book.id }));
81-
});
8265
}
8366
}

0 commit comments

Comments
 (0)