/*! * @license * Copyright 2016 Alfresco Software, Ltd. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ /* tslint:disable:component-selector */ import { Component, ElementRef, OnInit, ViewChild, ViewEncapsulation } from '@angular/core'; import { LogService, ThumbnailService } from 'ng2-alfresco-core'; import { Observable } from 'rxjs/Rx'; import { FormService } from '../../../services/form.service'; import { ProcessContentService } from '../../../services/process-content.service'; import { ContentLinkModel } from '../core/content-link.model'; import { baseHost, WidgetComponent } from './../widget.component'; @Component({ selector: 'upload-widget', templateUrl: './upload.widget.html', styleUrls: ['./upload.widget.scss'], host: baseHost, encapsulation: ViewEncapsulation.None }) export class UploadWidgetComponent extends WidgetComponent implements OnInit { hasFile: boolean; displayText: string; multipleOption: string = ''; mimeTypeIcon: string; @ViewChild('uploadFiles') fileInput: ElementRef; constructor(public formService: FormService, private logService: LogService, private thumbnailService: ThumbnailService, public processContentService: ProcessContentService) { super(formService); } ngOnInit() { if (this.field && this.field.value && this.field.value.length > 0) { this.hasFile = true; } this.getMultipleFileParam(); } removeFile(file: any) { if (this.field) { this.removeElementFromList(file); } } onFileChanged(event: any) { let files = event.target.files; let filesSaved = []; if (this.field.json.value) { filesSaved = [...this.field.json.value]; } if (files && files.length > 0) { Observable.from(files).flatMap(file => this.uploadRawContent(file)).subscribe((res) => { filesSaved.push(res); }, (error) => { this.logService.error('Error uploading file. See console output for more details.'); }, () => { this.field.value = filesSaved; this.field.json.value = filesSaved; }); this.hasFile = true; } } private uploadRawContent(file): Observable { return this.processContentService.createTemporaryRawRelatedContent(file) .map((response: any) => { this.logService.info(response); return response; }); } private getMultipleFileParam() { if (this.field && this.field.params && this.field.params.multiple) { this.multipleOption = this.field.params.multiple ? 'multiple' : ''; } } private removeElementFromList(file) { let index = this.field.value.indexOf(file); if (index !== -1) { this.field.value.splice(index, 1); this.field.json.value = this.field.value; this.field.updateForm(); } this.hasFile = this.field.value.length > 0; this.resetFormValueWithNoFiles(); } private resetFormValueWithNoFiles() { if (this.field.value.length === 0) { this.field.value = []; this.field.json.value = []; } } getIcon(mimeType) { return this.thumbnailService.getMimeTypeIcon(mimeType); } fileClicked(file: ContentLinkModel): void { this.processContentService.getFileRawContent(file.id).subscribe( (blob: Blob) => { file.contentBlob = blob; this.formService.formContentClicked.next(file); }, (error) => { this.logService.error('Unable to send evento for file ' + file.name); } ); } }