import { Injectable } from '@angular/core'; import { Actions, Effect} from '@ngrx/effects'; import { Observable } from 'rxjs/Observable'; import { Action } from '@ngrx/store';
import 'rxjs/add/operator/switchMap'; import 'rxjs/add/operator/skip'; import 'rxjs/add/operator/takeUntil'; import 'rxjs/add/operator/map'; import 'rxjs/add/operator/catch'; import { of } from 'rxjs/observable/of';
import * as user from './actions'; import { IngesterApiService } from '../../ingester-api/ingester-api.service'; import { User } from '../../ingester-api/models';
@Injectable() export class UserEffects {
constructor(private action$: Actions, private api: IngesterApiService) { } @Effect() load$: Observable<Action> = this.action$.ofType(user.USER_LOAD).switchMap(() => { const nextLoad$ = this.action$.ofType(user.USER_LOAD).skip(1); const users$: Observable<User[]> = this.api.getObjectList(User); // return users$.takeUntil(nextLoad$) return users$ .map((users) => new user.UserLoadSuccessAction(users)) .catch(() => of(new user.UserLoadFailAction([]))); });
}