ngx-rx-if
Version:
An implementation of conditional reactive directive based on @ngrx/store (Redux)
54 lines (46 loc) • 1.52 kB
text/typescript
import { Injectable } from '@angular/core';
import { Actions, Effect } from '@ngrx/effects';
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/operator/switchMap';
import 'rxjs/add/operator/mergeMap';
import 'rxjs/add/operator/map';
import 'rxjs/add/operator/delay';
import 'rxjs/add/observable/of';
import { PermissionService } from './permission.service';
import { IAppPermissions } from './permission.state';
()
export class PermissionEffects {
constructor(private actions: Actions) {}
()
loadPermissionsEffect = this.actions
.ofType(PermissionService.PERMISSIONS_LOAD)
.switchMap(_ => this.loadPermissions()
.mergeMap((permissions: IAppPermissions) => ([
{
type: PermissionService.PERMISSIONS_APPLY,
payload: permissions
},
{
type: PermissionService.PERMISSIONS_CLEAR_BY_DELAY
}
]))
);
()
clearPermissionsByDelayEffect = this.actions
.ofType(PermissionService.PERMISSIONS_CLEAR_BY_DELAY)
.switchMap(_ => this.clearPermissionsByDelay()
.map(_ => ({
type: PermissionService.PERMISSIONS_CLEAR
}))
);
private loadPermissions(): Observable<IAppPermissions> {
return Observable.of({
4487: true,
4488: false,
4489: true
}).delay(1000);
}
private clearPermissionsByDelay(): Observable<boolean> {
return Observable.of(true).delay(3000);
}
}