diff --git a/docs/process-content.service.md b/docs/process-content.service.md index c13f970eaf..fd9d293160 100644 --- a/docs/process-content.service.md +++ b/docs/process-content.service.md @@ -153,12 +153,12 @@ The response is going to be `null` if the delete was successful. See `getProcessRelatedContent` and `getTaskRelatedContent` for how to get to the `contentId`. -#### getContentThumbnailUrl(contentId: number): Observable +#### getContentThumbnail(contentId: number): Observable Get the thumbnail URL for related content (currently does not return this): ```ts const contentId = 6008; - this.contentService.getContentThumbnailUrl(contentId).subscribe( + this.contentService.getContentThumbnail(contentId).subscribe( res => { console.log('Response: ', res); }, error => { diff --git a/lib/core/form/components/widgets/content/content.widget.spec.ts b/lib/core/form/components/widgets/content/content.widget.spec.ts index 4e5bb29984..d98c6c1be7 100644 --- a/lib/core/form/components/widgets/content/content.widget.spec.ts +++ b/lib/core/form/components/widgets/content/content.widget.spec.ts @@ -162,7 +162,7 @@ describe('ContentWidgetComponent', () => { it('should load the thumbnail preview of a pdf', (done) => { let blob = createFakePdfBlob(); - spyOn(processContentService, 'getContentThumbnailUrl').and.returnValue(Observable.of(blob)); + spyOn(processContentService, 'getContentThumbnail').and.returnValue(Observable.of(blob)); component.thumbnailLoaded.subscribe((res) => { fixture.detectChanges(); @@ -244,6 +244,7 @@ describe('ContentWidgetComponent', () => { it('should open the viewer when the view button is clicked', (done) => { let blob = createFakePdfBlob(); + spyOn(processContentService, 'getContentPreview').and.returnValue(Observable.of(blob)); spyOn(processContentService, 'getFileRawContent').and.returnValue(Observable.of(blob)); component.content = new ContentLinkModel({ diff --git a/lib/core/form/components/widgets/content/content.widget.ts b/lib/core/form/components/widgets/content/content.widget.ts index 8fe6a7b923..5b68389278 100644 --- a/lib/core/form/components/widgets/content/content.widget.ts +++ b/lib/core/form/components/widgets/content/content.widget.ts @@ -85,7 +85,7 @@ export class ContentWidgetComponent implements OnChanges { if (this.content.isTypeImage()) { observable = this.processContentService.getFileRawContent(content.id); } else { - observable = this.processContentService.getContentThumbnailUrl(content.id); + observable = this.processContentService.getContentThumbnail(content.id); } if (observable) { @@ -104,7 +104,11 @@ export class ContentWidgetComponent implements OnChanges { } openViewer(content: ContentLinkModel): void { - this.processContentService.getFileRawContent(content.id).subscribe( + let fetch = this.processContentService.getContentPreview(content.id); + if (content.isTypeImage() || content.isTypePdf()) { + fetch = this.processContentService.getFileRawContent(content.id); + } + fetch.subscribe( (blob: Blob) => { content.contentBlob = blob; this.contentClick.emit(content); diff --git a/lib/core/form/components/widgets/upload/upload.widget.spec.ts b/lib/core/form/components/widgets/upload/upload.widget.spec.ts index eb29ecf3b4..ff751415e3 100644 --- a/lib/core/form/components/widgets/upload/upload.widget.spec.ts +++ b/lib/core/form/components/widgets/upload/upload.widget.spec.ts @@ -18,6 +18,8 @@ import { DebugElement } from '@angular/core'; import { async, ComponentFixture, TestBed } from '@angular/core/testing'; import { By } from '@angular/platform-browser'; +import { Observable } from 'rxjs/Rx'; + import { EcmModelService } from '../../../services/ecm-model.service'; import { FormService } from '../../../services/form.service'; import { ProcessContentService } from '../../../services/process-content.service'; @@ -60,6 +62,8 @@ declare let jasmine: any; describe('UploadWidgetComponent', () => { + let contentService: ProcessContentService; + let filePngFake = new File(['fakePng'], 'file-fake.png', {type: 'image/png'}); let filJpgFake = new File(['fakeJpg'], 'file-fake.jpg', {type: 'image/jpg'}); @@ -81,6 +85,7 @@ describe('UploadWidgetComponent', () => { uploadWidgetComponent = fixture.componentInstance; element = fixture.nativeElement; debugElement = fixture.debugElement; + contentService = TestBed.get(ProcessContentService); }); })); @@ -393,6 +398,9 @@ describe('UploadWidgetComponent', () => { it('should emit form content clicked event on icon click', (done) => { + spyOn(contentService, 'getContentPreview').and.returnValue(Observable.of(new Blob())); + spyOn(contentService, 'getFileRawContent').and.returnValue(Observable.of(new Blob())); + formServiceInstance.formContentClicked.subscribe((content: any) => { expect(content.name).toBe(fakeJpgAnswer.name); expect(content.id).toBe(fakeJpgAnswer.id); @@ -409,11 +417,6 @@ describe('UploadWidgetComponent', () => { fixture.whenStable().then(() => { let fileJpegIcon = debugElement.query(By.css('#file-1156-icon')); fileJpegIcon.nativeElement.dispatchEvent(new MouseEvent('click')); - jasmine.Ajax.requests.mostRecent().respondWith({ - status: 200, - contentType: 'json', - responseText: new Blob() - }); }); }); diff --git a/lib/core/form/components/widgets/upload/upload.widget.ts b/lib/core/form/components/widgets/upload/upload.widget.ts index 1fcfc71402..4cd4c4d824 100644 --- a/lib/core/form/components/widgets/upload/upload.widget.ts +++ b/lib/core/form/components/widgets/upload/upload.widget.ts @@ -129,14 +129,19 @@ export class UploadWidgetComponent extends WidgetComponent implements OnInit { return this.thumbnailService.getMimeTypeIcon(mimeType); } - fileClicked(file: ContentLinkModel): void { - this.processContentService.getFileRawContent(file.id).subscribe( + fileClicked(obj: any): void { + const file = new ContentLinkModel(obj); + let fetch = this.processContentService.getContentPreview(file.id); + if (file.isTypeImage() || file.isTypePdf()) { + fetch = this.processContentService.getFileRawContent(file.id); + } + fetch.subscribe( (blob: Blob) => { file.contentBlob = blob; this.formService.formContentClicked.next(file); }, (error) => { - this.logService.error('Unable to send evento for file ' + file.name); + this.logService.error('Unable to send event for file ' + file.name); } ); } diff --git a/lib/core/form/services/process-content.service.spec.ts b/lib/core/form/services/process-content.service.spec.ts index 036c20a5db..31adb52418 100644 --- a/lib/core/form/services/process-content.service.spec.ts +++ b/lib/core/form/services/process-content.service.spec.ts @@ -179,8 +179,8 @@ describe('ProcessContentService', () => { it('should return a Blob as thumbnail', (done) => { let contentId: number = 999; let blob = createFakeBlob(); - spyOn(service, 'getContentThumbnailUrl').and.returnValue(Observable.of(blob)); - service.getContentThumbnailUrl(contentId).subscribe(result => { + spyOn(service, 'getContentThumbnail').and.returnValue(Observable.of(blob)); + service.getContentThumbnail(contentId).subscribe(result => { expect(result).toEqual(jasmine.any(Blob)); expect(result.size).toEqual(48); expect(result.type).toEqual('image/png'); diff --git a/lib/core/form/services/process-content.service.ts b/lib/core/form/services/process-content.service.ts index 06fd3f77f2..e81071009a 100644 --- a/lib/core/form/services/process-content.service.ts +++ b/lib/core/form/services/process-content.service.ts @@ -46,12 +46,35 @@ export class ProcessContentService { return Observable.fromPromise(this.contentApi.getRawContent(contentId)).catch(err => this.handleError(err)); } + getContentPreview(contentId: number): Observable { + return new Observable(observer => { + this.contentApi.getContentPreview(contentId).then( + (result) => { + observer.next(result); + observer.complete(); + }, + () => { + this.contentApi.getRawContent(contentId).then( + (data) => { + observer.next(data); + observer.complete(); + }, + (err) => { + observer.error(err); + observer.complete(); + } + ); + } + ); + }); + } + getFileRawContentUrl(contentId: number): string { return this.contentApi.getRawContentUrl(contentId); } - getContentThumbnailUrl(contentId: number): Observable { - return Observable.fromPromise(this.contentApi.getContentThumbnailUrl(contentId)).catch(err => this.handleError(err)); + getContentThumbnail(contentId: number): Observable { + return Observable.fromPromise(this.contentApi.getContentThumbnail(contentId)).catch(err => this.handleError(err)); } getTaskRelatedContent(taskId: string): Observable {