File tree Expand file tree Collapse file tree 5 files changed +49
-6
lines changed Expand file tree Collapse file tree 5 files changed +49
-6
lines changed Original file line number Diff line number Diff line change 11import { Book } from "src/app/shared/models/book.model" ;
22import { Action } from "@ngrx/store" ;
3+
4+ export enum BooksApiActionTypes {
5+ BooksLoaded = '[Books API] Books Loaded Success' ,
6+ }
7+
8+ export class BooksLoaded implements Action {
9+ readonly type = BooksApiActionTypes . BooksLoaded ;
10+
11+ constructor ( public books : Book [ ] ) { }
12+ }
13+
14+ export type BooksApiActions =
15+ | BooksLoaded ;
Original file line number Diff line number Diff line change 1+ import { Injectable } from "@angular/core" ;
2+ import { Effect , Actions , ofType } from "@ngrx/effects" ;
3+ import { BooksPageActions , BooksApiActions } from "./actions" ;
4+ import { BooksService } from "../shared/services/book.service" ;
5+ import { mergeMap , map , catchError } from "rxjs/operators" ;
6+ import { EMPTY } from "rxjs" ;
7+
8+ @Injectable ( )
9+ export class BooksApiEffects {
10+ @Effect ( )
11+ loadBooks$ = this . actions$ . pipe (
12+ ofType ( BooksPageActions . BooksActionTypes . Enter ) ,
13+ mergeMap ( ( ) =>
14+ this . booksService . all ( ) . pipe (
15+ map ( books => new BooksApiActions . BooksLoaded ( books ) ) ,
16+ catchError ( ( ) => EMPTY )
17+ )
18+ )
19+ ) ;
20+
21+ constructor (
22+ private booksService : BooksService ,
23+ private actions$ : Actions <
24+ BooksPageActions . BooksActions | BooksApiActions . BooksApiActions
25+ >
26+ ) { }
27+ }
Original file line number Diff line number Diff line change @@ -10,12 +10,16 @@ import { BookDetailComponent } from "./components/book-detail/book-detail.compon
1010import { BooksListComponent } from "./components/books-list/books-list.component" ;
1111import { BooksTotalComponent } from "./components/books-total/books-total.component" ;
1212
13+ import { EffectsModule } from "@ngrx/effects" ;
14+ import { BooksApiEffects } from "./books-api.effects" ;
15+
1316@NgModule ( {
1417 imports : [
1518 CommonModule ,
1619 ReactiveFormsModule ,
1720 MaterialModule ,
18- RouterModule . forChild ( [ { path : "books" , component : BooksPageComponent } ] )
21+ RouterModule . forChild ( [ { path : "books" , component : BooksPageComponent } ] ) ,
22+ EffectsModule . forFeature ( [ BooksApiEffects ] )
1923 ] ,
2024 declarations : [
2125 BooksPageComponent ,
Original file line number Diff line number Diff line change @@ -5,7 +5,6 @@ import { Book } from "src/app/shared/models/book.model";
55import { Observable } from "rxjs" ;
66import { Store , select } from "@ngrx/store" ;
77import * as fromRoot from "src/app/shared/state" ;
8- import { map , tap } from "rxjs/operators" ;
98import { BooksPageActions } from "../../actions" ;
109
1110@Component ( {
Original file line number Diff line number Diff line change 11import { createEntityAdapter , EntityAdapter , EntityState } from "@ngrx/entity" ;
22import { Book } from "src/app/shared/models/book.model" ;
3- import { BooksPageActions } from "src/app/books/actions" ;
3+ import { BooksPageActions , BooksApiActions } from "src/app/books/actions" ;
44import { createSelector } from "@ngrx/store" ;
55
66export const initialBooks : Book [ ] = [
@@ -36,11 +36,11 @@ export const initialState = adapter.getInitialState({
3636
3737export function reducer (
3838 state = initialState ,
39- action : BooksPageActions . BooksActions
39+ action : BooksPageActions . BooksActions | BooksApiActions . BooksApiActions
4040) : State {
4141 switch ( action . type ) {
42- case BooksPageActions . BooksActionTypes . Enter :
43- return adapter . addAll ( initialBooks , state ) ;
42+ case BooksApiActions . BooksApiActionTypes . BooksLoaded :
43+ return adapter . addAll ( action . books , state ) ;
4444
4545 case BooksPageActions . BooksActionTypes . SelectBook :
4646 return {
You can’t perform that action at this time.
0 commit comments