Skip to content
Snippets Groups Projects
attribute.effects.ts 2.42 KiB
Newer Older
  • Learn to ignore specific revisions
  • import { Injectable } from '@angular/core';
    
    import { ToastrService } from 'ngx-toastr';
    import { Effect, Actions, ofType } from '@ngrx/effects';
    import { of } from 'rxjs';
    
    import { switchMap, map, catchError, tap, withLatestFrom } from 'rxjs/operators';
    
    
    import { Attribute } from '../model';
    import * as attributeActions from '../action/attribute.action';
    import { AttributeService } from '../services/attribute.service';
    
    import { Store } from "@ngrx/store";
    import * as fromRouter from "@ngrx/router-store";
    import * as utils from "../../shared/utils";
    import * as fromSearch from "../../search/store/search.reducer";
    import * as fromMetamodel from "../reducers";
    import * as fromConeSearch from "../../shared/cone-search/store/cone-search.reducer";
    
    
    @Injectable()
    export class AttributeEffects {
        constructor(
            private actions$: Actions,
            private attributeService: AttributeService,
    
            private toastr: ToastrService,
            private store$: Store<{
                router: fromRouter.RouterReducerState<utils.RouterStateUrl>,
                search: fromSearch.State,
                metamodel: fromMetamodel.State,
                coneSearch: fromConeSearch.State
            }>
    
        ) { }
    
        @Effect()
        loadAttributeSearchMetaAction$ = this.actions$.pipe(
            ofType(attributeActions.LOAD_ATTRIBUTE_SEARCH_META),
    
            withLatestFrom(this.store$),
            switchMap(([action, state]) => {
                const loadAttributeSearchMetaAction = action as attributeActions.LoadAttributeSearchMetaAction;
                return this.attributeService.retrieveAttributeSearchMeta(loadAttributeSearchMetaAction.payload).pipe(
                    map((attributeList: Attribute[]) => {
                        const module: string = state.router.state.url.split('/')[1];
                        if (module === 'search') {
                            new attributeActions.LoadAttributeSearchMetaSuccessAction(attributeList)
                        } else {
                            new attributeActions.LoadAttributeSearchMultipleMetaSuccessAction(attributeList)
                        }
                        }),
    
                    catchError(() => of(new attributeActions.LoadAttributeSearchMetaFailAction()))
                )
    
        );
    
        @Effect({ dispatch: false })
        loadAttributeSearchMetaFailedAction$ = this.actions$.pipe(
            ofType(attributeActions.LOAD_ATTRIBUTE_SEARCH_META_FAIL),
            tap(_ => this.toastr.error('Loading Failed!', 'Attribute search info loading failed'))
        );
    }