bugfix ::
1. 강제퇴장시 state 에서 remove 하지 않고 isJoinRoom 플래그만 변경하도록 수정. 2. 대화상대 초대시 방정보를 갱신하도록 수정. >> INVITE_NOTI 에 초대자 정보가 유입되지 않음.
This commit is contained in:
parent
b58e52325d
commit
4569202230
|
@ -1286,12 +1286,6 @@ export class MessagesComponent implements OnInit, OnDestroy, AfterViewInit {
|
|||
(message as Info<string>).sentMessage
|
||||
)
|
||||
) {
|
||||
this.snackBarService.open(
|
||||
this.translateService.instant(
|
||||
'common.clipboard.results.copied'
|
||||
),
|
||||
'확인'
|
||||
);
|
||||
this.snackBarService.open(
|
||||
this.translateService.instant(
|
||||
'common.clipboard.results.copied'
|
||||
|
|
|
@ -474,6 +474,20 @@ export class AppNotificationService {
|
|||
);
|
||||
}
|
||||
break;
|
||||
case SSVC_TYPE_ROOM_INVITE_NOTI:
|
||||
{
|
||||
const noti = notiOrRes as InviteNotification;
|
||||
this.logger.debug(
|
||||
'Notification::roomProtocolService::InviteNotification',
|
||||
noti
|
||||
);
|
||||
this.store.dispatch(
|
||||
RoomStore.inviteNotification({
|
||||
noti
|
||||
})
|
||||
);
|
||||
}
|
||||
break;
|
||||
case SSVC_TYPE_ROOM_UPD_RES:
|
||||
{
|
||||
const noti = notiOrRes as RoomUpdateNotification;
|
||||
|
@ -496,20 +510,6 @@ export class AppNotificationService {
|
|||
);
|
||||
}
|
||||
break;
|
||||
case SSVC_TYPE_ROOM_INVITE_NOTI:
|
||||
{
|
||||
const noti = notiOrRes as InviteNotification;
|
||||
this.logger.debug(
|
||||
'Notification::roomProtocolService::InviteNotification',
|
||||
noti
|
||||
);
|
||||
this.store.dispatch(
|
||||
RoomStore.inviteNotification({
|
||||
noti
|
||||
})
|
||||
);
|
||||
}
|
||||
break;
|
||||
case SSVC_TYPE_ROOM_EXIT_RES:
|
||||
case SSVC_TYPE_ROOM_EXIT_NOTI:
|
||||
{
|
||||
|
@ -528,7 +528,8 @@ export class AppNotificationService {
|
|||
} else {
|
||||
this.store.dispatch(
|
||||
RoomStore.exitNotificationOthers({
|
||||
noti
|
||||
roomSeq: noti.roomSeq,
|
||||
trgtUser: [noti.SENDER_SEQ]
|
||||
})
|
||||
);
|
||||
|
||||
|
@ -560,18 +561,34 @@ export class AppNotificationService {
|
|||
break;
|
||||
case SSVC_TYPE_ROOM_EXIT_FORCING_NOTI:
|
||||
{
|
||||
// 내가 강퇴 됨.
|
||||
const noti = notiOrRes as ExitForcingNotification;
|
||||
this.logger.debug(
|
||||
'Notification::roomProtocolService::ExitForcingNotification NOTI',
|
||||
noti
|
||||
);
|
||||
|
||||
if (noti.userSeqs.indexOf(loginResInfo.userSeq) >= 0) {
|
||||
this.store.dispatch(
|
||||
RoomStore.exitForcingNotification({
|
||||
noti
|
||||
})
|
||||
);
|
||||
}
|
||||
|
||||
this.store.dispatch(
|
||||
RoomStore.exitNotificationOthers({
|
||||
roomSeq: noti.roomSeq,
|
||||
trgtUser: noti.userSeqs
|
||||
})
|
||||
);
|
||||
|
||||
this.store.dispatch(
|
||||
SyncStore.clearRoomUsers({
|
||||
roomSeq: noti.roomSeq,
|
||||
userSeqs: noti.userSeqs
|
||||
})
|
||||
);
|
||||
}
|
||||
break;
|
||||
case SSVC_TYPE_ROOM_FONT_UPD_NOTI:
|
||||
{
|
||||
|
|
|
@ -56,9 +56,12 @@ export const exitNotification = createAction(
|
|||
'[Messenger::Room] Exit Notification',
|
||||
props<{ noti: ExitNotification }>()
|
||||
);
|
||||
/**
|
||||
* 현재 열려 있는 방의 방참여인원의 isJoinRoom flag 를 false 로 변경.
|
||||
*/
|
||||
export const exitNotificationOthers = createAction(
|
||||
'[Messenger::Room] Exit Notification By Others',
|
||||
props<{ noti: ExitNotification }>()
|
||||
props<{ roomSeq: string; trgtUser: number[] }>()
|
||||
);
|
||||
|
||||
export const exitForcing = createAction(
|
||||
|
|
|
@ -310,8 +310,25 @@ export class Effects {
|
|||
() => {
|
||||
return this.actions$.pipe(
|
||||
ofType(inviteNotification),
|
||||
map(action => action.noti),
|
||||
tap(noti => {})
|
||||
withLatestFrom(
|
||||
this.store.pipe(
|
||||
select((state: any) => state.messenger.room.roomInfo as RoomInfo)
|
||||
)
|
||||
),
|
||||
tap(([action, roomInfo]) => {
|
||||
if (!!roomInfo && roomInfo.roomSeq === action.noti.roomSeq) {
|
||||
const loginInfo = this.sessionStorageService.get<LoginInfo>(
|
||||
KEY_LOGIN_INFO
|
||||
);
|
||||
this.store.dispatch(
|
||||
info({
|
||||
roomSeq: action.noti.roomSeq,
|
||||
isDetail: true,
|
||||
localeCode: loginInfo.localeCode
|
||||
})
|
||||
);
|
||||
}
|
||||
})
|
||||
);
|
||||
},
|
||||
{ dispatch: false }
|
||||
|
@ -354,13 +371,11 @@ export class Effects {
|
|||
tap(([action, roomInfo]) => {
|
||||
if (
|
||||
!!roomInfo &&
|
||||
roomInfo.roomSeq === action.noti.roomSeq &&
|
||||
!!action.noti &&
|
||||
!!action.noti.SENDER_SEQ
|
||||
roomInfo.roomSeq === action.roomSeq &&
|
||||
!!action.trgtUser &&
|
||||
action.trgtUser.length > 0
|
||||
) {
|
||||
this.store.dispatch(
|
||||
clearRoomUser({ userSeqs: [action.noti.SENDER_SEQ] })
|
||||
);
|
||||
this.store.dispatch(clearRoomUser({ userSeqs: action.trgtUser }));
|
||||
}
|
||||
})
|
||||
);
|
||||
|
|
|
@ -10,7 +10,7 @@ import {
|
|||
|
||||
import * as AuthenticationStore from '@app/store/account/authentication';
|
||||
import * as ChatStore from '@app/store/messenger/chat';
|
||||
import { UserInfo } from '@ucap-webmessenger/protocol-room';
|
||||
import { UserInfo, UserInfoShort } from '@ucap-webmessenger/protocol-room';
|
||||
|
||||
export const reducer = createReducer(
|
||||
initialState,
|
||||
|
@ -28,14 +28,45 @@ export const reducer = createReducer(
|
|||
}),
|
||||
|
||||
on(clearRoomUser, (state, action) => {
|
||||
const tmpUserInfoList: UserInfo[] = [];
|
||||
const tmpUserInfoShortList: UserInfoShort[] = [];
|
||||
action.userSeqs.forEach(userSeq => {
|
||||
const userInfo: UserInfo = {
|
||||
...state.userInfoList.entities[userSeq]
|
||||
};
|
||||
|
||||
if (!!userInfo && !!userInfo.seq) {
|
||||
tmpUserInfoList.push({
|
||||
...userInfo,
|
||||
isJoinRoom: false
|
||||
});
|
||||
}
|
||||
|
||||
const userInfoShort: UserInfoShort = {
|
||||
...state.userInfoShortList.entities[userSeq]
|
||||
};
|
||||
if (!!userInfoShort && !!userInfoShort.seq) {
|
||||
tmpUserInfoShortList.push({
|
||||
...userInfoShort,
|
||||
isJoinRoom: false
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
return {
|
||||
...state,
|
||||
userInfoList: adapterUserInfo.removeMany(action.userSeqs, {
|
||||
userInfoList:
|
||||
tmpUserInfoList.length > 0
|
||||
? adapterUserInfo.upsertMany(tmpUserInfoList, {
|
||||
...state.userInfoList
|
||||
}),
|
||||
userInfoShortList: adapterUserInfoShort.removeMany(action.userSeqs, {
|
||||
})
|
||||
: state.userInfoList,
|
||||
userInfoShortList:
|
||||
tmpUserInfoShortList.length > 0
|
||||
? adapterUserInfoShort.upsertMany(tmpUserInfoShortList, {
|
||||
...state.userInfoShortList
|
||||
})
|
||||
: state.userInfoShortList
|
||||
};
|
||||
}),
|
||||
|
||||
|
|
|
@ -264,7 +264,7 @@ export const delGroupFailure = createAction(
|
|||
props<{ error: any }>()
|
||||
);
|
||||
|
||||
/** 방 인원 클리어 */
|
||||
/** Sync 되어 있는 방의 방인원의 isJoinRoom flag 를 false 로 변경. */
|
||||
export const clearRoomUsers = createAction(
|
||||
'[Messenger::Sync] Clear room users.',
|
||||
props<{ roomSeq: string; userSeqs: number[] }>()
|
||||
|
|
|
@ -342,6 +342,10 @@ export class Effects {
|
|||
let roomSeq = null;
|
||||
|
||||
for (const key in roomUsers) {
|
||||
if (key === undefined) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (roomUsers.hasOwnProperty(key)) {
|
||||
const element = roomUsers[key];
|
||||
if (userSeqList.length === element.userInfos.length) {
|
||||
|
@ -371,6 +375,10 @@ export class Effects {
|
|||
}
|
||||
|
||||
for (const key in roomUserShorts) {
|
||||
if (key === undefined) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (roomUserShorts.hasOwnProperty(key)) {
|
||||
const element = roomUserShorts[key];
|
||||
if (userSeqList.length === element.userInfos.length) {
|
||||
|
|
|
@ -103,35 +103,45 @@ export const reducer = createReducer(
|
|||
}),
|
||||
|
||||
on(clearRoomUsers, (state, action) => {
|
||||
let roomUserList: RoomUserDetailData = {
|
||||
const roomUserList: RoomUserDetailData = {
|
||||
...state.roomUser.entities[action.roomSeq]
|
||||
};
|
||||
let trgtRoomUserList: RoomUserDetailData;
|
||||
if (
|
||||
!!roomUserList &&
|
||||
!!roomUserList.userInfos &&
|
||||
roomUserList.userInfos.length > 0
|
||||
) {
|
||||
const userInfos = roomUserList.userInfos.filter(
|
||||
userInfo => action.userSeqs.indexOf(userInfo.seq) < 0
|
||||
);
|
||||
roomUserList = {
|
||||
const userInfos = roomUserList.userInfos.map(userInfo => {
|
||||
if (action.userSeqs.indexOf(userInfo.seq) >= 0) {
|
||||
return { ...userInfo, isJoinRoom: false };
|
||||
} else {
|
||||
return userInfo;
|
||||
}
|
||||
});
|
||||
trgtRoomUserList = {
|
||||
...roomUserList,
|
||||
userInfos
|
||||
};
|
||||
}
|
||||
|
||||
let roomUserShortList: RoomUserData = {
|
||||
const roomUserShortList: RoomUserData = {
|
||||
...state.roomUserShort.entities[action.roomSeq]
|
||||
};
|
||||
let trgtRoomUserShortList: RoomUserData;
|
||||
if (
|
||||
!!roomUserShortList &&
|
||||
!!roomUserShortList.userInfos &&
|
||||
roomUserShortList.userInfos.length > 0
|
||||
) {
|
||||
const userInfos = roomUserShortList.userInfos.filter(
|
||||
userInfo => action.userSeqs.indexOf(userInfo.seq) < 0
|
||||
);
|
||||
roomUserShortList = {
|
||||
const userInfos = roomUserShortList.userInfos.map(userInfo => {
|
||||
if (action.userSeqs.indexOf(userInfo.seq) >= 0) {
|
||||
return { ...userInfo, isJoinRoom: false };
|
||||
} else {
|
||||
return userInfo;
|
||||
}
|
||||
});
|
||||
trgtRoomUserShortList = {
|
||||
...roomUserShortList,
|
||||
userInfos
|
||||
};
|
||||
|
@ -139,12 +149,16 @@ export const reducer = createReducer(
|
|||
|
||||
return {
|
||||
...state,
|
||||
roomUser: adapterRoomUser.upsertOne(roomUserList, {
|
||||
roomUser: !!trgtRoomUserList
|
||||
? adapterRoomUser.upsertOne(trgtRoomUserList, {
|
||||
...state.roomUser
|
||||
}),
|
||||
roomUserShort: adapterRoomUserShort.upsertOne(roomUserShortList, {
|
||||
})
|
||||
: state.roomUser,
|
||||
roomUserShort: !!trgtRoomUserShortList
|
||||
? adapterRoomUserShort.upsertOne(trgtRoomUserShortList, {
|
||||
...state.roomUserShort
|
||||
})
|
||||
: state.roomUserShort
|
||||
};
|
||||
}),
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user