import { Component, OnInit, OnDestroy, Inject } from '@angular/core'; import { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material'; import { NGXLogger } from 'ngx-logger'; import { DeviceType } from '@ucap-webmessenger/core'; import { FileDownloadItem } from '@ucap-webmessenger/api'; import { CommonApiService } from '@ucap-webmessenger/api-common'; import { AppFileService } from '@app/services/file.service'; import { FileInfo, isMedia } from '@ucap-webmessenger/protocol-file'; import { SelectFileInfo } from '@ucap-webmessenger/ui'; export interface FileViewerDialogData { fileInfos: FileInfo[]; selectFileInfo: SelectFileInfo; downloadUrl: string; userSeq: number; deviceType: DeviceType; token: string; } export interface FileViewerDialogResult {} @Component({ selector: 'app-layout-common-file-viewer', templateUrl: './file-viewer.dialog.component.html', styleUrls: ['./file-viewer.dialog.component.scss'] }) export class FileViewerDialogComponent implements OnInit, OnDestroy { isMediaType: boolean; fileInfo: { fileInfos: FileInfo[]; selectFileInfo: SelectFileInfo; }; currentFileInfo: FileInfo; constructor( public dialogRef: MatDialogRef< FileViewerDialogData, FileViewerDialogResult >, @Inject(MAT_DIALOG_DATA) public data: FileViewerDialogData, private commonApiService: CommonApiService, private appFileService: AppFileService, private logger: NGXLogger ) { this.currentFileInfo = this.data.fileInfos.find( f => f.seq === this.data.selectFileInfo.attachmentSeq ); if (!this.currentFileInfo) { this.logger.warn( 'file info is exist', this.data.fileInfos, this.data.selectFileInfo ); this.dialogRef.close(); return; } this.isMediaType = isMedia(this.currentFileInfo); this.fileInfo = { fileInfos: this.data.fileInfos.filter(f => { const i = isMedia(f); return this.isMediaType ? i : !i; }), selectFileInfo: this.data.selectFileInfo }; } ngOnInit() {} ngOnDestroy(): void {} onDownload(info: { attachmentSeq?: number; downloadUrl?: string; fileName: string; fileDownloadItem: FileDownloadItem; }): void { this.appFileService.fileTalkDownlod({ req: { userSeq: this.data.userSeq, deviceType: this.data.deviceType, token: this.data.token, attachmentsSeq: info.attachmentSeq, fileDownloadItem: info.fileDownloadItem }, directDownloadUrl: info.downloadUrl, fileName: info.fileName, fileDownloadUrl: this.data.downloadUrl }); } onClosedViewer(): void { this.dialogRef.close(); } fileDownloadUrl = (attachmentSeq: number) => { return this.commonApiService.urlForFileTalkDownload( { userSeq: this.data.userSeq, deviceType: this.data.deviceType, token: this.data.token, attachmentsSeq: attachmentSeq }, this.data.downloadUrl ); }; }