diff --git a/ng2-components/ng2-activiti-processlist/src/components/activiti-process-attachment-list.component.css b/ng2-components/ng2-activiti-processlist/src/components/activiti-process-attachment-list.component.css deleted file mode 100644 index 170e76fd6c..0000000000 --- a/ng2-components/ng2-activiti-processlist/src/components/activiti-process-attachment-list.component.css +++ /dev/null @@ -1,17 +0,0 @@ -alfresco-datatable >>> .column-header { - color: #232323; - font-size: 15px; -} - -alfresco-datatable >>> .data-cell { - cursor: pointer !important; -} - -.no-attachment-message { - border: 1px solid rgb(224, 224, 224); - background: #fff; - text-align: left; - border-top: none; - padding: 10px; - text-align: center; -} diff --git a/ng2-components/ng2-activiti-processlist/src/components/activiti-process-attachment-list.component.html b/ng2-components/ng2-activiti-processlist/src/components/activiti-process-attachment-list.component.html deleted file mode 100644 index 3613ae89f9..0000000000 --- a/ng2-components/ng2-activiti-processlist/src/components/activiti-process-attachment-list.component.html +++ /dev/null @@ -1,15 +0,0 @@ -
- No Attachments Found -
- - - - - - - \ No newline at end of file diff --git a/ng2-components/ng2-activiti-processlist/src/components/activiti-process-attachment-list.component.spec.ts b/ng2-components/ng2-activiti-processlist/src/components/activiti-process-attachment-list.component.spec.ts deleted file mode 100644 index a9e11fdaec..0000000000 --- a/ng2-components/ng2-activiti-processlist/src/components/activiti-process-attachment-list.component.spec.ts +++ /dev/null @@ -1,210 +0,0 @@ -/*! - * @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. - */ - -import { SimpleChange } from '@angular/core'; -import { ComponentFixture, TestBed, async } from '@angular/core/testing'; -import { By } from '@angular/platform-browser'; -import { Observable } from 'rxjs/Rx'; - -import { AlfrescoTranslationService, CoreModule } from 'ng2-alfresco-core'; -import { ActivitiContentService } from 'ng2-activiti-form'; -import { DataTableModule } from 'ng2-alfresco-datatable'; - -import { ActivitiProcessAttachmentListComponent } from './activiti-process-attachment-list.component'; -import { TranslationMock } from './../assets/translation.service.mock'; - -describe('Activiti Process Instance Attachment List', () => { - - let componentHandler: any; - let service: ActivitiContentService; - let component: ActivitiProcessAttachmentListComponent; - let fixture: ComponentFixture; - let getProcessRelatedContentSpy: jasmine.Spy; - let deleteContentSpy: jasmine.Spy; - let getFileRawContentSpy: jasmine.Spy; - - beforeEach(async(() => { - TestBed.configureTestingModule({ - imports: [ - CoreModule.forRoot(), - DataTableModule.forRoot() - ], - declarations: [ - ActivitiProcessAttachmentListComponent - ], - providers: [ - { provide: AlfrescoTranslationService, useClass: TranslationMock }, - ActivitiContentService - ] - }).compileComponents(); - })); - - beforeEach(() => { - - fixture = TestBed.createComponent(ActivitiProcessAttachmentListComponent); - component = fixture.componentInstance; - service = fixture.debugElement.injector.get(ActivitiContentService); - - getProcessRelatedContentSpy = spyOn(service, 'getProcessRelatedContent').and.returnValue(Observable.of( - { - 'size': 2, - 'total': 2, - 'start': 0, - 'data': [{ - 'id': 4001, - 'name': 'Invoice01.pdf', - 'created': '2017-05-12T12:50:05.522+0000', - 'createdBy': { - 'id': 1, - 'firstName': 'Apps', - 'lastName': 'Administrator', - 'email': 'admin@app.activiti.com', - 'company': 'Alfresco.com', - 'pictureId': 3003 - }, - 'relatedContent': true, - 'contentAvailable': true, - 'link': false, - 'mimeType': 'application/pdf', - 'simpleType': 'pdf', - 'previewStatus': 'created', - 'thumbnailStatus': 'created' - }, - { - 'id': 4002, - 'name': 'Invoice02.pdf', - 'created': '2017-05-12T12:50:05.522+0000', - 'createdBy': { - 'id': 1, - 'firstName': 'Apps', - 'lastName': 'Administrator', - 'email': 'admin@app.activiti.com', - 'company': 'Alfresco.com', - 'pictureId': 3003 - }, - 'relatedContent': true, - 'contentAvailable': true, - 'link': false, - 'mimeType': 'application/pdf', - 'simpleType': 'pdf', - 'previewStatus': 'created', - 'thumbnailStatus': 'created' - }] - })); - - deleteContentSpy = spyOn(service, 'deleteRelatedContent').and.returnValue(Observable.of({successCode: true})); - - let blobObj = new Blob(); - getFileRawContentSpy = spyOn(service, 'getFileRawContent').and.returnValue(Observable.of( - blobObj - )); - - componentHandler = jasmine.createSpyObj('componentHandler', [ - 'upgradeAllRegistered', - 'upgradeElement' - ]); - window['componentHandler'] = componentHandler; - }); - - it('should load attachments when processInstanceId specified', () => { - let change = new SimpleChange(null, '123', true); - component.ngOnChanges({ 'processInstanceId': change }); - expect(getProcessRelatedContentSpy).toHaveBeenCalled(); - }); - - it('should emit an error when an error occurs loading attachments', () => { - let emitSpy = spyOn(component.error, 'emit'); - getProcessRelatedContentSpy.and.returnValue(Observable.throw({})); - let change = new SimpleChange(null, '123', true); - component.ngOnChanges({ 'processInstanceId': change }); - expect(emitSpy).toHaveBeenCalled(); - }); - - it('should not attach when no processInstanceId is specified', () => { - fixture.detectChanges(); - expect(getProcessRelatedContentSpy).not.toHaveBeenCalled(); - }); - - it('should display attachments when the process has attachments', async(() => { - let change = new SimpleChange(null, '123', true); - component.ngOnChanges({ 'processInstanceId': change }); - - fixture.whenStable().then(() => { - fixture.detectChanges(); - expect(fixture.debugElement.queryAll(By.css('alfresco-datatable tbody tr')).length).toBe(2); - }); - })); - - it('should not display attachments when the process has no attachments', async(() => { - component.processInstanceId = '123'; - getProcessRelatedContentSpy.and.returnValue(Observable.of({ - 'size': 0, - 'total': 0, - 'start': 0, - 'data': [] - })); - fixture.detectChanges(); - fixture.whenStable().then(() => { - fixture.detectChanges(); - expect(fixture.debugElement.queryAll(By.css('alfresco-datatable tbody tr')).length).toBe(0); - }); - })); - - describe('change detection', () => { - - let change = new SimpleChange('123', '456', true); - let nullChange = new SimpleChange('123', null, true); - - beforeEach(async(() => { - component.processInstanceId = '123'; - fixture.detectChanges(); - fixture.whenStable().then(() => { - getProcessRelatedContentSpy.calls.reset(); - }); - })); - - it('should fetch new attachments when processInstanceId changed', () => { - component.ngOnChanges({ 'processInstanceId': change }); - expect(getProcessRelatedContentSpy).toHaveBeenCalledWith('456'); - }); - - it('should NOT fetch new attachments when empty changeset made', () => { - component.ngOnChanges({}); - expect(getProcessRelatedContentSpy).not.toHaveBeenCalled(); - }); - - it('should NOT fetch new attachments when processInstanceId changed to null', () => { - component.ngOnChanges({ 'processInstanceId': nullChange }); - expect(getProcessRelatedContentSpy).not.toHaveBeenCalled(); - }); - }); - - describe('Delete attachments', () => { - - beforeEach(async(() => { - component.processInstanceId = '123'; - fixture.detectChanges(); - fixture.whenStable(); - })); - - it('should display a dialog to the user when the Add button clicked', () => { - expect(true).toBe(true); - }); - - }); - -}); diff --git a/ng2-components/ng2-activiti-processlist/src/components/activiti-process-attachment-list.component.ts b/ng2-components/ng2-activiti-processlist/src/components/activiti-process-attachment-list.component.ts deleted file mode 100644 index 16139580e1..0000000000 --- a/ng2-components/ng2-activiti-processlist/src/components/activiti-process-attachment-list.component.ts +++ /dev/null @@ -1,163 +0,0 @@ -/*! - * @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. - */ - -import { Component, OnChanges, Input, SimpleChanges, Output, EventEmitter } from '@angular/core'; -import { AlfrescoTranslationService, ContentService } from 'ng2-alfresco-core'; -import { ActivitiContentService } from 'ng2-activiti-form'; - -@Component({ - selector: 'activiti-process-attachment-list', - styleUrls: ['./activiti-process-attachment-list.component.css'], - templateUrl: './activiti-process-attachment-list.component.html' -}) -export class ActivitiProcessAttachmentListComponent implements OnChanges { - - @Input() - processInstanceId: string; - - @Output() - attachmentClick = new EventEmitter(); - - @Output() - error: EventEmitter = new EventEmitter(); - - attachments: any[] = []; - - constructor(private translateService: AlfrescoTranslationService, - private activitiContentService: ActivitiContentService, - private contentService: ContentService) { - - if (translateService) { - translateService.addTranslationFolder('ng2-activiti-processlist', 'node_modules/ng2-activiti-processlist/src'); - } - } - - ngOnChanges(changes: SimpleChanges) { - if (changes['processInstanceId'] && changes['processInstanceId'].currentValue) { - this.processInstanceId = changes['processInstanceId'].currentValue; - this.loadAttachmentsByProcessInstanceId(this.processInstanceId); - } - } - - reset () { - this.attachments = []; - } - - private loadAttachmentsByProcessInstanceId(processInstanceId: string) { - if (processInstanceId) { - this.reset(); - this.activitiContentService.getProcessRelatedContent(processInstanceId).subscribe( - (res: any) => { - res.data.forEach(content => { - this.attachments.push({ - id: content.id, - name: content.name, - created: content.created, - createdBy: content.createdBy.firstName + ' ' + content.createdBy.lastName, - icon: this.activitiContentService.getMimeTypeIcon(content.mimeType) - }); - }); - - }, - (err) => { - this.error.emit(err); - }); - } - } - - private deleteAttachmentById(contentId: string) { - if (contentId) { - this.activitiContentService.deleteRelatedContent(contentId).subscribe( - (res: any) => { - this.attachments = this.attachments.filter(content => { - return content.id !== contentId; - }); - }, - (err) => { - this.error.emit(err); - }); - } - } - - isEmpty(): boolean { - return this.attachments && this.attachments.length === 0; - } - - onShowRowActionsMenu(event: any) { - let viewAction = { - title: 'View', - name: 'view' - }; - - let removeAction = { - title: 'Remove', - name: 'remove' - }; - - let downloadAction = { - title: 'Download', - name: 'download' - }; - - event.value.actions = [ - viewAction, - removeAction, - downloadAction - ]; - } - - onExecuteRowAction(event: any) { - let args = event.value; - let action = args.action; - if (action.name === 'view') { - this.emitDocumentContent(args.row.obj); - } else if (action.name === 'remove') { - this.deleteAttachmentById(args.row.obj.id); - } else if (action.name === 'download') { - this.downloadContent(args.row.obj); - } - } - - openContent(event: any): void { - let content = event.value.obj; - this.emitDocumentContent(content); - } - - emitDocumentContent(content: any) { - this.activitiContentService.getFileRawContent(content.id).subscribe( - (blob: Blob) => { - content.contentBlob = blob; - this.attachmentClick.emit(content); - }, - (err) => { - this.error.emit(err); - } - ); - } - - /** - * Invoke content download. - */ - downloadContent(content: any): void { - this.activitiContentService.getFileRawContent(content.id).subscribe( - (blob: Blob) => this.contentService.downloadBlob(blob, content.name), - (err) => { - this.error.emit(err); - } - ); - } -} diff --git a/ng2-components/ng2-activiti-processlist/src/components/adf-process-attachment-list.component.html b/ng2-components/ng2-activiti-processlist/src/components/adf-process-attachment-list.component.html index f9001080a7..3613ae89f9 100644 --- a/ng2-components/ng2-activiti-processlist/src/components/adf-process-attachment-list.component.html +++ b/ng2-components/ng2-activiti-processlist/src/components/adf-process-attachment-list.component.html @@ -8,8 +8,8 @@ (showRowActionsMenu)="onShowRowActionsMenu($event)" (executeRowAction)="onExecuteRowAction($event)"> - + - + \ No newline at end of file diff --git a/ng2-components/ng2-activiti-processlist/src/components/adf-process-attachment-list.component.spec.ts b/ng2-components/ng2-activiti-processlist/src/components/adf-process-attachment-list.component.spec.ts index 191165be6e..541e270b39 100644 --- a/ng2-components/ng2-activiti-processlist/src/components/adf-process-attachment-list.component.spec.ts +++ b/ng2-components/ng2-activiti-processlist/src/components/adf-process-attachment-list.component.spec.ts @@ -36,7 +36,6 @@ describe('Activiti Process Instance Attachment List', () => { let getProcessRelatedContentSpy: jasmine.Spy; let deleteContentSpy: jasmine.Spy; let getFileRawContentSpy: jasmine.Spy; - let mockAttachment: any; beforeEach(async(() => { TestBed.configureTestingModule({ @@ -60,30 +59,31 @@ describe('Activiti Process Instance Attachment List', () => { component = fixture.componentInstance; service = fixture.debugElement.injector.get(ActivitiContentService); - mockAttachment = { - 'size': 2, - 'total': 2, - 'start': 0, - 'data': [{ - 'id': 4001, - 'name': 'Invoice01.pdf', - 'created': '2017-05-12T12:50:05.522+0000', - 'createdBy': { - 'id': 1, - 'firstName': 'Apps', - 'lastName': 'Administrator', - 'email': 'admin@app.activiti.com', - 'company': 'Alfresco.com', - 'pictureId': 3003 + getProcessRelatedContentSpy = spyOn(service, 'getProcessRelatedContent').and.returnValue(Observable.of( + { + 'size': 2, + 'total': 2, + 'start': 0, + 'data': [{ + 'id': 4001, + 'name': 'Invoice01.pdf', + 'created': '2017-05-12T12:50:05.522+0000', + 'createdBy': { + 'id': 1, + 'firstName': 'Apps', + 'lastName': 'Administrator', + 'email': 'admin@app.activiti.com', + 'company': 'Alfresco.com', + 'pictureId': 3003 + }, + 'relatedContent': true, + 'contentAvailable': true, + 'link': false, + 'mimeType': 'application/pdf', + 'simpleType': 'pdf', + 'previewStatus': 'created', + 'thumbnailStatus': 'created' }, - 'relatedContent': true, - 'contentAvailable': true, - 'link': false, - 'mimeType': 'application/pdf', - 'simpleType': 'pdf', - 'previewStatus': 'created', - 'thumbnailStatus': 'created' - }, { 'id': 4002, 'name': 'Invoice02.pdf', @@ -104,9 +104,7 @@ describe('Activiti Process Instance Attachment List', () => { 'previewStatus': 'created', 'thumbnailStatus': 'created' }] - }; - - getProcessRelatedContentSpy = spyOn(service, 'getProcessRelatedContent').and.returnValue(Observable.of(mockAttachment)); + })); deleteContentSpy = spyOn(service, 'deleteRelatedContent').and.returnValue(Observable.of({successCode: true})); @@ -136,16 +134,6 @@ describe('Activiti Process Instance Attachment List', () => { expect(emitSpy).toHaveBeenCalled(); }); - it('should emit a success event when the attachments are loaded', () => { - let change = new SimpleChange(null, '123', true); - component.success.subscribe((attachments) => { - expect(attachments[0].name).toEqual(mockAttachment.data[0].name); - expect(attachments[0].id).toEqual(mockAttachment.data[0].id); - }); - - component.ngOnChanges({'taskId': change}); - }); - it('should not attach when no processInstanceId is specified', () => { fixture.detectChanges(); expect(getProcessRelatedContentSpy).not.toHaveBeenCalled(); diff --git a/ng2-components/ng2-activiti-processlist/src/components/adf-process-attachment-list.component.ts b/ng2-components/ng2-activiti-processlist/src/components/adf-process-attachment-list.component.ts index 0c8f1d4cba..e003afba06 100644 --- a/ng2-components/ng2-activiti-processlist/src/components/adf-process-attachment-list.component.ts +++ b/ng2-components/ng2-activiti-processlist/src/components/adf-process-attachment-list.component.ts @@ -32,9 +32,6 @@ export class ActivitiProcessAttachmentListComponent implements OnChanges { @Output() attachmentClick = new EventEmitter(); - @Output() - success = new EventEmitter(); - @Output() error: EventEmitter = new EventEmitter(); @@ -45,13 +42,14 @@ export class ActivitiProcessAttachmentListComponent implements OnChanges { private contentService: ContentService) { if (translateService) { - translateService.addTranslationFolder('ng2-activiti-processlist', 'assets/ng2-activiti-processlist'); + translateService.addTranslationFolder('ng2-activiti-processlist', 'node_modules/ng2-activiti-processlist/src'); } } ngOnChanges(changes: SimpleChanges) { if (changes['processInstanceId'] && changes['processInstanceId'].currentValue) { - this.loadAttachmentsByProcessInstanceId(changes['processInstanceId'].currentValue); + this.processInstanceId = changes['processInstanceId'].currentValue; + this.loadAttachmentsByProcessInstanceId(this.processInstanceId); } } @@ -59,10 +57,6 @@ export class ActivitiProcessAttachmentListComponent implements OnChanges { this.attachments = []; } - reload(): void { - this.loadAttachmentsByProcessInstanceId(this.processInstanceId); - } - private loadAttachmentsByProcessInstanceId(processInstanceId: string) { if (processInstanceId) { this.reset(); @@ -77,7 +71,7 @@ export class ActivitiProcessAttachmentListComponent implements OnChanges { icon: this.activitiContentService.getMimeTypeIcon(content.mimeType) }); }); - this.success.emit(this.attachments); + }, (err) => { this.error.emit(err); @@ -155,6 +149,9 @@ export class ActivitiProcessAttachmentListComponent implements OnChanges { ); } + /** + * Invoke content download. + */ downloadContent(content: any): void { this.activitiContentService.getFileRawContent(content.id).subscribe( (blob: Blob) => this.contentService.downloadBlob(blob, content.name),