From a2461ae2e6281bd175975a43eb450c7a0534bd51 Mon Sep 17 00:00:00 2001 From: leejinho Date: Tue, 24 Mar 2020 14:01:32 +0900 Subject: [PATCH] =?UTF-8?q?bugfix=20::=20=EB=8C=80=ED=99=94=EB=B0=A9?= =?UTF-8?q?=EC=97=90=20=EC=A0=9C=203=EC=9E=90=EA=B0=80=20=EB=8B=A4?= =?UTF-8?q?=EB=A5=B8=20=EC=82=AC=EB=9E=8C=EC=9D=84=20=EC=B6=94=EA=B0=80=20?= =?UTF-8?q?=ED=96=88=EC=9D=84=20=EA=B2=BD=EC=9A=B0=20=EB=B0=A9=EB=A6=AC?= =?UTF-8?q?=EC=8A=A4=ED=8A=B8=EC=9D=98=20=EC=9D=B8=EC=9B=90=EC=9D=B4=20?= =?UTF-8?q?=EA=B0=B1=EC=8B=A0=EB=90=98=EC=A7=80=20=EC=95=8A=EB=8A=94=20?= =?UTF-8?q?=EB=AC=B8=EC=A0=9C=20=EC=88=98=EC=A0=95.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/app/store/messenger/room/actions.ts | 5 ++ .../src/app/store/messenger/room/effects.ts | 19 +++++-- .../src/app/store/messenger/sync/effects.ts | 56 +++++++++++++++++++ 3 files changed, 76 insertions(+), 4 deletions(-) diff --git a/projects/ucap-webmessenger-app/src/app/store/messenger/room/actions.ts b/projects/ucap-webmessenger-app/src/app/store/messenger/room/actions.ts index be56cadb..d6e5f084 100644 --- a/projects/ucap-webmessenger-app/src/app/store/messenger/room/actions.ts +++ b/projects/ucap-webmessenger-app/src/app/store/messenger/room/actions.ts @@ -188,3 +188,8 @@ export const exitFailure = createAction( '[Messenger::Room] Exit Failure', props<{ error: any }>() ); + +export const syncRoomRefreshByInvite = createAction( + '[Messenger::Room] Sync Room Refresh by invite', + props() +); diff --git a/projects/ucap-webmessenger-app/src/app/store/messenger/room/effects.ts b/projects/ucap-webmessenger-app/src/app/store/messenger/room/effects.ts index 5caa44ff..9d8a4e81 100644 --- a/projects/ucap-webmessenger-app/src/app/store/messenger/room/effects.ts +++ b/projects/ucap-webmessenger-app/src/app/store/messenger/room/effects.ts @@ -70,7 +70,8 @@ import { exitForcingFailure, exitForcingSuccess, exitNotificationOthers, - clearRoomUser + clearRoomUser, + syncRoomRefreshByInvite } from './actions'; import { SessionStorageService } from '@ucap-webmessenger/web-storage'; import { LoginInfo, KEY_LOGIN_INFO, KEY_VER_INFO } from '@app/types'; @@ -398,10 +399,11 @@ export class Effects { ) ), tap(([action, roomInfo]) => { + const loginInfo = this.sessionStorageService.get( + KEY_LOGIN_INFO + ); + if (!!roomInfo && roomInfo.roomSeq === action.noti.roomSeq) { - const loginInfo = this.sessionStorageService.get( - KEY_LOGIN_INFO - ); this.store.dispatch( info({ roomSeq: action.noti.roomSeq, @@ -410,6 +412,15 @@ export class Effects { }) ); } + + // room list refresh for exist. + this.store.dispatch( + syncRoomRefreshByInvite({ + roomSeq: action.noti.roomSeq, + isDetail: true, + localeCode: loginInfo.localeCode + }) + ); }) ); }, diff --git a/projects/ucap-webmessenger-app/src/app/store/messenger/sync/effects.ts b/projects/ucap-webmessenger-app/src/app/store/messenger/sync/effects.ts index 7e3ada7a..edc41612 100644 --- a/projects/ucap-webmessenger-app/src/app/store/messenger/sync/effects.ts +++ b/projects/ucap-webmessenger-app/src/app/store/messenger/sync/effects.ts @@ -540,6 +540,62 @@ export class Effects { }, { dispatch: false } ); + syncRoomRefreshByInvite$ = createEffect( + () => { + let roomInfo: RoomInfo; + let userInfoShortList: UserInfoShort[]; + let userInfoList: RoomUserInfo[]; + + return this.actions$.pipe( + ofType(RoomStore.syncRoomRefreshByInvite), + tap(() => { + roomInfo = null; + userInfoShortList = []; + userInfoList = []; + }), + withLatestFrom( + this.store.pipe( + select((state: any) => state.messenger.sync.room.ids as string[]) + ) + ), + switchMap(([req, roomSeqList]) => { + const index = roomSeqList.findIndex( + (roomSeq, i) => roomSeq === req.roomSeq + ); + if (index > -1) { + return this.roomProtocolService.info(req).pipe( + map(res => { + switch (res.SSVC_TYPE) { + case SSVC_TYPE_ROOM_INFO_ROOM: + roomInfo = (res as InfoData).roomInfo; + break; + case SSVC_TYPE_ROOM_INFO_USER: + userInfoShortList.push(...(res as UserShortData).userInfos); + break; + case SSVC_TYPE_ROOM_INFO_USER2: + userInfoList.push(...(res as UserData).userInfos); + break; + case SSVC_TYPE_ROOM_INFO_RES: + this.store.dispatch( + refreshRoomSuccess({ + roomInfo, + userInfoShortList, + userInfoList + }) + ); + break; + } + }), + catchError(error => of(refreshRoomFailure({ error }))) + ); + } else { + return of(); + } + }) + ); + }, + { dispatch: false } + ); // 대화상대 초대 성공 후 처리. inviteSuccess$ = createEffect(() =>