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 { IngesterApiService } from '../../ingester-api/ingester-api.service'; import { Organization } from '../../ingester-api/models'; import { ORGANIZATION_LOAD, OrganizationLoadFailAction, OrganizationLoadSuccessAction } from “./actions”;

@Injectable() export class OrganizationEffects {

constructor(private action$: Actions, private api: IngesterApiService) {
}

@Effect()
load$: Observable<Action> = this.action$.ofType(ORGANIZATION_LOAD).switchMap(() => {
  const nextLoad$ = this.action$.ofType(ORGANIZATION_LOAD).skip(1);
  const org$: Observable<Organization[]> = this.api.getObjectList(Organization);
  // return users$.takeUntil(nextLoad$)
  return org$
    .map((orgs) => new OrganizationLoadSuccessAction(orgs))
    .catch(() => of(new OrganizationLoadFailAction([])));
});

}