Skip to content
Snippets Groups Projects
search.effects.ts 1.42 KiB
Newer Older
  • Learn to ignore specific revisions
  • François Agneray's avatar
    François Agneray committed
    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)
                ];
            })
        );
    }