289 lines
6.7 KiB
Plaintext
289 lines
6.7 KiB
Plaintext
|
대화방 생성
|
||
|
파라미터
|
||
|
대화방 제목
|
||
|
결과
|
||
|
선택된 유저 리스트
|
||
|
대화방 생성 액션
|
||
|
|
||
|
대화 전달
|
||
|
파라미터
|
||
|
대화방 제목
|
||
|
결과
|
||
|
선택된 유저 리스트
|
||
|
대화 전달 액션
|
||
|
룸seq: -999
|
||
|
|
||
|
대화방 멤버 수정 (EditChatMember)
|
||
|
파라미터
|
||
|
대화방 제목
|
||
|
대화방 유저[]
|
||
|
결과
|
||
|
선택된 유저 리스트
|
||
|
수정검사
|
||
|
대화방 멤버 수정 액션
|
||
|
|
||
|
그룹 생성
|
||
|
파라미터
|
||
|
대화방 제목
|
||
|
결과
|
||
|
선택된 유저 리스트
|
||
|
그룹 생성 액션
|
||
|
|
||
|
그룹 멤버 수정 (EditMember)
|
||
|
파라미터
|
||
|
대화방 제목
|
||
|
groupDetailData
|
||
|
결과
|
||
|
선택된 유저 리스트
|
||
|
그룹 멤버 수정
|
||
|
|
||
|
|
||
|
createChatDialog
|
||
|
오픈 시 받아야 할 데이터
|
||
|
type:
|
||
|
title:
|
||
|
group?:
|
||
|
curRoomUser?:
|
||
|
|
||
|
결과
|
||
|
선택 유저 리스트
|
||
|
|
||
|
대화방 생성
|
||
|
검색
|
||
|
그룹/조직도 출력
|
||
|
선택 유저 출력
|
||
|
|
||
|
완료
|
||
|
대화방 오픈
|
||
|
선택 유저 리스트
|
||
|
취소
|
||
|
x
|
||
|
그룹지정 후 완료
|
||
|
그룹 생성?
|
||
|
선택 유저 리스트
|
||
|
기존 그룹 수정?
|
||
|
선택 유저 리스트
|
||
|
대화 전달
|
||
|
검색
|
||
|
그룹/조직도 출력
|
||
|
선택 유저 출력
|
||
|
|
||
|
완료
|
||
|
대화 전달 액션
|
||
|
이벤트 seq
|
||
|
선택 유저 리스트
|
||
|
취소
|
||
|
x
|
||
|
|
||
|
대화방 멤버 수정 (EditChatMember)
|
||
|
검색
|
||
|
그룹/조직도 출력
|
||
|
기존 대화방 유저[] 체크
|
||
|
선택 유저 출력
|
||
|
|
||
|
그룹 생성
|
||
|
검색
|
||
|
그룹/조직도 출력
|
||
|
선택 유저 출력
|
||
|
|
||
|
완료
|
||
|
그룹 생성 액션
|
||
|
그룹이름
|
||
|
선택 유저 리스트
|
||
|
취소
|
||
|
x
|
||
|
그룹 멤버 수정 (EditMember)
|
||
|
검색
|
||
|
그룹/조직도 출력
|
||
|
선택 유저 출력
|
||
|
|
||
|
완료
|
||
|
그룹 수정 액션
|
||
|
선택 유저 리스트
|
||
|
기존 그룹 유저 리스트
|
||
|
취소
|
||
|
x
|
||
|
|
||
|
대화
|
||
|
|
||
|
createChatDialogComponent
|
||
|
selectUserSectionComponent
|
||
|
tenantSearchComponent
|
||
|
groupListSectionComponent
|
||
|
treeSectionComponent
|
||
|
타입별 다음 단계 정의
|
||
|
타입별 액션 정의
|
||
|
|
||
|
UserSelectDialogType.EditChatMember
|
||
|
message-write.dialog.component.ts
|
||
|
if (!!result && !!result.choice && result.choice) {
|
||
|
// while (receiverList.length) {
|
||
|
// receiverList.pop();
|
||
|
// }
|
||
|
const selectedUserList: UserInfo[] = [];
|
||
|
result.selectedUserList.forEach(v => {
|
||
|
selectedUserList.push(v as UserInfo);
|
||
|
});
|
||
|
this.curReceiverList = selectedUserList;
|
||
|
}
|
||
|
|
||
|
room-user-list.component.ts
|
||
|
if (!!result && !!result.choice && result.choice) {
|
||
|
if (
|
||
|
!!result.selectedUserList &&
|
||
|
result.selectedUserList.length > 0 &&
|
||
|
curRoomUser
|
||
|
.map(user => user.seq)
|
||
|
.sort()
|
||
|
.join('|') ===
|
||
|
result.selectedUserList
|
||
|
.map(user => user.seq)
|
||
|
.sort()
|
||
|
.join('|')
|
||
|
) {
|
||
|
// 변경된 것이 없다면 중지.
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
// include me here..
|
||
|
const userSeqs: number[] = this.userInfoList
|
||
|
.filter(userInfo => userInfo.isJoinRoom)
|
||
|
.map(userInfo => userInfo.seq);
|
||
|
if (!!result.selectedUserList && result.selectedUserList.length > 0) {
|
||
|
result.selectedUserList.forEach(user => {
|
||
|
if (userSeqs.indexOf(user.seq) < 0) {
|
||
|
userSeqs.push(user.seq);
|
||
|
}
|
||
|
});
|
||
|
}
|
||
|
|
||
|
if (userSeqs.length > 0) {
|
||
|
this.store.dispatch(
|
||
|
RoomStore.inviteOrOpen({
|
||
|
req: {
|
||
|
divCd: 'Invite',
|
||
|
userSeqs
|
||
|
}
|
||
|
})
|
||
|
);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
messages.component.ts
|
||
|
if (!!result && !!result.choice && result.choice) {
|
||
|
if (
|
||
|
!!result.selectedUserList &&
|
||
|
result.selectedUserList.length > 0 &&
|
||
|
curRoomUser
|
||
|
.map((user) => user.seq)
|
||
|
.sort()
|
||
|
.join('|') ===
|
||
|
result.selectedUserList
|
||
|
.map((user) => user.seq)
|
||
|
.sort()
|
||
|
.join('|')
|
||
|
) {
|
||
|
// 변경된 것이 없다면 중지.
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
// include me here..
|
||
|
const userSeqs: number[] = this.userInfoListSubject.value
|
||
|
.filter((userInfo) => userInfo.isJoinRoom)
|
||
|
.map((userInfo) => userInfo.seq);
|
||
|
|
||
|
if (
|
||
|
!!result.selectedUserList &&
|
||
|
result.selectedUserList.length > 0
|
||
|
) {
|
||
|
result.selectedUserList.forEach((user) => {
|
||
|
if (userSeqs.indexOf(user.seq) < 0) {
|
||
|
userSeqs.push(user.seq);
|
||
|
}
|
||
|
});
|
||
|
}
|
||
|
|
||
|
if (userSeqs.length > 0) {
|
||
|
// include me
|
||
|
const myUserSeq = this.loginResSubject.value.userSeq;
|
||
|
if (!!myUserSeq && userSeqs.indexOf(myUserSeq) < 0) {
|
||
|
userSeqs.push(myUserSeq);
|
||
|
}
|
||
|
|
||
|
this.store.dispatch(
|
||
|
RoomStore.inviteOrOpen({
|
||
|
req: {
|
||
|
divCd: 'Invite',
|
||
|
userSeqs
|
||
|
}
|
||
|
})
|
||
|
);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
add$ = createEffect(() =>
|
||
|
this.actions$.pipe(
|
||
|
ofType(add),
|
||
|
withLatestFrom(this.store.pipe(select(BuddySelector.buddies))),
|
||
|
exhaustMap(([action, buddies]) => {
|
||
|
return this.buddyProtocolService.add(action.req).pipe(
|
||
|
map((res: BuddyAddResponse) => {
|
||
|
return buddy2();
|
||
|
}),
|
||
|
catchError(error => of(addFailure({ error })))
|
||
|
)}
|
||
|
)
|
||
|
)
|
||
|
);
|
||
|
|
||
|
|
||
|
create$ = createEffect(() =>
|
||
|
this.actions$.pipe(
|
||
|
ofType(create),
|
||
|
withLatestFrom(this.store.pipe(select(BuddySelector.buddies))),
|
||
|
exhaustMap(([action, buddies]) => {
|
||
|
return this.groupProtocolService
|
||
|
.add({
|
||
|
groupName: action.groupName
|
||
|
})
|
||
|
.pipe(
|
||
|
switchMap((res: GroupAddResponse) => {
|
||
|
const actions: any[] = [];
|
||
|
|
||
|
if (!!action.targetUserSeqs && 0 < action.targetUserSeqs.length) {
|
||
|
const addBuddies: number[] = [];
|
||
|
action.targetUserSeqs.forEach((item) => {
|
||
|
if (!buddies[item]) {
|
||
|
addBuddies.push(Number(item));
|
||
|
}
|
||
|
});
|
||
|
if (addBuddies.length > 0) {
|
||
|
actions.push(
|
||
|
BuddyActions.add({
|
||
|
req: { userSeqs: action.targetUserSeqs }
|
||
|
})
|
||
|
);
|
||
|
}
|
||
|
actions.push(
|
||
|
update({
|
||
|
req: {
|
||
|
groupSeq: res.groupSeq,
|
||
|
groupName: res.groupName,
|
||
|
userSeqs: action.targetUserSeqs
|
||
|
}
|
||
|
})
|
||
|
);
|
||
|
}
|
||
|
actions.push(
|
||
|
createSuccess({ res, targetUserSeqs: action.targetUserSeqs })
|
||
|
);
|
||
|
|
||
|
return actions;
|
||
|
}),
|
||
|
catchError((error) => of(createFailure({ error })))
|
||
|
);
|
||
|
})
|
||
|
)
|
||
|
);
|