Skip to content

Commit 626bf67

Browse files
05-effects loading complete
1 parent c26fbe5 commit 626bf67

File tree

5 files changed

+48
-5
lines changed

5 files changed

+48
-5
lines changed
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,15 @@
11
import { Book } from "src/app/shared/models/book.model";
22
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;

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

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
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+
11+
@Effect()
12+
loadBooks$ = this.actions$.pipe(
13+
ofType(BooksPageActions.BooksActionTypes.Enter),
14+
mergeMap(() =>
15+
this.booksService.all()
16+
.pipe(
17+
map(books => new BooksApiActions.BooksLoaded(books)),
18+
catchError(() => EMPTY)
19+
)
20+
)
21+
);
22+
23+
constructor(
24+
private booksService: BooksService,
25+
private actions$: Actions<BooksPageActions.BooksActions | BooksApiActions.BooksApiActions>
26+
) {}
27+
}

src/app/books/books.module.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,9 @@ import { BookDetailComponent } from './components/book-detail/book-detail.compon
1010
import { BooksListComponent } from './components/books-list/books-list.component';
1111
import { 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,
@@ -18,6 +21,7 @@ import { BooksTotalComponent } from './components/books-total/books-total.compon
1821
RouterModule.forChild([
1922
{ path: 'books', component: BooksPageComponent }
2023
]),
24+
EffectsModule.forFeature([BooksApiEffects])
2125
],
2226
declarations: [
2327
BooksPageComponent,

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

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ 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, tap } from 'rxjs/operators';
98
import { BooksPageActions } from '../../actions';
109

1110
@Component({

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +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';
3+
import { BooksPageActions, BooksApiActions } from 'src/app/books/actions';
44

55

66
export const initialBooks: Book[] = [
@@ -34,10 +34,10 @@ export const initialState = adapter.getInitialState({
3434
activeBookId: null
3535
});
3636

37-
export function reducer(state = initialState, action: BooksPageActions.BooksActions): State {
37+
export function reducer(state = initialState, action: BooksPageActions.BooksActions | BooksApiActions.BooksApiActions): State {
3838
switch(action.type) {
39-
case BooksPageActions.BooksActionTypes.Enter:
40-
return adapter.addAll(initialBooks, state);
39+
case BooksApiActions.BooksApiActionTypes.BooksLoaded:
40+
return adapter.addAll(action.books, state);
4141

4242
case BooksPageActions.BooksActionTypes.SelectBook:
4343
return {

0 commit comments

Comments
 (0)