import { Component, OnInit, OnDestroy, ChangeDetectionStrategy, ChangeDetectorRef, Input, Output, EventEmitter, ViewChild, ElementRef } from '@angular/core'; import { AppKey } from '@app/types/app-key.type'; import { LoginSession } from '@app/models/login-session'; import { Subject } from 'rxjs'; import { UserInfoSS, AuthResponse } from '@ucap/protocol-query'; import { OpenProfileOptions } from '@ucap/protocol-buddy'; import { FileUploadItem } from '@ucap/api'; import { FormControl } from '@angular/forms'; import { WorkStatusType } from '@ucap/protocol'; import { I18nService } from '@ucap/ng-i18n'; @Component({ selector: 'app-group-profile', templateUrl: './profile.component.html', styleUrls: ['./profile.component.scss'], changeDetection: ChangeDetectionStrategy.OnPush }) export class ProfileComponent implements OnInit, OnDestroy { @Input() set userInfo(u: UserInfoSS) { this._userInfo = u; } get userInfo(): UserInfoSS { return this._userInfo; } _userInfo: UserInfoSS; @Input() isMe: boolean; @Input() isBuddy: boolean; @Input() isFavorite: boolean; @Input() myMadn?: string; @Input() canVideoConfernece: boolean; @Output() toggleFavorite = new EventEmitter<{ userInfo: UserInfoSS; isFavorite: boolean; }>(); @Output() toggleBuddy = new EventEmitter<{ userInfo: UserInfoSS; isBuddy: boolean; }>(); @Output() openChat = new EventEmitter(); @Output() sendCall = new EventEmitter(); @Output() sendSms = new EventEmitter(); @Output() createConference = new EventEmitter(); @Output() sendMessage = new EventEmitter(); /////////////////////////////////////////////// @Input() profileImageRoot: string; @Input() openProfileOptions?: OpenProfileOptions; @Input() useBuddyToggleButton: boolean; @Input() authInfo: AuthResponse; @Output() profileImageView = new EventEmitter(); @Output() uploadProfileImage = new EventEmitter(); @Output() updateIntro = new EventEmitter(); @ViewChild('profileImageFileInput', { static: false }) profileImageFileInput: ElementRef; userIntroFormControl = new FormControl(''); profileImageFileUploadItem: FileUploadItem; private ngOnDestroySubject = new Subject(); constructor(private i18nService: I18nService) {} ngOnInit(): void { console.log(this.isMe); } ngOnDestroy(): void { if (!!this.ngOnDestroySubject) { this.ngOnDestroySubject.complete(); } } onToggleFavorit() { this.toggleFavorite.emit({ userInfo: this.userInfo, isFavorite: !this.isFavorite }); } onClickToggleBuddy() { this.toggleBuddy.emit({ userInfo: this.userInfo, isBuddy: !this.isBuddy }); } onClickActionButton(event: MouseEvent, type: string): void { event.preventDefault(); event.stopPropagation(); switch (type) { case 'CHAT': this.onClickOpenChat(); break; case 'MESSAGE': this.onClickMessage(); break; case 'SMS': this.onClickSMS(); break; case 'CALL_MOBILE': this.onClickCall('MOBILE'); break; case 'CALL_LINE': this.onClickCall('LINE'); break; case 'CONFERENCE': this.onClickVideoConference(); break; } } onClickOpenChat() { this.openChat.emit(this.userInfo); } onClickCall(type: string) { let calleeNumber = ''; if (type === 'LINE') { calleeNumber = this.userInfo.lineNumber; } else { calleeNumber = this.userInfo.hpNumber; } this.sendCall.emit(calleeNumber); } onClickSMS() { this.sendSms.emit(this.userInfo.hpNumber); } onClickVideoConference() { this.createConference.emit(Number(this.userInfo.seq)); } onClickMessage() { this.sendMessage.emit(this.userInfo); } isDisabledCallButton(type: string): boolean { if (!this.myMadn || this.myMadn.trim().length === 0) { if (type === 'LINE' || type === 'MOBILE') { return true; } } if (type === 'LINE') { if ( !!this.userInfo && !!this.userInfo.lineNumber && this.userInfo.lineNumber.trim().length > 0 ) { return false; } else { return true; } } else if (type === 'MOBILE') { if ( !!this.userInfo && !!this.userInfo.hpNumber && this.userInfo.hpNumber.trim().length > 0 ) { return false; } else { return true; } } else if (type === 'SMS') { // const smsUtils = new SmsUtils( // this.sessionStorageService, // this.nativeService // ); // return !smsUtils.getAuthSms(); } return true; } /////////////////////////////////////////////// onClickProfileImageView() { this.profileImageView.emit(); } onApplyIntroMessage(intro: string) { if (intro.trim().length < 1) { this.updateIntro.emit(' '); } else { this.updateIntro.emit(intro); } } onChangeFileInput() { this.profileImageFileUploadItem = FileUploadItem.fromFiles( this.profileImageFileInput.nativeElement.files )[0]; this.uploadProfileImage.emit(this.profileImageFileUploadItem); this.profileImageFileInput.nativeElement.value = ''; } getWorkstatus(userInfo: UserInfoSS): string { let workstatus = ''; if (!!userInfo && !!userInfo.workstatus) { switch (userInfo.workstatus) { case WorkStatusType.VacationAM: workstatus = '오전'; break; case WorkStatusType.VacationPM: workstatus = '오후'; break; case WorkStatusType.VacationAll: workstatus = '휴가'; break; case WorkStatusType.LeaveOfAbsence: workstatus = '휴직'; break; case WorkStatusType.LongtermRefresh: workstatus = '장기'; break; } } return workstatus; } getWorkstatusStyle(userInfo: UserInfoSS): string { // morning-off: 오전 afternoon-off: 오후 day-off: 휴가 long-time: 장기 leave-of-absence: 휴직 let style = ''; if (!!userInfo && !!userInfo.workstatus) { switch (userInfo.workstatus) { case WorkStatusType.VacationAM: style = 'morning-off'; break; case WorkStatusType.VacationPM: style = 'afternoon-off'; break; case WorkStatusType.VacationAll: style = 'day-off'; break; case WorkStatusType.LeaveOfAbsence: style = 'leave-of-absence'; break; case WorkStatusType.LongtermRefresh: style = 'long-time'; break; } } return style; } }