ucap-doc/documents/업무/5월/4째주/backup/profile-list-item.component.ts

215 lines
4.8 KiB
TypeScript
Raw Permalink Normal View History

2020-05-27 09:53:37 +00:00
import {
Component,
OnInit,
OnDestroy,
ChangeDetectionStrategy,
ChangeDetectorRef,
Input,
EventEmitter,
Output,
ElementRef,
Self
} from '@angular/core';
import { UserInfo, GroupDetailData } from '@ucap/protocol-sync';
import { UserInfoSS, UserInfoF, UserInfoDN } from '@ucap/protocol-query';
import { UserInfo as RoomUserInfo } from '@ucap/protocol-room';
import { StatusBulkInfo, StatusInfo } from '@ucap/protocol-status';
import { PresenceType, StatusCode } from '@ucap/core';
import { I18nService } from '@ucap/ng-i18n';
import { ucapAnimations } from '@ucap/ng-ui';
export type UserInfoTypes =
| UserInfo
| UserInfoSS
| UserInfoF
| UserInfoDN
| RoomUserInfo;
@Component({
selector: 'app-group-profile-list-item',
templateUrl: './profile-list-item.component.html',
styleUrls: ['./profile-list-item.component.scss'],
animations: ucapAnimations,
changeDetection: ChangeDetectionStrategy.OnPush
})
export class ProfileListItemComponent implements OnInit, OnDestroy {
@Input()
userInfo: UserInfoF;
@Input()
group: GroupDetailData;
@Input()
isSearchData = false;
@Input()
defaultProfileImage: string;
@Input()
profileImageRoot: string;
@Input()
set presence(info: StatusBulkInfo | StatusInfo) {
this._presence = info;
}
get presence(): StatusBulkInfo | StatusInfo {
return this._presence;
}
_presence: StatusBulkInfo | StatusInfo;
@Input()
showMenu = true;
@Input()
checkable = false;
@Input()
set isChecked(checked: boolean) {
this._isChecked = checked;
}
get isChecked(): boolean {
return this._isChecked;
}
_isChecked = false;
@Output()
checked = new EventEmitter<{
isChecked: boolean;
userInfo: UserInfoTypes;
}>();
@Output()
moreMenu: EventEmitter<{
event: MouseEvent;
userInfo: UserInfoTypes;
group: GroupDetailData;
rect: any;
}> = new EventEmitter();
isClicked = false;
isShowMenu = false;
@Input()
isMe = false;
PresenceType = PresenceType;
isClickMore = false;
constructor(
private changeDetectorRef: ChangeDetectorRef,
private i18nService: I18nService,
@Self() private elementRef: ElementRef
) {
this.i18nService.setDefaultNamespace('organization');
}
ngOnInit(): void {}
ngOnDestroy(): void {}
onClickProfileImage(event: Event, userInfo: UserInfoTypes): void {}
onChangeCheck(value: boolean, userInfo: UserInfoTypes) {
this.checked.emit({
isChecked: value,
userInfo
});
}
getPresence(type: PresenceType): string {
let status: string;
let rtnClass = '';
switch (type) {
case PresenceType.PC:
status = !!this.presence ? this.presence.pcStatus : undefined;
break;
case PresenceType.MOBILE:
status = !!this.presence ? this.presence.mobileStatus : undefined;
break;
}
switch (status) {
case StatusCode.OnLine:
rtnClass = 'online';
break;
case StatusCode.Away:
rtnClass = 'absence';
break;
case StatusCode.Busy:
rtnClass = 'other-business';
break;
default:
rtnClass = 'offline';
break;
}
return rtnClass;
}
getPresenceMsg(): string {
let presenceMsg = this.i18nService.t('presence.offline');
if (!!this.presence) {
switch (this.presence.pcStatus) {
case StatusCode.OnLine:
presenceMsg = this.i18nService.t('presence.online');
break;
case StatusCode.Away:
presenceMsg = this.i18nService.t('presence.away');
break;
case StatusCode.Busy:
if (
!!this.presence.statusMessage &&
this.presence.statusMessage !== '.'
) {
presenceMsg = this.presence.statusMessage;
} else {
presenceMsg = this.i18nService.t('presence.statusMessage1');
}
break;
}
}
return presenceMsg;
}
onClickMore(event: MouseEvent) {
this.isClickMore = true;
const rect = this.elementRef.nativeElement.getBoundingClientRect();
this.moreMenu.emit({
event,
userInfo: this.userInfo,
group: this.group,
rect
});
}
onClickProfileContextMenu(event: MouseEvent, type: string) {}
onClickProfile(event: MouseEvent) {
event.preventDefault();
event.stopPropagation();
if (this.showMenu && !this.isMe) {
this.isShowMenu = true;
}
}
onMouseover(event: MouseEvent): void {
if (this.showMenu && !this.isMe) {
this.isShowMenu = true;
if (this.isClickMore) {
this.isClickMore = false;
}
}
event.preventDefault();
event.stopPropagation();
}
onMouseleave(event: MouseEvent): void {
if (this.showMenu && !this.isMe) {
this.isShowMenu = false;
}
event.preventDefault();
event.stopPropagation();
}
}