mirror of
https://github.com/Alfresco/alfresco-ng2-components.git
synced 2026-09-09 18:03:21 +00:00
[ADF-3299] and [ADF-3300] upgrade to Angular and Material 6 (#3579)
* upgrade to HttpClient * upgrade to Renderer2 * upgrade Document reference * remove useless test with deprecated ReflectiveInjector * upgrade to latest typescript * upgrade libs * upgrade package scripts * remove rxjs blacklists and duplicate rules * add rxjs compat to help with migration * fix breaking changes * fix breaking changes in material * fix breaking changes (material 6) * upgrade rxjs, ngx-translate and flex layout * update unit tests * restore providers * upgrade deprecated Observable.error * rebase fix first configuration problems * fix style issues commented * fix core build * fix lib template errors * move lib test execution in angular.json * ignore * karma conf files * fix import statement test * single run option * update packages reporter * restore report * increase timeout * improve karma conf test configuration * fix test issues about lint * fix test analytics * fix process service test * content service fix test * fix logout directive test * fix core test * fix build * update node-sass to latest * update angular cli dependencies * improve build script create directorites and move files only if previous command succeded * upgrade individual libs to 6.0 * remove old webpack files * revert sass change * fix type issues fix style issues * fix tslint demo shell issue * fix peerdependencies * fix test e2e BC * package upate * fix style import issue * extract-text-webpack-plugin beta * fix test dist build command * remove alpha js-api * fix tslint issue add banner tslint rule * upload service fix * change BC script * fix test dist script * increase demo shell timeout test * verbose copy * path absolute * fix script bc * fix copy part * fix path warning fix monaco editor * remove duplicate header * remove unused import * fix align and check ago tests * add missing import * fix notification button selector * [ANGULAR6] fixed core tests * fix CS test * fix cs test step 2 * increase travis_wait for dist * fix attachment PS * fix checklist test * use pdf min
This commit is contained in:
committed by
Eugenio Romano
parent
c510ec864d
commit
6b24bfb1d4
@@ -19,7 +19,7 @@ import { DebugElement, Component, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
|
||||
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
|
||||
import { By } from '@angular/platform-browser';
|
||||
import { AppsProcessService, setupTestBed } from '@alfresco/adf-core';
|
||||
import { Observable } from 'rxjs/Observable';
|
||||
import { of, throwError } from 'rxjs';
|
||||
|
||||
import { defaultApp, deployedApps, nonDeployedApps } from '../mock/apps-list.mock';
|
||||
import { AppsListComponent } from './apps-list.component';
|
||||
@@ -43,7 +43,7 @@ describe('AppsListComponent', () => {
|
||||
debugElement = fixture.debugElement;
|
||||
|
||||
service = TestBed.get(AppsProcessService);
|
||||
getAppsSpy = spyOn(service, 'getDeployedApplications').and.returnValue(Observable.of(deployedApps));
|
||||
getAppsSpy = spyOn(service, 'getDeployedApplications').and.returnValue(of(deployedApps));
|
||||
});
|
||||
|
||||
it('should define layoutType with the default value', () => {
|
||||
@@ -125,7 +125,7 @@ describe('AppsListComponent', () => {
|
||||
|
||||
it('should emit an error when an error occurs loading apps', () => {
|
||||
let emitSpy = spyOn(component.error, 'emit');
|
||||
getAppsSpy.and.returnValue(Observable.throw({}));
|
||||
getAppsSpy.and.returnValue(throwError({}));
|
||||
fixture.detectChanges();
|
||||
expect(emitSpy).toHaveBeenCalled();
|
||||
});
|
||||
@@ -185,19 +185,19 @@ describe('AppsListComponent', () => {
|
||||
describe('display apps', () => {
|
||||
|
||||
it('should display all deployed apps', () => {
|
||||
getAppsSpy.and.returnValue(Observable.of(deployedApps));
|
||||
getAppsSpy.and.returnValue(of(deployedApps));
|
||||
fixture.detectChanges();
|
||||
expect(debugElement.queryAll(By.css('h1')).length).toBe(6);
|
||||
});
|
||||
|
||||
it('should not display undeployed apps', () => {
|
||||
getAppsSpy.and.returnValue(Observable.of(nonDeployedApps));
|
||||
getAppsSpy.and.returnValue(of(nonDeployedApps));
|
||||
fixture.detectChanges();
|
||||
expect(debugElement.queryAll(By.css('h1')).length).toBe(0);
|
||||
});
|
||||
|
||||
it('should display default app', () => {
|
||||
getAppsSpy.and.returnValue(Observable.of(defaultApp));
|
||||
getAppsSpy.and.returnValue(of(defaultApp));
|
||||
fixture.detectChanges();
|
||||
expect(debugElement.queryAll(By.css('h1')).length).toBe(1);
|
||||
});
|
||||
@@ -207,7 +207,7 @@ describe('AppsListComponent', () => {
|
||||
describe('select apps', () => {
|
||||
|
||||
beforeEach(() => {
|
||||
getAppsSpy.and.returnValue(Observable.of(deployedApps));
|
||||
getAppsSpy.and.returnValue(of(deployedApps));
|
||||
fixture.detectChanges();
|
||||
});
|
||||
|
||||
|
||||
@@ -17,10 +17,10 @@
|
||||
|
||||
import { AppsProcessService, TranslationService, EmptyCustomContentDirective } from '@alfresco/adf-core';
|
||||
import { AfterContentInit, Component, EventEmitter, Input, OnInit, Output, ContentChild } from '@angular/core';
|
||||
import { Observable } from 'rxjs/Observable';
|
||||
import { Observer } from 'rxjs/Observer';
|
||||
import { Observable, Observer, of } from 'rxjs';
|
||||
import { AppDefinitionRepresentationModel } from '../task-list';
|
||||
import { IconModel } from './icon.model';
|
||||
import { share } from 'rxjs/operators';
|
||||
|
||||
@Component({
|
||||
selector: 'adf-apps',
|
||||
@@ -74,7 +74,8 @@ export class AppsListComponent implements OnInit, AfterContentInit {
|
||||
constructor(
|
||||
private appsProcessService: AppsProcessService,
|
||||
private translationService: TranslationService) {
|
||||
this.apps$ = new Observable<AppDefinitionRepresentationModel>(observer => this.appsObserver = observer).share();
|
||||
this.apps$ = new Observable<AppDefinitionRepresentationModel>(observer => this.appsObserver = observer)
|
||||
.pipe(share());
|
||||
}
|
||||
|
||||
ngOnInit() {
|
||||
@@ -125,7 +126,7 @@ export class AppsListComponent implements OnInit, AfterContentInit {
|
||||
getAppName(app) {
|
||||
return this.isDefaultApp(app)
|
||||
? this.translationService.get(AppsListComponent.DEFAULT_TASKS_APP_NAME)
|
||||
: Observable.of(app.name);
|
||||
: of(app.name);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -23,7 +23,7 @@ import { MatDialog } from '@angular/material';
|
||||
import { OverlayContainer } from '@angular/cdk/overlay';
|
||||
import { AppsProcessService, setupTestBed } from '@alfresco/adf-core';
|
||||
import { deployedApps } from '../mock/apps-list.mock';
|
||||
import { Observable } from 'rxjs/Observable';
|
||||
import { of } from 'rxjs';
|
||||
|
||||
import { SelectAppsDialogComponent } from './select-apps-dialog-component';
|
||||
import { ProcessTestingModule } from '../testing/process.testing.module';
|
||||
@@ -90,7 +90,7 @@ describe('Select app dialog', () => {
|
||||
service = TestBed.get(AppsProcessService);
|
||||
|
||||
spyOn(service, 'getDeployedApplications').and.returnValue(
|
||||
Observable.of(deployedApps)
|
||||
of(deployedApps)
|
||||
);
|
||||
});
|
||||
|
||||
|
||||
@@ -5,8 +5,8 @@
|
||||
mat-raised-button
|
||||
mat-icon-button
|
||||
class="adf-create-attachment"
|
||||
[adf-upload]="true"
|
||||
mode="['click']"
|
||||
adf-upload="true"
|
||||
[mode]="['click']"
|
||||
[multiple]="true"
|
||||
(upload-files)="onFileUpload($event)">
|
||||
<mat-icon>add</mat-icon>
|
||||
|
||||
@@ -4,8 +4,8 @@
|
||||
mat-raised-button
|
||||
mat-icon-button
|
||||
class="adf-create-attachment"
|
||||
[adf-upload]="true"
|
||||
mode="['click']"
|
||||
adf-upload="true"
|
||||
[mode]="['click']"
|
||||
[multiple]="true"
|
||||
(upload-files)="onFileUpload($event)">
|
||||
<mat-icon>add</mat-icon>
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
|
||||
import { SimpleChange } from '@angular/core';
|
||||
import { ComponentFixture, TestBed } from '@angular/core/testing';
|
||||
import { Observable } from 'rxjs/Observable';
|
||||
import { of } from 'rxjs';
|
||||
|
||||
import { ProcessContentService, setupTestBed } from '@alfresco/adf-core';
|
||||
import { AttachmentComponent } from './create-task-attachment.component';
|
||||
@@ -40,7 +40,7 @@ describe('AttachmentComponent', () => {
|
||||
component = fixture.componentInstance;
|
||||
service = fixture.debugElement.injector.get(ProcessContentService);
|
||||
|
||||
createTaskRelatedContentSpy = spyOn(service, 'createTaskRelatedContent').and.returnValue(Observable.of(
|
||||
createTaskRelatedContentSpy = spyOn(service, 'createTaskRelatedContent').and.returnValue(of(
|
||||
{
|
||||
status: true
|
||||
}));
|
||||
|
||||
@@ -19,7 +19,7 @@ import { SimpleChange, Component, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
|
||||
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
|
||||
import { By } from '@angular/platform-browser';
|
||||
import { ProcessContentService, setupTestBed } from '@alfresco/adf-core';
|
||||
import { Observable } from 'rxjs/Observable';
|
||||
import { of, throwError } from 'rxjs';
|
||||
import { ProcessAttachmentListComponent } from './process-attachment-list.component';
|
||||
import { ProcessTestingModule } from '../testing/process.testing.module';
|
||||
|
||||
@@ -87,13 +87,11 @@ describe('ProcessAttachmentListComponent', () => {
|
||||
}]
|
||||
};
|
||||
|
||||
getProcessRelatedContentSpy = spyOn(service, 'getProcessRelatedContent').and.returnValue(Observable.of(mockAttachment));
|
||||
spyOn(service, 'deleteRelatedContent').and.returnValue(Observable.of({successCode: true}));
|
||||
getProcessRelatedContentSpy = spyOn(service, 'getProcessRelatedContent').and.returnValue(of(mockAttachment));
|
||||
spyOn(service, 'deleteRelatedContent').and.returnValue(of({successCode: true}));
|
||||
|
||||
let blobObj = new Blob();
|
||||
spyOn(service, 'getFileRawContent').and.returnValue(Observable.of(
|
||||
blobObj
|
||||
));
|
||||
spyOn(service, 'getFileRawContent').and.returnValue(of(blobObj));
|
||||
});
|
||||
|
||||
afterEach(() => {
|
||||
@@ -113,7 +111,7 @@ describe('ProcessAttachmentListComponent', () => {
|
||||
|
||||
it('should emit an error when an error occurs loading attachments', () => {
|
||||
let emitSpy = spyOn(component.error, 'emit');
|
||||
getProcessRelatedContentSpy.and.returnValue(Observable.throw({}));
|
||||
getProcessRelatedContentSpy.and.returnValue(throwError({}));
|
||||
let change = new SimpleChange(null, '123', true);
|
||||
component.ngOnChanges({ 'processInstanceId': change });
|
||||
expect(emitSpy).toHaveBeenCalled();
|
||||
@@ -180,7 +178,7 @@ describe('ProcessAttachmentListComponent', () => {
|
||||
}));
|
||||
|
||||
it('should show the empty list component when the attachments list is empty', async(() => {
|
||||
getProcessRelatedContentSpy.and.returnValue(Observable.of({
|
||||
getProcessRelatedContentSpy.and.returnValue(of({
|
||||
'size': 0,
|
||||
'total': 0,
|
||||
'start': 0,
|
||||
@@ -195,7 +193,7 @@ describe('ProcessAttachmentListComponent', () => {
|
||||
}));
|
||||
|
||||
it('should not show the empty list drag and drop component when is disabled', async(() => {
|
||||
getProcessRelatedContentSpy.and.returnValue(Observable.of({
|
||||
getProcessRelatedContentSpy.and.returnValue(of({
|
||||
'size': 0,
|
||||
'total': 0,
|
||||
'start': 0,
|
||||
@@ -213,7 +211,7 @@ describe('ProcessAttachmentListComponent', () => {
|
||||
}));
|
||||
|
||||
it('should show the empty list component when the attachments list is empty for completed process', async(() => {
|
||||
getProcessRelatedContentSpy.and.returnValue(Observable.of({
|
||||
getProcessRelatedContentSpy.and.returnValue(of({
|
||||
'size': 0,
|
||||
'total': 0,
|
||||
'start': 0,
|
||||
@@ -231,7 +229,7 @@ describe('ProcessAttachmentListComponent', () => {
|
||||
}));
|
||||
|
||||
it('should not show the empty list component when the attachments list is not empty for completed process', async(() => {
|
||||
getProcessRelatedContentSpy.and.returnValue(Observable.of(mockAttachment));
|
||||
getProcessRelatedContentSpy.and.returnValue(of(mockAttachment));
|
||||
let change = new SimpleChange(null, '123', true);
|
||||
component.ngOnChanges({'processInstanceId': change});
|
||||
component.disabled = true;
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
import { SimpleChange, Component, CUSTOM_ELEMENTS_SCHEMA, NO_ERRORS_SCHEMA } from '@angular/core';
|
||||
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
|
||||
import { By } from '@angular/platform-browser';
|
||||
import { Observable } from 'rxjs/Observable';
|
||||
import { of, throwError } from 'rxjs';
|
||||
import { TaskAttachmentListComponent } from './task-attachment-list.component';
|
||||
import { ProcessContentService, setupTestBed } from '@alfresco/adf-core';
|
||||
import { ProcessTestingModule } from '../testing/process.testing.module';
|
||||
@@ -80,14 +80,14 @@ describe('TaskAttachmentList', () => {
|
||||
]
|
||||
};
|
||||
|
||||
getTaskRelatedContentSpy = spyOn(service, 'getTaskRelatedContent').and.returnValue(Observable.of(
|
||||
getTaskRelatedContentSpy = spyOn(service, 'getTaskRelatedContent').and.returnValue(of(
|
||||
mockAttachment
|
||||
));
|
||||
|
||||
deleteContentSpy = spyOn(service, 'deleteRelatedContent').and.returnValue(Observable.of({ successCode: true }));
|
||||
deleteContentSpy = spyOn(service, 'deleteRelatedContent').and.returnValue(of({ successCode: true }));
|
||||
|
||||
let blobObj = new Blob();
|
||||
getFileRawContentSpy = spyOn(service, 'getFileRawContent').and.returnValue(Observable.of(blobObj));
|
||||
getFileRawContentSpy = spyOn(service, 'getFileRawContent').and.returnValue(of(blobObj));
|
||||
});
|
||||
|
||||
afterEach(() => {
|
||||
@@ -109,7 +109,7 @@ describe('TaskAttachmentList', () => {
|
||||
|
||||
it('should emit an error when an error occurs loading attachments', () => {
|
||||
let emitSpy = spyOn(component.error, 'emit');
|
||||
getTaskRelatedContentSpy.and.returnValue(Observable.throw({}));
|
||||
getTaskRelatedContentSpy.and.returnValue(throwError({}));
|
||||
let change = new SimpleChange(null, '123', true);
|
||||
component.ngOnChanges({ 'taskId': change });
|
||||
expect(emitSpy).toHaveBeenCalled();
|
||||
@@ -153,7 +153,7 @@ describe('TaskAttachmentList', () => {
|
||||
});
|
||||
|
||||
it('should show the empty default message when has no custom template', async(() => {
|
||||
getTaskRelatedContentSpy.and.returnValue(Observable.of({
|
||||
getTaskRelatedContentSpy.and.returnValue(of({
|
||||
'size': 0,
|
||||
'total': 0,
|
||||
'start': 0,
|
||||
@@ -206,7 +206,7 @@ describe('TaskAttachmentList', () => {
|
||||
}));
|
||||
|
||||
it('should show the empty list component when the attachments list is empty', async(() => {
|
||||
getTaskRelatedContentSpy.and.returnValue(Observable.of({
|
||||
getTaskRelatedContentSpy.and.returnValue(of({
|
||||
'size': 0,
|
||||
'total': 0,
|
||||
'start': 0,
|
||||
@@ -222,7 +222,7 @@ describe('TaskAttachmentList', () => {
|
||||
}));
|
||||
|
||||
it('should show the empty list component when the attachments list is empty for completed task', async(() => {
|
||||
getTaskRelatedContentSpy.and.returnValue(Observable.of({
|
||||
getTaskRelatedContentSpy.and.returnValue(of({
|
||||
'size': 0,
|
||||
'total': 0,
|
||||
'start': 0,
|
||||
@@ -239,7 +239,7 @@ describe('TaskAttachmentList', () => {
|
||||
}));
|
||||
|
||||
it('should not show the empty list component when the attachments list is not empty for completed task', async(() => {
|
||||
getTaskRelatedContentSpy.and.returnValue(Observable.of(mockAttachment));
|
||||
getTaskRelatedContentSpy.and.returnValue(of(mockAttachment));
|
||||
let change = new SimpleChange(null, '123', true);
|
||||
component.ngOnChanges({ 'taskId': change });
|
||||
component.disabled = true;
|
||||
|
||||
@@ -30,10 +30,8 @@ import {
|
||||
} 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';
|
||||
import { from, zip, of } from 'rxjs';
|
||||
import { mergeMap } from 'rxjs/operators';
|
||||
|
||||
@Component({
|
||||
selector: 'attach-widget',
|
||||
@@ -184,24 +182,27 @@ export class AttachFileWidgetComponent extends UploadWidgetComponent implements
|
||||
}
|
||||
|
||||
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;
|
||||
});
|
||||
const filesSaved = [];
|
||||
from(fileNodeList).pipe(
|
||||
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;
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -30,7 +30,7 @@ import {
|
||||
setupTestBed
|
||||
} from '@alfresco/adf-core';
|
||||
import { ContentNodeDialogService, ContentNodeSelectorModule } from '@alfresco/adf-content-services';
|
||||
import { Observable } from 'rxjs/Observable';
|
||||
import { of } from 'rxjs';
|
||||
import { MinimalNodeEntryEntity } from 'alfresco-js-api';
|
||||
import { ProcessTestingModule } from '../testing/process.testing.module';
|
||||
|
||||
@@ -127,7 +127,7 @@ describe('AttachFileWidgetComponent', () => {
|
||||
});
|
||||
|
||||
it('should show up as simple upload when is configured for only local files', async(() => {
|
||||
spyOn(activitiContentService, 'getAlfrescoRepositories').and.returnValue(Observable.of(null));
|
||||
spyOn(activitiContentService, 'getAlfrescoRepositories').and.returnValue(of(null));
|
||||
widget.field = new FormFieldModel(new FormModel(), {
|
||||
type: FormFieldTypes.UPLOAD,
|
||||
value: []
|
||||
@@ -147,7 +147,7 @@ describe('AttachFileWidgetComponent', () => {
|
||||
});
|
||||
widget.field.id = 'attach-file-attach';
|
||||
widget.field.params = <FormFieldMetadata> allSourceParams;
|
||||
spyOn(activitiContentService, 'getAlfrescoRepositories').and.returnValue(Observable.of(fakeRepositoryListAnswer));
|
||||
spyOn(activitiContentService, 'getAlfrescoRepositories').and.returnValue(of(fakeRepositoryListAnswer));
|
||||
fixture.detectChanges();
|
||||
fixture.whenRenderingDone().then(() => {
|
||||
let attachButton: HTMLButtonElement = element.querySelector('#attach-file-attach');
|
||||
@@ -166,9 +166,9 @@ describe('AttachFileWidgetComponent', () => {
|
||||
}));
|
||||
|
||||
it('should be able to upload files coming from content node selector', async(() => {
|
||||
spyOn(activitiContentService, 'getAlfrescoRepositories').and.returnValue(Observable.of(fakeRepositoryListAnswer));
|
||||
spyOn(activitiContentService, 'applyAlfrescoNode').and.returnValue(Observable.of(fakePngAnswer));
|
||||
spyOn(contentNodeDialogService, 'openFileBrowseDialogBySite').and.returnValue(Observable.of([fakeMinimalNode]));
|
||||
spyOn(activitiContentService, 'getAlfrescoRepositories').and.returnValue(of(fakeRepositoryListAnswer));
|
||||
spyOn(activitiContentService, 'applyAlfrescoNode').and.returnValue(of(fakePngAnswer));
|
||||
spyOn(contentNodeDialogService, 'openFileBrowseDialogBySite').and.returnValue(of([fakeMinimalNode]));
|
||||
widget.field = new FormFieldModel(new FormModel(), {
|
||||
type: FormFieldTypes.UPLOAD,
|
||||
value: []
|
||||
@@ -196,9 +196,9 @@ describe('AttachFileWidgetComponent', () => {
|
||||
});
|
||||
widget.field.id = 'attach-file-attach';
|
||||
widget.field.params = <FormFieldMetadata> definedSourceParams;
|
||||
spyOn(activitiContentService, 'getAlfrescoRepositories').and.returnValue(Observable.of(fakeRepositoryListAnswer));
|
||||
spyOn(activitiContentService, 'applyAlfrescoNode').and.returnValue(Observable.of(fakePngAnswer));
|
||||
spyOn(contentNodeDialogService, 'openFileBrowseDialogByFolderId').and.returnValue(Observable.of([fakeMinimalNode]));
|
||||
spyOn(activitiContentService, 'getAlfrescoRepositories').and.returnValue(of(fakeRepositoryListAnswer));
|
||||
spyOn(activitiContentService, 'applyAlfrescoNode').and.returnValue(of(fakePngAnswer));
|
||||
spyOn(contentNodeDialogService, 'openFileBrowseDialogByFolderId').and.returnValue(of([fakeMinimalNode]));
|
||||
fixture.detectChanges();
|
||||
fixture.whenStable().then(() => {
|
||||
let attachButton: HTMLButtonElement = element.querySelector('#attach-file-attach');
|
||||
@@ -213,14 +213,14 @@ describe('AttachFileWidgetComponent', () => {
|
||||
}));
|
||||
|
||||
it('should be able to upload files from local source', async(() => {
|
||||
spyOn(activitiContentService, 'getAlfrescoRepositories').and.returnValue(Observable.of(null));
|
||||
spyOn(activitiContentService, 'getAlfrescoRepositories').and.returnValue(of(null));
|
||||
widget.field = new FormFieldModel(new FormModel(), {
|
||||
type: FormFieldTypes.UPLOAD,
|
||||
value: []
|
||||
});
|
||||
widget.field.id = 'attach-file-attach';
|
||||
widget.field.params = <FormFieldMetadata> onlyLocalParams;
|
||||
spyOn(processContentService, 'createTemporaryRawRelatedContent').and.returnValue(Observable.of(fakePngAnswer));
|
||||
spyOn(processContentService, 'createTemporaryRawRelatedContent').and.returnValue(of(fakePngAnswer));
|
||||
fixture.detectChanges();
|
||||
fixture.whenStable().then(() => {
|
||||
let inputDebugElement = fixture.debugElement.query(By.css('#attach-file-attach'));
|
||||
@@ -236,7 +236,7 @@ describe('AttachFileWidgetComponent', () => {
|
||||
type: FormFieldTypes.UPLOAD,
|
||||
value: [fakePngAnswer]
|
||||
});
|
||||
spyOn(activitiContentService, 'getAlfrescoRepositories').and.returnValue(Observable.of(null));
|
||||
spyOn(activitiContentService, 'getAlfrescoRepositories').and.returnValue(of(null));
|
||||
widget.field.id = 'attach-file-attach';
|
||||
widget.field.params = <FormFieldMetadata> onlyLocalParams;
|
||||
fixture.detectChanges();
|
||||
@@ -254,8 +254,8 @@ describe('AttachFileWidgetComponent', () => {
|
||||
});
|
||||
widget.field.id = 'attach-file-attach';
|
||||
widget.field.params = <FormFieldMetadata> onlyLocalParams;
|
||||
spyOn(activitiContentService, 'getAlfrescoRepositories').and.returnValue(Observable.of(null));
|
||||
spyOn(processContentService, 'createTemporaryRawRelatedContent').and.returnValue(Observable.of(fakePngAnswer));
|
||||
spyOn(activitiContentService, 'getAlfrescoRepositories').and.returnValue(of(null));
|
||||
spyOn(processContentService, 'createTemporaryRawRelatedContent').and.returnValue(of(fakePngAnswer));
|
||||
fixture.detectChanges();
|
||||
fixture.whenStable().then(() => {
|
||||
let inputDebugElement = fixture.debugElement.query(By.css('#attach-file-attach'));
|
||||
@@ -304,7 +304,7 @@ describe('AttachFileWidgetComponent', () => {
|
||||
}));
|
||||
|
||||
it('should raise formContentClicked event when show file is clicked', async(() => {
|
||||
spyOn(processContentService, 'getFileRawContent').and.returnValue(Observable.of(fakePngAnswer));
|
||||
spyOn(processContentService, 'getFileRawContent').and.returnValue(of(fakePngAnswer));
|
||||
formService.formContentClicked.subscribe((file) => {
|
||||
expect(file).not.toBeNull();
|
||||
expect(file.id).toBe(1155);
|
||||
|
||||
@@ -25,7 +25,7 @@ import {
|
||||
setupTestBed
|
||||
} from '@alfresco/adf-core';
|
||||
import { ContentNodeDialogService } from '@alfresco/adf-content-services';
|
||||
import { Observable } from 'rxjs/Observable';
|
||||
import { of } from 'rxjs';
|
||||
import { MinimalNodeEntryEntity } from 'alfresco-js-api';
|
||||
import { ProcessTestingModule } from '../testing/process.testing.module';
|
||||
|
||||
@@ -88,7 +88,7 @@ xdescribe('AttachFolderWidgetComponent', () => {
|
||||
});
|
||||
|
||||
it('should show the folder selected by content node', async(() => {
|
||||
spyOn(contentNodeDialogService, 'openFolderBrowseDialogBySite').and.returnValue(Observable.of([fakeMinimalNode]));
|
||||
spyOn(contentNodeDialogService, 'openFolderBrowseDialogBySite').and.returnValue(of([fakeMinimalNode]));
|
||||
expect(widget).not.toBeNull();
|
||||
widget.field = new FormFieldModel(new FormModel(), {
|
||||
type: 'select-folder',
|
||||
@@ -104,7 +104,7 @@ xdescribe('AttachFolderWidgetComponent', () => {
|
||||
}));
|
||||
|
||||
it('should show the folder selected by content node opening on a configured folder', async(() => {
|
||||
spyOn(contentNodeDialogService, 'openFolderBrowseDialogByFolderId').and.returnValue(Observable.of([fakeMinimalNode]));
|
||||
spyOn(contentNodeDialogService, 'openFolderBrowseDialogByFolderId').and.returnValue(of([fakeMinimalNode]));
|
||||
expect(widget).not.toBeNull();
|
||||
widget.field = new FormFieldModel(new FormModel(), {
|
||||
type: 'select-folder',
|
||||
@@ -121,7 +121,7 @@ xdescribe('AttachFolderWidgetComponent', () => {
|
||||
}));
|
||||
|
||||
it('should retrieve the node information on init', async(() => {
|
||||
spyOn(nodeService, 'getNode').and.returnValue(Observable.of(fakeMinimalNode));
|
||||
spyOn(nodeService, 'getNode').and.returnValue(of(fakeMinimalNode));
|
||||
expect(widget).not.toBeNull();
|
||||
widget.field = new FormFieldModel(new FormModel(), {
|
||||
type: 'select-folder',
|
||||
@@ -136,7 +136,7 @@ xdescribe('AttachFolderWidgetComponent', () => {
|
||||
}));
|
||||
|
||||
it('should remove the folder via the remove button', async(() => {
|
||||
spyOn(nodeService, 'getNode').and.returnValue(Observable.of(fakeMinimalNode));
|
||||
spyOn(nodeService, 'getNode').and.returnValue(of(fakeMinimalNode));
|
||||
expect(widget).not.toBeNull();
|
||||
widget.field = new FormFieldModel(new FormModel(), {
|
||||
type: 'select-folder',
|
||||
|
||||
@@ -1,25 +0,0 @@
|
||||
Error.stackTraceLimit = Infinity;
|
||||
|
||||
require('core-js/es6');
|
||||
require('core-js/es7/reflect');
|
||||
|
||||
require('zone.js/dist/zone');
|
||||
require('zone.js/dist/long-stack-trace-zone');
|
||||
require('zone.js/dist/proxy');
|
||||
require('zone.js/dist/sync-test');
|
||||
require('zone.js/dist/jasmine-patch');
|
||||
require('zone.js/dist/async-test');
|
||||
require('zone.js/dist/fake-async-test');
|
||||
|
||||
jasmine.DEFAULT_TIMEOUT_INTERVAL = 20000;
|
||||
|
||||
var appContext = require.context(".", true, /.spec.ts/);
|
||||
appContext.keys().forEach(appContext);
|
||||
|
||||
const TestBed = require('@angular/core/testing').TestBed;
|
||||
const browser = require('@angular/platform-browser-dynamic/testing');
|
||||
|
||||
TestBed.initTestEnvironment(
|
||||
browser.BrowserDynamicTestingModule,
|
||||
browser.platformBrowserDynamicTesting()
|
||||
);
|
||||
@@ -0,0 +1,101 @@
|
||||
// Karma configuration file, see link for more information
|
||||
// https://karma-runner.github.io/1.0/config/configuration-file.html
|
||||
|
||||
module.exports = function (config) {
|
||||
config.set({
|
||||
basePath: '',
|
||||
|
||||
files: [
|
||||
{pattern: '../../node_modules/core-js/client/core.js', included: true, watched: false},
|
||||
{pattern: '../../node_modules/tslib/tslib.js', included: true, watched: false},
|
||||
{pattern: '../../node_modules/hammerjs/hammer.min.js', included: true, watched: false},
|
||||
{pattern: '../../node_modules/hammerjs/hammer.min.js.map', included: false, watched: false},
|
||||
|
||||
// pdf-js
|
||||
{pattern: '../../node_modules/pdfjs-dist/build/pdf.js', included: true, watched: false},
|
||||
{pattern: '../../node_modules/pdfjs-dist/build/pdf.worker.js', included: true, watched: false},
|
||||
{pattern: '../../node_modules/pdfjs-dist/web/pdf_viewer.js', included: true, watched: false},
|
||||
|
||||
{
|
||||
pattern: '../../node_modules/@angular/material/prebuilt-themes/indigo-pink.css',
|
||||
included: true,
|
||||
watched: false
|
||||
},
|
||||
|
||||
{pattern: '../../node_modules/chart.js/dist/Chart.js', included: true, watched: false},
|
||||
{pattern: '../../node_modules/raphael/raphael.min.js', included: true, watched: false},
|
||||
{
|
||||
pattern: './node_modules/ng2-charts/bundles/ng2-charts.umd.js',
|
||||
included: false,
|
||||
served: true,
|
||||
watched: false
|
||||
},
|
||||
|
||||
{pattern: '../../node_modules/alfresco-js-api/dist/alfresco-js-api.min.js', included: true, watched: false},
|
||||
{pattern: '../../node_modules/moment/min/moment.min.js', included: true, watched: false},
|
||||
|
||||
{pattern: './i18n/**/en.json', included: false, served: true, watched: false},
|
||||
|
||||
{pattern: './**/*.ts', included: false, served: true, watched: false},
|
||||
|
||||
{pattern: './app.config.json', included: false, served: true, watched: false},
|
||||
],
|
||||
|
||||
frameworks: ['jasmine-ajax', 'jasmine', '@angular-devkit/build-angular'],
|
||||
|
||||
proxies: {
|
||||
'/base/assets/' :'/base/assets/',
|
||||
'/assets/adf-process-services/i18n/en.json': '/base/i18n/en.json',
|
||||
'/app.config.json': '/base/app.config.json'
|
||||
},
|
||||
|
||||
plugins: [
|
||||
require('karma-jasmine-ajax'),
|
||||
require('karma-jasmine'),
|
||||
require('karma-chrome-launcher'),
|
||||
require('karma-jasmine-html-reporter'),
|
||||
require('karma-coverage-istanbul-reporter'),
|
||||
require('@angular-devkit/build-angular/plugins/karma'),
|
||||
require('karma-mocha-reporter')
|
||||
],
|
||||
client: {
|
||||
clearContext: false // leave Jasmine Spec Runner output visible in browser
|
||||
},
|
||||
coverageIstanbulReporter: {
|
||||
dir: './lib/coverage/process-services/',
|
||||
reports: ['html', 'lcovonly'],
|
||||
fixWebpackSourcePaths: true
|
||||
},
|
||||
|
||||
// possible values: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUG
|
||||
logLevel: config.LOG_DEBUG,
|
||||
|
||||
colors: true,
|
||||
|
||||
autoWatch: false,
|
||||
|
||||
browserDisconnectTimeout: 200000,
|
||||
browserNoActivityTimeout: 2400000,
|
||||
captureTimeout: 1200000,
|
||||
|
||||
customLaunchers: {
|
||||
ChromeHeadless: {
|
||||
base: 'Chrome',
|
||||
flags: [
|
||||
'--no-sandbox',
|
||||
'--headless',
|
||||
'--disable-gpu',
|
||||
'--remote-debugging-port=9222'
|
||||
]
|
||||
}
|
||||
},
|
||||
|
||||
reporters: ['mocha', 'kjhtml'],
|
||||
port: 9876,
|
||||
colors: true,
|
||||
logLevel: config.LOG_INFO,
|
||||
autoWatch: true,
|
||||
browsers: ['Chrome'],
|
||||
singleRun: false
|
||||
});
|
||||
};
|
||||
@@ -17,7 +17,7 @@
|
||||
|
||||
import { NgModule } from '@angular/core';
|
||||
import {
|
||||
MAT_PLACEHOLDER_GLOBAL_OPTIONS, MatAutocompleteModule, MatButtonModule, MatCardModule, MatCheckboxModule,
|
||||
MAT_LABEL_GLOBAL_OPTIONS, MatAutocompleteModule, MatButtonModule, MatCardModule, MatCheckboxModule,
|
||||
MatChipsModule, MatDatepickerModule, MatDialogModule, MatGridListModule, MatIconModule,
|
||||
MatInputModule, MatListModule, MatNativeDateModule, MatOptionModule, MatProgressSpinnerModule, MatRadioModule,
|
||||
MatRippleModule, MatSelectModule, MatSlideToggleModule, MatTableModule, MatTabsModule,
|
||||
@@ -36,7 +36,7 @@ export function modules() {
|
||||
|
||||
@NgModule({
|
||||
providers: [
|
||||
{provide: MAT_PLACEHOLDER_GLOBAL_OPTIONS, useValue: { float: 'never' }}
|
||||
{provide: MAT_LABEL_GLOBAL_OPTIONS, useValue: { float: 'never' }}
|
||||
],
|
||||
imports: modules(),
|
||||
exports: modules()
|
||||
|
||||
@@ -1,12 +1,10 @@
|
||||
{
|
||||
"$schema": "./node_modules/ng-packagr/ng-package.schema.json",
|
||||
"whitelistedNonPeerDependencies": [ "." ],
|
||||
"workingDirectory": "./ng_work",
|
||||
"src": "../process-services/",
|
||||
"dest": "../dist/process-services/",
|
||||
"lib": {
|
||||
"languageLevel": [ "dom", "es2016" ],
|
||||
"licensePath": "../config/assets/license_header_add.txt",
|
||||
"comments" : "none",
|
||||
"entryFile": "./public-api.ts",
|
||||
"flatModuleFile": "adf-process-services",
|
||||
|
||||
@@ -11,38 +11,31 @@
|
||||
"bugs": {
|
||||
"url": "https://github.com/Alfresco/alfresco-ng2-components/issues"
|
||||
},
|
||||
"dependencies": {
|
||||
"@alfresco/adf-core": "2.5.0-beta2",
|
||||
"@alfresco/adf-content-services": "2.5.0-beta2",
|
||||
"@angular/animations": "5.1.1",
|
||||
"@angular/cdk": "5.0.1",
|
||||
"@angular/common": "5.1.1",
|
||||
"@angular/compiler": "5.1.1",
|
||||
"@angular/core": "5.1.1",
|
||||
"@angular/flex-layout": "2.0.0-beta.12",
|
||||
"@angular/forms": "5.1.1",
|
||||
"@angular/http": "5.1.1",
|
||||
"@angular/material": "5.0.1",
|
||||
"@angular/material-moment-adapter": "5.0.1",
|
||||
"@angular/platform-browser": "5.1.1",
|
||||
"@angular/platform-browser-dynamic": "5.1.1",
|
||||
"@angular/router": "5.1.1",
|
||||
"@ngx-translate/core": "9.1.1",
|
||||
"peerDependencies": {
|
||||
"@angular/animations": ">=5.1.1",
|
||||
"@angular/cdk": ">=5.1.1",
|
||||
"@angular/common": ">=5.1.1",
|
||||
"@angular/compiler": ">=5.1.1",
|
||||
"@angular/core": ">=5.1.1",
|
||||
"@angular/flex-layout": ">=5.1.1",
|
||||
"@angular/forms": ">=5.1.1",
|
||||
"@angular/http": ">=5.1.1",
|
||||
"@angular/material": ">=5.1.1",
|
||||
"@angular/material-moment-adapter": ">=5.1.1",
|
||||
"@angular/platform-browser": ">=5.1.1",
|
||||
"@angular/platform-browser-dynamic": ">=5.1.1",
|
||||
"@angular/router": ">=5.1.1",
|
||||
"alfresco-js-api": "2.5.0-beta2",
|
||||
"chart.js": "2.5.0",
|
||||
"rxjs": ">=6.2.2",
|
||||
"@alfresco/adf-core": "2.5.0-beta2",
|
||||
"@alfresco/adf-content-services": "2.5.0-beta2",
|
||||
"@ngx-translate/core": "^10.0.2",
|
||||
"core-js": "2.4.1",
|
||||
"hammerjs": "2.0.8",
|
||||
"minimatch": "3.0.4",
|
||||
"moment": "2.20.1",
|
||||
"ng2-charts": "1.6.0",
|
||||
"pdfjs-dist": "1.5.404",
|
||||
"raphael": "2.2.7",
|
||||
"moment": "^2.22.2",
|
||||
"reflect-metadata": "0.1.10",
|
||||
"rxjs": "5.5.2",
|
||||
"systemjs": "0.19.27",
|
||||
"zone.js": "0.8.14"
|
||||
"zone.js": "^0.8.26"
|
||||
},
|
||||
"devDependencies": {},
|
||||
"keywords": [
|
||||
"process-services",
|
||||
"alfresco-component",
|
||||
|
||||
+12
-10
@@ -18,8 +18,8 @@
|
||||
import { UserProcessModel, TranslationService, PeopleProcessService } from '@alfresco/adf-core';
|
||||
import { Component, EventEmitter, Input, Output, ViewEncapsulation } from '@angular/core';
|
||||
import { FormControl } from '@angular/forms';
|
||||
import { debounceTime } from 'rxjs/operators';
|
||||
import { Observable } from 'rxjs/Observable';
|
||||
import { debounceTime, switchMap } from 'rxjs/operators';
|
||||
import { Observable, of } from 'rxjs';
|
||||
import { PerformSearchCallback } from '../../interfaces/perform-search-callback.interface';
|
||||
import { getDisplayUser } from '../../helpers/getDisplayUser';
|
||||
|
||||
@@ -50,14 +50,16 @@ export class PeopleSearchFieldComponent {
|
||||
constructor(public peopleProcessService: PeopleProcessService,
|
||||
private translationService: TranslationService) {
|
||||
this.users$ = this.searchUser.valueChanges
|
||||
.pipe(debounceTime(200))
|
||||
.switchMap((searchWord: string) => {
|
||||
if (searchWord && searchWord.trim()) {
|
||||
return this.performSearch(searchWord);
|
||||
} else {
|
||||
return Observable.of([]);
|
||||
}
|
||||
});
|
||||
.pipe(
|
||||
debounceTime(200),
|
||||
switchMap((searchWord: string) => {
|
||||
if (searchWord && searchWord.trim()) {
|
||||
return this.performSearch(searchWord);
|
||||
} else {
|
||||
return of([]);
|
||||
}
|
||||
})
|
||||
);
|
||||
|
||||
this.defaultPlaceholder = this.translationService.instant(this.defaultPlaceholder);
|
||||
}
|
||||
|
||||
+5
-5
@@ -17,7 +17,7 @@
|
||||
|
||||
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
|
||||
import { UserProcessModel, setupTestBed } from '@alfresco/adf-core';
|
||||
import { Observable } from 'rxjs/Observable';
|
||||
import { of } from 'rxjs';
|
||||
import { PeopleSearchComponent } from './people-search.component';
|
||||
import { ProcessTestingModule } from '../../../testing/process.testing.module';
|
||||
|
||||
@@ -51,7 +51,7 @@ describe('PeopleSearchComponent', () => {
|
||||
fixture = TestBed.createComponent(PeopleSearchComponent);
|
||||
peopleSearchComponent = fixture.componentInstance;
|
||||
element = fixture.nativeElement;
|
||||
peopleSearchComponent.results = Observable.of([]);
|
||||
peopleSearchComponent.results = of([]);
|
||||
fixture.detectChanges();
|
||||
}));
|
||||
|
||||
@@ -70,7 +70,7 @@ describe('PeopleSearchComponent', () => {
|
||||
});
|
||||
|
||||
it('should show user which can be involved ', (done) => {
|
||||
peopleSearchComponent.results = Observable.of(userArray);
|
||||
peopleSearchComponent.results = of(userArray);
|
||||
peopleSearchComponent.ngOnInit();
|
||||
fixture.detectChanges();
|
||||
|
||||
@@ -93,7 +93,7 @@ describe('PeopleSearchComponent', () => {
|
||||
expect(user.firstName).toBe('fake-name');
|
||||
done();
|
||||
});
|
||||
peopleSearchComponent.results = Observable.of(userArray);
|
||||
peopleSearchComponent.results = of(userArray);
|
||||
peopleSearchComponent.ngOnInit();
|
||||
fixture.detectChanges();
|
||||
fixture.whenStable()
|
||||
@@ -105,7 +105,7 @@ describe('PeopleSearchComponent', () => {
|
||||
});
|
||||
|
||||
it('should remove clicked user', (done) => {
|
||||
peopleSearchComponent.results = Observable.of(userArray);
|
||||
peopleSearchComponent.results = of(userArray);
|
||||
peopleSearchComponent.ngOnInit();
|
||||
fixture.detectChanges();
|
||||
|
||||
|
||||
@@ -17,8 +17,9 @@
|
||||
|
||||
import { UserProcessModel } from '@alfresco/adf-core';
|
||||
import { Component, EventEmitter, OnInit, Input, Output, ViewEncapsulation } from '@angular/core';
|
||||
import { Observable } from 'rxjs/Observable';
|
||||
import { Observable } from 'rxjs';
|
||||
import { PerformSearchCallback } from '../../interfaces/perform-search-callback.interface';
|
||||
import { map } from 'rxjs/operators';
|
||||
|
||||
@Component({
|
||||
selector: 'adf-people-search',
|
||||
@@ -55,9 +56,12 @@ export class PeopleSearchComponent implements OnInit {
|
||||
constructor() {}
|
||||
|
||||
ngOnInit() {
|
||||
this.filteredResults$ = this.results.map((users) => {
|
||||
return users.filter(user => user.id !== this.selectedUser.id);
|
||||
});
|
||||
this.filteredResults$ = this.results
|
||||
.pipe(
|
||||
map((users) => {
|
||||
return users.filter(user => user.id !== this.selectedUser.id);
|
||||
})
|
||||
);
|
||||
this.performSearch = this.performSearchCallback.bind(this);
|
||||
}
|
||||
|
||||
|
||||
+4
-4
@@ -18,7 +18,7 @@
|
||||
import { ComponentFixture, TestBed } from '@angular/core/testing';
|
||||
import { LogService, PeopleProcessService, setupTestBed } from '@alfresco/adf-core';
|
||||
import { PeopleSelectorComponent } from './people-selector.component';
|
||||
import { Observable } from 'rxjs/Observable';
|
||||
import { of, throwError } from 'rxjs';
|
||||
import { By } from '@angular/platform-browser';
|
||||
import { ProcessTestingModule } from '../../../testing/process.testing.module';
|
||||
|
||||
@@ -51,17 +51,17 @@ describe('PeopleSelectorComponent', () => {
|
||||
|
||||
it('should call the PeopleProcessService\'s getWorkflowUsers method on search', () => {
|
||||
const peopleProcessService = TestBed.get(PeopleProcessService);
|
||||
spyOn(peopleProcessService, 'getWorkflowUsers').and.returnValue(Observable.of([]));
|
||||
spyOn(peopleProcessService, 'getWorkflowUsers').and.returnValue(of([]));
|
||||
|
||||
component.performSearch('Chloe Price');
|
||||
|
||||
expect(peopleProcessService.getWorkflowUsers).toHaveBeenCalledWith(undefined, 'Chloe Price');
|
||||
});
|
||||
|
||||
it('should log error on getWorkflowUsers\'s error', () => {
|
||||
it('should log error on getWorkflowUsers error', () => {
|
||||
const peopleProcessService = TestBed.get(PeopleProcessService);
|
||||
const logService = TestBed.get(LogService);
|
||||
spyOn(peopleProcessService, 'getWorkflowUsers').and.returnValue(Observable.throw(new Error()));
|
||||
spyOn(peopleProcessService, 'getWorkflowUsers').and.returnValue(throwError(new Error()));
|
||||
spyOn(logService, 'error');
|
||||
|
||||
component.performSearch('Chloe Price')
|
||||
|
||||
@@ -20,7 +20,8 @@ import { PerformSearchCallback } from '../../interfaces/perform-search-callback.
|
||||
import { PeopleProcessService, UserProcessModel, LogService, TranslationService } from '@alfresco/adf-core';
|
||||
import { PeopleSearchFieldComponent } from '../people-search-field/people-search-field.component';
|
||||
import { getDisplayUser } from '../../helpers/getDisplayUser';
|
||||
import { Observable } from 'rxjs/Observable';
|
||||
import { Observable, of } from 'rxjs';
|
||||
import { catchError } from 'rxjs/operators';
|
||||
|
||||
const DEFAULT_ASSIGNEE_PLACEHOLDER = 'ADF_TASK_LIST.PEOPLE.ASSIGNEE';
|
||||
|
||||
@@ -60,12 +61,14 @@ export class PeopleSelectorComponent {
|
||||
|
||||
searchUser(searchWord: string): Observable<{} | UserProcessModel[]> {
|
||||
return this.peopleProcessService.getWorkflowUsers(undefined, searchWord)
|
||||
.catch(this.onSearchUserError.bind(this));
|
||||
.pipe(
|
||||
catchError(this.onSearchUserError.bind(this))
|
||||
);
|
||||
}
|
||||
|
||||
private onSearchUserError(): Observable<UserProcessModel[]> {
|
||||
this.logService.error('getWorkflowUsers threw error');
|
||||
return Observable.of([]);
|
||||
return of([]);
|
||||
}
|
||||
|
||||
userSelected(user: UserProcessModel): void {
|
||||
|
||||
@@ -18,10 +18,10 @@
|
||||
import { LogService, UserProcessModel } from '@alfresco/adf-core';
|
||||
import { PeopleProcessService } from '@alfresco/adf-core';
|
||||
import { AfterViewInit, Component, Input, OnInit, ViewChild } from '@angular/core';
|
||||
import { Observable } from 'rxjs/Observable';
|
||||
import { Observer } from 'rxjs/Observer';
|
||||
import { Observable, Observer } from 'rxjs';
|
||||
import { UserEventModel } from '../../../task-list/models/user-event.model';
|
||||
import { PeopleSearchComponent } from '../people-search/people-search.component';
|
||||
import { share } from 'rxjs/operators';
|
||||
|
||||
@Component({
|
||||
selector: 'adf-people',
|
||||
@@ -51,7 +51,10 @@ export class PeopleComponent implements OnInit, AfterViewInit {
|
||||
peopleSearch$: Observable<UserProcessModel[]>;
|
||||
|
||||
constructor(private logService: LogService, public peopleProcessService: PeopleProcessService) {
|
||||
this.peopleSearch$ = new Observable<UserProcessModel[]>(observer => this.peopleSearchObserver = observer).share();
|
||||
this.peopleSearch$ = new Observable<UserProcessModel[]>(observer => this.peopleSearchObserver = observer)
|
||||
.pipe(
|
||||
share()
|
||||
);
|
||||
}
|
||||
|
||||
ngOnInit() {
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import { Observable } from 'rxjs/Observable';
|
||||
import { Observable } from 'rxjs';
|
||||
import { UserProcessModel } from '@alfresco/adf-core';
|
||||
|
||||
export type PerformSearchCallback = (searchWord: string) => Observable<UserProcessModel[]>;
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
|
||||
import { SimpleChange } from '@angular/core';
|
||||
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
|
||||
import { Observable } from 'rxjs/Observable';
|
||||
import { of, throwError } from 'rxjs';
|
||||
|
||||
import { CommentProcessService, setupTestBed } from '@alfresco/adf-core';
|
||||
|
||||
@@ -41,7 +41,7 @@ describe('ProcessCommentsComponent', () => {
|
||||
component = fixture.componentInstance;
|
||||
commentProcessService = TestBed.get(CommentProcessService);
|
||||
|
||||
getCommentsSpy = spyOn(commentProcessService, 'getProcessInstanceComments').and.returnValue(Observable.of([
|
||||
getCommentsSpy = spyOn(commentProcessService, 'getProcessInstanceComments').and.returnValue(of([
|
||||
{ message: 'Test1', created: Date.now(), createdBy: {firstName: 'Admin', lastName: 'User'} },
|
||||
{ message: 'Test2', created: Date.now(), createdBy: {firstName: 'Admin', lastName: 'User'} },
|
||||
{ message: 'Test3', created: Date.now(), createdBy: {firstName: 'Admin', lastName: 'User'} }
|
||||
@@ -57,7 +57,7 @@ describe('ProcessCommentsComponent', () => {
|
||||
|
||||
it('should emit an error when an error occurs loading comments', () => {
|
||||
let emitSpy = spyOn(component.error, 'emit');
|
||||
getCommentsSpy.and.returnValue(Observable.throw({}));
|
||||
getCommentsSpy.and.returnValue(throwError({}));
|
||||
|
||||
let change = new SimpleChange(null, '123', true);
|
||||
component.ngOnChanges({ 'processInstanceId': change });
|
||||
@@ -97,7 +97,7 @@ describe('ProcessCommentsComponent', () => {
|
||||
let change = new SimpleChange(null, '123', true);
|
||||
component.ngOnChanges({ 'processInstanceId': change });
|
||||
|
||||
getCommentsSpy.and.returnValue(Observable.of([]));
|
||||
getCommentsSpy.and.returnValue(of([]));
|
||||
fixture.whenStable().then(() => {
|
||||
fixture.detectChanges();
|
||||
expect(fixture.nativeElement.querySelector('#comment-container')).toBeNull();
|
||||
|
||||
@@ -17,8 +17,8 @@
|
||||
|
||||
import { CommentModel, CommentProcessService } from '@alfresco/adf-core';
|
||||
import { Component, EventEmitter, Input, OnChanges, Output, SimpleChanges } from '@angular/core';
|
||||
import { Observable } from 'rxjs/Observable';
|
||||
import { Observer } from 'rxjs/Observer';
|
||||
import { Observable, Observer } from 'rxjs';
|
||||
import { share } from 'rxjs/operators';
|
||||
|
||||
@Component({
|
||||
selector: 'adf-process-instance-comments',
|
||||
@@ -49,7 +49,8 @@ export class ProcessCommentsComponent implements OnChanges {
|
||||
beingAdded: boolean = false;
|
||||
|
||||
constructor(private commentProcessService: CommentProcessService) {
|
||||
this.comment$ = new Observable<CommentModel>(observer => this.commentObserver = observer).share();
|
||||
this.comment$ = new Observable<CommentModel>(observer => this.commentObserver = observer)
|
||||
.pipe(share());
|
||||
this.comment$.subscribe((comment: CommentModel) => {
|
||||
this.comments.push(comment);
|
||||
});
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
|
||||
import { Component } from '@angular/core';
|
||||
import { ComponentFixture, fakeAsync, TestBed } from '@angular/core/testing';
|
||||
import { Observable } from 'rxjs/Observable';
|
||||
import { of } from 'rxjs';
|
||||
import { ProcessService } from './../services/process.service';
|
||||
import { ProcessAuditDirective } from './process-audit.directive';
|
||||
import { setupTestBed, CoreModule } from '@alfresco/adf-core';
|
||||
@@ -100,7 +100,7 @@ describe('ProcessAuditDirective', () => {
|
||||
component.fileName = 'FakeAuditName';
|
||||
component.format = 'pdf';
|
||||
let blob = createFakePdfBlob();
|
||||
spyOn(service, 'fetchProcessAuditPdfById').and.returnValue(Observable.of(blob));
|
||||
spyOn(service, 'fetchProcessAuditPdfById').and.returnValue(of(blob));
|
||||
spyOn(component, 'onAuditClick').and.callThrough();
|
||||
|
||||
fixture.detectChanges();
|
||||
@@ -136,7 +136,7 @@ describe('ProcessAuditDirective', () => {
|
||||
}
|
||||
], decisionInfo: { calculatedValues: [], appliedRules: [] }
|
||||
};
|
||||
spyOn(service, 'fetchProcessAuditJsonById').and.returnValue(Observable.of(auditJson));
|
||||
spyOn(service, 'fetchProcessAuditJsonById').and.returnValue(of(auditJson));
|
||||
spyOn(component, 'onAuditClick').and.callThrough();
|
||||
|
||||
fixture.detectChanges();
|
||||
@@ -156,7 +156,7 @@ describe('ProcessAuditDirective', () => {
|
||||
component.fileName = 'FakeAuditName';
|
||||
component.format = 'fakeFormat';
|
||||
let blob = createFakePdfBlob();
|
||||
spyOn(service, 'fetchProcessAuditPdfById').and.returnValue(Observable.of(blob));
|
||||
spyOn(service, 'fetchProcessAuditPdfById').and.returnValue(of(blob));
|
||||
spyOn(component, 'onAuditClick').and.callThrough();
|
||||
|
||||
fixture.detectChanges();
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
<mat-list class="adf-menu-list">
|
||||
<mat-list-item (click)="selectFilter(filter)" *ngFor="let filter of filters"
|
||||
class="adf-filters__entry" [class.active]="currentFilter === filter">
|
||||
<mat-icon *ngIf="hasIcon" matListIcon class="adf-filters__entry-icon">assignment</mat-icon>
|
||||
<mat-icon *ngIf="showIcon" matListIcon class="adf-filters__entry-icon">assignment</mat-icon>
|
||||
<span matLine [attr.data-automation-id]="filter.name + '_filter'">{{filter.name}}</span>
|
||||
</mat-list-item>
|
||||
</mat-list>
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
|
||||
import { CUSTOM_ELEMENTS_SCHEMA, SimpleChange } from '@angular/core';
|
||||
import { AppsProcessService } from '@alfresco/adf-core';
|
||||
import { Observable } from 'rxjs/Observable';
|
||||
import { from } from 'rxjs';
|
||||
import { FilterProcessRepresentationModel } from '../models/filter-process.model';
|
||||
import { ProcessFilterService } from '../services/process-filter.service';
|
||||
import { ProcessFiltersComponent } from './process-filters.component';
|
||||
@@ -81,7 +81,7 @@ describe('ProcessFiltersComponent', () => {
|
||||
});
|
||||
|
||||
it('should return the filter task list', (done) => {
|
||||
spyOn(processFilterService, 'getProcessFilters').and.returnValue(Observable.fromPromise(fakeGlobalFilterPromise));
|
||||
spyOn(processFilterService, 'getProcessFilters').and.returnValue(from(fakeGlobalFilterPromise));
|
||||
const appId = '1';
|
||||
let change = new SimpleChange(null, appId, true);
|
||||
filterList.ngOnChanges({ 'appId': change });
|
||||
@@ -100,7 +100,7 @@ describe('ProcessFiltersComponent', () => {
|
||||
});
|
||||
|
||||
it('should select the Running process filter', (done) => {
|
||||
spyOn(processFilterService, 'getProcessFilters').and.returnValue(Observable.fromPromise(fakeGlobalFilterPromise));
|
||||
spyOn(processFilterService, 'getProcessFilters').and.returnValue(from(fakeGlobalFilterPromise));
|
||||
const appId = '1';
|
||||
let change = new SimpleChange(null, appId, true);
|
||||
filterList.ngOnChanges({ 'appId': change });
|
||||
@@ -117,8 +117,8 @@ describe('ProcessFiltersComponent', () => {
|
||||
});
|
||||
|
||||
it('should return the filter task list, filtered By Name', (done) => {
|
||||
spyOn(appsProcessService, 'getDeployedApplicationsByName').and.returnValue(Observable.fromPromise(Promise.resolve({ id: 1 })));
|
||||
spyOn(processFilterService, 'getProcessFilters').and.returnValue(Observable.fromPromise(fakeGlobalFilterPromise));
|
||||
spyOn(appsProcessService, 'getDeployedApplicationsByName').and.returnValue(from(Promise.resolve({ id: 1 })));
|
||||
spyOn(processFilterService, 'getProcessFilters').and.returnValue(from(fakeGlobalFilterPromise));
|
||||
|
||||
let change = new SimpleChange(null, 'test', true);
|
||||
filterList.ngOnChanges({ 'appName': change });
|
||||
@@ -134,7 +134,7 @@ describe('ProcessFiltersComponent', () => {
|
||||
});
|
||||
|
||||
it('should emit an error with a bad response', (done) => {
|
||||
spyOn(processFilterService, 'getProcessFilters').and.returnValue(Observable.fromPromise(mockErrorFilterPromise));
|
||||
spyOn(processFilterService, 'getProcessFilters').and.returnValue(from(mockErrorFilterPromise));
|
||||
|
||||
const appId = '1';
|
||||
let change = new SimpleChange(null, appId, true);
|
||||
@@ -149,7 +149,7 @@ describe('ProcessFiltersComponent', () => {
|
||||
});
|
||||
|
||||
it('should emit an error with a bad response', (done) => {
|
||||
spyOn(appsProcessService, 'getDeployedApplicationsByName').and.returnValue(Observable.fromPromise(mockErrorFilterPromise));
|
||||
spyOn(appsProcessService, 'getDeployedApplicationsByName').and.returnValue(from(mockErrorFilterPromise));
|
||||
|
||||
const appId = 'fake-app';
|
||||
let change = new SimpleChange(null, appId, true);
|
||||
@@ -221,7 +221,7 @@ describe('ProcessFiltersComponent', () => {
|
||||
});
|
||||
|
||||
it('should select the filter passed as input by id', (done) => {
|
||||
spyOn(processFilterService, 'getProcessFilters').and.returnValue(Observable.fromPromise(fakeGlobalFilterPromise));
|
||||
spyOn(processFilterService, 'getProcessFilters').and.returnValue(from(fakeGlobalFilterPromise));
|
||||
|
||||
filterList.filterParam = new FilterProcessRepresentationModel({ id: 20 });
|
||||
|
||||
@@ -241,7 +241,7 @@ describe('ProcessFiltersComponent', () => {
|
||||
});
|
||||
|
||||
it('should select the filter passed as input by name', (done) => {
|
||||
spyOn(processFilterService, 'getProcessFilters').and.returnValue(Observable.fromPromise(fakeGlobalFilterPromise));
|
||||
spyOn(processFilterService, 'getProcessFilters').and.returnValue(from(fakeGlobalFilterPromise));
|
||||
|
||||
filterList.filterParam = new FilterProcessRepresentationModel({ name: 'FakeMyTasks' });
|
||||
|
||||
@@ -261,7 +261,7 @@ describe('ProcessFiltersComponent', () => {
|
||||
});
|
||||
|
||||
it('should select first filter if filterParam is empty', (done) => {
|
||||
spyOn(processFilterService, 'getProcessFilters').and.returnValue(Observable.fromPromise(fakeGlobalFilterPromise));
|
||||
spyOn(processFilterService, 'getProcessFilters').and.returnValue(from(fakeGlobalFilterPromise));
|
||||
|
||||
filterList.filterParam = new FilterProcessRepresentationModel({});
|
||||
|
||||
|
||||
+3
-3
@@ -18,7 +18,7 @@
|
||||
import { DebugElement, NO_ERRORS_SCHEMA, SimpleChange } from '@angular/core';
|
||||
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
|
||||
import { By } from '@angular/platform-browser';
|
||||
import { Observable } from 'rxjs/Observable';
|
||||
import { of } from 'rxjs';
|
||||
|
||||
import { FormModule, setupTestBed } from '@alfresco/adf-core';
|
||||
import { TaskListModule } from '../../task-list/task-list.module';
|
||||
@@ -54,7 +54,7 @@ describe('ProcessInstanceDetailsComponent', () => {
|
||||
component = fixture.componentInstance;
|
||||
service = fixture.debugElement.injector.get(ProcessService);
|
||||
|
||||
getProcessSpy = spyOn(service, 'getProcess').and.returnValue(Observable.of(exampleProcess));
|
||||
getProcessSpy = spyOn(service, 'getProcess').and.returnValue(of(exampleProcess));
|
||||
});
|
||||
|
||||
it('should not load task details when no processInstanceId is specified', () => {
|
||||
@@ -79,7 +79,7 @@ describe('ProcessInstanceDetailsComponent', () => {
|
||||
}));
|
||||
|
||||
it('should display default details when the process instance has no name', async(() => {
|
||||
getProcessSpy = getProcessSpy.and.returnValue(Observable.of(exampleProcessNoName));
|
||||
getProcessSpy = getProcessSpy.and.returnValue(of(exampleProcessNoName));
|
||||
fixture.detectChanges();
|
||||
component.ngOnChanges({ 'processInstanceId': new SimpleChange(null, '123', true) });
|
||||
fixture.whenStable().then(() => {
|
||||
|
||||
@@ -35,7 +35,7 @@
|
||||
<!--IF START TASK COMPLETED -->
|
||||
<div class="menu-container">
|
||||
<mat-list>
|
||||
<mat-list-item class="process-tasks__task-item" (click)="clickStartTask($event)">
|
||||
<mat-list-item class="process-tasks__task-item" (click)="clickStartTask()">
|
||||
<mat-icon mat-list-icon>assignment</mat-icon>
|
||||
<h3 matLine>{{ 'ADF_PROCESS_LIST.DETAILS.LABELS.START_FORM'|translate }}</h3>
|
||||
<span matLine>
|
||||
@@ -75,7 +75,7 @@
|
||||
<div mat-dialog-content class="adf-start-process-dialog-content">
|
||||
<adf-start-form [processId]="processId"
|
||||
[showRefreshButton]="false" [readOnlyForm]="true"
|
||||
(formContentClicked)='onFormContentClick($event)'>
|
||||
(formContentClicked)='onFormContentClick()'>
|
||||
</adf-start-form>
|
||||
</div>
|
||||
<div mat-dialog-actions class="adf-start-process-dialog-actions">
|
||||
|
||||
+2
-2
@@ -18,7 +18,7 @@
|
||||
import { SimpleChange } from '@angular/core';
|
||||
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
|
||||
import { By } from '@angular/platform-browser';
|
||||
import { Observable } from 'rxjs/Observable';
|
||||
import { of } from 'rxjs';
|
||||
|
||||
import { TaskDetailsModel } from '../../task-list';
|
||||
|
||||
@@ -50,7 +50,7 @@ describe('ProcessInstanceTasksComponent', () => {
|
||||
component = fixture.componentInstance;
|
||||
service = TestBed.get(ProcessService);
|
||||
|
||||
spyOn(service, 'getProcessTasks').and.returnValue(Observable.of([new TaskDetailsModel(taskDetailsMock)]));
|
||||
spyOn(service, 'getProcessTasks').and.returnValue(of([new TaskDetailsModel(taskDetailsMock)]));
|
||||
});
|
||||
|
||||
afterEach(() => {
|
||||
|
||||
@@ -19,11 +19,11 @@ import { LogService } from '@alfresco/adf-core';
|
||||
import { DatePipe } from '@angular/common';
|
||||
import { Component, EventEmitter, Input, OnChanges, OnInit, Output, SimpleChanges, ViewChild } from '@angular/core';
|
||||
import { MatDialog } from '@angular/material';
|
||||
import { Observable } from 'rxjs/Observable';
|
||||
import { Observer } from 'rxjs/Observer';
|
||||
import { Observable, Observer } from 'rxjs';
|
||||
import { TaskDetailsEvent, TaskDetailsModel } from '../../task-list';
|
||||
import { ProcessInstance } from '../models/process-instance.model';
|
||||
import { ProcessService } from './../services/process.service';
|
||||
import { share } from 'rxjs/operators';
|
||||
|
||||
@Component({
|
||||
selector: 'adf-process-instance-tasks',
|
||||
@@ -71,8 +71,10 @@ export class ProcessInstanceTasksComponent implements OnInit, OnChanges {
|
||||
constructor(private activitiProcess: ProcessService,
|
||||
private logService: LogService,
|
||||
private dialog: MatDialog) {
|
||||
this.task$ = new Observable<TaskDetailsModel>(observer => this.taskObserver = observer).share();
|
||||
this.completedTask$ = new Observable<TaskDetailsModel>(observer => this.completedTaskObserver = observer).share();
|
||||
this.task$ = new Observable<TaskDetailsModel>(observer => this.taskObserver = observer)
|
||||
.pipe(share());
|
||||
this.completedTask$ = new Observable<TaskDetailsModel>(observer => this.completedTaskObserver = observer)
|
||||
.pipe(share());
|
||||
}
|
||||
|
||||
ngOnInit() {
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
|
||||
import { Component, SimpleChange, ViewChild, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
|
||||
import { async, ComponentFixture, fakeAsync, TestBed, tick } from '@angular/core/testing';
|
||||
import { Observable } from 'rxjs/Observable';
|
||||
import { of, throwError } from 'rxjs';
|
||||
import { By } from '@angular/platform-browser';
|
||||
|
||||
import { ProcessInstanceListComponent } from './process-list.component';
|
||||
@@ -50,7 +50,7 @@ describe('ProcessInstanceListComponent', () => {
|
||||
appConfig = TestBed.get(AppConfigService);
|
||||
service = TestBed.get(ProcessService);
|
||||
|
||||
getProcessInstancesSpy = spyOn(service, 'getProcessInstances').and.returnValue(Observable.of(fakeProcessInstance));
|
||||
getProcessInstancesSpy = spyOn(service, 'getProcessInstances').and.returnValue(of(fakeProcessInstance));
|
||||
appConfig.config['adf-process-list'] = {
|
||||
'presets': {
|
||||
'fakeProcessCutomSchema': [
|
||||
@@ -143,7 +143,7 @@ describe('ProcessInstanceListComponent', () => {
|
||||
}));
|
||||
|
||||
it('should return a default name if no name is specified on the process', async(() => {
|
||||
getProcessInstancesSpy = getProcessInstancesSpy.and.returnValue(Observable.of(fakeProcessInstancesWithNoName));
|
||||
getProcessInstancesSpy = getProcessInstancesSpy.and.returnValue(of(fakeProcessInstancesWithNoName));
|
||||
component.appId = 1;
|
||||
component.state = 'open';
|
||||
component.processDefinitionKey = 'fakeprocess';
|
||||
@@ -187,7 +187,7 @@ describe('ProcessInstanceListComponent', () => {
|
||||
it('should throw an exception when the response is wrong', fakeAsync(() => {
|
||||
let emitSpy: jasmine.Spy = spyOn(component.error, 'emit');
|
||||
let mockError = 'Fake server error';
|
||||
getProcessInstancesSpy.and.returnValue(Observable.throw(mockError));
|
||||
getProcessInstancesSpy.and.returnValue(throwError(mockError));
|
||||
component.appId = 1;
|
||||
component.state = 'open';
|
||||
fixture.detectChanges();
|
||||
|
||||
@@ -42,7 +42,7 @@ import {
|
||||
import { ProcessFilterParamRepresentationModel } from '../models/filter-process.model';
|
||||
import { processPresetsDefaultModel } from '../models/process-preset.model';
|
||||
import { ProcessService } from '../services/process.service';
|
||||
import { BehaviorSubject } from 'rxjs/BehaviorSubject';
|
||||
import { BehaviorSubject } from 'rxjs';
|
||||
import { ProcessListModel } from '../models/process-list.model';
|
||||
|
||||
@Component({
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
import { SimpleChange } from '@angular/core';
|
||||
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
|
||||
import { ActivitiContentService, AppConfigService, FormService, setupTestBed } from '@alfresco/adf-core';
|
||||
import { Observable } from 'rxjs/Observable';
|
||||
import { of, throwError } from 'rxjs';
|
||||
|
||||
import { ProcessInstanceVariable } from '../models/process-instance-variable.model';
|
||||
import { ProcessService } from '../services/process.service';
|
||||
@@ -59,10 +59,10 @@ describe('StartFormComponent', () => {
|
||||
processService = TestBed.get(ProcessService);
|
||||
formService = TestBed.get(FormService);
|
||||
|
||||
getDefinitionsSpy = spyOn(processService, 'getProcessDefinitions').and.returnValue(Observable.of(testMultipleProcessDefs));
|
||||
startProcessSpy = spyOn(processService, 'startProcess').and.returnValue(Observable.of(newProcess));
|
||||
getStartFormDefinitionSpy = spyOn(formService, 'getStartFormDefinition').and.returnValue(Observable.of(taskFormMock));
|
||||
spyOn(activitiContentService, 'applyAlfrescoNode').and.returnValue(Observable.of({ id: 1234 }));
|
||||
getDefinitionsSpy = spyOn(processService, 'getProcessDefinitions').and.returnValue(of(testMultipleProcessDefs));
|
||||
startProcessSpy = spyOn(processService, 'startProcess').and.returnValue(of(newProcess));
|
||||
getStartFormDefinitionSpy = spyOn(formService, 'getStartFormDefinition').and.returnValue(of(taskFormMock));
|
||||
spyOn(activitiContentService, 'applyAlfrescoNode').and.returnValue(of({ id: 1234 }));
|
||||
});
|
||||
|
||||
afterEach(() => {
|
||||
@@ -122,7 +122,7 @@ describe('StartFormComponent', () => {
|
||||
describe('with start form', () => {
|
||||
|
||||
beforeEach(() => {
|
||||
getDefinitionsSpy.and.returnValue(Observable.of(testProcessDefWithForm));
|
||||
getDefinitionsSpy.and.returnValue(of(testProcessDefWithForm));
|
||||
let change = new SimpleChange(null, 123, true);
|
||||
component.ngOnChanges({ 'appId': change });
|
||||
});
|
||||
@@ -243,7 +243,7 @@ describe('StartFormComponent', () => {
|
||||
});
|
||||
|
||||
it('should indicate an error to the user if process defs cannot be loaded', async(() => {
|
||||
getDefinitionsSpy = getDefinitionsSpy.and.returnValue(Observable.throw({}));
|
||||
getDefinitionsSpy = getDefinitionsSpy.and.returnValue(throwError({}));
|
||||
component.appId = 123;
|
||||
component.ngOnChanges({});
|
||||
fixture.detectChanges();
|
||||
@@ -256,7 +256,7 @@ describe('StartFormComponent', () => {
|
||||
}));
|
||||
|
||||
it('should show no process available message when no process definition is loaded', async(() => {
|
||||
getDefinitionsSpy = getDefinitionsSpy.and.returnValue(Observable.of([]));
|
||||
getDefinitionsSpy = getDefinitionsSpy.and.returnValue(of([]));
|
||||
component.appId = 123;
|
||||
component.ngOnChanges({});
|
||||
fixture.detectChanges();
|
||||
@@ -269,7 +269,7 @@ describe('StartFormComponent', () => {
|
||||
}));
|
||||
|
||||
it('should select processDefinition based on processDefinition input', async(() => {
|
||||
getDefinitionsSpy = getDefinitionsSpy.and.returnValue(Observable.of(testMultipleProcessDefs));
|
||||
getDefinitionsSpy = getDefinitionsSpy.and.returnValue(of(testMultipleProcessDefs));
|
||||
component.appId = 123;
|
||||
component.processDefinitionName = 'My Process 2';
|
||||
component.ngOnChanges({});
|
||||
@@ -280,7 +280,7 @@ describe('StartFormComponent', () => {
|
||||
}));
|
||||
|
||||
it('should select automatically the processDefinition if the app contain oly one', async(() => {
|
||||
getDefinitionsSpy = getDefinitionsSpy.and.returnValue(Observable.of(testProcessDefinitions));
|
||||
getDefinitionsSpy = getDefinitionsSpy.and.returnValue(of(testProcessDefinitions));
|
||||
component.appId = 123;
|
||||
component.ngOnChanges({});
|
||||
fixture.detectChanges();
|
||||
@@ -292,7 +292,7 @@ describe('StartFormComponent', () => {
|
||||
describe('dropdown', () => {
|
||||
|
||||
it('should hide the process dropdown if showSelectProcessDropdown is false', async(() => {
|
||||
getDefinitionsSpy = getDefinitionsSpy.and.returnValue(Observable.of([testProcessDefRepr]));
|
||||
getDefinitionsSpy = getDefinitionsSpy.and.returnValue(of([testProcessDefRepr]));
|
||||
component.appId = 123;
|
||||
component.showSelectProcessDropdown = false;
|
||||
component.ngOnChanges({});
|
||||
@@ -304,7 +304,7 @@ describe('StartFormComponent', () => {
|
||||
}));
|
||||
|
||||
it('should show the process dropdown if showSelectProcessDropdown is false', async(() => {
|
||||
getDefinitionsSpy = getDefinitionsSpy.and.returnValue(Observable.of(testMultipleProcessDefs));
|
||||
getDefinitionsSpy = getDefinitionsSpy.and.returnValue(of(testMultipleProcessDefs));
|
||||
component.appId = 123;
|
||||
component.processDefinitionName = 'My Process 2';
|
||||
component.showSelectProcessDropdown = true;
|
||||
@@ -317,7 +317,7 @@ describe('StartFormComponent', () => {
|
||||
}));
|
||||
|
||||
it('should show the process dropdown by default', async(() => {
|
||||
getDefinitionsSpy = getDefinitionsSpy.and.returnValue(Observable.of(testMultipleProcessDefs));
|
||||
getDefinitionsSpy = getDefinitionsSpy.and.returnValue(of(testMultipleProcessDefs));
|
||||
component.appId = 123;
|
||||
component.processDefinitionName = 'My Process 2';
|
||||
component.ngOnChanges({});
|
||||
@@ -421,7 +421,7 @@ describe('StartFormComponent', () => {
|
||||
it('should throw error event when process cannot be started', async(() => {
|
||||
let errorSpy = spyOn(component.error, 'error');
|
||||
let error = { message: 'My error' };
|
||||
startProcessSpy = startProcessSpy.and.returnValue(Observable.throw(error));
|
||||
startProcessSpy = startProcessSpy.and.returnValue(throwError(error));
|
||||
component.selectedProcessDef = testProcessDefRepr;
|
||||
component.startProcess();
|
||||
fixture.whenStable().then(() => {
|
||||
@@ -430,7 +430,7 @@ describe('StartFormComponent', () => {
|
||||
}));
|
||||
|
||||
it('should indicate an error to the user if process cannot be started', async(() => {
|
||||
startProcessSpy = startProcessSpy.and.returnValue(Observable.throw({}));
|
||||
startProcessSpy = startProcessSpy.and.returnValue(throwError({}));
|
||||
component.selectedProcessDef = testProcessDefRepr;
|
||||
component.startProcess();
|
||||
fixture.whenStable().then(() => {
|
||||
|
||||
@@ -17,9 +17,9 @@
|
||||
|
||||
import { AlfrescoApiService } from '@alfresco/adf-core';
|
||||
import { Injectable } from '@angular/core';
|
||||
import { Observable } from 'rxjs/Observable';
|
||||
import { Observable, from, forkJoin, throwError } from 'rxjs';
|
||||
import { FilterProcessRepresentationModel } from '../models/filter-process.model';
|
||||
import 'rxjs/add/observable/throw';
|
||||
import { map, catchError } from 'rxjs/operators';
|
||||
|
||||
@Injectable()
|
||||
export class ProcessFilterService {
|
||||
@@ -33,16 +33,18 @@ export class ProcessFilterService {
|
||||
* @returns Array of filter details
|
||||
*/
|
||||
getProcessFilters(appId: number): Observable<FilterProcessRepresentationModel[]> {
|
||||
return Observable.fromPromise(this.callApiProcessFilters(appId))
|
||||
.map((response: any) => {
|
||||
let filters: FilterProcessRepresentationModel[] = [];
|
||||
response.data.forEach((filter: FilterProcessRepresentationModel) => {
|
||||
let filterModel = new FilterProcessRepresentationModel(filter);
|
||||
filters.push(filterModel);
|
||||
});
|
||||
return filters;
|
||||
})
|
||||
.catch(err => this.handleProcessError(err));
|
||||
return from(this.callApiProcessFilters(appId))
|
||||
.pipe(
|
||||
map((response: any) => {
|
||||
let filters: FilterProcessRepresentationModel[] = [];
|
||||
response.data.forEach((filter: FilterProcessRepresentationModel) => {
|
||||
let filterModel = new FilterProcessRepresentationModel(filter);
|
||||
filters.push(filterModel);
|
||||
});
|
||||
return filters;
|
||||
}),
|
||||
catchError(err => this.handleProcessError(err))
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -52,10 +54,13 @@ export class ProcessFilterService {
|
||||
* @returns Details of the filter
|
||||
*/
|
||||
getProcessFilterById(filterId: number, appId?: number): Observable<FilterProcessRepresentationModel> {
|
||||
return Observable.fromPromise(this.callApiProcessFilters(appId))
|
||||
.map((response: any) => {
|
||||
return response.data.find(filter => filter.id === filterId);
|
||||
}).catch(err => this.handleProcessError(err));
|
||||
return from(this.callApiProcessFilters(appId))
|
||||
.pipe(
|
||||
map((response: any) => {
|
||||
return response.data.find(filter => filter.id === filterId);
|
||||
}),
|
||||
catchError(err => this.handleProcessError(err))
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -65,10 +70,13 @@ export class ProcessFilterService {
|
||||
* @returns Details of the filter
|
||||
*/
|
||||
getProcessFilterByName(filterName: string, appId?: number): Observable<FilterProcessRepresentationModel> {
|
||||
return Observable.fromPromise(this.callApiProcessFilters(appId))
|
||||
.map((response: any) => {
|
||||
return response.data.find(filter => filter.name === filterName);
|
||||
}).catch(err => this.handleProcessError(err));
|
||||
return from(this.callApiProcessFilters(appId))
|
||||
.pipe(
|
||||
map((response: any) => {
|
||||
return response.data.find(filter => filter.name === filterName);
|
||||
}),
|
||||
catchError(err => this.handleProcessError(err))
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -87,7 +95,7 @@ export class ProcessFilterService {
|
||||
let allObservable = this.addProcessFilter(allFilter);
|
||||
|
||||
return Observable.create(observer => {
|
||||
Observable.forkJoin(
|
||||
forkJoin(
|
||||
runningObservable,
|
||||
completedObservable,
|
||||
allObservable
|
||||
@@ -166,11 +174,13 @@ export class ProcessFilterService {
|
||||
* @returns The filter just added
|
||||
*/
|
||||
addProcessFilter(filter: FilterProcessRepresentationModel): Observable<FilterProcessRepresentationModel> {
|
||||
return Observable.fromPromise(this.alfrescoApiService.getInstance().activiti.userFiltersApi.createUserProcessInstanceFilter(filter))
|
||||
.map(res => res)
|
||||
.map((response: FilterProcessRepresentationModel) => {
|
||||
return response;
|
||||
}).catch(err => this.handleProcessError(err));
|
||||
return from(this.alfrescoApiService.getInstance().activiti.userFiltersApi.createUserProcessInstanceFilter(filter))
|
||||
.pipe(
|
||||
map((response: FilterProcessRepresentationModel) => {
|
||||
return response;
|
||||
}),
|
||||
catchError(err => this.handleProcessError(err))
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -187,6 +197,6 @@ export class ProcessFilterService {
|
||||
}
|
||||
|
||||
private handleProcessError(error: any) {
|
||||
return Observable.throw(error || 'Server error');
|
||||
return throwError(error || 'Server error');
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,14 +17,14 @@
|
||||
|
||||
import { AlfrescoApiService, FormValues } from '@alfresco/adf-core';
|
||||
import { Injectable } from '@angular/core';
|
||||
import { Observable } from 'rxjs/Observable';
|
||||
import { Observable, from, throwError } from 'rxjs';
|
||||
import { TaskDetailsModel } from '../../task-list';
|
||||
import { ProcessFilterParamRepresentationModel } from '../models/filter-process.model';
|
||||
import { ProcessDefinitionRepresentation } from '../models/process-definition.model';
|
||||
import { ProcessInstanceVariable } from '../models/process-instance-variable.model';
|
||||
import { ProcessInstance } from '../models/process-instance.model';
|
||||
import { ProcessListModel } from '../models/process-list.model';
|
||||
import 'rxjs/add/observable/throw';
|
||||
import { map, catchError } from 'rxjs/operators';
|
||||
|
||||
declare let moment: any;
|
||||
|
||||
@@ -41,16 +41,19 @@ export class ProcessService {
|
||||
* @returns List of process instances
|
||||
*/
|
||||
getProcessInstances(requestNode: ProcessFilterParamRepresentationModel, processDefinitionKey?: string): Observable<ProcessListModel> {
|
||||
return Observable.fromPromise(this.alfrescoApiService.getInstance().activiti.processApi.getProcessInstances(requestNode))
|
||||
.map((res: any) => {
|
||||
if (processDefinitionKey) {
|
||||
const filtered = res.data.filter(process => process.processDefinitionKey === processDefinitionKey);
|
||||
res.data = filtered;
|
||||
return res;
|
||||
} else {
|
||||
return res;
|
||||
}
|
||||
}).catch(err => this.handleProcessError(err));
|
||||
return from(this.alfrescoApiService.getInstance().activiti.processApi.getProcessInstances(requestNode))
|
||||
.pipe(
|
||||
map((res: any) => {
|
||||
if (processDefinitionKey) {
|
||||
const filtered = res.data.filter(process => process.processDefinitionKey === processDefinitionKey);
|
||||
res.data = filtered;
|
||||
return res;
|
||||
} else {
|
||||
return res;
|
||||
}
|
||||
}),
|
||||
catchError(err => this.handleProcessError(err))
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -59,8 +62,10 @@ export class ProcessService {
|
||||
* @returns Binary PDF data
|
||||
*/
|
||||
fetchProcessAuditPdfById(processId: string): Observable<Blob> {
|
||||
return Observable.fromPromise(this.alfrescoApiService.getInstance().activiti.processApi.getProcessAuditPdf(processId))
|
||||
.catch(err => this.handleProcessError(err));
|
||||
return from<Blob>(this.alfrescoApiService.getInstance().activiti.processApi.getProcessAuditPdf(processId))
|
||||
.pipe(
|
||||
catchError(err => this.handleProcessError(err))
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -69,8 +74,10 @@ export class ProcessService {
|
||||
* @returns JSON data
|
||||
*/
|
||||
fetchProcessAuditJsonById(processId: string): Observable<any> {
|
||||
return Observable.fromPromise(this.alfrescoApiService.getInstance().activiti.processApi.getProcessAuditJson(processId))
|
||||
.catch(err => this.handleProcessError(err));
|
||||
return from(this.alfrescoApiService.getInstance().activiti.processApi.getProcessAuditJson(processId))
|
||||
.pipe(
|
||||
catchError(err => this.handleProcessError(err))
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -79,8 +86,10 @@ export class ProcessService {
|
||||
* @returns Metadata for the instance
|
||||
*/
|
||||
getProcess(processInstanceId: string): Observable<ProcessInstance> {
|
||||
return Observable.fromPromise(this.alfrescoApiService.getInstance().activiti.processApi.getProcessInstance(processInstanceId))
|
||||
.catch(err => this.handleProcessError(err));
|
||||
return from(this.alfrescoApiService.getInstance().activiti.processApi.getProcessInstance(processInstanceId))
|
||||
.pipe(
|
||||
catchError(err => this.handleProcessError(err))
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -96,13 +105,15 @@ export class ProcessService {
|
||||
} : {
|
||||
processInstanceId: processInstanceId
|
||||
};
|
||||
return Observable.fromPromise(this.alfrescoApiService.getInstance().activiti.taskApi.listTasks(taskOpts))
|
||||
.map(this.extractData)
|
||||
.map(tasks => tasks.map((task: any) => {
|
||||
task.created = moment(task.created, 'YYYY-MM-DD').format();
|
||||
return task;
|
||||
}))
|
||||
.catch(err => this.handleProcessError(err));
|
||||
return from(this.alfrescoApiService.getInstance().activiti.taskApi.listTasks(taskOpts))
|
||||
.pipe(
|
||||
map(this.extractData),
|
||||
map(tasks => tasks.map((task: any) => {
|
||||
task.created = moment(task.created, 'YYYY-MM-DD').format();
|
||||
return task;
|
||||
})),
|
||||
catchError(err => this.handleProcessError(err))
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -117,12 +128,14 @@ export class ProcessService {
|
||||
} : {
|
||||
latest: true
|
||||
};
|
||||
return Observable.fromPromise(
|
||||
return from(
|
||||
this.alfrescoApiService.getInstance().activiti.processApi.getProcessDefinitions(opts)
|
||||
)
|
||||
.map(this.extractData)
|
||||
.map(processDefs => processDefs.map((pd) => new ProcessDefinitionRepresentation(pd)))
|
||||
.catch(err => this.handleProcessError(err));
|
||||
.pipe(
|
||||
map(this.extractData),
|
||||
map(processDefs => processDefs.map((pd) => new ProcessDefinitionRepresentation(pd))),
|
||||
catchError(err => this.handleProcessError(err))
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -148,11 +161,13 @@ export class ProcessService {
|
||||
if (variables) {
|
||||
startRequest.variables = variables;
|
||||
}
|
||||
return Observable.fromPromise(
|
||||
return from(
|
||||
this.alfrescoApiService.getInstance().activiti.processApi.startNewProcessInstance(startRequest)
|
||||
)
|
||||
.map((pd) => new ProcessInstance(pd))
|
||||
.catch(err => this.handleProcessError(err));
|
||||
.pipe(
|
||||
map((pd) => new ProcessInstance(pd)),
|
||||
catchError(err => this.handleProcessError(err))
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -161,10 +176,12 @@ export class ProcessService {
|
||||
* @returns Null response notifying when the operation is complete
|
||||
*/
|
||||
cancelProcess(processInstanceId: string): Observable<void> {
|
||||
return Observable.fromPromise(
|
||||
return from<void>(
|
||||
this.alfrescoApiService.getInstance().activiti.processApi.deleteProcessInstance(processInstanceId)
|
||||
)
|
||||
.catch(err => this.handleProcessError(err));
|
||||
.pipe(
|
||||
catchError(err => this.handleProcessError(err))
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -173,11 +190,13 @@ export class ProcessService {
|
||||
* @returns Array of instance variable info
|
||||
*/
|
||||
getProcessInstanceVariables(processInstanceId: string): Observable<ProcessInstanceVariable[]> {
|
||||
return Observable.fromPromise(
|
||||
return from(
|
||||
this.alfrescoApiService.getInstance().activiti.processInstanceVariablesApi.getProcessInstanceVariables(processInstanceId)
|
||||
)
|
||||
.map((processVars: any[]) => processVars.map((pd) => new ProcessInstanceVariable(pd)))
|
||||
.catch(err => this.handleProcessError(err));
|
||||
.pipe(
|
||||
map((processVars: any[]) => processVars.map((pd) => new ProcessInstanceVariable(pd))),
|
||||
catchError(err => this.handleProcessError(err))
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -187,10 +206,12 @@ export class ProcessService {
|
||||
* @returns Array of instance variable info
|
||||
*/
|
||||
createOrUpdateProcessInstanceVariables(processInstanceId: string, variables: ProcessInstanceVariable[]): Observable<ProcessInstanceVariable[]> {
|
||||
return Observable.fromPromise(
|
||||
return from<ProcessInstanceVariable[]>(
|
||||
this.alfrescoApiService.getInstance().activiti.processInstanceVariablesApi.createOrUpdateProcessInstanceVariables(processInstanceId, variables)
|
||||
)
|
||||
.catch(err => this.handleProcessError(err));
|
||||
.pipe(
|
||||
catchError(err => this.handleProcessError(err))
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -200,10 +221,12 @@ export class ProcessService {
|
||||
* @returns Null response notifying when the operation is complete
|
||||
*/
|
||||
deleteProcessInstanceVariable(processInstanceId: string, variableName: string): Observable<void> {
|
||||
return Observable.fromPromise(
|
||||
return from<void>(
|
||||
this.alfrescoApiService.getInstance().activiti.processInstanceVariablesApi.deleteProcessInstanceVariable(processInstanceId, variableName)
|
||||
)
|
||||
.catch(err => this.handleProcessError(err));
|
||||
.pipe(
|
||||
catchError(err => this.handleProcessError(err))
|
||||
);
|
||||
}
|
||||
|
||||
private extractData(res: any) {
|
||||
@@ -211,6 +234,6 @@ export class ProcessService {
|
||||
}
|
||||
|
||||
private handleProcessError(error: any) {
|
||||
return Observable.throw(error || 'Server error');
|
||||
return throwError(error || 'Server error');
|
||||
}
|
||||
}
|
||||
|
||||
@@ -20,7 +20,7 @@ import { async, ComponentFixture, TestBed } from '@angular/core/testing';
|
||||
import { setupTestBed } from '@alfresco/adf-core';
|
||||
import { ProcessTestingModule } from '../../testing/process.testing.module';
|
||||
import { TaskListService } from './../services/tasklist.service';
|
||||
import { Observable } from 'rxjs/Observable';
|
||||
import { of } from 'rxjs';
|
||||
|
||||
describe('AttachFormComponent', () => {
|
||||
let component: AttachFormComponent;
|
||||
@@ -55,7 +55,7 @@ describe('AttachFormComponent', () => {
|
||||
it('should call attachFormToATask if clicked on Complete Button', async(() => {
|
||||
component.taskId = 1;
|
||||
component.formId = 2;
|
||||
spyOn(taskService, 'attachFormToATask').and.returnValue(Observable.of(true));
|
||||
spyOn(taskService, 'attachFormToATask').and.returnValue(of(true));
|
||||
fixture.detectChanges();
|
||||
fixture.whenStable().then(() => {
|
||||
expect(element.querySelector('#adf-no-form-attach-form-button')).toBeDefined();
|
||||
@@ -90,7 +90,7 @@ describe('AttachFormComponent', () => {
|
||||
component.taskId = 1;
|
||||
component.formId = 10;
|
||||
component.formKey = 12;
|
||||
spyOn(taskService, 'deleteForm').and.returnValue(Observable.of({}));
|
||||
spyOn(taskService, 'deleteForm').and.returnValue(of({}));
|
||||
|
||||
fixture.detectChanges();
|
||||
fixture.whenStable().then(() => {
|
||||
@@ -106,7 +106,7 @@ describe('AttachFormComponent', () => {
|
||||
component.taskId = 1;
|
||||
component.formId = 10;
|
||||
|
||||
spyOn(taskService, 'attachFormToATask').and.returnValue(Observable.of(
|
||||
spyOn(taskService, 'attachFormToATask').and.returnValue(of(
|
||||
{
|
||||
id: 91,
|
||||
name: 'fakeName',
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<div class="adf-checklist-control">
|
||||
<mat-chip-list id="checklist-label">
|
||||
<mat-chip-list data-automation-id="checklist-label">
|
||||
<span class="activiti-label">{{ 'ADF_TASK_LIST.DETAILS.LABELS.CHECKLIST' | translate }}</span>
|
||||
<mat-chip class="adf-process-badge" color="accent" selected="true">{{checklist?.length}}</mat-chip>
|
||||
</mat-chip-list>
|
||||
|
||||
@@ -22,7 +22,7 @@ import { ChecklistComponent } from './checklist.component';
|
||||
import { setupTestBed } from '@alfresco/adf-core';
|
||||
import { ProcessTestingModule } from '../../testing/process.testing.module';
|
||||
import { TaskListService } from './../services/tasklist.service';
|
||||
import { Observable } from 'rxjs/Observable';
|
||||
import { of } from 'rxjs';
|
||||
|
||||
describe('ChecklistComponent', () => {
|
||||
|
||||
@@ -38,7 +38,10 @@ describe('ChecklistComponent', () => {
|
||||
|
||||
beforeEach(async(() => {
|
||||
service = TestBed.get(TaskListService);
|
||||
spyOn(service, 'getTaskChecklist').and.returnValue(Observable.of([{ id: 'fake-check-changed-id', name: 'fake-check-changed-name' }] ));
|
||||
spyOn(service, 'getTaskChecklist').and.returnValue(of([{
|
||||
id: 'fake-check-changed-id',
|
||||
name: 'fake-check-changed-name'
|
||||
}]));
|
||||
|
||||
fixture = TestBed.createComponent(ChecklistComponent);
|
||||
checklistComponent = fixture.componentInstance;
|
||||
@@ -48,8 +51,8 @@ describe('ChecklistComponent', () => {
|
||||
}));
|
||||
|
||||
it('should show checklist component title', () => {
|
||||
expect(element.querySelector('#checklist-label')).toBeDefined();
|
||||
expect(element.querySelector('#checklist-label')).not.toBeNull();
|
||||
expect(element.querySelector('[data-automation-id=checklist-label]')).toBeDefined();
|
||||
expect(element.querySelector('[data-automation-id=checklist-label]')).not.toBeNull();
|
||||
});
|
||||
|
||||
it('should show no checklist message', () => {
|
||||
@@ -167,8 +170,8 @@ describe('ChecklistComponent', () => {
|
||||
});
|
||||
|
||||
it('should add checklist', async(() => {
|
||||
spyOn(service, 'addTask').and.returnValue(Observable.of({
|
||||
id: 'fake-check-added-id', name: 'fake-check-added-name'
|
||||
spyOn(service, 'addTask').and.returnValue(of({
|
||||
id: 'fake-check-added-id', name: 'fake-check-added-name'
|
||||
}));
|
||||
|
||||
showChecklistDialog.click();
|
||||
@@ -183,7 +186,7 @@ describe('ChecklistComponent', () => {
|
||||
}));
|
||||
|
||||
it('should remove a checklist element', async(() => {
|
||||
spyOn(service, 'deleteTask').and.returnValue(Observable.of(''));
|
||||
spyOn(service, 'deleteTask').and.returnValue(of(''));
|
||||
|
||||
checklistComponent.taskId = 'new-fake-task-id';
|
||||
checklistComponent.checklist.push(new TaskDetailsModel({
|
||||
@@ -203,7 +206,7 @@ describe('ChecklistComponent', () => {
|
||||
}));
|
||||
|
||||
it('should send an event when the checklist is deleted', (done) => {
|
||||
spyOn(service, 'deleteTask').and.returnValue(Observable.of(''));
|
||||
spyOn(service, 'deleteTask').and.returnValue(of(''));
|
||||
let disposableDelete = checklistComponent.checklistTaskDeleted.subscribe(() => {
|
||||
expect(element.querySelector('#fake-check-id')).toBeNull();
|
||||
disposableDelete.unsubscribe();
|
||||
@@ -262,7 +265,7 @@ describe('ChecklistComponent', () => {
|
||||
}));
|
||||
|
||||
it('should emit checklist task created event when the checklist is successfully added', (done) => {
|
||||
spyOn(service, 'addTask').and.returnValue(Observable.of({ id: 'fake-check-added-id', name: 'fake-check-added-name' }));
|
||||
spyOn(service, 'addTask').and.returnValue(of({ id: 'fake-check-added-id', name: 'fake-check-added-name' }));
|
||||
|
||||
let disposableCreated = checklistComponent.checklistTaskCreated.subscribe((taskAdded: TaskDetailsModel) => {
|
||||
fixture.detectChanges();
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
import { NoTaskDetailsTemplateDirective } from './no-task-detail-template.directive';
|
||||
import { TaskDetailsComponent } from './task-details.component';
|
||||
import { FormRenderingService, AuthenticationService } from '@alfresco/adf-core';
|
||||
import { Observable } from 'rxjs/Observable';
|
||||
import { of } from 'rxjs';
|
||||
|
||||
describe('NoTaskDetailsTemplateDirective', () => {
|
||||
|
||||
@@ -28,7 +28,7 @@ describe('NoTaskDetailsTemplateDirective', () => {
|
||||
|
||||
beforeEach(() => {
|
||||
authService = new AuthenticationService(null, null, null, null);
|
||||
spyOn(authService, 'getBpmLoggedUser').and.returnValue(Observable.of({ email: 'fake-email'}));
|
||||
spyOn(authService, 'getBpmLoggedUser').and.returnValue(of({ email: 'fake-email'}));
|
||||
detailsComponent = new TaskDetailsComponent(null, authService, null, new FormRenderingService(), null, null, null);
|
||||
component = new NoTaskDetailsTemplateDirective(detailsComponent);
|
||||
});
|
||||
|
||||
@@ -82,7 +82,7 @@
|
||||
}
|
||||
}
|
||||
|
||||
&-start-task-input-container .mat-input-wrapper {
|
||||
&-start-task-input-container .mat-form-field-wrapper {
|
||||
padding-top: 8px;
|
||||
}
|
||||
|
||||
@@ -119,7 +119,7 @@
|
||||
|
||||
&-invalid {
|
||||
|
||||
.mat-input-underline {
|
||||
.mat-form-field-underline {
|
||||
background-color: #f44336 !important;
|
||||
}
|
||||
|
||||
@@ -127,7 +127,7 @@
|
||||
border-color: mat-color($warn);
|
||||
}
|
||||
|
||||
.mat-input-prefix {
|
||||
.mat-form-field-prefix {
|
||||
color: mat-color($warn);
|
||||
}
|
||||
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
|
||||
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
|
||||
import { setupTestBed } from '@alfresco/adf-core';
|
||||
import { Observable } from 'rxjs/Observable';
|
||||
import { Observable, of, throwError } from 'rxjs';
|
||||
import { startTaskMock } from '../../mock';
|
||||
import { StartTaskModel } from '../models/start-task.model';
|
||||
import { TaskListService } from '../services/tasklist.service';
|
||||
@@ -54,7 +54,7 @@ describe('StartTaskComponent', () => {
|
||||
element = fixture.nativeElement;
|
||||
|
||||
service = TestBed.get(TaskListService);
|
||||
getFormlistSpy = spyOn(service, 'getFormList').and.returnValue(Observable.of(fakeForms));
|
||||
getFormlistSpy = spyOn(service, 'getFormList').and.returnValue(of(fakeForms));
|
||||
|
||||
fixture.detectChanges();
|
||||
}));
|
||||
@@ -75,7 +75,7 @@ describe('StartTaskComponent', () => {
|
||||
describe('create task', () => {
|
||||
|
||||
beforeEach(() => {
|
||||
createNewTaskSpy = spyOn(service, 'createNewTask').and.returnValue(Observable.of(
|
||||
createNewTaskSpy = spyOn(service, 'createNewTask').and.returnValue(of(
|
||||
{
|
||||
id: 91,
|
||||
name: 'fakeName',
|
||||
@@ -133,7 +133,7 @@ describe('StartTaskComponent', () => {
|
||||
|
||||
describe('attach form', () => {
|
||||
beforeEach(() => {
|
||||
spyOn(service, 'createNewTask').and.returnValue(Observable.of(
|
||||
spyOn(service, 'createNewTask').and.returnValue(of(
|
||||
{
|
||||
id: 91,
|
||||
name: 'fakeName',
|
||||
@@ -141,7 +141,7 @@ describe('StartTaskComponent', () => {
|
||||
assignee: null
|
||||
}
|
||||
));
|
||||
spyOn(service, 'attachFormToATask').and.returnValue(Observable.of(
|
||||
spyOn(service, 'attachFormToATask').and.returnValue(of(
|
||||
{
|
||||
id: 91,
|
||||
name: 'fakeName',
|
||||
@@ -186,7 +186,7 @@ describe('StartTaskComponent', () => {
|
||||
|
||||
describe('assign user', () => {
|
||||
beforeEach(() => {
|
||||
spyOn(service, 'createNewTask').and.returnValue(Observable.of(
|
||||
spyOn(service, 'createNewTask').and.returnValue(of(
|
||||
{
|
||||
id: 91,
|
||||
name: 'fakeName',
|
||||
@@ -194,7 +194,7 @@ describe('StartTaskComponent', () => {
|
||||
assignee: null
|
||||
}
|
||||
));
|
||||
spyOn(service, 'attachFormToATask').and.returnValue(Observable.of(
|
||||
spyOn(service, 'attachFormToATask').and.returnValue(of(
|
||||
{
|
||||
id: 91,
|
||||
name: 'fakeName',
|
||||
@@ -202,7 +202,7 @@ describe('StartTaskComponent', () => {
|
||||
assignee: null
|
||||
}
|
||||
));
|
||||
spyOn(service, 'assignTaskByUserId').and.returnValue(Observable.of(
|
||||
spyOn(service, 'assignTaskByUserId').and.returnValue(of(
|
||||
{
|
||||
id: 91,
|
||||
name: 'fakeName',
|
||||
@@ -265,7 +265,7 @@ describe('StartTaskComponent', () => {
|
||||
});
|
||||
|
||||
it('should not attach a form when a form id is not slected', () => {
|
||||
let attachFormToATask = spyOn(service, 'attachFormToATask').and.returnValue(Observable.of());
|
||||
let attachFormToATask = spyOn(service, 'attachFormToATask').and.returnValue(of());
|
||||
spyOn(service, 'createNewTask').and.callFake(
|
||||
function() {
|
||||
return Observable.create(observer => {
|
||||
@@ -343,7 +343,7 @@ describe('StartTaskComponent', () => {
|
||||
|
||||
it('should emit error when there is an error while creating task', () => {
|
||||
let errorSpy = spyOn(component.error, 'emit');
|
||||
spyOn(service, 'createNewTask').and.returnValue(Observable.throw({}));
|
||||
spyOn(service, 'createNewTask').and.returnValue(throwError({}));
|
||||
let createTaskButton = <HTMLElement> element.querySelector('#button-start');
|
||||
component.startTaskmodel.name = 'fake-name';
|
||||
fixture.detectChanges();
|
||||
|
||||
@@ -21,11 +21,12 @@ import { DateAdapter, MAT_DATE_FORMATS } from '@angular/material/core';
|
||||
import { MOMENT_DATE_FORMATS, MomentDateAdapter } from '@alfresco/adf-core';
|
||||
import moment from 'moment-es6';
|
||||
import { Moment } from 'moment';
|
||||
import { Observable } from 'rxjs/Observable';
|
||||
import { Observable, of } from 'rxjs';
|
||||
import { Form } from '../models/form.model';
|
||||
import { StartTaskModel } from '../models/start-task.model';
|
||||
import { TaskDetailsModel } from '../models/task-details.model';
|
||||
import { TaskListService } from './../services/tasklist.service';
|
||||
import { switchMap, defaultIfEmpty } from 'rxjs/operators';
|
||||
|
||||
@Component({
|
||||
selector: 'adf-start-task',
|
||||
@@ -96,11 +97,17 @@ export class StartTaskComponent implements OnInit {
|
||||
this.startTaskmodel.category = this.appId.toString();
|
||||
}
|
||||
this.taskService.createNewTask(new TaskDetailsModel(this.startTaskmodel))
|
||||
.switchMap((createRes: any) =>
|
||||
this.attachForm(createRes.id, this.formKey).defaultIfEmpty(createRes)
|
||||
.switchMap((attachRes: any) =>
|
||||
this.assignTaskByUserId(createRes.id, this.assigneeId).defaultIfEmpty(attachRes ? attachRes : createRes)
|
||||
.pipe(
|
||||
switchMap((createRes: any) =>
|
||||
this.attachForm(createRes.id, this.formKey).pipe(
|
||||
defaultIfEmpty(createRes),
|
||||
switchMap((attachRes: any) =>
|
||||
this.assignTaskByUserId(createRes.id, this.assigneeId).pipe(
|
||||
defaultIfEmpty(attachRes ? attachRes : createRes)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
.subscribe(
|
||||
(res: any) => {
|
||||
@@ -118,7 +125,7 @@ export class StartTaskComponent implements OnInit {
|
||||
}
|
||||
|
||||
private attachForm(taskId: string, formKey: number): Observable<any> {
|
||||
let response = Observable.of();
|
||||
let response = of();
|
||||
if (taskId && formKey) {
|
||||
response = this.taskService.attachFormToATask(taskId, formKey);
|
||||
}
|
||||
@@ -126,7 +133,7 @@ export class StartTaskComponent implements OnInit {
|
||||
}
|
||||
|
||||
private assignTaskByUserId(taskId: string, userId: any): Observable<any> {
|
||||
let response = Observable.of();
|
||||
let response = of();
|
||||
if (taskId && userId) {
|
||||
response = this.taskService.assignTaskByUserId(taskId, userId);
|
||||
}
|
||||
|
||||
@@ -22,7 +22,7 @@ import {
|
||||
fakeAsync,
|
||||
TestBed
|
||||
} from '@angular/core/testing';
|
||||
import { Observable } from 'rxjs/Observable';
|
||||
import { of } from 'rxjs';
|
||||
import { TaskListService } from './../services/tasklist.service';
|
||||
import { setupTestBed, CoreModule } from '@alfresco/adf-core';
|
||||
import { TaskAuditDirective } from './task-audit.directive';
|
||||
@@ -100,7 +100,7 @@ describe('TaskAuditDirective', () => {
|
||||
component.fileName = 'FakeAuditName';
|
||||
component.format = 'pdf';
|
||||
let blob = createFakePdfBlob();
|
||||
spyOn(service, 'fetchTaskAuditPdfById').and.returnValue(Observable.of(blob));
|
||||
spyOn(service, 'fetchTaskAuditPdfById').and.returnValue(of(blob));
|
||||
spyOn(component, 'onAuditClick').and.callThrough();
|
||||
|
||||
fixture.detectChanges();
|
||||
@@ -121,7 +121,7 @@ describe('TaskAuditDirective', () => {
|
||||
component.format = 'json';
|
||||
component.download = true;
|
||||
const auditJson = { taskId: '77', taskName: 'Fake Task Naem', assignee: 'FirstName LastName', formData: [], selectedOutcome: null, comments: [] };
|
||||
spyOn(service, 'fetchTaskAuditJsonById').and.returnValue(Observable.of(auditJson));
|
||||
spyOn(service, 'fetchTaskAuditJsonById').and.returnValue(of(auditJson));
|
||||
spyOn(component, 'onAuditClick').and.callThrough();
|
||||
|
||||
fixture.detectChanges();
|
||||
@@ -141,7 +141,7 @@ describe('TaskAuditDirective', () => {
|
||||
component.fileName = 'FakeAuditName';
|
||||
component.format = 'fakeFormat';
|
||||
let blob = createFakePdfBlob();
|
||||
spyOn(service, 'fetchTaskAuditPdfById').and.returnValue(Observable.of(blob));
|
||||
spyOn(service, 'fetchTaskAuditPdfById').and.returnValue(of(blob));
|
||||
spyOn(component, 'onAuditClick').and.callThrough();
|
||||
|
||||
fixture.detectChanges();
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
import { NO_ERRORS_SCHEMA, SimpleChange } from '@angular/core';
|
||||
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
|
||||
import { By } from '@angular/platform-browser';
|
||||
import { Observable } from 'rxjs/Observable';
|
||||
import { of, throwError } from 'rxjs';
|
||||
|
||||
import { FormModel, FormOutcomeEvent, FormOutcomeModel, FormService, setupTestBed, BpmUserService } from '@alfresco/adf-core';
|
||||
import { CommentProcessService, LogService, AuthenticationService } from '@alfresco/adf-core';
|
||||
@@ -64,27 +64,27 @@ describe('TaskDetailsComponent', () => {
|
||||
logService = TestBed.get(LogService);
|
||||
|
||||
const userService: BpmUserService = TestBed.get(BpmUserService);
|
||||
spyOn(userService, 'getCurrentUserInfo').and.returnValue(Observable.of({}));
|
||||
spyOn(userService, 'getCurrentUserInfo').and.returnValue(of({}));
|
||||
|
||||
service = TestBed.get(TaskListService);
|
||||
spyOn(service, 'getTaskChecklist').and.returnValue(Observable.of(noDataMock));
|
||||
spyOn(service, 'getTaskChecklist').and.returnValue(of(noDataMock));
|
||||
|
||||
formService = TestBed.get(FormService);
|
||||
|
||||
getTaskDetailsSpy = spyOn(service, 'getTaskDetails').and.returnValue(Observable.of(taskDetailsMock));
|
||||
spyOn(formService, 'getTaskForm').and.returnValue(Observable.of(taskFormMock));
|
||||
getTaskDetailsSpy = spyOn(service, 'getTaskDetails').and.returnValue(of(taskDetailsMock));
|
||||
spyOn(formService, 'getTaskForm').and.returnValue(of(taskFormMock));
|
||||
taskDetailsMock.processDefinitionId = null;
|
||||
spyOn(formService, 'getTask').and.returnValue(Observable.of(taskDetailsMock));
|
||||
spyOn(formService, 'getTask').and.returnValue(of(taskDetailsMock));
|
||||
|
||||
getTasksSpy = spyOn(service, 'getTasks').and.returnValue(Observable.of(tasksMock));
|
||||
assignTaskSpy = spyOn(service, 'assignTask').and.returnValue(Observable.of(fakeUser));
|
||||
completeTaskSpy = spyOn(service, 'completeTask').and.returnValue(Observable.of({}));
|
||||
getTasksSpy = spyOn(service, 'getTasks').and.returnValue(of(tasksMock));
|
||||
assignTaskSpy = spyOn(service, 'assignTask').and.returnValue(of(fakeUser));
|
||||
completeTaskSpy = spyOn(service, 'completeTask').and.returnValue(of({}));
|
||||
commentProcessService = TestBed.get(CommentProcessService);
|
||||
|
||||
authService = TestBed.get(AuthenticationService);
|
||||
spyOn(authService, 'getBpmLoggedUser').and.returnValue(Observable.of({ email: 'fake-email'}));
|
||||
spyOn(authService, 'getBpmLoggedUser').and.returnValue(of({ email: 'fake-email'}));
|
||||
|
||||
spyOn(commentProcessService, 'getTaskComments').and.returnValue(Observable.of([
|
||||
spyOn(commentProcessService, 'getTaskComments').and.returnValue(of([
|
||||
{message: 'Test1', created: Date.now(), createdBy: {firstName: 'Admin', lastName: 'User'}},
|
||||
{message: 'Test2', created: Date.now(), createdBy: {firstName: 'Admin', lastName: 'User'}},
|
||||
{message: 'Test3', created: Date.now(), createdBy: {firstName: 'Admin', lastName: 'User'}}
|
||||
@@ -274,7 +274,7 @@ describe('TaskDetailsComponent', () => {
|
||||
});
|
||||
|
||||
it('should show placeholder message if there is no next task', () => {
|
||||
getTasksSpy.and.returnValue(Observable.of([]));
|
||||
getTasksSpy.and.returnValue(of([]));
|
||||
component.onComplete();
|
||||
fixture.detectChanges();
|
||||
expect(fixture.nativeElement.innerText).toBe('ADF_TASK_LIST.DETAILS.MESSAGES.NONE');
|
||||
@@ -282,7 +282,7 @@ describe('TaskDetailsComponent', () => {
|
||||
|
||||
it('should emit an error event if an error occurs fetching the next task', () => {
|
||||
let emitSpy: jasmine.Spy = spyOn(component.error, 'emit');
|
||||
getTasksSpy.and.returnValue(Observable.throw({}));
|
||||
getTasksSpy.and.returnValue(throwError({}));
|
||||
component.onComplete();
|
||||
expect(emitSpy).toHaveBeenCalled();
|
||||
});
|
||||
@@ -421,7 +421,7 @@ describe('TaskDetailsComponent', () => {
|
||||
});
|
||||
|
||||
it('should return an observable with user search results', (done) => {
|
||||
spyOn(peopleProcessService, 'getWorkflowUsers').and.returnValue(Observable.of([{
|
||||
spyOn(peopleProcessService, 'getWorkflowUsers').and.returnValue(of([{
|
||||
id: 1,
|
||||
firstName: 'fake-test-1',
|
||||
lastName: 'fake-last-1',
|
||||
@@ -445,7 +445,7 @@ describe('TaskDetailsComponent', () => {
|
||||
});
|
||||
|
||||
it('should return an empty list for not valid search', (done) => {
|
||||
spyOn(peopleProcessService, 'getWorkflowUsers').and.returnValue(Observable.of([]));
|
||||
spyOn(peopleProcessService, 'getWorkflowUsers').and.returnValue(of([]));
|
||||
|
||||
component.peopleSearch.subscribe((users) => {
|
||||
expect(users.length).toBe(0);
|
||||
@@ -455,7 +455,7 @@ describe('TaskDetailsComponent', () => {
|
||||
});
|
||||
|
||||
it('should log error message when search fails', async(() => {
|
||||
spyOn(peopleProcessService, 'getWorkflowUsers').and.returnValue(Observable.throw(''));
|
||||
spyOn(peopleProcessService, 'getWorkflowUsers').and.returnValue(throwError(''));
|
||||
|
||||
component.peopleSearch.subscribe(() => {
|
||||
expect(logService.error).toHaveBeenCalledWith('Could not load users');
|
||||
|
||||
@@ -37,14 +37,14 @@ import {
|
||||
ViewChild
|
||||
} from '@angular/core';
|
||||
import { MatDialog, MatDialogRef } from '@angular/material';
|
||||
import { Observable } from 'rxjs/Observable';
|
||||
import { Observer } from 'rxjs/Observer';
|
||||
import { Observable, Observer } from 'rxjs';
|
||||
import { ContentLinkModel, FormFieldValidator, FormModel, FormOutcomeEvent } from '@alfresco/adf-core';
|
||||
import { TaskQueryRequestRepresentationModel } from '../models/filter.model';
|
||||
import { TaskDetailsModel } from '../models/task-details.model';
|
||||
import { TaskListService } from './../services/tasklist.service';
|
||||
import { AttachFileWidgetComponent, AttachFolderWidgetComponent } from '../../content-widget';
|
||||
import { UserRepresentation } from 'alfresco-js-api';
|
||||
import { share } from 'rxjs/operators';
|
||||
|
||||
@Component({
|
||||
selector: 'adf-task-details',
|
||||
@@ -182,6 +182,7 @@ export class TaskDetailsComponent implements OnInit, OnChanges {
|
||||
peopleSearch: Observable<UserProcessModel[]>;
|
||||
|
||||
currentLoggedUser: UserRepresentation;
|
||||
data: any;
|
||||
|
||||
constructor(private taskListService: TaskListService,
|
||||
private authService: AuthenticationService,
|
||||
@@ -193,7 +194,8 @@ export class TaskDetailsComponent implements OnInit, OnChanges {
|
||||
|
||||
this.formRenderingService.setComponentTypeResolver('select-folder', () => AttachFolderWidgetComponent, true);
|
||||
this.formRenderingService.setComponentTypeResolver('upload', () => AttachFileWidgetComponent, true);
|
||||
this.peopleSearch = new Observable<UserProcessModel[]>(observer => this.peopleSearchObserver = observer).share();
|
||||
this.peopleSearch = new Observable<UserProcessModel[]>(observer => this.peopleSearchObserver = observer)
|
||||
.pipe(share());
|
||||
this.authService.getBpmLoggedUser().subscribe((user: UserRepresentation) => {
|
||||
this.currentLoggedUser = user;
|
||||
});
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
import { SimpleChange } from '@angular/core';
|
||||
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
|
||||
import { AppConfigService, AppsProcessService, setupTestBed } from '@alfresco/adf-core';
|
||||
import { Observable } from 'rxjs/Observable';
|
||||
import { from, of } from 'rxjs';
|
||||
import { FilterParamsModel, FilterRepresentationModel } from '../models/filter.model';
|
||||
import { TaskListService } from '../services/tasklist.service';
|
||||
import { TaskFilterService } from '../services/task-filter.service';
|
||||
@@ -88,7 +88,7 @@ describe('TaskFiltersComponent', () => {
|
||||
});
|
||||
|
||||
it('should emit an error with a bad response', (done) => {
|
||||
spyOn(taskFilterService, 'getTaskListFilters').and.returnValue(Observable.fromPromise(mockErrorFilterPromise));
|
||||
spyOn(taskFilterService, 'getTaskListFilters').and.returnValue(from(mockErrorFilterPromise));
|
||||
|
||||
const appId = '1';
|
||||
let change = new SimpleChange(null, appId, true);
|
||||
@@ -102,7 +102,7 @@ describe('TaskFiltersComponent', () => {
|
||||
});
|
||||
|
||||
it('should return the filter task list', (done) => {
|
||||
spyOn(taskFilterService, 'getTaskListFilters').and.returnValue(Observable.fromPromise(fakeGlobalFilterPromise));
|
||||
spyOn(taskFilterService, 'getTaskListFilters').and.returnValue(from(fakeGlobalFilterPromise));
|
||||
const appId = '1';
|
||||
let change = new SimpleChange(null, appId, true);
|
||||
component.ngOnChanges({ 'appId': change });
|
||||
@@ -126,8 +126,8 @@ describe('TaskFiltersComponent', () => {
|
||||
resolve({});
|
||||
});
|
||||
|
||||
spyOn(appsProcessService, 'getDeployedApplicationsByName').and.returnValue(Observable.fromPromise(fakeDeployedApplicationsPromise));
|
||||
spyOn(taskFilterService, 'getTaskListFilters').and.returnValue(Observable.fromPromise(fakeGlobalFilterPromise));
|
||||
spyOn(appsProcessService, 'getDeployedApplicationsByName').and.returnValue(from(fakeDeployedApplicationsPromise));
|
||||
spyOn(taskFilterService, 'getTaskListFilters').and.returnValue(from(fakeGlobalFilterPromise));
|
||||
|
||||
let change = new SimpleChange(null, 'test', true);
|
||||
component.ngOnChanges({ 'appName': change });
|
||||
@@ -143,7 +143,7 @@ describe('TaskFiltersComponent', () => {
|
||||
});
|
||||
|
||||
it('should select the first filter as default', (done) => {
|
||||
spyOn(taskFilterService, 'getTaskListFilters').and.returnValue(Observable.fromPromise(fakeGlobalFilterPromise));
|
||||
spyOn(taskFilterService, 'getTaskListFilters').and.returnValue(from(fakeGlobalFilterPromise));
|
||||
|
||||
const appId = '1';
|
||||
let change = new SimpleChange(null, appId, true);
|
||||
@@ -161,7 +161,7 @@ describe('TaskFiltersComponent', () => {
|
||||
});
|
||||
|
||||
it('should be able to fetch and select the default if the input filter is not valid', (done) => {
|
||||
spyOn(taskFilterService, 'getTaskListFilters').and.returnValue(Observable.fromPromise(fakeGlobalEmptyFilterPromise));
|
||||
spyOn(taskFilterService, 'getTaskListFilters').and.returnValue(from(fakeGlobalEmptyFilterPromise));
|
||||
spyOn(component, 'createFiltersByAppId').and.stub();
|
||||
|
||||
const appId = '1';
|
||||
@@ -176,7 +176,7 @@ describe('TaskFiltersComponent', () => {
|
||||
});
|
||||
|
||||
it('should select the task filter based on the input by name param', (done) => {
|
||||
spyOn(taskFilterService, 'getTaskListFilters').and.returnValue(Observable.fromPromise(fakeGlobalFilterPromise));
|
||||
spyOn(taskFilterService, 'getTaskListFilters').and.returnValue(from(fakeGlobalFilterPromise));
|
||||
|
||||
component.filterParam = new FilterParamsModel({ name: 'FakeMyTasks1' });
|
||||
const appId = '1';
|
||||
@@ -195,7 +195,7 @@ describe('TaskFiltersComponent', () => {
|
||||
});
|
||||
|
||||
it('should select the default task filter if filter input does not exist', (done) => {
|
||||
spyOn(taskFilterService, 'getTaskListFilters').and.returnValue(Observable.fromPromise(fakeGlobalFilterPromise));
|
||||
spyOn(taskFilterService, 'getTaskListFilters').and.returnValue(from(fakeGlobalFilterPromise));
|
||||
|
||||
component.filterParam = new FilterParamsModel({ name: 'UnexistableFilter' });
|
||||
|
||||
@@ -215,7 +215,7 @@ describe('TaskFiltersComponent', () => {
|
||||
});
|
||||
|
||||
it('should select the task filter based on the input by index param', (done) => {
|
||||
spyOn(taskFilterService, 'getTaskListFilters').and.returnValue(Observable.fromPromise(fakeGlobalFilterPromise));
|
||||
spyOn(taskFilterService, 'getTaskListFilters').and.returnValue(from(fakeGlobalFilterPromise));
|
||||
|
||||
component.filterParam = new FilterParamsModel({ index: 2 });
|
||||
|
||||
@@ -235,7 +235,7 @@ describe('TaskFiltersComponent', () => {
|
||||
});
|
||||
|
||||
it('should select the task filter based on the input by id param', (done) => {
|
||||
spyOn(taskFilterService, 'getTaskListFilters').and.returnValue(Observable.fromPromise(fakeGlobalFilterPromise));
|
||||
spyOn(taskFilterService, 'getTaskListFilters').and.returnValue(from(fakeGlobalFilterPromise));
|
||||
|
||||
component.filterParam = new FilterParamsModel({ id: 10 });
|
||||
|
||||
@@ -345,7 +345,7 @@ describe('TaskFiltersComponent', () => {
|
||||
});
|
||||
component.filters = fakeGlobalFilter;
|
||||
component.currentFilter = filter;
|
||||
spyOn(taskListService, 'isTaskRelatedToFilter').and.returnValue(Observable.of(null));
|
||||
spyOn(taskListService, 'isTaskRelatedToFilter').and.returnValue(of(null));
|
||||
component.selectFilterWithTask('111');
|
||||
|
||||
expect(component.currentFilter).toBe(filter);
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
|
||||
import { AppsProcessService } from '@alfresco/adf-core';
|
||||
import { Component, EventEmitter, Input, OnChanges, OnInit, Output, SimpleChanges } from '@angular/core';
|
||||
import { Observable } from 'rxjs/Observable';
|
||||
import { Observable } from 'rxjs';
|
||||
import { FilterParamsModel, FilterRepresentationModel } from '../models/filter.model';
|
||||
import { TaskFilterService } from './../services/task-filter.service';
|
||||
import { TaskListService } from './../services/tasklist.service';
|
||||
|
||||
@@ -19,7 +19,7 @@ import { async, ComponentFixture, TestBed } from '@angular/core/testing';
|
||||
import { By } from '@angular/platform-browser';
|
||||
import { AppConfigService, setupTestBed } from '@alfresco/adf-core';
|
||||
import { BpmUserService } from '@alfresco/adf-core';
|
||||
import { Observable } from 'rxjs/Observable';
|
||||
import { of } from 'rxjs';
|
||||
import {
|
||||
completedTaskDetailsMock,
|
||||
taskDetailsMock,
|
||||
@@ -67,7 +67,7 @@ describe('TaskHeaderComponent', () => {
|
||||
component = fixture.componentInstance;
|
||||
service = TestBed.get(TaskListService);
|
||||
userBpmService = TestBed.get(BpmUserService);
|
||||
spyOn(userBpmService, 'getCurrentUserInfo').and.returnValue(Observable.of(fakeBpmAssignedUser));
|
||||
spyOn(userBpmService, 'getCurrentUserInfo').and.returnValue(of(fakeBpmAssignedUser));
|
||||
component.taskDetails = new TaskDetailsModel(taskDetailsMock);
|
||||
appConfigService = TestBed.get(AppConfigService);
|
||||
});
|
||||
@@ -241,7 +241,7 @@ describe('TaskHeaderComponent', () => {
|
||||
}));
|
||||
|
||||
it('should call the service\'s unclaim method on unclaiming', async(() => {
|
||||
spyOn(service, 'unclaimTask').and.returnValue(Observable.of(true));
|
||||
spyOn(service, 'unclaimTask').and.returnValue(of(true));
|
||||
component.taskDetails = new TaskDetailsModel(claimedTaskDetailsMock);
|
||||
component.refreshData();
|
||||
fixture.detectChanges();
|
||||
@@ -254,9 +254,9 @@ describe('TaskHeaderComponent', () => {
|
||||
});
|
||||
}));
|
||||
|
||||
it('should trigger the unclaim event on successfull unclaiming', async(() => {
|
||||
it('should trigger the unclaim event on successful unclaiming', async(() => {
|
||||
let unclaimed: boolean = false;
|
||||
spyOn(service, 'unclaimTask').and.returnValue(Observable.of(true));
|
||||
spyOn(service, 'unclaimTask').and.returnValue(of(true));
|
||||
component.taskDetails = new TaskDetailsModel(claimedTaskDetailsMock);
|
||||
component.refreshData();
|
||||
fixture.detectChanges();
|
||||
|
||||
@@ -23,8 +23,7 @@ import {
|
||||
AfterContentInit, Component, ContentChild, EventEmitter,
|
||||
Input, OnChanges, Output, SimpleChanges } from '@angular/core';
|
||||
|
||||
import { Observable } from 'rxjs/Observable';
|
||||
import { BehaviorSubject } from 'rxjs/BehaviorSubject';
|
||||
import { Observable, BehaviorSubject } from 'rxjs';
|
||||
import { TaskQueryRequestRepresentationModel } from '../models/filter.model';
|
||||
import { TaskListModel } from '../models/task-list.model';
|
||||
import { taskPresetsDefaultModel } from '../models/task-preset.model';
|
||||
|
||||
@@ -17,8 +17,7 @@
|
||||
|
||||
import { AlfrescoApiService, AppConfigService, UploadService } from '@alfresco/adf-core';
|
||||
import { Injectable } from '@angular/core';
|
||||
import { Observable } from 'rxjs/Observable';
|
||||
import 'rxjs/add/observable/throw';
|
||||
import { throwError } from 'rxjs';
|
||||
|
||||
@Injectable()
|
||||
export class ProcessUploadService extends UploadService {
|
||||
@@ -40,7 +39,7 @@ export class ProcessUploadService extends UploadService {
|
||||
}
|
||||
|
||||
private handleError(error: any) {
|
||||
return Observable.throw(error || 'Server error');
|
||||
return throwError(error || 'Server error');
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -17,9 +17,9 @@
|
||||
|
||||
import { AlfrescoApiService, LogService } from '@alfresco/adf-core';
|
||||
import { Injectable } from '@angular/core';
|
||||
import { Observable } from 'rxjs/Observable';
|
||||
import { Observable, forkJoin, from, throwError } from 'rxjs';
|
||||
import { FilterRepresentationModel } from '../models/filter.model';
|
||||
import 'rxjs/add/observable/throw';
|
||||
import { map, catchError } from 'rxjs/operators';
|
||||
|
||||
@Injectable()
|
||||
export class TaskFilterService {
|
||||
@@ -47,7 +47,7 @@ export class TaskFilterService {
|
||||
let completeObservable = this.addFilter(completedTasksFilter);
|
||||
|
||||
return Observable.create(observer => {
|
||||
Observable.forkJoin(
|
||||
forkJoin(
|
||||
involvedObservable,
|
||||
myTaskObservable,
|
||||
queuedObservable,
|
||||
@@ -85,15 +85,18 @@ export class TaskFilterService {
|
||||
* @returns Array of task filter details
|
||||
*/
|
||||
getTaskListFilters(appId?: number): Observable<FilterRepresentationModel[]> {
|
||||
return Observable.fromPromise(this.callApiTaskFilters(appId))
|
||||
.map((response: any) => {
|
||||
let filters: FilterRepresentationModel[] = [];
|
||||
response.data.forEach((filter: FilterRepresentationModel) => {
|
||||
let filterModel = new FilterRepresentationModel(filter);
|
||||
filters.push(filterModel);
|
||||
});
|
||||
return filters;
|
||||
}).catch(err => this.handleError(err));
|
||||
return from(this.callApiTaskFilters(appId))
|
||||
.pipe(
|
||||
map((response: any) => {
|
||||
const filters: FilterRepresentationModel[] = [];
|
||||
response.data.forEach((filter: FilterRepresentationModel) => {
|
||||
const filterModel = new FilterRepresentationModel(filter);
|
||||
filters.push(filterModel);
|
||||
});
|
||||
return filters;
|
||||
}),
|
||||
catchError(err => this.handleError(err))
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -103,10 +106,10 @@ export class TaskFilterService {
|
||||
* @returns Details of task filter
|
||||
*/
|
||||
getTaskFilterById(filterId: number, appId?: number): Observable<FilterRepresentationModel> {
|
||||
return Observable.fromPromise(this.callApiTaskFilters(appId))
|
||||
.map((response: any) => {
|
||||
return response.data.find(filter => filter.id === filterId);
|
||||
}).catch(err => this.handleError(err));
|
||||
return from(this.callApiTaskFilters(appId)).pipe(
|
||||
map(response => response.data.find(filter => filter.id === filterId)),
|
||||
catchError(err => this.handleError(err))
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -116,10 +119,10 @@ export class TaskFilterService {
|
||||
* @returns Details of task filter
|
||||
*/
|
||||
getTaskFilterByName(taskName: string, appId?: number): Observable<FilterRepresentationModel> {
|
||||
return Observable.fromPromise(this.callApiTaskFilters(appId))
|
||||
.map((response: any) => {
|
||||
return response.data.find(filter => filter.name === taskName);
|
||||
}).catch(err => this.handleError(err));
|
||||
return from(this.callApiTaskFilters(appId)).pipe(
|
||||
map(response => response.data.find(filter => filter.name === taskName)),
|
||||
catchError(err => this.handleError(err))
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -128,11 +131,13 @@ export class TaskFilterService {
|
||||
* @returns Details of task filter just added
|
||||
*/
|
||||
addFilter(filter: FilterRepresentationModel): Observable<FilterRepresentationModel> {
|
||||
return Observable.fromPromise(this.apiService.getInstance().activiti.userFiltersApi.createUserTaskFilter(filter))
|
||||
.map(res => res)
|
||||
.map((response: FilterRepresentationModel) => {
|
||||
return response;
|
||||
}).catch(err => this.handleError(err));
|
||||
return from(this.apiService.getInstance().activiti.userFiltersApi.createUserTaskFilter(filter))
|
||||
.pipe(
|
||||
map((response: FilterRepresentationModel) => {
|
||||
return response;
|
||||
}),
|
||||
catchError(err => this.handleError(err))
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -140,7 +145,7 @@ export class TaskFilterService {
|
||||
* @param appId ID of the target app
|
||||
* @returns List of task filters
|
||||
*/
|
||||
callApiTaskFilters(appId?: number) {
|
||||
callApiTaskFilters(appId?: number): Promise<any> {
|
||||
if (appId) {
|
||||
return this.apiService.getInstance().activiti.userFiltersApi.getUserTaskFilters({appId: appId});
|
||||
} else {
|
||||
@@ -210,7 +215,7 @@ export class TaskFilterService {
|
||||
|
||||
private handleError(error: any) {
|
||||
this.logService.error(error);
|
||||
return Observable.throw(error || 'Server error');
|
||||
return throwError(error || 'Server error');
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -17,8 +17,7 @@
|
||||
|
||||
import { AlfrescoApiService, AppConfigService, UploadService } from '@alfresco/adf-core';
|
||||
import { Injectable } from '@angular/core';
|
||||
import { Observable } from 'rxjs/Observable';
|
||||
import 'rxjs/add/observable/throw';
|
||||
import { throwError } from 'rxjs';
|
||||
|
||||
@Injectable()
|
||||
export class TaskUploadService extends UploadService {
|
||||
@@ -40,7 +39,7 @@ export class TaskUploadService extends UploadService {
|
||||
}
|
||||
|
||||
private handleError(error: any) {
|
||||
return Observable.throw(error || 'Server error');
|
||||
return throwError(error || 'Server error');
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
|
||||
import { async } from '@angular/core/testing';
|
||||
import { UserProcessModel, setupTestBed, CoreModule } from '@alfresco/adf-core';
|
||||
import { Observable } from 'rxjs/Observable';
|
||||
import { of } from 'rxjs';
|
||||
import {
|
||||
fakeCompletedTaskList,
|
||||
fakeFilter,
|
||||
@@ -82,8 +82,8 @@ describe('Activiti TaskList Service', () => {
|
||||
});
|
||||
|
||||
it('should return the task list with all tasks filtered by state', (done) => {
|
||||
spyOn(service, 'getTasks').and.returnValue(Observable.of(fakeTaskList));
|
||||
spyOn(service, 'getTotalTasks').and.returnValue(Observable.of(fakeTaskList));
|
||||
spyOn(service, 'getTasks').and.returnValue(of(fakeTaskList));
|
||||
spyOn(service, 'getTotalTasks').and.returnValue(of(fakeTaskList));
|
||||
|
||||
service.findAllTaskByState(<TaskQueryRequestRepresentationModel> fakeFilter, 'open').subscribe(res => {
|
||||
|
||||
@@ -101,8 +101,8 @@ describe('Activiti TaskList Service', () => {
|
||||
});
|
||||
|
||||
it('should return the task list with all tasks filtered', (done) => {
|
||||
spyOn(service, 'getTasks').and.returnValue(Observable.of(fakeTaskList));
|
||||
spyOn(service, 'getTotalTasks').and.returnValue(Observable.of(fakeTaskList));
|
||||
spyOn(service, 'getTasks').and.returnValue(of(fakeTaskList));
|
||||
spyOn(service, 'getTotalTasks').and.returnValue(of(fakeTaskList));
|
||||
|
||||
service.findAllTaskByState(<TaskQueryRequestRepresentationModel> fakeFilter).subscribe(res => {
|
||||
expect(res).toBeDefined();
|
||||
@@ -160,8 +160,8 @@ describe('Activiti TaskList Service', () => {
|
||||
});
|
||||
|
||||
it('should return the task list with all tasks filtered without state', (done) => {
|
||||
spyOn(service, 'getTasks').and.returnValue(Observable.of(fakeTaskList));
|
||||
spyOn(service, 'getTotalTasks').and.returnValue(Observable.of(fakeTaskList));
|
||||
spyOn(service, 'getTasks').and.returnValue(of(fakeTaskList));
|
||||
spyOn(service, 'getTotalTasks').and.returnValue(of(fakeTaskList));
|
||||
|
||||
service.findAllTasksWithoutState(<TaskQueryRequestRepresentationModel> fakeFilter).subscribe(res => {
|
||||
expect(res).toBeDefined();
|
||||
@@ -181,8 +181,8 @@ describe('Activiti TaskList Service', () => {
|
||||
});
|
||||
|
||||
it('Should return both open and completed task', (done) => {
|
||||
spyOn(service, 'findTasksByState').and.returnValue(Observable.of(fakeOpenTaskList));
|
||||
spyOn(service, 'findAllTaskByState').and.returnValue(Observable.of(fakeCompletedTaskList));
|
||||
spyOn(service, 'findTasksByState').and.returnValue(of(fakeOpenTaskList));
|
||||
spyOn(service, 'findAllTaskByState').and.returnValue(of(fakeCompletedTaskList));
|
||||
service.findAllTasksWithoutState(<TaskQueryRequestRepresentationModel> fakeFilter).subscribe(res => {
|
||||
expect(res).toBeDefined();
|
||||
expect(res.data).toBeDefined();
|
||||
@@ -197,8 +197,8 @@ describe('Activiti TaskList Service', () => {
|
||||
});
|
||||
|
||||
it('should add the task list to the tasklistSubject with all tasks filtered without state', (done) => {
|
||||
spyOn(service, 'getTasks').and.returnValue(Observable.of(fakeTaskList));
|
||||
spyOn(service, 'getTotalTasks').and.returnValue(Observable.of(fakeTaskList));
|
||||
spyOn(service, 'getTasks').and.returnValue(of(fakeTaskList));
|
||||
spyOn(service, 'getTotalTasks').and.returnValue(of(fakeTaskList));
|
||||
|
||||
service.findAllTasksWithoutState(<TaskQueryRequestRepresentationModel> fakeFilter).subscribe(res => {
|
||||
expect(res).toBeDefined();
|
||||
|
||||
@@ -17,16 +17,12 @@
|
||||
|
||||
import { AlfrescoApiService, LogService } from '@alfresco/adf-core';
|
||||
import { Injectable } from '@angular/core';
|
||||
import { Observable } from 'rxjs/Observable';
|
||||
import { Observable, from, forkJoin, throwError } from 'rxjs';
|
||||
import { map, catchError, switchMap, flatMap, filter } from 'rxjs/operators';
|
||||
import { FilterRepresentationModel, TaskQueryRequestRepresentationModel } from '../models/filter.model';
|
||||
import { Form } from '../models/form.model';
|
||||
import { TaskDetailsModel } from '../models/task-details.model';
|
||||
import { TaskListModel } from '../models/task-list.model';
|
||||
import 'rxjs/add/observable/throw';
|
||||
import 'rxjs/add/observable/forkJoin';
|
||||
import 'rxjs/add/observable/fromPromise';
|
||||
import 'rxjs/operator/switchMap';
|
||||
import 'rxjs/add/observable/from';
|
||||
|
||||
@Injectable()
|
||||
export class TaskListService {
|
||||
@@ -42,9 +38,11 @@ export class TaskListService {
|
||||
* @returns Filters belonging to the task
|
||||
*/
|
||||
getFilterForTaskById(taskId: string, filterList: FilterRepresentationModel[]): Observable<FilterRepresentationModel> {
|
||||
return Observable.from(filterList)
|
||||
.flatMap((filter: FilterRepresentationModel) => this.isTaskRelatedToFilter(taskId, filter))
|
||||
.filter((filter: FilterRepresentationModel) => filter != null);
|
||||
return from(filterList)
|
||||
.pipe(
|
||||
flatMap((data: FilterRepresentationModel) => this.isTaskRelatedToFilter(taskId, data)),
|
||||
filter((data: FilterRepresentationModel) => data != null)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -52,12 +50,12 @@ export class TaskListService {
|
||||
* @param filter The filter to use
|
||||
* @returns The search query
|
||||
*/
|
||||
private generateTaskRequestNodeFromFilter(filter: FilterRepresentationModel): TaskQueryRequestRepresentationModel {
|
||||
private generateTaskRequestNodeFromFilter(filterModel: FilterRepresentationModel): TaskQueryRequestRepresentationModel {
|
||||
let requestNode = {
|
||||
appDefinitionId: filter.appId,
|
||||
assignment: filter.filter.assignment,
|
||||
state: filter.filter.state,
|
||||
sort: filter.filter.sort
|
||||
appDefinitionId: filterModel.appId,
|
||||
assignment: filterModel.filter.assignment,
|
||||
state: filterModel.filter.state,
|
||||
sort: filterModel.filter.sort
|
||||
};
|
||||
return new TaskQueryRequestRepresentationModel(requestNode);
|
||||
}
|
||||
@@ -68,12 +66,15 @@ export class TaskListService {
|
||||
* @param filter The filter you want to check
|
||||
* @returns The filter if it is related or null otherwise
|
||||
*/
|
||||
isTaskRelatedToFilter(taskId: string, filter: FilterRepresentationModel): Observable<FilterRepresentationModel> {
|
||||
let requestNodeForFilter = this.generateTaskRequestNodeFromFilter(filter);
|
||||
return Observable.fromPromise(this.callApiTasksFiltered(requestNodeForFilter))
|
||||
.map((res: any) => {
|
||||
return res.data.find(element => element.id === taskId) ? filter : null;
|
||||
}).catch(err => this.handleError(err));
|
||||
isTaskRelatedToFilter(taskId: string, filterModel: FilterRepresentationModel): Observable<FilterRepresentationModel> {
|
||||
let requestNodeForFilter = this.generateTaskRequestNodeFromFilter(filterModel);
|
||||
return from(this.callApiTasksFiltered(requestNodeForFilter))
|
||||
.pipe(
|
||||
map((res: any) => {
|
||||
return res.data.find(element => element.id === taskId) ? filterModel : null;
|
||||
}),
|
||||
catchError(err => this.handleError(err))
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -82,10 +83,10 @@ export class TaskListService {
|
||||
* @returns List of tasks
|
||||
*/
|
||||
getTasks(requestNode: TaskQueryRequestRepresentationModel): Observable<TaskListModel> {
|
||||
return Observable.fromPromise(this.callApiTasksFiltered(requestNode))
|
||||
.map((res: TaskListModel) => {
|
||||
return res;
|
||||
}).catch(err => this.handleError(err));
|
||||
return from<TaskListModel>(this.callApiTasksFiltered(requestNode))
|
||||
.pipe(
|
||||
catchError(err => this.handleError(err))
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -111,10 +112,13 @@ export class TaskListService {
|
||||
if (state) {
|
||||
requestNode.state = state;
|
||||
}
|
||||
return this.getTotalTasks(requestNode).switchMap((res: any) => {
|
||||
requestNode.size = res.total;
|
||||
return this.getTasks(requestNode);
|
||||
});
|
||||
return this.getTotalTasks(requestNode)
|
||||
.pipe(
|
||||
switchMap((res: any) => {
|
||||
requestNode.size = res.total;
|
||||
return this.getTasks(requestNode);
|
||||
})
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -123,7 +127,7 @@ export class TaskListService {
|
||||
* @returns List of tasks
|
||||
*/
|
||||
findAllTasksWithoutState(requestNode: TaskQueryRequestRepresentationModel): Observable<TaskListModel> {
|
||||
return Observable.forkJoin(
|
||||
return forkJoin(
|
||||
this.findTasksByState(requestNode, 'open'),
|
||||
this.findAllTaskByState(requestNode, 'completed'),
|
||||
(activeTasks: TaskListModel, completedTasks: TaskListModel) => {
|
||||
@@ -141,11 +145,13 @@ export class TaskListService {
|
||||
* @returns Task details
|
||||
*/
|
||||
getTaskDetails(taskId: string): Observable<TaskDetailsModel> {
|
||||
return Observable.fromPromise(this.callApiTaskDetails(taskId))
|
||||
.map(res => res)
|
||||
.map((details: any) => {
|
||||
return new TaskDetailsModel(details);
|
||||
}).catch(err => this.handleError(err));
|
||||
return from(this.callApiTaskDetails(taskId))
|
||||
.pipe(
|
||||
map((details: any) => {
|
||||
return new TaskDetailsModel(details);
|
||||
}),
|
||||
catchError(err => this.handleError(err))
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -154,15 +160,17 @@ export class TaskListService {
|
||||
* @returns Array of checklist task details
|
||||
*/
|
||||
getTaskChecklist(id: string): Observable<TaskDetailsModel[]> {
|
||||
return Observable.fromPromise(this.callApiTaskChecklist(id))
|
||||
.map(res => res)
|
||||
.map((response: any) => {
|
||||
let checklists: TaskDetailsModel[] = [];
|
||||
response.data.forEach((checklist) => {
|
||||
checklists.push(new TaskDetailsModel(checklist));
|
||||
});
|
||||
return checklists;
|
||||
}).catch(err => this.handleError(err));
|
||||
return from(this.callApiTaskChecklist(id))
|
||||
.pipe(
|
||||
map((response: any) => {
|
||||
const checklists: TaskDetailsModel[] = [];
|
||||
response.data.forEach((checklist) => {
|
||||
checklists.push(new TaskDetailsModel(checklist));
|
||||
});
|
||||
return checklists;
|
||||
}),
|
||||
catchError(err => this.handleError(err))
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -176,14 +184,17 @@ export class TaskListService {
|
||||
'modelType': 2 // Integer | modelType
|
||||
};
|
||||
|
||||
return Observable.fromPromise(this.apiService.getInstance().activiti.modelsApi.getModels(opts)).map(res => res)
|
||||
.map((response: any) => {
|
||||
let forms: Form[] = [];
|
||||
response.data.forEach((form) => {
|
||||
forms.push(new Form(form.id, form.name));
|
||||
});
|
||||
return forms;
|
||||
}).catch(err => this.handleError(err));
|
||||
return from(this.apiService.getInstance().activiti.modelsApi.getModels(opts))
|
||||
.pipe(
|
||||
map((response: any) => {
|
||||
let forms: Form[] = [];
|
||||
response.data.forEach((form) => {
|
||||
forms.push(new Form(form.id, form.name));
|
||||
});
|
||||
return forms;
|
||||
}),
|
||||
catchError(err => this.handleError(err))
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -193,7 +204,10 @@ export class TaskListService {
|
||||
* @returns Null response notifying when the operation is complete
|
||||
*/
|
||||
attachFormToATask(taskId: string, formId: number): Observable<any> {
|
||||
return Observable.fromPromise(this.apiService.taskApi.attachForm(taskId, {'formId': formId})).catch(err => this.handleError(err));
|
||||
return from(this.apiService.taskApi.attachForm(taskId, {'formId': formId}))
|
||||
.pipe(
|
||||
catchError(err => this.handleError(err))
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -202,11 +216,13 @@ export class TaskListService {
|
||||
* @returns The subtask that was added
|
||||
*/
|
||||
addTask(task: TaskDetailsModel): Observable<TaskDetailsModel> {
|
||||
return Observable.fromPromise(this.callApiAddTask(task))
|
||||
.map(res => res)
|
||||
.map((response: TaskDetailsModel) => {
|
||||
return new TaskDetailsModel(response);
|
||||
}).catch(err => this.handleError(err));
|
||||
return from(this.callApiAddTask(task))
|
||||
.pipe(
|
||||
map((response: TaskDetailsModel) => {
|
||||
return new TaskDetailsModel(response);
|
||||
}),
|
||||
catchError(err => this.handleError(err))
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -215,8 +231,10 @@ export class TaskListService {
|
||||
* @returns Null response notifying when the operation is complete
|
||||
*/
|
||||
deleteTask(taskId: string): Observable<TaskDetailsModel> {
|
||||
return Observable.fromPromise(this.callApiDeleteTask(taskId))
|
||||
.catch(err => this.handleError(err));
|
||||
return from<TaskDetailsModel>(this.callApiDeleteTask(taskId))
|
||||
.pipe(
|
||||
catchError(err => this.handleError(err))
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -225,8 +243,10 @@ export class TaskListService {
|
||||
* @returns Null response notifying when the operation is complete
|
||||
*/
|
||||
deleteForm(taskId: string): Observable<TaskDetailsModel> {
|
||||
return Observable.fromPromise(this.callApiDeleteForm(taskId))
|
||||
.catch(err => this.handleError(err));
|
||||
return from<TaskDetailsModel>(this.callApiDeleteForm(taskId))
|
||||
.pipe(
|
||||
catchError(err => this.handleError(err))
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -235,9 +255,10 @@ export class TaskListService {
|
||||
* @returns Null response notifying when the operation is complete
|
||||
*/
|
||||
completeTask(taskId: string) {
|
||||
return Observable.fromPromise(this.apiService.taskApi.completeTask(taskId))
|
||||
.map(res => res)
|
||||
.catch(err => this.handleError(err));
|
||||
return from(this.apiService.taskApi.completeTask(taskId))
|
||||
.pipe(
|
||||
catchError(err => this.handleError(err))
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -247,10 +268,13 @@ export class TaskListService {
|
||||
*/
|
||||
public getTotalTasks(requestNode: TaskQueryRequestRepresentationModel): Observable<any> {
|
||||
requestNode.size = 0;
|
||||
return Observable.fromPromise(this.callApiTasksFiltered(requestNode))
|
||||
.map((res: any) => {
|
||||
return res;
|
||||
}).catch(err => this.handleError(err));
|
||||
return from(this.callApiTasksFiltered(requestNode))
|
||||
.pipe(
|
||||
map((res: any) => {
|
||||
return res;
|
||||
}),
|
||||
catchError(err => this.handleError(err))
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -259,11 +283,13 @@ export class TaskListService {
|
||||
* @returns Details of the newly created task
|
||||
*/
|
||||
createNewTask(task: TaskDetailsModel): Observable<TaskDetailsModel> {
|
||||
return Observable.fromPromise(this.callApiCreateTask(task))
|
||||
.map(res => res)
|
||||
.map((response: TaskDetailsModel) => {
|
||||
return new TaskDetailsModel(response);
|
||||
}).catch(err => this.handleError(err));
|
||||
return from(this.callApiCreateTask(task))
|
||||
.pipe(
|
||||
map((response: TaskDetailsModel) => {
|
||||
return new TaskDetailsModel(response);
|
||||
}),
|
||||
catchError(err => this.handleError(err))
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -274,11 +300,13 @@ export class TaskListService {
|
||||
*/
|
||||
assignTask(taskId: string, requestNode: any): Observable<TaskDetailsModel> {
|
||||
let assignee = {assignee: requestNode.id};
|
||||
return Observable.fromPromise(this.callApiAssignTask(taskId, assignee))
|
||||
.map(res => res)
|
||||
.map((response: TaskDetailsModel) => {
|
||||
return new TaskDetailsModel(response);
|
||||
}).catch(err => this.handleError(err));
|
||||
return from(this.callApiAssignTask(taskId, assignee))
|
||||
.pipe(
|
||||
map((response: TaskDetailsModel) => {
|
||||
return new TaskDetailsModel(response);
|
||||
}),
|
||||
catchError(err => this.handleError(err))
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -288,12 +316,14 @@ export class TaskListService {
|
||||
* @returns Details of the assigned task
|
||||
*/
|
||||
assignTaskByUserId(taskId: string, userId: number): Observable<TaskDetailsModel> {
|
||||
let assignee = {assignee: userId};
|
||||
return Observable.fromPromise(this.callApiAssignTask(taskId, assignee))
|
||||
.map(res => res)
|
||||
.map((response: TaskDetailsModel) => {
|
||||
return new TaskDetailsModel(response);
|
||||
}).catch(err => this.handleError(err));
|
||||
const assignee = { assignee: userId };
|
||||
return from(this.callApiAssignTask(taskId, assignee))
|
||||
.pipe(
|
||||
map((response: TaskDetailsModel) => {
|
||||
return new TaskDetailsModel(response);
|
||||
}),
|
||||
catchError(err => this.handleError(err))
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -302,8 +332,10 @@ export class TaskListService {
|
||||
* @returns Details of the claimed task
|
||||
*/
|
||||
claimTask(taskId: string): Observable<TaskDetailsModel> {
|
||||
return Observable.fromPromise(this.apiService.taskApi.claimTask(taskId))
|
||||
.catch(err => this.handleError(err));
|
||||
return from<TaskDetailsModel>(this.apiService.taskApi.claimTask(taskId))
|
||||
.pipe(
|
||||
catchError(err => this.handleError(err))
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -312,8 +344,10 @@ export class TaskListService {
|
||||
* @returns Null response notifying when the operation is complete
|
||||
*/
|
||||
unclaimTask(taskId: string): Observable<TaskDetailsModel> {
|
||||
return Observable.fromPromise(this.apiService.taskApi.unclaimTask(taskId))
|
||||
.catch(err => this.handleError(err));
|
||||
return from<TaskDetailsModel>(this.apiService.taskApi.unclaimTask(taskId))
|
||||
.pipe(
|
||||
catchError(err => this.handleError(err))
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -323,8 +357,11 @@ export class TaskListService {
|
||||
* @returns Updated task details
|
||||
*/
|
||||
updateTask(taskId: any, updated): Observable<TaskDetailsModel> {
|
||||
return Observable.fromPromise(this.apiService.taskApi.updateTask(taskId, updated))
|
||||
.catch(err => this.handleError(err));
|
||||
return from(this.apiService.taskApi.updateTask(taskId, updated))
|
||||
.pipe(
|
||||
map(result => <TaskDetailsModel> result),
|
||||
catchError(err => this.handleError(err))
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -333,8 +370,11 @@ export class TaskListService {
|
||||
* @returns Binary PDF data
|
||||
*/
|
||||
fetchTaskAuditPdfById(taskId: string): Observable<Blob> {
|
||||
return Observable.fromPromise(this.apiService.taskApi.getTaskAuditPdf(taskId))
|
||||
.catch(err => this.handleError(err));
|
||||
return from(this.apiService.taskApi.getTaskAuditPdf(taskId))
|
||||
.pipe(
|
||||
map(data => <Blob> data),
|
||||
catchError(err => this.handleError(err))
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -343,8 +383,10 @@ export class TaskListService {
|
||||
* @returns JSON data
|
||||
*/
|
||||
fetchTaskAuditJsonById(taskId: string): Observable<any> {
|
||||
return Observable.fromPromise(this.apiService.taskApi.getTaskAuditJson(taskId))
|
||||
.catch(err => this.handleError(err));
|
||||
return from(this.apiService.taskApi.getTaskAuditJson(taskId))
|
||||
.pipe(
|
||||
catchError(err => this.handleError(err))
|
||||
);
|
||||
}
|
||||
|
||||
private callApiTasksFiltered(requestNode: TaskQueryRequestRepresentationModel) {
|
||||
@@ -381,7 +423,7 @@ export class TaskListService {
|
||||
|
||||
private handleError(error: any) {
|
||||
this.logService.error(error);
|
||||
return Observable.throw(error || 'Server error');
|
||||
return throwError(error || 'Server error');
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,41 @@
|
||||
/*!
|
||||
* @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 'core-js/es7/reflect';
|
||||
import 'zone.js/dist/zone';
|
||||
import 'zone.js/dist/zone-testing';
|
||||
import { getTestBed } from '@angular/core/testing';
|
||||
import {
|
||||
BrowserDynamicTestingModule,
|
||||
platformBrowserDynamicTesting
|
||||
} from '@angular/platform-browser-dynamic/testing';
|
||||
import pdfjsLib = require('pdfjs-dist');
|
||||
|
||||
declare const require: any;
|
||||
|
||||
// First, initialize the Angular testing environment.
|
||||
getTestBed().initTestEnvironment(
|
||||
BrowserDynamicTestingModule,
|
||||
platformBrowserDynamicTesting()
|
||||
);
|
||||
|
||||
pdfjsLib.PDFJS.workerSrc = 'node_modules/pdfjs-dist/build/pdf.worker.js';
|
||||
|
||||
// Then we find all the tests.
|
||||
const context = require.context('./', true, /\.spec\.ts$/);
|
||||
// And load the modules.
|
||||
context.keys().map(context);
|
||||
Reference in New Issue
Block a user