190 lines
4.7 KiB
TypeScript
Raw Normal View History

2019-10-15 11:07:26 +09:00
import {
Component,
OnInit,
Input,
Output,
2019-10-17 18:11:38 +09:00
EventEmitter,
ViewEncapsulation
2019-10-15 11:07:26 +09:00
} from '@angular/core';
2019-10-02 17:12:51 +09:00
import { UserInfo } from '@ucap-webmessenger/protocol-sync';
import {
UserInfoSS,
UserInfoF,
UserInfoDN
} from '@ucap-webmessenger/protocol-query';
import {
StatusBulkInfo,
StatusInfo,
WorkStatusType
} from '@ucap-webmessenger/protocol-status';
import { NGXLogger } from 'ngx-logger';
2020-01-29 14:14:14 +09:00
import { StatusCode, PresenceType } from '@ucap-webmessenger/core';
import { VersionInfo2Response } from '@ucap-webmessenger/api-public';
2020-02-12 13:19:36 +09:00
import { TranslateService } from '@ngx-translate/core';
2019-10-15 13:54:58 +09:00
2019-10-02 17:12:51 +09:00
@Component({
selector: 'ucap-profile-user-list-item',
templateUrl: './user-list-item.component.html',
2019-10-17 18:11:38 +09:00
styleUrls: ['./user-list-item.component.scss'],
encapsulation: ViewEncapsulation.None
2019-10-02 17:12:51 +09:00
})
2019-10-28 11:15:38 +09:00
export class UserListItemComponent implements OnInit {
2019-10-02 17:12:51 +09:00
@Input()
userInfo: UserInfo | UserInfoSS | UserInfoF | UserInfoDN;
@Input()
profileImageRoot?: string;
2019-10-02 17:12:51 +09:00
@Input()
2019-10-18 12:49:23 +09:00
presence: StatusBulkInfo | StatusInfo;
2019-10-02 17:12:51 +09:00
@Input()
2020-02-06 10:24:47 +09:00
showPresence = true;
@Input()
2019-10-02 17:12:51 +09:00
checkable = false;
@Input()
checkDisabled = false;
@Input()
isChecked = false;
@Input()
2019-10-02 17:12:51 +09:00
compactable = false;
@Input()
sessionVerinfo: VersionInfo2Response;
@Input()
/** 선택된 사용자의 리스트 */
selectedUserList?: (UserInfo | UserInfoSS | UserInfoF | UserInfoDN)[] = [];
2019-10-02 17:12:51 +09:00
@Output()
checkUser = new EventEmitter<{
isChecked: boolean;
userInfo: UserInfo | UserInfoSS | UserInfoF | UserInfoDN;
}>();
2019-11-08 13:35:39 +09:00
@Output()
openProfile = new EventEmitter<number>();
2019-10-11 18:24:57 +09:00
2019-10-14 13:53:44 +09:00
PresenceType = PresenceType;
2020-02-12 13:19:36 +09:00
constructor(
private logger: NGXLogger,
private translateService: TranslateService
) {}
ngOnInit() {
this.profileImageRoot =
this.profileImageRoot || this.sessionVerinfo.profileRoot;
}
2019-10-02 17:12:51 +09:00
2019-12-30 15:55:48 +09:00
getPresence(type: PresenceType): string {
let status: string;
let rtnClass = '';
switch (type) {
2019-12-30 15:55:48 +09:00
case PresenceType.PC:
2019-11-18 18:06:38 +09:00
status = !!this.presence ? this.presence.pcStatus : undefined;
break;
2019-12-30 15:55:48 +09:00
case PresenceType.MOBILE:
status = !!this.presence ? this.presence.mobileStatus : undefined;
break;
}
2020-02-06 10:24:47 +09:00
switch (status) {
case StatusCode.OnLine:
rtnClass = type + 'On';
break;
case StatusCode.Away:
rtnClass = type + 'Out';
break;
case StatusCode.Busy:
rtnClass = type + 'Other';
break;
default:
rtnClass = type + 'Off';
break;
}
return rtnClass;
}
2020-01-31 15:25:28 +09:00
getPresenceMsg(): string {
2020-02-12 13:19:36 +09:00
let presenceMsg = this.translateService.instant('presence.offline');
if (!!this.presence) {
switch (this.presence.pcStatus) {
case StatusCode.OnLine:
presenceMsg = this.translateService.instant('presence.online');
break;
case StatusCode.Away:
presenceMsg = this.translateService.instant('presence.away');
break;
case StatusCode.Busy:
if (
!!this.presence.statusMessage &&
this.presence.statusMessage !== '.'
) {
presenceMsg = this.presence.statusMessage;
} else {
presenceMsg = this.translateService.instant(
'presence.statusMessage1'
);
}
break;
}
2020-01-31 15:25:28 +09:00
}
2020-02-12 13:19:36 +09:00
return presenceMsg;
2020-01-31 15:25:28 +09:00
}
/** 리스트가 checkable 할 경우 checkbox 의 change 이벤트를 상위 컴포넌트로 전달한다. */
onChangeCheck(
value: boolean,
userInfo: UserInfo | UserInfoSS | UserInfoF | UserInfoDN
) {
this.checkUser.emit({
isChecked: value,
userInfo
});
}
2019-11-08 13:35:39 +09:00
onClickOpenProfile(event: MouseEvent, userSeq: number) {
2019-11-08 13:35:39 +09:00
event.preventDefault();
event.stopPropagation();
this.openProfile.emit(userSeq);
2019-11-08 13:35:39 +09:00
}
getWorkstatusInfo(type: string): string {
let workstatus = this.userInfo.workstatus;
if (
!!this.presence &&
!!this.presence.workstatus &&
this.presence.workstatus.trim().length > 0
) {
workstatus = this.presence.workstatus;
}
let text = '';
// morning-off: 오전 afternoon-off: 오후 day-off: 휴가 long-time: 장기 leave-of-absence: 휴직
let style = '';
switch (workstatus) {
case WorkStatusType.VacationAM:
style = 'morning-off';
text = '오전';
break;
case WorkStatusType.VacationPM:
style = 'afternoon-off';
text = '오후';
break;
case WorkStatusType.VacationAll:
style = 'day-off';
text = '휴가';
break;
case WorkStatusType.LeaveOfAbsence:
style = 'leave-of-absence';
text = '휴직';
break;
case WorkStatusType.LongtermRefresh:
style = 'long-time';
text = '장기';
break;
}
return type === 'text' ? text : style;
}
}