[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:
Denys Vuika
2018-08-14 15:42:43 +01:00
committed by Eugenio Romano
parent c510ec864d
commit 6b24bfb1d4
371 changed files with 16287 additions and 24504 deletions
@@ -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',
-25
View File
@@ -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()
);
+101
View File
@@ -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
});
};
+2 -2
View File
@@ -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()
-2
View File
@@ -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",
+20 -27
View File
@@ -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",
@@ -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);
}
@@ -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);
}
@@ -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({});
@@ -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">
@@ -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');
}
}
+41
View File
@@ -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);