next-ucap-messenger/projects/ucap-webmessenger-app/src/app/store/messenger/query/effects.ts
leejinho c193020409 프로필 정보 팝업 정보 수집방식 변경.
>> 기존 여려 type 으로 유입되는 userInfo 들을 SSVC_TYPE_QUERY_DATA_USER_REQ 프로토콜을 통한 {사용자정보SS} 타입으로 일괄처리하도록 수정.

>> 대상향으로 추가정보 추가 수집하도록 커스터마이징
2019-12-15 21:36:12 +09:00

111 lines
2.7 KiB
TypeScript

import { Injectable } from '@angular/core';
import { Actions, ofType, createEffect } from '@ngrx/effects';
import { of } from 'rxjs';
import { catchError, map, tap, switchMap } from 'rxjs/operators';
import {
dept,
deptSuccess,
deptFailure,
deptUser,
deptUserSuccess,
deptUserFailure
} from './actions';
import {
QueryProtocolService,
DeptInfo,
SSVC_TYPE_QUERY_DEPT_DATA,
SSVC_TYPE_QUERY_DEPT_RES,
DeptData,
UserInfoSS,
SSVC_TYPE_QUERY_DEPT_USER_DATA,
DeptUserData,
SSVC_TYPE_QUERY_DEPT_USER_RES,
DeptUserResponse
} from '@ucap-webmessenger/protocol-query';
import { Store } from '@ngrx/store';
@Injectable()
export class Effects {
dept$ = createEffect(
() => {
let departmentInfoList: DeptInfo[];
return this.actions$.pipe(
ofType(dept),
tap(() => {
departmentInfoList = [];
}),
switchMap(req => {
return this.queryProtocolService.dept(req).pipe(
map(res => {
switch (res.SSVC_TYPE) {
case SSVC_TYPE_QUERY_DEPT_DATA:
departmentInfoList.push(...(res as DeptData).departmentInfos);
break;
case SSVC_TYPE_QUERY_DEPT_RES:
this.store.dispatch(
deptSuccess({
departmentInfoList
})
);
break;
}
}),
catchError(error => of(deptFailure({ error })))
);
})
);
},
{ dispatch: false }
);
deptUser$ = createEffect(
() => {
let userInfos: UserInfoSS[];
return this.actions$.pipe(
ofType(deptUser),
tap(() => {
userInfos = [];
}),
switchMap(req => {
return this.queryProtocolService.deptUser(req).pipe(
map(res => {
switch (res.SSVC_TYPE) {
case SSVC_TYPE_QUERY_DEPT_USER_DATA:
userInfos.push(...(res as DeptUserData).userInfos);
break;
case SSVC_TYPE_QUERY_DEPT_USER_RES:
userInfos.sort((a, b) => {
return a.name < b.name ? -1 : a.name > b.name ? 1 : 0;
});
this.store.dispatch(
deptUserSuccess({
userInfos,
res: res as DeptUserResponse
})
);
break;
}
}),
catchError(error => of(deptUserFailure({ error })))
);
})
);
},
{ dispatch: false }
);
constructor(
private actions$: Actions,
private store: Store<any>,
private queryProtocolService: QueryProtocolService
) {}
}