blob: 63c586c549cdf12c0213c4530655d72373814bc2 [file] [log] [blame]
/********************************************************************************
* Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
*
* See the NOTICE file(s) distributed with this work for additional
* information regarding copyright ownership.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0.
*
* SPDX-License-Identifier: EPL-2.0
*
********************************************************************************/
import { Component, OnInit, ViewChild, ElementRef} from '@angular/core';
import { ConfirmationService, DynamicDialogRef, DynamicDialogConfig } from 'primeng/api';
import { TranslateService } from '@ngx-translate/core';
import { MDMLink } from '@navigator/node';
import { FileUploadRow } from '../../model/file-explorer.model';
import { FileReaderService } from '../../services/file-reader.service';
import { ContextFilesService } from '../../services/context-files.service';
import { FileService } from '../../services/file.service';
import { ContextAttributeIdentifier } from '@details/model/details.model';
import { FileSizePipe } from '@file-explorer/pipes/file-size.pipe';
@Component({
selector: 'mdm5-file-link-editor-dialog',
templateUrl: './file-link-editor-dialog.component.html',
styleUrls: ['../file-explorer.css'],
providers: [ConfirmationService]
})
export class FileLinkEditorDialogComponent implements OnInit {
@ViewChild('fileinput') input: ElementRef;
public ident: ContextAttributeIdentifier;
public link: MDMLink;
public file: File;
// private translationSub: Subscription;
constructor(private translateService: TranslateService,
private contextFilesService: ContextFilesService,
private confirmationService: ConfirmationService,
private fileReaderService: FileReaderService,
private fileService: FileService,
public ref: DynamicDialogRef,
public config: DynamicDialogConfig,
private fileSizePipe: FileSizePipe) {}
ngOnInit() {
if (this.config != undefined) {
this.ident = this.config.data.ident as ContextAttributeIdentifier;
}
this.link = this.getLink();
this.loadSizeLazy();
}
public onUpload(event: Event) {
this.input.nativeElement.click();
}
private loadSizeLazy() {
if (this.link != undefined && Object.keys(this.link).length !== 0) {
this.contextFilesService.loadFileSize(this.link, this.ident)
.subscribe(fileSize => this.link.size = fileSize.size);
}
}
// listener to add files to upload selection
public onSelectFileForUpload(event: Event) {
const target = event.target as HTMLInputElement;
const files: FileList = target.files;
for (let i = 0; i < files.length; i++) {
this.file = files[i];
const l = new MDMLink();
l.description = this.file.name;
l.mimeType = this.file.type || 'application/octet-stream';
l.size = this.fileSizePipe.transform(this.file.size);
this.link = l;
}
}
private getLink() {
if (this.ident != undefined && this.ident.attribute != undefined) {
const value = this.ident.attribute.value[this.ident.contextGroup];
// if (value != undefined && value !== '') {
return Object.assign(new MDMLink(), value as MDMLink);
// }
}
}
// // listener to load blob from db and initialize download dialog for saving file to local filesystem.
// public onDownloadFile(event: Event) {
// // const link = this.getLink();
// if (this.link != undefined && this.ident.contextComponent != undefined && this.ident.contextGroup != undefined) {
// this.contextFilesService.loadFile(this.link, this.ident).subscribe(blob => FileSaver.saveAs(blob, this.link.getFileName()));
// }
// }
// // listener for file preview
// public onPreviewFile(event: Event) {
// // const link = this.getLink();
// if (this.link != undefined && this.ident.contextComponent != undefined && this.ident.contextGroup != undefined) {
// this.contextFilesService.loadFile(this.link, this.ident)
// .subscribe(blob => this.preview(blob));
// }
// }
// // handle preview for different browsers. Opens download dialog if preview not possible.
// private preview(blob: Blob) {
// // const link = this.getLink();
// if (this.link != undefined) {
// if (window.navigator && window.navigator.msSaveOrOpenBlob) {
// window.navigator.msSaveOrOpenBlob(blob, this.link.getFileName());
// } else {
// window.open(URL.createObjectURL(blob), this.link.getFileName());
// }
// }
// }
// listener for delete file button. Opens confirm dialog.
public onDeleteFile(event: Event) {
this.translateService.get('file-explorer.file-explorer.msg-confirm-delete-file-from-db')
.subscribe(msg =>
this.confirmationService.confirm({
message: msg,
key: 'filePopUpConfirmation',
accept: () => this.deleteFileConfirmed()
})
);
}
// Actually triggers file delete from db, when confirmed in delete dialog
private deleteFileConfirmed() {
const link = this.getLink();
if (link != undefined) {
this.contextFilesService.deleteFile(link, this.ident).subscribe(l => this.handleDelete(l));
}
this.ref.close();
}
/**
* Handles delete.
* @param link the deleted link
*/
private handleDelete(link: MDMLink) {
this.ident.attribute.value[this.ident.contextGroup] = undefined;
}
private handleUplaod(link: MDMLink) {
this.ident.attribute.value[this.ident.contextGroup] = link;
}
public async onSave(event: Event) {
if (this.file != undefined && this.link.remotePath == undefined) {
const dataUrl = await this.fileReaderService.readFile(this.file);
const row = new FileUploadRow(this.file, this.link.description, dataUrl);
this.contextFilesService.uploadFile(row, this.ident).subscribe(link => this.handleUplaod(link));
} else {
this.ident.attribute.value[this.ident.contextGroup] = this.link;
}
this.ref.close();
}
public onCancel(event: Event) {
this.ref.close();
}
}