import { Component, OnInit, Inject, ViewChild } from '@angular/core'; import { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material'; import { DialogService, SnackBarService } from '@ucap-webmessenger/ui'; import { DetailResponse, DetailContent, MessageApiService, DetailReceiver, MessageType } from '@ucap-webmessenger/api-message'; import { LoginResponse } from '@ucap-webmessenger/protocol-authentication'; import { NGXLogger } from 'ngx-logger'; import { MessageStatusCode } from '@ucap-webmessenger/api'; import { WriteComponent as UCapMessageWriteComponent, Message, MessageModify } from '@ucap-webmessenger/ui-message'; import { UserInfo } from '@ucap-webmessenger/protocol-sync'; import { CreateChatDialogComponent, CreateChatDialogData, CreateChatDialogResult } from '../chat/create-chat.dialog.component'; import { UserSelectDialogType, EnvironmentsInfo } from '@app/types'; import { take } from 'rxjs/operators'; import { UserInfoSS } from '@ucap-webmessenger/protocol-query'; export interface MessageWriteDialogData { loginRes: LoginResponse; environmentsInfo: EnvironmentsInfo; detail?: DetailResponse; detailContents?: string; receiverList?: (UserInfo | UserInfoSS)[]; } // tslint:disable-next-line: no-empty-interface export interface MessageWriteDialogResult { sendFlag: boolean; sendType?: MessageType; } export interface DownloadQueueForMessage extends DetailContent { downloadType: string; } @Component({ selector: 'app-layout-messenger-message-write', templateUrl: './message-write.dialog.component.html', styleUrls: ['./message-write.dialog.component.scss'] }) export class MessageWriteDialogComponent implements OnInit { @ViewChild('messageWrite', { static: true }) messageWrite: UCapMessageWriteComponent; isModify = false; constructor( public dialogRef: MatDialogRef< MessageWriteDialogData, MessageWriteDialogResult >, @Inject(MAT_DIALOG_DATA) public data: MessageWriteDialogData, private messageApiService: MessageApiService, private snackBarService: SnackBarService, private logger: NGXLogger, private dialogService: DialogService ) {} ngOnInit(): void { if (!!this.data.detail && !!this.data.detail.msgInfo) { this.isModify = true; } } async onSelectReceiver(receiverList: UserInfo[]) { const result = await this.dialogService.open< CreateChatDialogComponent, CreateChatDialogData, CreateChatDialogResult >(CreateChatDialogComponent, { width: '600px', data: { type: UserSelectDialogType.EditChatMember, title: '쪽지 수신자 선택', curRoomUser: receiverList } }); if (!!result && !!result.choice && result.choice) { while (receiverList.length) { receiverList.pop(); } result.selectedUserList.forEach(v => { receiverList.push(v as UserInfo); }); } } onSend(message: Message | MessageModify) { if (this.isModify) { this.onModifySend(message as MessageModify); } else { this.onNewSend(message as Message); } } onNewSend(message: Message) { this.messageApiService .sendMessage({ ...message, userSeq: this.data.loginRes.userInfo.seq, userName: this.data.loginRes.userInfo.name, deviceType: this.data.environmentsInfo.deviceType, tokenKey: this.data.loginRes.tokenString, titleYn: '' !== message.title ? true : false }) .pipe(take(1)) .subscribe( res => { let msg = ''; if (!!message.reservationTime) { msg = `쪽지 전송을 예약 하였습니다.`; } else { msg = `쪽지를 전송하였습니다.`; } this.snackBarService.open(msg, '', { duration: 3000, verticalPosition: 'bottom' }); this.dialogRef.close({ sendFlag: true, sendType: message.type }); }, error => { this.snackBarService.open(`쪽지를 전송에 실패 하였습니다.`, '', { duration: 3000, verticalPosition: 'bottom' }); // this.dialogRef.close({}); } ); } onModifySend(message: MessageModify) { this.messageApiService .editReservationMessageEx({ ...message, userSeq: this.data.loginRes.userInfo.seq, deviceType: this.data.environmentsInfo.deviceType, tokenKey: this.data.loginRes.tokenString, titleYn: '' !== message.title ? true : false }) .pipe(take(1)) .subscribe( res => { this.snackBarService.open('쪽지를 수정하였습니다.', '', { duration: 3000, verticalPosition: 'bottom' }); this.dialogRef.close({ sendFlag: true, sendType: message.type }); }, error => { this.snackBarService.open(`쪽지 수정에 실패 하였습니다.`, '', { duration: 3000, verticalPosition: 'bottom' }); // this.dialogRef.close({}); } ); } onCancel() { this.dialogRef.close({ sendFlag: false }); } getBtnValid() { return true; } }