112 lines
3.0 KiB
TypeScript
112 lines
3.0 KiB
TypeScript
|
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
|
||
|
);
|
||
|
};
|
||
|
}
|