172 번역on 후 스티커 발신 시 발신되지 않음 175 쪽지 검색 후 스크롤 시 플로팅 버튼 고정되지 않음 178 동일한 그룹에 대화 상대 이동시 사용자 사라짐 182 퇴장/강퇴한 사용자 그룹멤버 추가되어 있음
208 lines
5.7 KiB
TypeScript
208 lines
5.7 KiB
TypeScript
import { Component, OnInit, Inject, ViewChild } from '@angular/core';
|
|
import {
|
|
MatDialogRef,
|
|
MAT_DIALOG_DATA,
|
|
MatSelectionList,
|
|
MatSelectionListChange
|
|
} from '@angular/material';
|
|
import { Observable, combineLatest } from 'rxjs';
|
|
import { Store, select } from '@ngrx/store';
|
|
import { map, take } from 'rxjs/operators';
|
|
|
|
import * as AppStore from '@app/store';
|
|
import * as SyncStore from '@app/store/messenger/sync';
|
|
|
|
import {
|
|
DialogService,
|
|
ConfirmDialogComponent,
|
|
ConfirmDialogData,
|
|
ConfirmDialogResult
|
|
} from '@ucap-webmessenger/ui';
|
|
import { GroupDetailData, UserInfo } from '@ucap-webmessenger/protocol-sync';
|
|
import { environment } from '../../../../../environments/environment';
|
|
import { TranslateService } from '@ngx-translate/core';
|
|
|
|
export interface SelectGroupDialogData {
|
|
title: string;
|
|
ignoreGroup?: GroupDetailData[];
|
|
}
|
|
|
|
export interface SelectGroupDialogResult {
|
|
choice: boolean;
|
|
group?: GroupDetailData;
|
|
}
|
|
|
|
@Component({
|
|
selector: 'app-layout-messenger-select-group',
|
|
templateUrl: './select-group.dialog.component.html',
|
|
styleUrls: ['./select-group.dialog.component.scss']
|
|
})
|
|
export class SelectGroupDialogComponent implements OnInit {
|
|
constructor(
|
|
public dialogRef: MatDialogRef<
|
|
SelectGroupDialogData,
|
|
SelectGroupDialogResult
|
|
>,
|
|
@Inject(MAT_DIALOG_DATA) public data: SelectGroupDialogData,
|
|
private store: Store<any>,
|
|
private dialogService: DialogService,
|
|
private translateService: TranslateService
|
|
) {}
|
|
|
|
@ViewChild('groups', { static: true }) groups: MatSelectionList;
|
|
groupBuddyList$: Observable<
|
|
{ group: GroupDetailData; buddyList: UserInfo[] }[]
|
|
>;
|
|
selectedGroup: GroupDetailData;
|
|
isShowAddGroupField = false;
|
|
|
|
ngOnInit(): void {
|
|
this.groups.selectionChange.subscribe((s: MatSelectionListChange) => {
|
|
this.groups.deselectAll();
|
|
s.option.selected = true;
|
|
this.selectedGroup = s.option.value as GroupDetailData;
|
|
});
|
|
|
|
this.groupBuddyList$ = combineLatest([
|
|
this.store.pipe(
|
|
select(AppStore.MessengerSelector.SyncSelector.selectAllBuddy2)
|
|
),
|
|
this.store.pipe(
|
|
select(AppStore.MessengerSelector.SyncSelector.selectAllGroup2)
|
|
)
|
|
]).pipe(
|
|
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[];
|
|
if (!!environment.productConfig.CommonSetting.fixedGroupSeqs) {
|
|
fixedGroupSeqs =
|
|
environment.productConfig.CommonSetting.fixedGroupSeqs;
|
|
}
|
|
|
|
const groupBuddyList: {
|
|
group: GroupDetailData;
|
|
buddyList: UserInfo[];
|
|
}[] = [];
|
|
for (const group of groupList) {
|
|
/** 수정불가 그룹 필터링. */
|
|
if (!!fixedGroupSeqs && fixedGroupSeqs.length > 0) {
|
|
if (fixedGroupSeqs.indexOf(group.seq) > -1) {
|
|
continue;
|
|
}
|
|
}
|
|
|
|
/** 선택 무시 그룹 필터링. */
|
|
if (!!this.data.ignoreGroup && this.data.ignoreGroup.length > 0) {
|
|
if (
|
|
this.data.ignoreGroup.filter(
|
|
groupDetail => groupDetail.seq === group.seq
|
|
).length > 0
|
|
) {
|
|
continue;
|
|
}
|
|
}
|
|
|
|
groupBuddyList.push({
|
|
group,
|
|
buddyList: buddyList.filter(buddy => {
|
|
return group.userSeqs.indexOf(buddy.seq) > -1;
|
|
})
|
|
});
|
|
}
|
|
|
|
return groupBuddyList;
|
|
})
|
|
);
|
|
}
|
|
|
|
async onClickAddGroup(groupName: string) {
|
|
const result = await this.dialogService.open<
|
|
ConfirmDialogComponent,
|
|
ConfirmDialogData,
|
|
ConfirmDialogResult
|
|
>(ConfirmDialogComponent, {
|
|
width: '300px',
|
|
data: {
|
|
title: this.translateService.instant('group.addNew'),
|
|
html: this.translateService.instant('group.confirmAddNewWith', {
|
|
nameOfGroup: groupName
|
|
})
|
|
}
|
|
});
|
|
|
|
if (!!result && !!result.choice && result.choice) {
|
|
if (groupName.trim().length > 0) {
|
|
this.store.dispatch(
|
|
SyncStore.createGroup({
|
|
groupName: groupName.trim()
|
|
})
|
|
);
|
|
|
|
this.onClickAddGroupCancel();
|
|
}
|
|
}
|
|
}
|
|
onClickAddGroupCancel() {
|
|
this.isShowAddGroupField = false;
|
|
}
|
|
|
|
onClickChoice(choice: boolean): void {
|
|
this.dialogRef.close({
|
|
choice,
|
|
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;
|
|
}
|
|
}
|