Skip to content

Commit 048f388

Browse files
brandonrobertsMikeRyanDev
authored andcommitted
02-actions complete
1 parent c785826 commit 048f388

File tree

3 files changed

+62
-13
lines changed

3 files changed

+62
-13
lines changed
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,45 @@
11
import { Book } from "src/app/shared/models/book.model";
22
import { Action } from "@ngrx/store";
3+
4+
export enum BooksActionTypes {
5+
SelectBook = "[Books Page] Select Book",
6+
ClearSelectedBook = "[Books Page] Clear Selected Book",
7+
CreateBook = "[Books Page] Create Book",
8+
UpdateBook = "[Books Page] Update Book",
9+
DeleteBook = "[Books Page] Delete Book"
10+
}
11+
12+
export class SelectBook implements Action {
13+
readonly type = BooksActionTypes.SelectBook;
14+
15+
constructor(public bookId: string) {}
16+
}
17+
18+
export class ClearSelectedBook implements Action {
19+
readonly type = BooksActionTypes.ClearSelectedBook;
20+
}
21+
22+
export class CreateBook implements Action {
23+
readonly type = BooksActionTypes.CreateBook;
24+
25+
constructor(public book: Book) {}
26+
}
27+
28+
export class UpdateBook implements Action {
29+
readonly type = BooksActionTypes.UpdateBook;
30+
31+
constructor(public book: Book) {}
32+
}
33+
34+
export class DeleteBook implements Action {
35+
readonly type = BooksActionTypes.DeleteBook;
36+
37+
constructor(public book: Book) {}
38+
}
39+
40+
export type BooksActions =
41+
| SelectBook
42+
| ClearSelectedBook
43+
| CreateBook
44+
| UpdateBook
45+
| DeleteBook;

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

+9-7
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@ import { Book } from "src/app/shared/models/book.model";
55
import { Observable } from "rxjs";
66
import { Store, select } from "@ngrx/store";
77
import * as fromRoot from "src/app/shared/state";
8-
import { map } from "rxjs/operators";
8+
import { map, tap } from "rxjs/operators";
9+
import { BooksPageActions } from "../../actions";
910

1011
@Component({
1112
selector: "app-books",
@@ -20,7 +21,8 @@ export class BooksPageComponent implements OnInit {
2021
constructor(private store: Store<fromRoot.State>) {
2122
this.books$ = this.store.pipe(
2223
select(state => state.books),
23-
map(booksState => booksState.books)
24+
map(booksState => booksState.books),
25+
tap(books => this.updateTotals(books))
2426
);
2527
}
2628

@@ -40,7 +42,7 @@ export class BooksPageComponent implements OnInit {
4042
}
4143

4244
onSelect(book: Book) {
43-
this.store.dispatch({ type: "select", bookId: book.id });
45+
this.store.dispatch(new BooksPageActions.SelectBook(book.id));
4446
this.currentBook = book;
4547
}
4648

@@ -49,7 +51,7 @@ export class BooksPageComponent implements OnInit {
4951
}
5052

5153
removeSelectedBook() {
52-
this.store.dispatch({ type: "clear select" });
54+
this.store.dispatch(new BooksPageActions.ClearSelectedBook());
5355
this.currentBook = null;
5456
}
5557

@@ -62,14 +64,14 @@ export class BooksPageComponent implements OnInit {
6264
}
6365

6466
saveBook(book: Book) {
65-
this.store.dispatch({ type: "create", book });
67+
this.store.dispatch(new BooksPageActions.CreateBook(book));
6668
}
6769

6870
updateBook(book: Book) {
69-
this.store.dispatch({ type: "update", book });
71+
this.store.dispatch(new BooksPageActions.UpdateBook(book));
7072
}
7173

7274
onDelete(book: Book) {
73-
this.store.dispatch({ type: "delete", book });
75+
this.store.dispatch(new BooksPageActions.DeleteBook(book));
7476
}
7577
}

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

+10-6
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { createEntityAdapter, EntityAdapter, EntityState } from "@ngrx/entity";
22
import { Book } from "src/app/shared/models/book.model";
3+
import { BooksPageActions } from "src/app/books/actions";
34

45
const initialBooks: Book[] = [
56
{
@@ -40,29 +41,32 @@ export const initialState = {
4041
books: initialBooks
4142
};
4243

43-
export function reducer(state = initialState, action: any): State {
44+
export function reducer(
45+
state = initialState,
46+
action: BooksPageActions.BooksActions
47+
): State {
4448
switch (action.type) {
45-
case "select":
49+
case BooksPageActions.BooksActionTypes.SelectBook:
4650
return {
4751
activeBookId: action.bookId,
4852
books: state.books
4953
};
50-
case "clear select":
54+
case BooksPageActions.BooksActionTypes.ClearSelectedBook:
5155
return {
5256
activeBookId: null,
5357
books: state.books
5458
};
55-
case "create":
59+
case BooksPageActions.BooksActionTypes.CreateBook:
5660
return {
5761
activeBookId: state.activeBookId,
5862
books: createBook(state.books, action.book)
5963
};
60-
case "update":
64+
case BooksPageActions.BooksActionTypes.UpdateBook:
6165
return {
6266
activeBookId: state.activeBookId,
6367
books: updateBook(state.books, action.book)
6468
};
65-
case "delete":
69+
case BooksPageActions.BooksActionTypes.DeleteBook:
6670
return {
6771
activeBookId: null,
6872
books: deleteBook(state.books, action.book)

0 commit comments

Comments
 (0)