mirror of
https://github.com/Alfresco/alfresco-ng2-components.git
synced 2025-05-12 17:04:57 +00:00
* [ADF-2726] start fixing the show of files loaded from CS * [ADF-2726] start fixing the show of files loaded from CS * [ADF-2726] fixed save content for external repository| * [ADF-2726] fixed save content for external repository| * [ADF-2726] reeanabled and fixed the tests * [ADF-2726] reeanabled and fixed the tests * [ADF-2726] added tests for attach file widget and activiti alfresco service * [ADF-2726] added tests for attach file widget and activiti alfresco service * [ADF-2726] fixed test
208 lines
7.0 KiB
TypeScript
208 lines
7.0 KiB
TypeScript
/*!
|
|
* @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, ViewEncapsulation, OnInit } from '@angular/core';
|
|
import {
|
|
UploadWidgetComponent,
|
|
FormService,
|
|
LogService,
|
|
ThumbnailService,
|
|
ProcessContentService,
|
|
ActivitiContentService,
|
|
ContentService,
|
|
FormEvent
|
|
} from '@alfresco/adf-core';
|
|
import { ContentNodeDialogService } from '@alfresco/adf-content-services';
|
|
import { MinimalNodeEntryEntity } from 'alfresco-js-api';
|
|
import { Observable } from 'rxjs/Observable';
|
|
import 'rxjs/add/observable/from';
|
|
import { zip } from 'rxjs/observable/zip';
|
|
import { of } from 'rxjs/observable/of';
|
|
|
|
@Component({
|
|
selector: 'attach-widget',
|
|
templateUrl: './attach-file-widget.component.html',
|
|
styleUrls: ['./attach-file-widget.component.scss'],
|
|
host: {
|
|
'(click)': 'event($event)',
|
|
'(blur)': 'event($event)',
|
|
'(change)': 'event($event)',
|
|
'(focus)': 'event($event)',
|
|
'(focusin)': 'event($event)',
|
|
'(focusout)': 'event($event)',
|
|
'(input)': 'event($event)',
|
|
'(invalid)': 'event($event)',
|
|
'(select)': 'event($event)'
|
|
},
|
|
encapsulation: ViewEncapsulation.None
|
|
})
|
|
export class AttachFileWidgetComponent extends UploadWidgetComponent implements OnInit {
|
|
|
|
repositoryList = [];
|
|
private tempFilesList = [];
|
|
|
|
constructor(public formService: FormService,
|
|
private logger: LogService,
|
|
public thumbnails: ThumbnailService,
|
|
public processContentService: ProcessContentService,
|
|
private activitiContentService: ActivitiContentService,
|
|
private contentService: ContentService,
|
|
private contentDialog: ContentNodeDialogService) {
|
|
super(formService, logger, thumbnails, processContentService);
|
|
}
|
|
|
|
ngOnInit() {
|
|
if (this.field &&
|
|
this.field.value &&
|
|
this.field.value.length > 0) {
|
|
this.hasFile = true;
|
|
}
|
|
this.getMultipleFileParam();
|
|
|
|
this.activitiContentService.getAlfrescoRepositories(null, true).subscribe((repoList) => {
|
|
this.repositoryList = repoList;
|
|
});
|
|
|
|
this.formService.taskSaved.subscribe((formSaved: FormEvent) => {
|
|
if (formSaved.form.id === this.field.form.id) {
|
|
this.tempFilesList = [];
|
|
}
|
|
});
|
|
}
|
|
|
|
isFileSourceConfigured(): boolean {
|
|
return !!this.field.params && !!this.field.params.fileSource;
|
|
}
|
|
|
|
isMultipleSourceUpload(): boolean {
|
|
return !this.field.readOnly && this.isFileSourceConfigured() && !this.isOnlyLocalSourceSelected();
|
|
}
|
|
|
|
isAllFileSourceSelected(): boolean {
|
|
return this.field.params &&
|
|
this.field.params.fileSource &&
|
|
this.field.params.fileSource.serviceId === 'all-file-sources';
|
|
}
|
|
|
|
isOnlyLocalSourceSelected(): boolean {
|
|
return this.field.params &&
|
|
this.field.params.fileSource &&
|
|
this.field.params.fileSource.serviceId === 'local-file';
|
|
}
|
|
|
|
isSimpleUploadButton(): boolean {
|
|
return this.isUploadButtonVisible() &&
|
|
!this.isFileSourceConfigured() ||
|
|
this.isOnlyLocalSourceSelected();
|
|
}
|
|
|
|
isUploadButtonVisible(): boolean {
|
|
return (!this.hasFile || this.multipleOption) && !this.field.readOnly;
|
|
}
|
|
|
|
isDefinedSourceFolder(): boolean {
|
|
return !!this.field.params &&
|
|
!!this.field.params.fileSource &&
|
|
!!this.field.params.fileSource.selectedFolder;
|
|
}
|
|
|
|
isTemporaryFile(file): boolean {
|
|
return this.tempFilesList.findIndex((elem) => elem.name === file.name) >= 0;
|
|
}
|
|
|
|
openSelectDialogFromFileSource() {
|
|
let params = this.field.params;
|
|
if (this.isDefinedSourceFolder()) {
|
|
this.contentDialog.openFileBrowseDialogByFolderId(params.fileSource.selectedFolder.pathId).subscribe(
|
|
(selections: MinimalNodeEntryEntity[]) => {
|
|
this.tempFilesList.push(...selections);
|
|
this.uploadFileFromCS(selections,
|
|
this.field.params.fileSource.selectedFolder.accountId,
|
|
this.field.params.fileSource.selectedFolder.siteId);
|
|
});
|
|
}
|
|
}
|
|
|
|
onAttachFileChanged(event: any) {
|
|
this.tempFilesList.push(...Array.from(event.target.files));
|
|
this.onFileChanged(event);
|
|
}
|
|
|
|
onRemoveAttachFile(file: any) {
|
|
if (this.isTemporaryFile(file)) {
|
|
this.tempFilesList.splice(this.tempFilesList.indexOf(file.contentBlob), 1);
|
|
}
|
|
this.removeFile(file);
|
|
}
|
|
|
|
onAttachFileClicked(file: any) {
|
|
if (this.isTemporaryFile(file)) {
|
|
this.formService.formContentClicked.next(file);
|
|
} else {
|
|
this.fileClicked(file);
|
|
}
|
|
}
|
|
|
|
downloadContent(file: any): void {
|
|
if (this.isTemporaryFile(file)) {
|
|
this.contentService.downloadBlob(file, file.name);
|
|
} else {
|
|
this.processContentService.getFileRawContent(file.id).subscribe(
|
|
(blob: Blob) => {
|
|
this.contentService.downloadBlob(blob, file.name);
|
|
},
|
|
(err) => {
|
|
this.logger.error('Impossible retrieve content for download');
|
|
}
|
|
);
|
|
}
|
|
}
|
|
|
|
openSelectDialog(repoId: string, repoName: string) {
|
|
const accountIdentifier = 'alfresco-' + repoId + '-' + repoName;
|
|
this.contentDialog.openFileBrowseDialogBySite().subscribe(
|
|
(selections: MinimalNodeEntryEntity[]) => {
|
|
this.tempFilesList.push(...selections);
|
|
this.uploadFileFromCS(selections, accountIdentifier);
|
|
});
|
|
}
|
|
|
|
private uploadFileFromCS(fileNodeList: MinimalNodeEntryEntity[], accountId: string, siteId?: string) {
|
|
let filesSaved = [];
|
|
Observable.from(fileNodeList)
|
|
.mergeMap(node =>
|
|
zip(of(node.content.mimeType), this.activitiContentService.applyAlfrescoNode(node,
|
|
siteId,
|
|
accountId))
|
|
).subscribe(([mymeType, res]) => {
|
|
res.mimeType = mymeType;
|
|
filesSaved.push(res);
|
|
},
|
|
(error) => {
|
|
this.logger.error(error);
|
|
},
|
|
() => {
|
|
this.field.value = filesSaved;
|
|
this.field.json.value = filesSaved;
|
|
this.hasFile = true;
|
|
});
|
|
}
|
|
|
|
}
|