Skip to content

Commit b9a5c11

Browse files
02-actions complete
1 parent 645f68e commit b9a5c11

File tree

3 files changed

+61
-13
lines changed

3 files changed

+61
-13
lines changed
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,46 @@
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
46+
;

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

Lines changed: 9 additions & 7 deletions
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',
@@ -22,7 +23,8 @@ export class BooksPageComponent implements OnInit {
2223
) {
2324
this.books$ = this.store.pipe(
2425
select(state => state.books),
25-
map(booksState => booksState.books)
26+
map(booksState => booksState.books),
27+
tap(books => this.updateTotals(books))
2628
);
2729
}
2830

@@ -42,7 +44,7 @@ export class BooksPageComponent implements OnInit {
4244
}
4345

4446
onSelect(book: Book) {
45-
this.store.dispatch({ type: 'select', bookId: book.id });
47+
this.store.dispatch(new BooksPageActions.SelectBook(book.id));
4648
this.currentBook = book;
4749
}
4850

@@ -51,7 +53,7 @@ export class BooksPageComponent implements OnInit {
5153
}
5254

5355
removeSelectedBook() {
54-
this.store.dispatch({ type: 'clear select' });
56+
this.store.dispatch(new BooksPageActions.ClearSelectedBook());
5557
this.currentBook = null;
5658
}
5759

@@ -64,14 +66,14 @@ export class BooksPageComponent implements OnInit {
6466
}
6567

6668
saveBook(book: Book) {
67-
this.store.dispatch({ type: 'create', book });
69+
this.store.dispatch(new BooksPageActions.CreateBook(book));
6870
}
6971

7072
updateBook(book: Book) {
71-
this.store.dispatch({ type: 'update', book });
73+
this.store.dispatch(new BooksPageActions.UpdateBook(book));
7274
}
7375

7476
onDelete(book: Book) {
75-
this.store.dispatch({ type: 'delete', book });
77+
this.store.dispatch(new BooksPageActions.DeleteBook(book));
7678
}
7779
}

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

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
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';
4+
35

46
const initialBooks: Book[] = [
57
{
@@ -38,29 +40,29 @@ export const initialState = {
3840
books: initialBooks
3941
};
4042

41-
export function reducer(state = initialState, action: any): State {
43+
export function reducer(state = initialState, action: BooksPageActions.BooksActions): State {
4244
switch(action.type) {
43-
case 'select':
45+
case BooksPageActions.BooksActionTypes.SelectBook:
4446
return {
4547
activeBookId: action.bookId,
4648
books: state.books
4749
};
48-
case 'clear select':
50+
case BooksPageActions.BooksActionTypes.ClearSelectedBook:
4951
return {
5052
activeBookId: null,
5153
books: state.books
5254
};
53-
case 'create':
55+
case BooksPageActions.BooksActionTypes.CreateBook:
5456
return {
5557
activeBookId: state.activeBookId,
5658
books: createBook(state.books, action.book)
5759
};
58-
case 'update':
60+
case BooksPageActions.BooksActionTypes.UpdateBook:
5961
return {
6062
activeBookId: state.activeBookId,
6163
books: updateBook(state.books, action.book)
6264
};
63-
case 'delete':
65+
case BooksPageActions.BooksActionTypes.DeleteBook:
6466
return {
6567
activeBookId: null,
6668
books: deleteBook(state.books, action.book)

0 commit comments

Comments
 (0)