diff --git a/demo-shell/src/app/components/process-service/process-attachments.component.ts b/demo-shell/src/app/components/process-service/process-attachments.component.ts index 06dd45dce5..66b83cafac 100644 --- a/demo-shell/src/app/components/process-service/process-attachments.component.ts +++ b/demo-shell/src/app/components/process-service/process-attachments.component.ts @@ -18,13 +18,13 @@ import { Component, Input, OnChanges, OnInit, ViewChild, OnDestroy } from '@angular/core'; import { ProcessInstance, ProcessService , ProcessAttachmentListComponent, ProcessUploadService } from '@alfresco/adf-process-services'; -import { UploadService, AlfrescoApiService, AppConfigService } from '@alfresco/adf-core'; +import { UploadService, AlfrescoApiService, AppConfigService, DiscoveryApiService } from '@alfresco/adf-core'; import { PreviewService } from '../../services/preview.service'; import { Subject } from 'rxjs'; import { takeUntil } from 'rxjs/operators'; -export function processUploadServiceFactory(api: AlfrescoApiService, config: AppConfigService) { - return new ProcessUploadService(api, config); +export function processUploadServiceFactory(api: AlfrescoApiService, config: AppConfigService, discoveryApiService: DiscoveryApiService) { + return new ProcessUploadService(api, config, discoveryApiService); } @Component({ @@ -35,7 +35,7 @@ export function processUploadServiceFactory(api: AlfrescoApiService, config: App { provide: UploadService, useFactory: (processUploadServiceFactory), - deps: [AlfrescoApiService, AppConfigService] + deps: [AlfrescoApiService, AppConfigService, DiscoveryApiService] } ] }) diff --git a/demo-shell/src/app/components/process-service/task-attachments.component.ts b/demo-shell/src/app/components/process-service/task-attachments.component.ts index 47a114d697..38529272d5 100644 --- a/demo-shell/src/app/components/process-service/task-attachments.component.ts +++ b/demo-shell/src/app/components/process-service/task-attachments.component.ts @@ -22,13 +22,13 @@ import { TaskUploadService, TaskDetailsModel } from '@alfresco/adf-process-services'; -import { UploadService, AlfrescoApiService, AppConfigService } from '@alfresco/adf-core'; +import { UploadService, AlfrescoApiService, AppConfigService, DiscoveryApiService } from '@alfresco/adf-core'; import { PreviewService } from '../../services/preview.service'; import { Subject } from 'rxjs'; import { takeUntil } from 'rxjs/operators'; -export function taskUploadServiceFactory(api: AlfrescoApiService, config: AppConfigService) { - return new TaskUploadService(api, config); +export function taskUploadServiceFactory(api: AlfrescoApiService, config: AppConfigService, discoveryApiService: DiscoveryApiService) { + return new TaskUploadService(api, config, discoveryApiService); } @Component({ @@ -39,7 +39,7 @@ export function taskUploadServiceFactory(api: AlfrescoApiService, config: AppCon { provide: UploadService, useFactory: (taskUploadServiceFactory), - deps: [AlfrescoApiService, AppConfigService] + deps: [AlfrescoApiService, AppConfigService, DiscoveryApiService] } ] }) diff --git a/lib/core/services/discovery-api.service.ts b/lib/core/services/discovery-api.service.ts index 5f3c643898..c13828a0fc 100644 --- a/lib/core/services/discovery-api.service.ts +++ b/lib/core/services/discovery-api.service.ts @@ -16,21 +16,34 @@ */ import { Injectable } from '@angular/core'; -import { from, throwError, Observable } from 'rxjs'; +import { from, merge, Observable, BehaviorSubject, throwError } from 'rxjs'; import { BpmProductVersionModel, EcmProductVersionModel } from '../models/product-version.model'; import { AlfrescoApiService } from './alfresco-api.service'; -import { map, catchError } from 'rxjs/operators'; -import { - SystemPropertiesRepresentation, - Activiti - } from '@alfresco/js-api'; +import { catchError, filter, map, switchMap } from 'rxjs/operators'; +import { Activiti, SystemPropertiesRepresentation } from '@alfresco/js-api'; +import { AuthenticationService } from './authentication.service'; @Injectable({ providedIn: 'root' }) export class DiscoveryApiService { - constructor(private apiService: AlfrescoApiService) { } + /** + * Gets product information for Content Services. + */ + ecmProductInfo$ = new BehaviorSubject(null); + + constructor( + private apiService: AlfrescoApiService, + private authenticationService: AuthenticationService) { + + merge(this.apiService.alfrescoApiInitialized, this.authenticationService.onLogin) + .pipe( + filter(() => this.apiService.getInstance()?.isEcmLoggedIn()), + switchMap(() => this.getEcmProductInfo()) + ) + .subscribe((info) => this.ecmProductInfo$.next(info)); + } /** * Gets product information for Content Services. @@ -63,10 +76,10 @@ export class DiscoveryApiService { public getBPMSystemProperties(): Observable { return from(this.systemPropertiesApi.getProperties()) .pipe( - map( (res) => { - if ('string' === typeof(res)) { + map((res) => { + if ('string' === typeof (res)) { throw new Error('Not valid response'); - } + } return res; }), catchError((err) => throwError(err.error)) diff --git a/lib/core/services/upload.service.spec.ts b/lib/core/services/upload.service.spec.ts index 8bc31ed2cd..9953590c2a 100644 --- a/lib/core/services/upload.service.spec.ts +++ b/lib/core/services/upload.service.spec.ts @@ -27,18 +27,30 @@ import { setupTestBed } from '../testing/setup-test-bed'; import { CoreTestingModule } from '../testing/core.testing.module'; import { AssocChildBody, AssociationBody } from '@alfresco/js-api'; import { TranslateModule } from '@ngx-translate/core'; +import { DiscoveryApiService } from './discovery-api.service'; +import { BehaviorSubject } from 'rxjs'; +import { EcmProductVersionModel } from '../models'; declare let jasmine: any; describe('UploadService', () => { let service: UploadService; let alfrescoApiService: AlfrescoApiService; + const mockProductInfo = new BehaviorSubject(null); setupTestBed({ imports: [ TranslateModule.forRoot(), CoreTestingModule, AppConfigModule + ], + providers: [ + { + provide: DiscoveryApiService, + useValue: { + ecmProductInfo$: mockProductInfo + } + } ] }); @@ -67,6 +79,7 @@ describe('UploadService', () => { service.queue = []; service.activeTask = null; jasmine.Ajax.install(); + mockProductInfo.next({ status: { isThumbnailGenerationEnabled: true } } as EcmProductVersionModel); }); afterEach(() => { @@ -425,4 +438,28 @@ describe('UploadService', () => { expect(service.fileUploadCancelled.next).toHaveBeenCalled(); })); + + it('Should not pass rendition if it is disabled', () => { + mockProductInfo.next({ status: { isThumbnailGenerationEnabled: false } } as EcmProductVersionModel); + + const uploadFileSpy = spyOn(alfrescoApiService.getInstance().upload, 'uploadFile').and.callThrough(); + const emitter = new EventEmitter(); + + const filesFake = new FileModel( { name: 'fake-name', size: 10 }, { + newVersion: true + }); + service.addToQueue(filesFake); + service.uploadFilesInTheQueue(emitter); + + expect(uploadFileSpy).toHaveBeenCalledWith({ + name: 'fake-name', + size: 10 + }, undefined, undefined, { newVersion: true }, { + include: ['allowableOperations'], + overwrite: true, + majorVersion: undefined, + comment: undefined, + name: 'fake-name' + }); + }); }); diff --git a/lib/core/services/upload.service.ts b/lib/core/services/upload.service.ts index 4619eed88b..f3bc6b6aa9 100644 --- a/lib/core/services/upload.service.ts +++ b/lib/core/services/upload.service.ts @@ -27,6 +27,8 @@ import { } from '../events/file.event'; import { FileModel, FileUploadProgress, FileUploadStatus } from '../models/file.model'; import { AlfrescoApiService } from './alfresco-api.service'; +import { DiscoveryApiService } from './discovery-api.service'; +import { filter } from 'rxjs/operators'; const MIN_CANCELLABLE_FILE_SIZE = 1000000; const MAX_CANCELLABLE_FILE_PERCENTAGE = 50; @@ -44,6 +46,7 @@ export class UploadService { private matchingOptions: any = null; private folderMatchingOptions: any = null; private abortedFile: string; + private isThumbnailGenerationEnabled: boolean; activeTask: Promise = null; queue: FileModel[] = []; @@ -73,8 +76,15 @@ export class UploadService { >(); fileDeleted: Subject = new Subject(); - constructor(protected apiService: AlfrescoApiService, private appConfigService: AppConfigService) { + constructor( + protected apiService: AlfrescoApiService, + private appConfigService: AppConfigService, + private discoveryApiService: DiscoveryApiService) { + this.discoveryApiService.ecmProductInfo$.pipe(filter(info => !!info)) + .subscribe(({ status }) => { + this.isThumbnailGenerationEnabled = status.isThumbnailGenerationEnabled; + }); } /** @@ -220,10 +230,13 @@ export class UploadService { */ getUploadPromise(file: FileModel): any { const opts: any = { - renditions: 'doclib', include: ['allowableOperations'] }; + if (this.isThumbnailGenerationEnabled) { + opts.renditions = 'doclib'; + } + if (file.options.newVersion === true) { opts.overwrite = true; opts.majorVersion = file.options.majorVersion; diff --git a/lib/process-services/src/lib/task-list/services/process-upload.service.ts b/lib/process-services/src/lib/task-list/services/process-upload.service.ts index 79b80d1601..578da6a2c9 100644 --- a/lib/process-services/src/lib/task-list/services/process-upload.service.ts +++ b/lib/process-services/src/lib/task-list/services/process-upload.service.ts @@ -15,7 +15,7 @@ * limitations under the License. */ -import { AlfrescoApiService, AppConfigService, UploadService } from '@alfresco/adf-core'; +import { AlfrescoApiService, AppConfigService, DiscoveryApiService, UploadService } from '@alfresco/adf-core'; import { Injectable } from '@angular/core'; import { throwError } from 'rxjs'; @@ -24,8 +24,8 @@ import { throwError } from 'rxjs'; }) export class ProcessUploadService extends UploadService { - constructor(apiService: AlfrescoApiService, appConfigService: AppConfigService) { - super(apiService, appConfigService); + constructor(protected apiService: AlfrescoApiService, appConfigService: AppConfigService, discoveryApiService: DiscoveryApiService) { + super(apiService, appConfigService, discoveryApiService); } getUploadPromise(file: any): any { diff --git a/lib/process-services/src/lib/task-list/services/task-upload.service.ts b/lib/process-services/src/lib/task-list/services/task-upload.service.ts index 79ec62fbd9..5475875f58 100644 --- a/lib/process-services/src/lib/task-list/services/task-upload.service.ts +++ b/lib/process-services/src/lib/task-list/services/task-upload.service.ts @@ -15,7 +15,7 @@ * limitations under the License. */ -import { AlfrescoApiService, AppConfigService, UploadService } from '@alfresco/adf-core'; +import { AlfrescoApiService, AppConfigService, DiscoveryApiService, UploadService } from '@alfresco/adf-core'; import { Injectable } from '@angular/core'; import { throwError } from 'rxjs'; @@ -24,8 +24,8 @@ import { throwError } from 'rxjs'; }) export class TaskUploadService extends UploadService { - constructor(apiService: AlfrescoApiService, appConfigService: AppConfigService) { - super(apiService, appConfigService); + constructor(protected apiService: AlfrescoApiService, appConfigService: AppConfigService, discoveryApiService: DiscoveryApiService) { + super(apiService, appConfigService, discoveryApiService); } getUploadPromise(file: any): any {