mirror of
https://github.com/Alfresco/alfresco-ng2-components.git
synced 2025-07-24 17:32:15 +00:00
[ADF-2188] Start Process - Change processDefinition property and fix bug (#2884)
* Change processDefinition property and fix bug * Fix unit test * Fix async * Fix id
This commit is contained in:
committed by
Eugenio Romano
parent
abca6e481d
commit
657c28491a
@@ -341,6 +341,10 @@
|
|||||||
]
|
]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"adf-start-process": {
|
||||||
|
"name": "My Default Name",
|
||||||
|
"processDefinitionName": "My default process def name"
|
||||||
|
},
|
||||||
"adf-process-list": {
|
"adf-process-list": {
|
||||||
"presets": {
|
"presets": {
|
||||||
"default": [
|
"default": [
|
||||||
|
@@ -182,6 +182,8 @@
|
|||||||
*ngIf="isStartProcessMode()">
|
*ngIf="isStartProcessMode()">
|
||||||
<adf-start-process
|
<adf-start-process
|
||||||
[appId]="appId"
|
[appId]="appId"
|
||||||
|
[name]="defaultProcessName"
|
||||||
|
[processDefinitionName]="defaultProcessDefinitionName"
|
||||||
(start)="onStartProcessInstance($event)"
|
(start)="onStartProcessInstance($event)"
|
||||||
(cancel)="onCancelProcessInstance()">
|
(cancel)="onCancelProcessInstance()">
|
||||||
</adf-start-process>
|
</adf-start-process>
|
||||||
|
@@ -30,7 +30,7 @@ import { ActivatedRoute, Router } from '@angular/router';
|
|||||||
import { Pagination, ProcessInstanceFilterRepresentation } from 'alfresco-js-api';
|
import { Pagination, ProcessInstanceFilterRepresentation } from 'alfresco-js-api';
|
||||||
import {
|
import {
|
||||||
FORM_FIELD_VALIDATORS, FormEvent, FormFieldEvent, FormRenderingService, FormService,
|
FORM_FIELD_VALIDATORS, FormEvent, FormFieldEvent, FormRenderingService, FormService,
|
||||||
DynamicTableRow, ValidateDynamicTableRowEvent
|
DynamicTableRow, ValidateDynamicTableRowEvent, AppConfigService
|
||||||
} from '@alfresco/adf-core';
|
} from '@alfresco/adf-core';
|
||||||
|
|
||||||
import { AnalyticsReportListComponent } from '@alfresco/adf-insights';
|
import { AnalyticsReportListComponent } from '@alfresco/adf-insights';
|
||||||
@@ -123,6 +123,9 @@ export class ProcessServiceComponent implements AfterViewInit, OnDestroy, OnInit
|
|||||||
|
|
||||||
supportedPages: number[];
|
supportedPages: number[];
|
||||||
|
|
||||||
|
defaultProcessDefinitionName: string;
|
||||||
|
defaultProcessName: string;
|
||||||
|
|
||||||
activeTab: number = this.tabs.tasks; // tasks|processes|reports
|
activeTab: number = this.tabs.tasks; // tasks|processes|reports
|
||||||
|
|
||||||
taskFilter: FilterRepresentationModel;
|
taskFilter: FilterRepresentationModel;
|
||||||
@@ -148,6 +151,7 @@ export class ProcessServiceComponent implements AfterViewInit, OnDestroy, OnInit
|
|||||||
private taskListService: TaskListService,
|
private taskListService: TaskListService,
|
||||||
private apiService: AlfrescoApiService,
|
private apiService: AlfrescoApiService,
|
||||||
private logService: LogService,
|
private logService: LogService,
|
||||||
|
private appConfig: AppConfigService,
|
||||||
formRenderingService: FormRenderingService,
|
formRenderingService: FormRenderingService,
|
||||||
formService: FormService,
|
formService: FormService,
|
||||||
private preferenceService: UserPreferencesService) {
|
private preferenceService: UserPreferencesService) {
|
||||||
@@ -156,6 +160,9 @@ export class ProcessServiceComponent implements AfterViewInit, OnDestroy, OnInit
|
|||||||
this.supportedPages = this.preferenceService.getDifferentPageSizes();
|
this.supportedPages = this.preferenceService.getDifferentPageSizes();
|
||||||
this.taskPagination.maxItems = this.preferenceService.paginationSize;
|
this.taskPagination.maxItems = this.preferenceService.paginationSize;
|
||||||
|
|
||||||
|
this.defaultProcessName = this.appConfig.get<string>('adf-start-process.name');
|
||||||
|
this.defaultProcessDefinitionName = this.appConfig.get<string>('adf-start-process.processDefinitionName');
|
||||||
|
|
||||||
// Uncomment this line to replace all 'text' field editors with custom component
|
// Uncomment this line to replace all 'text' field editors with custom component
|
||||||
// formRenderingService.setComponentTypeResolver('text', () => CustomEditorComponent, true);
|
// formRenderingService.setComponentTypeResolver('text', () => CustomEditorComponent, true);
|
||||||
|
|
||||||
|
@@ -18,7 +18,7 @@ Starts a process.
|
|||||||
| ---- | -- | ----------- |
|
| ---- | -- | ----------- |
|
||||||
| appId | `number` | (optional): Limit the list of processes which can be started to those contained in the specified app |
|
| appId | `number` | (optional): Limit the list of processes which can be started to those contained in the specified app |
|
||||||
| name | `string` | (optional) name to assign to the current process |
|
| name | `string` | (optional) name to assign to the current process |
|
||||||
| processDefinition | `string` | (optional) definition name of the process to start |
|
| processDefinitionName | `string` | (optional) definition name of the process to start |
|
||||||
| variables | `ProcessInstanceVariable[]` |Variables in input to the process [RestVariable](https://github.com/Alfresco/alfresco-js-api/tree/master/src/alfresco-activiti-rest-api/docs/RestVariable.md) |
|
| variables | `ProcessInstanceVariable[]` |Variables in input to the process [RestVariable](https://github.com/Alfresco/alfresco-js-api/tree/master/src/alfresco-activiti-rest-api/docs/RestVariable.md) |
|
||||||
| values | `FormValues` | Parameter to pass form field values in the start form if is associated |
|
| values | `FormValues` | Parameter to pass form field values in the start form if is associated |
|
||||||
| showSelectProcessDropdown | `boolean` | hide or show the process selection drodown, true by default |
|
| showSelectProcessDropdown | `boolean` | hide or show the process selection drodown, true by default |
|
||||||
@@ -31,26 +31,30 @@ Starts a process.
|
|||||||
| cancel | `EventEmitter<ProcessInstance>` | Emitted when the process is canceled |
|
| cancel | `EventEmitter<ProcessInstance>` | Emitted when the process is canceled |
|
||||||
| error | `EventEmitter<ProcessInstance>` | Emitted when the start process operation fails |
|
| error | `EventEmitter<ProcessInstance>` | Emitted when the start process operation fails |
|
||||||
|
|
||||||
### Start a process part of an app
|
### Start a process with a default name and pre-selected process definition name
|
||||||
|
|
||||||
```html
|
```html
|
||||||
<adf-start-process
|
<adf-start-process
|
||||||
[appId]="YOUR_APP_ID"
|
[appId]="YOUR_APP_ID"
|
||||||
[processDefinition]="PROCESS_DEFINITION">
|
[name]="PROCESS_NAME"
|
||||||
|
[processDefinitionName]="PROCESS_DEFINITION_NAME">
|
||||||
</adf-start-process>
|
</adf-start-process>
|
||||||
```
|
```
|
||||||
|
|
||||||
Use this method to preselect which process to start if there is more than one process in your app.
|
If your app has more than one process definition, with the property processDefinitionName you can select as dropdown default value your PROCESS_DEFINITION_NAME. The name will be the PROCESS_NAME.
|
||||||
|
You can configure the processDefinitionName value in your custom `app.config.json`
|
||||||
|
You can configure the process name value in your custom `app.config.json`
|
||||||
|
|
||||||
### Start a process not included in an app
|
### Start a process not included in an app
|
||||||
|
|
||||||
```html
|
```html
|
||||||
<adf-start-process
|
<adf-start-process
|
||||||
[processDefinition]="PROCESS_DEFINITION">
|
[processDefinitionName]="PROCESS_DEFINITION_NAME">
|
||||||
</adf-start-process>
|
</adf-start-process>
|
||||||
```
|
```
|
||||||
|
|
||||||
Use this method to preselect which process to start
|
With the property processDefinitionName you can select as dropdown default value your PROCESS_DEFINITION_NAME.
|
||||||
|
You can configure the processDefinitionName values in your custom `app.config.json`
|
||||||
|
|
||||||
|
|
||||||
### Custom data example
|
### Custom data example
|
||||||
|
@@ -12,7 +12,7 @@
|
|||||||
<div *ngIf="showSelectProcessDropdown">
|
<div *ngIf="showSelectProcessDropdown">
|
||||||
<mat-form-field>
|
<mat-form-field>
|
||||||
<mat-select [(value)]="selectedProcessDef" placeholder="{{'ADF_PROCESS_LIST.START_PROCESS.FORM.LABEL.TYPE'|translate}}" required>
|
<mat-select [(value)]="selectedProcessDef" placeholder="{{'ADF_PROCESS_LIST.START_PROCESS.FORM.LABEL.TYPE'|translate}}" required>
|
||||||
<mat-option>{{'ADF_PROCESS_LIST.START_PROCESS.FORM.TYPE_PLACEHOLDER' | translate}}</mat-option>
|
<mat-option *ngIf="!hasSingleProcessDefinition()">{{'ADF_PROCESS_LIST.START_PROCESS.FORM.TYPE_PLACEHOLDER' | translate}}</mat-option>
|
||||||
<mat-option *ngFor="let processDef of processDefinitions" [value]="processDef">
|
<mat-option *ngFor="let processDef of processDefinitions" [value]="processDef">
|
||||||
{{ processDef.name }}
|
{{ processDef.name }}
|
||||||
</mat-option>
|
</mat-option>
|
||||||
|
@@ -274,7 +274,7 @@ describe('StartFormComponent', () => {
|
|||||||
it('should select processDefinition based on processDefinition input', async(() => {
|
it('should select processDefinition based on processDefinition input', async(() => {
|
||||||
getDefinitionsSpy = getDefinitionsSpy.and.returnValue(Observable.of(testMultipleProcessDefs));
|
getDefinitionsSpy = getDefinitionsSpy.and.returnValue(Observable.of(testMultipleProcessDefs));
|
||||||
component.appId = 123;
|
component.appId = 123;
|
||||||
component.processDefinition = 'My Process 2';
|
component.processDefinitionName = 'My Process 2';
|
||||||
component.ngOnChanges({});
|
component.ngOnChanges({});
|
||||||
fixture.detectChanges();
|
fixture.detectChanges();
|
||||||
fixture.whenStable().then(() => {
|
fixture.whenStable().then(() => {
|
||||||
@@ -292,16 +292,6 @@ describe('StartFormComponent', () => {
|
|||||||
});
|
});
|
||||||
}));
|
}));
|
||||||
|
|
||||||
it('should select automatically the first processDefinition if the app contain multiple process and there is no processDefinition in input', async(() => {
|
|
||||||
getDefinitionsSpy = getDefinitionsSpy.and.returnValue(Observable.of(testMultipleProcessDefs));
|
|
||||||
component.appId = 123;
|
|
||||||
component.ngOnChanges({});
|
|
||||||
fixture.detectChanges();
|
|
||||||
fixture.whenStable().then(() => {
|
|
||||||
expect(component.selectedProcessDef.name).toBe(JSON.parse(JSON.stringify(testMultipleProcessDefs[0])).name);
|
|
||||||
});
|
|
||||||
}));
|
|
||||||
|
|
||||||
describe('dropdown', () => {
|
describe('dropdown', () => {
|
||||||
|
|
||||||
it('should hide the process dropdown if showSelectProcessDropdown is false', async(() => {
|
it('should hide the process dropdown if showSelectProcessDropdown is false', async(() => {
|
||||||
@@ -319,7 +309,7 @@ describe('StartFormComponent', () => {
|
|||||||
it('should show the process dropdown if showSelectProcessDropdown is false', async(() => {
|
it('should show the process dropdown if showSelectProcessDropdown is false', async(() => {
|
||||||
getDefinitionsSpy = getDefinitionsSpy.and.returnValue(Observable.of(testMultipleProcessDefs));
|
getDefinitionsSpy = getDefinitionsSpy.and.returnValue(Observable.of(testMultipleProcessDefs));
|
||||||
component.appId = 123;
|
component.appId = 123;
|
||||||
component.processDefinition = 'My Process 2';
|
component.processDefinitionName = 'My Process 2';
|
||||||
component.showSelectProcessDropdown = true;
|
component.showSelectProcessDropdown = true;
|
||||||
component.ngOnChanges({});
|
component.ngOnChanges({});
|
||||||
fixture.detectChanges();
|
fixture.detectChanges();
|
||||||
@@ -332,7 +322,7 @@ describe('StartFormComponent', () => {
|
|||||||
it('should show the process dropdown by default', async(() => {
|
it('should show the process dropdown by default', async(() => {
|
||||||
getDefinitionsSpy = getDefinitionsSpy.and.returnValue(Observable.of(testMultipleProcessDefs));
|
getDefinitionsSpy = getDefinitionsSpy.and.returnValue(Observable.of(testMultipleProcessDefs));
|
||||||
component.appId = 123;
|
component.appId = 123;
|
||||||
component.processDefinition = 'My Process 2';
|
component.processDefinitionName = 'My Process 2';
|
||||||
component.ngOnChanges({});
|
component.ngOnChanges({});
|
||||||
fixture.detectChanges();
|
fixture.detectChanges();
|
||||||
fixture.whenStable().then(() => {
|
fixture.whenStable().then(() => {
|
||||||
@@ -454,14 +444,18 @@ describe('StartFormComponent', () => {
|
|||||||
});
|
});
|
||||||
}));
|
}));
|
||||||
|
|
||||||
it('should emit start event when start select a process and add a name', () => {
|
it('should emit start event when start select a process and add a name', async(() => {
|
||||||
let startSpy: jasmine.Spy = spyOn(component.start, 'emit');
|
let startSpy: jasmine.Spy = spyOn(component.start, 'emit');
|
||||||
component.selectedProcessDef.id = '1001';
|
component.selectedProcessDef = testProcessDefRepr;
|
||||||
component.name = 'my:Process';
|
component.name = 'my:Process';
|
||||||
component.startProcess();
|
component.startProcess();
|
||||||
fixture.detectChanges();
|
fixture.detectChanges();
|
||||||
expect(startSpy).toHaveBeenCalled();
|
fixture.whenStable().then(() => {
|
||||||
});
|
let startButton = fixture.nativeElement.querySelector('#button-start');
|
||||||
|
startButton.click();
|
||||||
|
expect(startSpy).toHaveBeenCalled();
|
||||||
|
});
|
||||||
|
}));
|
||||||
|
|
||||||
it('should not emit start event when start the process without select a process and name', () => {
|
it('should not emit start event when start the process without select a process and name', () => {
|
||||||
component.name = null;
|
component.name = null;
|
||||||
|
@@ -50,7 +50,7 @@ export class StartProcessInstanceComponent implements OnChanges {
|
|||||||
appId: number;
|
appId: number;
|
||||||
|
|
||||||
@Input()
|
@Input()
|
||||||
processDefinition: string;
|
processDefinitionName: string;
|
||||||
|
|
||||||
@Input()
|
@Input()
|
||||||
variables: ProcessInstanceVariable[];
|
variables: ProcessInstanceVariable[];
|
||||||
@@ -106,16 +106,12 @@ export class StartProcessInstanceComponent implements OnChanges {
|
|||||||
(processDefinitionRepresentations: ProcessDefinitionRepresentation[]) => {
|
(processDefinitionRepresentations: ProcessDefinitionRepresentation[]) => {
|
||||||
this.processDefinitions = processDefinitionRepresentations;
|
this.processDefinitions = processDefinitionRepresentations;
|
||||||
|
|
||||||
if (this.processDefinitions.length === 1 || !this.processDefinition) {
|
if (this.hasSingleProcessDefinition()) {
|
||||||
this.selectedProcessDef = this.processDefinitions[0];
|
this.selectedProcessDef = this.processDefinitions[0];
|
||||||
} else {
|
} else {
|
||||||
this.selectedProcessDef = this.processDefinitions.find((currentProcessDefinition) => {
|
this.selectedProcessDef = this.processDefinitions.find((currentProcessDefinition) => {
|
||||||
return currentProcessDefinition.name === this.processDefinition;
|
return currentProcessDefinition.name === this.processDefinitionName;
|
||||||
});
|
});
|
||||||
|
|
||||||
if (!this.selectedProcessDef) {
|
|
||||||
this.selectedProcessDef = this.processDefinitions[0];
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
() => {
|
() => {
|
||||||
@@ -124,6 +120,10 @@ export class StartProcessInstanceComponent implements OnChanges {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
hasSingleProcessDefinition(): boolean {
|
||||||
|
return this.processDefinitions.length === 1;
|
||||||
|
}
|
||||||
|
|
||||||
getAlfrescoRepositoryName(): string {
|
getAlfrescoRepositoryName(): string {
|
||||||
let alfrescoRepositoryName = this.appConfig.get<string>('alfrescoRepositoryName');
|
let alfrescoRepositoryName = this.appConfig.get<string>('alfrescoRepositoryName');
|
||||||
if (!alfrescoRepositoryName) {
|
if (!alfrescoRepositoryName) {
|
||||||
|
Reference in New Issue
Block a user