# 이슈처리

172 번역on 후 스티커 발신 시 발신되지 않음
175 쪽지 검색 후 스크롤 시 플로팅 버튼 고정되지 않음
178 동일한 그룹에 대화 상대 이동시 사용자 사라짐
182 퇴장/강퇴한 사용자 그룹멤버 추가되어 있음
This commit is contained in:
leejinho 2020-01-23 10:03:48 +09:00
parent bbebd8bedc
commit 9153a92dab
6 changed files with 252 additions and 161 deletions

View File

@ -563,7 +563,8 @@ export class GroupComponent implements OnInit, OnDestroy {
>(SelectGroupDialogComponent, { >(SelectGroupDialogComponent, {
width: '600px', width: '600px',
data: { data: {
title: this.translateService.instant('group.selectTargetGroup') title: this.translateService.instant('group.selectTargetGroup'),
ignoreGroup: [group]
} }
}); });

View File

@ -88,10 +88,10 @@
</mat-tab-group> </mat-tab-group>
</div> </div>
<div [style.display]="isSearch ? 'block' : 'none'"> <div class="message-section" [style.display]="isSearch ? 'block' : 'none'">
<div class="search-sub"> <div class="search-sub">
<form [formGroup]="fgSearchType" class="w-100-p"> <form [formGroup]="fgSearchType" class="w-100-p">
<mat-form-field> <mat-form-field style="width: 100px;">
<mat-select <mat-select
formControlName="searchMessageType" formControlName="searchMessageType"
(selectionChange)="onChangeSelection($event)" (selectionChange)="onChangeSelection($event)"
@ -127,13 +127,15 @@
</mat-radio-group> </mat-radio-group>
</form> </form>
</div> </div>
<div> <div style="height: calc(100% - 65.5px)">
<perfect-scrollbar fxFlex="1 1 auto">
<ucap-message-list-item <ucap-message-list-item
*ngFor="let message of messageSearchList$ | async" *ngFor="let message of messageSearchList$ | async"
[message]="message" [message]="message"
(click)="onClickDetail(message)" (click)="onClickDetail(message)"
class="message-item" class="message-item"
></ucap-message-list-item> ></ucap-message-list-item>
</perfect-scrollbar>
</div> </div>
</div> </div>
</div> </div>

View File

@ -81,6 +81,7 @@
(click)="onToggleUser(userInfo)" (click)="onToggleUser(userInfo)"
(contextmenu)="onContextMenuOrgUser($event, userInfo)" (contextmenu)="onContextMenuOrgUser($event, userInfo)"
[matTooltip]="getTooltip(userInfo)" [matTooltip]="getTooltip(userInfo)"
matTooltipShowDelay="500"
matTooltipPosition="after" matTooltipPosition="after"
> >
</ucap-profile-user-list-item> </ucap-profile-user-list-item>
@ -105,6 +106,7 @@
(click)="onToggleUser(userInfo)" (click)="onToggleUser(userInfo)"
(contextmenu)="onContextMenuOrgUser($event, userInfo)" (contextmenu)="onContextMenuOrgUser($event, userInfo)"
[matTooltip]="getTooltip(userInfo)" [matTooltip]="getTooltip(userInfo)"
matTooltipShowDelay="500"
matTooltipPosition="after" matTooltipPosition="after"
> >
</ucap-profile-user-list-item> </ucap-profile-user-list-item>

View File

@ -638,6 +638,102 @@ export class MessagesComponent implements OnInit, OnDestroy, AfterViewInit {
if (!!this.isShowTranslation && this.destLocale.trim().length > 0) { if (!!this.isShowTranslation && this.destLocale.trim().length > 0) {
/** CASE : Translation */ /** CASE : Translation */
// 번역할 대화 없이 스티커만 전송할 경우.
if (!message || message.trim().length === 0) {
this.sendMessageOfSticker(message);
} else {
this.sendMessageOfTranslate(message);
}
} else if (!!this.selectedSticker) {
/** CASE : Sticker */
this.sendMessageOfSticker(message);
} else if (
message.trim().length >
environment.productConfig.CommonSetting.masstextLength
) {
/** CASE : MASS TEXT */
this.sendMessageOfMassText(message);
} else {
/** CASE : Normal Text */
this.sendMessageOfNormal(message);
}
}
/** Send Normal message */
sendMessageOfNormal(message: string) {
this.store.dispatch(
EventStore.send({
senderSeq: this.loginResSubject.value.userSeq,
req: {
roomSeq: this.roomInfoSubject.value.roomSeq,
eventType: EventType.Character,
sentMessage: message
}
})
);
}
/** Send Sticker message */
async sendMessageOfSticker(message: string, isCheck: boolean = true) {
if (
!!isCheck &&
!!message &&
message.trim().length >
environment.productConfig.CommonSetting.masstextLength
) {
const result = await this.dialogService.open<
AlertDialogComponent,
AlertDialogData,
AlertDialogResult
>(AlertDialogComponent, {
width: '360px',
data: {
title: this.translateService.instant('chat.errors.label'),
message: this.translateService.instant(
'chat.errors.maxLengthOfMassText',
{
maxLength: environment.productConfig.CommonSetting.masstextLength
}
)
}
});
return;
}
const stickerJson: StickerEventJson = {
name: '스티커',
file: this.selectedSticker.index,
chat: !!message ? message.trim() : ''
};
this.store.dispatch(
EventStore.send({
senderSeq: this.loginResSubject.value.userSeq,
req: {
roomSeq: this.roomInfoSubject.value.roomSeq,
eventType: EventType.Sticker,
sentMessage: JSON.stringify(stickerJson)
}
})
);
this.isShowStickerSelector = false;
this.setStickerHistory(this.selectedSticker);
this.selectedSticker = null;
}
/** Send Masstext message */
sendMessageOfMassText(message: string) {
this.store.dispatch(
EventStore.sendMass({
senderSeq: this.loginResSubject.value.userSeq,
req: {
roomSeq: this.roomInfoSubject.value.roomSeq,
eventType: EventType.MassText,
// sentMessage: message.replace(/\n/gi, '\r\n')
sentMessage: message
}
})
);
}
/** Send Translation message */
sendMessageOfTranslate(message: string) {
const destLocale = this.destLocale; const destLocale = this.destLocale;
const original = message; const original = message;
const roomSeq = this.roomInfoSubject.value.roomSeq; const roomSeq = this.roomInfoSubject.value.roomSeq;
@ -663,9 +759,7 @@ export class MessagesComponent implements OnInit, OnDestroy, AfterViewInit {
if (res.statusCode === StatusCode.Success) { if (res.statusCode === StatusCode.Success) {
let sentMessage = ''; let sentMessage = '';
let eventType = EventType.Translation; let eventType = EventType.Translation;
let previewObject: let previewObject: TranslationEventJson | MassTranslationEventJson;
| TranslationEventJson
| MassTranslationEventJson;
if (res.translationSeq > 0) { if (res.translationSeq > 0) {
// Mass Text Translation // Mass Text Translation
@ -726,80 +820,6 @@ export class MessagesComponent implements OnInit, OnDestroy, AfterViewInit {
.subscribe(() => { .subscribe(() => {
this.isTranslationProcess = false; this.isTranslationProcess = false;
}); });
} else if (!!this.selectedSticker) {
/** CASE : Sticker */
if (
!!message &&
message.trim().length >
environment.productConfig.CommonSetting.masstextLength
) {
const result = await this.dialogService.open<
AlertDialogComponent,
AlertDialogData,
AlertDialogResult
>(AlertDialogComponent, {
width: '360px',
data: {
title: this.translateService.instant('chat.errors.label'),
message: this.translateService.instant(
'chat.errors.maxLengthOfMassText',
{
maxLength:
environment.productConfig.CommonSetting.masstextLength
}
)
}
});
return;
}
const stickerJson: StickerEventJson = {
name: '스티커',
file: this.selectedSticker.index,
chat: !!message ? message.trim() : ''
};
this.store.dispatch(
EventStore.send({
senderSeq: this.loginResSubject.value.userSeq,
req: {
roomSeq: this.roomInfoSubject.value.roomSeq,
eventType: EventType.Sticker,
sentMessage: JSON.stringify(stickerJson)
}
})
);
this.isShowStickerSelector = false;
this.setStickerHistory(this.selectedSticker);
this.selectedSticker = null;
} else if (
message.trim().length >
environment.productConfig.CommonSetting.masstextLength
) {
/** CASE : MASS TEXT */
this.store.dispatch(
EventStore.sendMass({
senderSeq: this.loginResSubject.value.userSeq,
req: {
roomSeq: this.roomInfoSubject.value.roomSeq,
eventType: EventType.MassText,
// sentMessage: message.replace(/\n/gi, '\r\n')
sentMessage: message
}
})
);
} else {
/** CASE : Normal Text */
this.store.dispatch(
EventStore.send({
senderSeq: this.loginResSubject.value.userSeq,
req: {
roomSeq: this.roomInfoSubject.value.roomSeq,
eventType: EventType.Character,
sentMessage: message
}
})
);
}
} }
onClickReceiveAlarm() { onClickReceiveAlarm() {
@ -1592,6 +1612,7 @@ export class MessagesComponent implements OnInit, OnDestroy, AfterViewInit {
const trgtUserSeq: number[] = []; const trgtUserSeq: number[] = [];
result.group.userSeqs.map(seq => trgtUserSeq.push(seq)); result.group.userSeqs.map(seq => trgtUserSeq.push(seq));
this.userInfoListSubject.value this.userInfoListSubject.value
.filter(v => v.isJoinRoom)
.filter(v => result.group.userSeqs.indexOf(v.seq) < 0) .filter(v => result.group.userSeqs.indexOf(v.seq) < 0)
.forEach(user => { .forEach(user => {
trgtUserSeq.push(user.seq); trgtUserSeq.push(user.seq);

View File

@ -63,6 +63,7 @@
<mat-list-option <mat-list-option
*ngFor="let groupBuddy of groupBuddyList$ | async" *ngFor="let groupBuddy of groupBuddyList$ | async"
[value]="groupBuddy.group" [value]="groupBuddy.group"
[disabled]="getDisabled(groupBuddy)"
class="group-name" class="group-name"
> >
<span class="title-name ellipsis"> {{ groupBuddy.group.name }} </span> <span class="title-name ellipsis"> {{ groupBuddy.group.name }} </span>

View File

@ -24,6 +24,7 @@ import { TranslateService } from '@ngx-translate/core';
export interface SelectGroupDialogData { export interface SelectGroupDialogData {
title: string; title: string;
ignoreGroup?: GroupDetailData[];
} }
export interface SelectGroupDialogResult { export interface SelectGroupDialogResult {
@ -71,6 +72,44 @@ export class SelectGroupDialogComponent implements OnInit {
) )
]).pipe( ]).pipe(
map(([buddyList, groupList]) => { map(([buddyList, groupList]) => {
// sort..
if (!!groupList && groupList.length > 0) {
const tempOrderArr: GroupDetailData[] = [];
let myDeptGroup: GroupDetailData;
let defaultGroup: GroupDetailData;
const normalGroup: GroupDetailData[] = [];
groupList.forEach(group => {
if (
!!environment.productConfig.CommonSetting.useMyDeptGroup &&
environment.productConfig.CommonSetting.myDeptGroupSeq ===
group.seq
) {
myDeptGroup = group;
} else if (0 === group.seq) {
defaultGroup = group;
} else {
normalGroup.push(group);
}
});
if (!!myDeptGroup) {
tempOrderArr.push(myDeptGroup);
}
tempOrderArr.push(
...normalGroup.sort((a, b) =>
a.name < b.name ? -1 : a.name > b.name ? 1 : 0
)
);
if (!!defaultGroup) {
tempOrderArr.push(defaultGroup);
}
groupList = tempOrderArr;
}
/** 수정불가 그룹 */ /** 수정불가 그룹 */
let fixedGroupSeqs: number[]; let fixedGroupSeqs: number[];
if (!!environment.productConfig.CommonSetting.fixedGroupSeqs) { if (!!environment.productConfig.CommonSetting.fixedGroupSeqs) {
@ -90,6 +129,17 @@ export class SelectGroupDialogComponent implements OnInit {
} }
} }
/** 선택 무시 그룹 필터링. */
if (!!this.data.ignoreGroup && this.data.ignoreGroup.length > 0) {
if (
this.data.ignoreGroup.filter(
groupDetail => groupDetail.seq === group.seq
).length > 0
) {
continue;
}
}
groupBuddyList.push({ groupBuddyList.push({
group, group,
buddyList: buddyList.filter(buddy => { buddyList: buddyList.filter(buddy => {
@ -140,4 +190,18 @@ export class SelectGroupDialogComponent implements OnInit {
group: this.selectedGroup group: this.selectedGroup
}); });
} }
getDisabled(groupBuddyList: {
group: GroupDetailData;
buddyList: UserInfo[];
}): boolean {
if (!!this.data.ignoreGroup && this.data.ignoreGroup.length > 0) {
return (
this.data.ignoreGroup.filter(
groupDetail => groupDetail.seq === groupBuddyList.group.seq
).length > 0
);
}
return false;
}
} }