import { Injectable } from '@angular/core'; import { Effect, Actions, ofType } from '@ngrx/effects'; import { switchMap } from 'rxjs/operators'; import * as criteriaActions from '../../metamodel/action/criteria.action'; import * as searchActions from './search.action'; import { BetweenCriterion } from './model'; @Injectable() export class SearchEffects { constructor( private actions$: Actions ) { } @Effect() loadDatasetAttributeListSuccessAction$ = this.actions$.pipe( ofType(criteriaActions.LOAD_DATASET_ATTRIBUTE_LIST_SUCCESS), switchMap((action: criteriaActions.LoadDatasetAttributeListSuccessAction) => { const outputList = action.payload .filter(attribute => attribute.selected && attribute.id_output_family) .map(attribute => attribute.id); const criteriaList = action.payload .filter(attribute => attribute.id_criteria_family && attribute.search_type && attribute.min) .map(attribute => { if (attribute.search_type === 'bw') { return new BetweenCriterion(attribute.id, attribute.min.toString(), attribute.max.toString()); } }); return [ new searchActions.UpdateOutputListAction(outputList), new searchActions.UpdateCriteriaListAction(criteriaList) ]; }) ); }