generator-zionapps
Version:
Angular 9 Code Generator
161 lines (150 loc) • 6.78 kB
text/typescript
/**
* PushNotification Effects
*/
import {Injectable} from '@angular/core';
import {Actions, Effect, ofType} from '@ngrx/effects';
import {Store} from '@ngrx/store';
import {Observable} from 'rxjs/Observable';
import {of} from 'rxjs/observable/of';
import {catchError, map, mergeMap, switchMap} from 'rxjs/operators';
import {environment} from '../../environments/environment';
import {CoreAction} from '../app-store.domain';
import {<%= pascalCase(loginSubStorePluralName) %>Actions} from '../<%= paramCase(loginSubStorePluralName) %>/<%= paramCase(loginSubStorePluralName) %>.actions';
import {PushNotificationsActions} from './push-notifications.actions';
import {PushNotification} from './push-notifications.domain';
import {PushNotificationsService} from './push-notifications.service';
export class PushNotificationsEffects {
constructor(private actions$: Actions,
private pushNotificationsService: PushNotificationsService,
private store: Store<any>) {
}
createOne$: Observable<CoreAction> = this.actions$.pipe(
ofType(PushNotificationsActions.Type.CreateOneRemoteRequest),
mergeMap((action: CoreAction) => {
const { payload, token } = action;
return this.pushNotificationsService.createOne(payload).pipe(
switchMap((data: PushNotification) => [
// Success Action
new PushNotificationsActions.CreateOneRemoteSuccess(data, token),
// Add the id and set to filed
new PushNotificationsActions.UpdateOne(data),
// Report the last success result to the view
new PushNotificationsActions.ReportLastResult({ data, success: true, token }),
]),
catchError((err: any) => {
// Report the last failure result to the view
this.store.dispatch(new PushNotificationsActions.ReportLastResult({ data: payload, success: false, token }));
// Failure Action
return of(new PushNotificationsActions.CreateOneRemoteFailure(err, token));
}),
);
}),
);
fetchAll$: Observable<CoreAction> = this.actions$.pipe(
ofType(PushNotificationsActions.Type.FetchAllRemoteRequest),
mergeMap((action: CoreAction) => {
const { token } = action;
return this.pushNotificationsService.fetchAll().pipe(
switchMap((data: PushNotification[]) => [
// Success Action
new PushNotificationsActions.FetchAllRemoteSuccess(data, token),
// Add the id and set to filed
new PushNotificationsActions.AddAll(data),
// Report the last success result to the view
new PushNotificationsActions.ReportLastResult({ data, success: true, token }),
]),
catchError((err: any) => {
// Report the last failure result to the view
this.store.dispatch(new PushNotificationsActions.ReportLastResult({ data: null, success: false, token }));
// Failure Action
return of(new PushNotificationsActions.FetchAllRemoteFailure(err, token));
}),
);
}),
);
fetchOne$: Observable<CoreAction> = this.actions$.pipe(
ofType(PushNotificationsActions.Type.FetchOneRemoteRequest),
mergeMap((action: CoreAction) => {
const { payload, token } = action;
return this.pushNotificationsService.fetchOne(payload).pipe(
switchMap((data: PushNotification) => [
// Success Action
new PushNotificationsActions.FetchOneRemoteSuccess(data, token),
// Add the id and set to filed
new PushNotificationsActions.AddOne(data),
// Report the last success result to the view
new PushNotificationsActions.ReportLastResult({ data, success: true, token }),
]),
catchError((err: any) => {
// Report the last failure result to the view
this.store.dispatch(new PushNotificationsActions.ReportLastResult({ data: null, success: false, token }));
// Failure Action
return of(new PushNotificationsActions.FetchOneRemoteFailure(err, token));
}),
);
}),
);
deleteUserTags$: Observable<CoreAction> = this.actions$.pipe(
ofType(PushNotificationsActions.Type.DeleteUserTagsRequest),
mergeMap(() => this.pushNotificationsService.deleteUserTags().pipe(
map(() => new PushNotificationsActions.DeleteUserTagsSuccess()),
catchError((err: any) => of(new PushNotificationsActions.DeleteUserTagsFailure(err))),
)),
);
init$: Observable<CoreAction> = this.actions$.pipe(
ofType(PushNotificationsActions.Type.InitRequest),
mergeMap(() => this.pushNotificationsService.init().pipe(
map(() => new PushNotificationsActions.InitSuccess()),
catchError((err: any) => of(new PushNotificationsActions.InitFailure(err)))
)),
);
mapSet<%= pascalCase(loginSubStoreName) %>Id$: Observable<CoreAction> = this.actions$.pipe(
ofType(<%= pascalCase(loginSubStorePluralName) %>Actions.Type.SetCurrentId),
map((action: CoreAction) => {
const { payload } = action;
const { pushEnvironment } = environment;
return new PushNotificationsActions.SendUserTagsRequest([
{ key: 'agentId', value: payload },
{ key: 'pushEnvironment', value: pushEnvironment }
]);
}),
);
sendUserTags$: Observable<CoreAction> = this.actions$.pipe(
ofType(PushNotificationsActions.Type.SendUserTagsRequest),
mergeMap((action: CoreAction) => {
const { payload } = action;
return this.pushNotificationsService.sendUserTags(payload).pipe(
map(() => new PushNotificationsActions.SendUserTagsSuccess(payload)),
catchError((err: any) => of(new PushNotificationsActions.SendUserTagsFailure(err)))
);
}),
);
subscribe: Observable<CoreAction> = this.actions$.pipe(
ofType(PushNotificationsActions.Type.SubscribeRequest),
mergeMap(() => {
return this.pushNotificationsService.subscribe().pipe(
map(() => new PushNotificationsActions.SubscribeSuccess()),
catchError((err: any) => of(new PushNotificationsActions.SubscribeFailure(err)))
);
}),
);
unsubscribe: Observable<CoreAction> = this.actions$.pipe(
ofType(PushNotificationsActions.Type.UnsubscribeRequest),
mergeMap(() => {
return this.pushNotificationsService.unsubscribe().pipe(
map(() => new PushNotificationsActions.UnsubscribeSuccess()),
catchError((err: any) => of(new PushNotificationsActions.UnsubscribeFailure(err)))
);
}),
);
}