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 1
1
import { Book } from "src/app/shared/models/book.model" ;
2
2
import { 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
10
10
import { BooksListComponent } from "./components/books-list/books-list.component" ;
11
11
import { BooksTotalComponent } from "./components/books-total/books-total.component" ;
12
12
13
+ import { EffectsModule } from "@ngrx/effects" ;
14
+ import { BooksApiEffects } from "./books-api.effects" ;
15
+
13
16
@NgModule ( {
14
17
imports : [
15
18
CommonModule ,
16
19
ReactiveFormsModule ,
17
20
MaterialModule ,
18
- RouterModule . forChild ( [ { path : "books" , component : BooksPageComponent } ] )
21
+ RouterModule . forChild ( [ { path : "books" , component : BooksPageComponent } ] ) ,
22
+ EffectsModule . forFeature ( [ BooksApiEffects ] )
19
23
] ,
20
24
declarations : [
21
25
BooksPageComponent ,
Original file line number Diff line number Diff line change @@ -5,7 +5,6 @@ import { Book } from "src/app/shared/models/book.model";
5
5
import { Observable } from "rxjs" ;
6
6
import { Store , select } from "@ngrx/store" ;
7
7
import * as fromRoot from "src/app/shared/state" ;
8
- import { map , tap } from "rxjs/operators" ;
9
8
import { BooksPageActions } from "../../actions" ;
10
9
11
10
@Component ( {
Original file line number Diff line number Diff line change 1
1
import { createEntityAdapter , EntityAdapter , EntityState } from "@ngrx/entity" ;
2
2
import { 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" ;
4
4
import { createSelector } from "@ngrx/store" ;
5
5
6
6
export const initialBooks : Book [ ] = [
@@ -36,11 +36,11 @@ export const initialState = adapter.getInitialState({
36
36
37
37
export function reducer (
38
38
state = initialState ,
39
- action : BooksPageActions . BooksActions
39
+ action : BooksPageActions . BooksActions | BooksApiActions . BooksApiActions
40
40
) : State {
41
41
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 ) ;
44
44
45
45
case BooksPageActions . BooksActionTypes . SelectBook :
46
46
return {
You can’t perform that action at this time.
0 commit comments