mirror of
https://github.com/Alfresco/alfresco-ng2-components.git
synced 2025-05-12 17:04:57 +00:00
[ADF-3889] [Start Process Cloud] - APS2 - error displayed when try to create a process with a name bigger the 255 characters (#4182)
* [ADF-3889] [Start Process Cloud] - APS2 - error displayed when try to create an process with an name bigger the 255 characters* Fixed error displayed when try to create an process with an name bigger the 255 characters * * Fixed comments* Updated doc * Added unit tests to the recent changes * * Added validation to check whitespace * Prevented starting a process just with the whitespace * Fixed Error displayed in console when start a process
This commit is contained in:
parent
348bee9c6f
commit
423494f4f8
@ -26,6 +26,7 @@ Starts a process.
|
|||||||
| Name | Type | Default value | Description |
|
| Name | Type | Default value | Description |
|
||||||
| ---- | ---- | ------------- | ----------- |
|
| ---- | ---- | ------------- | ----------- |
|
||||||
| appName | `string` | | (required) Name of the app. |
|
| appName | `string` | | (required) Name of the app. |
|
||||||
|
| maxNameLength | `number` | | Maximum length of the process name. |
|
||||||
| name | `string` | "" | Name of the process. |
|
| name | `string` | "" | Name of the process. |
|
||||||
| processDefinitionName | `string` | | Name of the process definition. |
|
| processDefinitionName | `string` | | Name of the process definition. |
|
||||||
| showSelectProcessDropdown | `boolean` | true | Show/hide the process dropdown list. |
|
| showSelectProcessDropdown | `boolean` | true | Show/hide the process dropdown list. |
|
||||||
|
@ -28,7 +28,8 @@
|
|||||||
"LOAD_PROCESS_DEFS": "Couldn't load process definitions, check you have access.",
|
"LOAD_PROCESS_DEFS": "Couldn't load process definitions, check you have access.",
|
||||||
"START": "Couldn't start new process instance, check you have access.",
|
"START": "Couldn't start new process instance, check you have access.",
|
||||||
"PROCESS_NAME_REQUIRED": "Process Name is required",
|
"PROCESS_NAME_REQUIRED": "Process Name is required",
|
||||||
"PROCESS_DEFINITION_REQUIRED": "Process Definition is required"
|
"PROCESS_DEFINITION_REQUIRED": "Process Definition is required",
|
||||||
|
"MAXIMUM_LENGTH": "Length exceeded, {{characters}} characters max."
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
<mat-accordion>
|
<mat-accordion *ngIf="processFilter">
|
||||||
<mat-expansion-panel>
|
<mat-expansion-panel>
|
||||||
<mat-expansion-panel-header id="adf-edit-process-filter-expansion-header">
|
<mat-expansion-panel-header id="adf-edit-process-filter-expansion-header">
|
||||||
<mat-panel-title id="adf-edit-process-filter-title-id">{{processFilter.name | translate}}</mat-panel-title>
|
<mat-panel-title id="adf-edit-process-filter-title-id">{{processFilter.name | translate}}</mat-panel-title>
|
||||||
|
@ -15,9 +15,12 @@
|
|||||||
matInput
|
matInput
|
||||||
formControlName="processInstanceName"
|
formControlName="processInstanceName"
|
||||||
id="processName">
|
id="processName">
|
||||||
<mat-error *ngIf="processInstanceName.hasError('required')">
|
<mat-error id="adf-start-process-required-error" *ngIf="processInstanceName.hasError('required')">
|
||||||
{{ 'ADF_CLOUD_PROCESS_LIST.ADF_CLOUD_START_PROCESS.ERROR.PROCESS_NAME_REQUIRED' | translate }}
|
{{ 'ADF_CLOUD_PROCESS_LIST.ADF_CLOUD_START_PROCESS.ERROR.PROCESS_NAME_REQUIRED' | translate }}
|
||||||
</mat-error>
|
</mat-error>
|
||||||
|
<mat-error id="adf-start-process-maxlength-error" *ngIf="processInstanceName.hasError('maxlength')">
|
||||||
|
{{ 'ADF_CLOUD_PROCESS_LIST.ADF_CLOUD_START_PROCESS.ERROR.MAXIMUM_LENGTH' | translate : { characters : maxNameLength } }}
|
||||||
|
</mat-error>
|
||||||
</mat-form-field>
|
</mat-form-field>
|
||||||
|
|
||||||
<mat-form-field class="adf-process-input-container">
|
<mat-form-field class="adf-process-input-container">
|
||||||
|
@ -376,5 +376,29 @@ describe('StartProcessCloudComponent', () => {
|
|||||||
|
|
||||||
component.startProcess();
|
component.startProcess();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should emit error when process name exceeds maximum length', () => {
|
||||||
|
component.maxNameLength = 2;
|
||||||
|
component.ngOnInit();
|
||||||
|
fixture.detectChanges();
|
||||||
|
let processInstanceName = component.processForm.controls['processInstanceName'];
|
||||||
|
processInstanceName.setValue('task');
|
||||||
|
fixture.detectChanges();
|
||||||
|
expect(processInstanceName.valid).toBeFalsy();
|
||||||
|
processInstanceName.setValue('ta');
|
||||||
|
fixture.detectChanges();
|
||||||
|
expect(processInstanceName.valid).toBeTruthy();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should emit error when process name field is empty', () => {
|
||||||
|
fixture.detectChanges();
|
||||||
|
let processInstanceName = component.processForm.controls['processInstanceName'];
|
||||||
|
processInstanceName.setValue('');
|
||||||
|
fixture.detectChanges();
|
||||||
|
expect(processInstanceName.valid).toBeFalsy();
|
||||||
|
processInstanceName.setValue('task');
|
||||||
|
fixture.detectChanges();
|
||||||
|
expect(processInstanceName.valid).toBeTruthy();
|
||||||
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -36,6 +36,8 @@ import { ProcessDefinitionCloud } from '../models/process-definition-cloud.model
|
|||||||
})
|
})
|
||||||
export class StartProcessCloudComponent implements OnChanges, OnInit {
|
export class StartProcessCloudComponent implements OnChanges, OnInit {
|
||||||
|
|
||||||
|
static MAX_NAME_LENGTH: number = 255;
|
||||||
|
|
||||||
@ViewChild(MatAutocompleteTrigger)
|
@ViewChild(MatAutocompleteTrigger)
|
||||||
inputAutocomplete: MatAutocompleteTrigger;
|
inputAutocomplete: MatAutocompleteTrigger;
|
||||||
|
|
||||||
@ -43,6 +45,10 @@ export class StartProcessCloudComponent implements OnChanges, OnInit {
|
|||||||
@Input()
|
@Input()
|
||||||
appName: string;
|
appName: string;
|
||||||
|
|
||||||
|
/** Maximum length of the process name. */
|
||||||
|
@Input()
|
||||||
|
maxNameLength: number = StartProcessCloudComponent.MAX_NAME_LENGTH;
|
||||||
|
|
||||||
/** Name of the process. */
|
/** Name of the process. */
|
||||||
@Input()
|
@Input()
|
||||||
name: string = '';
|
name: string = '';
|
||||||
@ -77,14 +83,13 @@ export class StartProcessCloudComponent implements OnChanges, OnInit {
|
|||||||
processPayloadCloud = new ProcessPayloadCloud();
|
processPayloadCloud = new ProcessPayloadCloud();
|
||||||
filteredProcesses: ProcessDefinitionCloud[] = [];
|
filteredProcesses: ProcessDefinitionCloud[] = [];
|
||||||
isLoading = false;
|
isLoading = false;
|
||||||
|
|
||||||
constructor(private startProcessCloudService: StartProcessCloudService,
|
constructor(private startProcessCloudService: StartProcessCloudService,
|
||||||
private formBuilder: FormBuilder) {
|
private formBuilder: FormBuilder) {
|
||||||
}
|
}
|
||||||
|
|
||||||
ngOnInit() {
|
ngOnInit() {
|
||||||
this.processForm = this.formBuilder.group({
|
this.processForm = this.formBuilder.group({
|
||||||
processInstanceName: new FormControl(this.name, Validators.required),
|
processInstanceName: new FormControl(this.name, [Validators.required, Validators.maxLength(this.getMaxNameLength()), this.whitespaceValidator]),
|
||||||
processDefinition: new FormControl('', [Validators.required, this.processDefinitionNameValidator()])
|
processDefinition: new FormControl('', [Validators.required, this.processDefinitionNameValidator()])
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -105,6 +110,11 @@ export class StartProcessCloudComponent implements OnChanges, OnInit {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private getMaxNameLength(): number {
|
||||||
|
return this.maxNameLength > StartProcessCloudComponent.MAX_NAME_LENGTH ?
|
||||||
|
StartProcessCloudComponent.MAX_NAME_LENGTH : this.maxNameLength;
|
||||||
|
}
|
||||||
|
|
||||||
setProcessDefinitionOnForm(processDefinitionName: string) {
|
setProcessDefinitionOnForm(processDefinitionName: string) {
|
||||||
this.filteredProcesses = this.getProcessDefinitionList(processDefinitionName);
|
this.filteredProcesses = this.getProcessDefinitionList(processDefinitionName);
|
||||||
const selectedProcess = this.getProcessIfExists(processDefinitionName);
|
const selectedProcess = this.getProcessIfExists(processDefinitionName);
|
||||||
@ -227,6 +237,12 @@ export class StartProcessCloudComponent implements OnChanges, OnInit {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public whitespaceValidator(control: FormControl) {
|
||||||
|
const isWhitespace = (control.value || '').trim().length === 0;
|
||||||
|
const isValid = !isWhitespace;
|
||||||
|
return isValid ? null : { 'whitespace': true };
|
||||||
|
}
|
||||||
|
|
||||||
get processInstanceName(): AbstractControl {
|
get processInstanceName(): AbstractControl {
|
||||||
return this.processForm.get('processInstanceName');
|
return this.processForm.get('processInstanceName');
|
||||||
}
|
}
|
||||||
|
@ -123,7 +123,7 @@ export class StartTaskCloudComponent implements OnInit, OnDestroy {
|
|||||||
|
|
||||||
buildForm() {
|
buildForm() {
|
||||||
this.taskForm = this.formBuilder.group({
|
this.taskForm = this.formBuilder.group({
|
||||||
name: new FormControl(this.name, [Validators.required, Validators.maxLength(this.getMaxNameLength())]),
|
name: new FormControl(this.name, [Validators.required, Validators.maxLength(this.getMaxNameLength()), this.whitespaceValidator]),
|
||||||
priority: new FormControl(),
|
priority: new FormControl(),
|
||||||
description: new FormControl()
|
description: new FormControl()
|
||||||
});
|
});
|
||||||
@ -192,6 +192,12 @@ export class StartTaskCloudComponent implements OnInit, OnDestroy {
|
|||||||
this.assigneeName = assignee ? assignee.username : '';
|
this.assigneeName = assignee ? assignee.username : '';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public whitespaceValidator(control: FormControl) {
|
||||||
|
const isWhitespace = (control.value || '').trim().length === 0;
|
||||||
|
const isValid = !isWhitespace;
|
||||||
|
return isValid ? null : { 'whitespace': true };
|
||||||
|
}
|
||||||
|
|
||||||
get nameController(): AbstractControl {
|
get nameController(): AbstractControl {
|
||||||
return this.taskForm.get('name');
|
return this.taskForm.get('name');
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user