대화방 생성 파라미터 대화방 제목 결과 선택된 유저 리스트 대화방 생성 액션 대화 전달 파라미터 대화방 제목 결과 선택된 유저 리스트 대화 전달 액션 룸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 }))) ); }) ) );