From 38b61a4f640a768abfda33ab9a229fc3d4cd3b01 Mon Sep 17 00:00:00 2001 From: Vito Albano Date: Fri, 11 Nov 2016 00:53:34 +0000 Subject: [PATCH] Added fix for #1044 --- .../src/components/widgets/core/form.model.ts | 3 +- .../widgets/dropdown/dropdown.widget.ts | 59 ++++++++++++++----- .../editors/dropdown/dropdown.editor.ts | 53 ++++++++++++----- .../radio-buttons/radio-buttons.widget.ts | 47 +++++++++++---- .../widgets/typeahead/typeahead.widget.ts | 32 ++++++++++ .../src/services/form.service.ts | 14 ++++- 6 files changed, 163 insertions(+), 45 deletions(-) diff --git a/ng2-components/ng2-activiti-form/src/components/widgets/core/form.model.ts b/ng2-components/ng2-activiti-form/src/components/widgets/core/form.model.ts index 4a9096b759..821e383f28 100644 --- a/ng2-components/ng2-activiti-form/src/components/widgets/core/form.model.ts +++ b/ng2-components/ng2-activiti-form/src/components/widgets/core/form.model.ts @@ -34,7 +34,7 @@ export class FormModel { readonly name: string; readonly taskId: string; readonly taskName: string = FormModel.UNSET_TASK_NAME; - + readonly processDefinitionId: string; private _isValid: boolean = true; get isValid(): boolean { @@ -72,6 +72,7 @@ export class FormModel { this.name = json.name; this.taskId = json.taskId; this.taskName = json.taskName || json.name || FormModel.UNSET_TASK_NAME; + this.processDefinitionId = json.processDefinitionId; let tabCache: FormWidgetModelCache = {}; diff --git a/ng2-components/ng2-activiti-form/src/components/widgets/dropdown/dropdown.widget.ts b/ng2-components/ng2-activiti-form/src/components/widgets/dropdown/dropdown.widget.ts index 90691470ff..721bccf4da 100644 --- a/ng2-components/ng2-activiti-form/src/components/widgets/dropdown/dropdown.widget.ts +++ b/ng2-components/ng2-activiti-form/src/components/widgets/dropdown/dropdown.widget.ts @@ -34,25 +34,52 @@ export class DropdownWidget extends WidgetComponent implements OnInit { ngOnInit() { if (this.field && this.field.restUrl) { - this.formService - .getRestFieldValues( - this.field.form.taskId, - this.field.id - ) - .subscribe( - (result: FormFieldOption[]) => { - let options = []; - if (this.field.emptyOption) { - options.push(this.field.emptyOption); - } - this.field.options = options.concat((result || [])); - this.field.updateForm(); - }, - this.handleError - ); + if (this.field.form.processDefinitionId) { + this.getValuesByProcessDefinitionId(); + } else { + this.getValuesByTaskId(); + } } } + getValuesByTaskId() { + this.formService + .getRestFieldValues( + this.field.form.taskId, + this.field.id + ) + .subscribe( + (result: FormFieldOption[]) => { + let options = []; + if (this.field.emptyOption) { + options.push(this.field.emptyOption); + } + this.field.options = options.concat((result || [])); + this.field.updateForm(); + }, + this.handleError + ); + } + + getValuesByProcessDefinitionId() { + this.formService + .getRestFieldValuesByProcessId( + this.field.form.processDefinitionId, + this.field.id + ) + .subscribe( + (result: FormFieldOption[]) => { + let options = []; + if (this.field.emptyOption) { + options.push(this.field.emptyOption); + } + this.field.options = options.concat((result || [])); + this.field.updateForm(); + }, + this.handleError + ); + } + handleError(error: any) { console.error(error); } diff --git a/ng2-components/ng2-activiti-form/src/components/widgets/dynamic-table/editors/dropdown/dropdown.editor.ts b/ng2-components/ng2-activiti-form/src/components/widgets/dynamic-table/editors/dropdown/dropdown.editor.ts index dcf1ac28b9..a835b35334 100644 --- a/ng2-components/ng2-activiti-form/src/components/widgets/dynamic-table/editors/dropdown/dropdown.editor.ts +++ b/ng2-components/ng2-activiti-form/src/components/widgets/dynamic-table/editors/dropdown/dropdown.editor.ts @@ -39,20 +39,11 @@ export class DropdownEditorComponent extends CellEditorComponent implements OnIn let field = this.table.field; if (field) { if (this.column.optionType === 'rest') { - this.formService - .getRestFieldValuesColumn( - field.form.taskId, - field.id, - this.column.id - ) - .subscribe( - (result: DynamicTableColumnOption[]) => { - this.column.options = result || []; - this.options = this.column.options; - this.value = this.table.getCellValue(this.row, this.column); - }, - err => this.handleError(err) - ); + if (this.table.form.processDefinitionId) { + this.getValuesByProcessDefinitionId(field); + } else { + this.getValuesByTaskId(field); + } } else { this.options = this.column.options || []; this.value = this.table.getCellValue(this.row, this.column); @@ -60,6 +51,40 @@ export class DropdownEditorComponent extends CellEditorComponent implements OnIn } } + getValuesByTaskId(field) { + this.formService + .getRestFieldValuesColumn( + field.form.taskId, + field.id, + this.column.id + ) + .subscribe( + (result: DynamicTableColumnOption[]) => { + this.column.options = result || []; + this.options = this.column.options; + this.value = this.table.getCellValue(this.row, this.column); + }, + err => this.handleError(err) + ); + } + + getValuesByProcessDefinitionId(field) { + this.formService + .getRestFieldValuesColumnByProcessId( + field.form.processDefinitionId, + field.id, + this.column.id + ) + .subscribe( + (result: DynamicTableColumnOption[]) => { + this.column.options = result || []; + this.options = this.column.options; + this.value = this.table.getCellValue(this.row, this.column); + }, + err => this.handleError(err) + ); + } + onValueChanged(row: DynamicTableRow, column: DynamicTableColumn, event: any) { let value: any = (event.target).value; value = column.options.find(opt => opt.name === value); diff --git a/ng2-components/ng2-activiti-form/src/components/widgets/radio-buttons/radio-buttons.widget.ts b/ng2-components/ng2-activiti-form/src/components/widgets/radio-buttons/radio-buttons.widget.ts index bf5d6e8830..a3286c2066 100644 --- a/ng2-components/ng2-activiti-form/src/components/widgets/radio-buttons/radio-buttons.widget.ts +++ b/ng2-components/ng2-activiti-form/src/components/widgets/radio-buttons/radio-buttons.widget.ts @@ -34,21 +34,44 @@ export class RadioButtonsWidget extends WidgetComponent implements OnInit { ngOnInit() { if (this.field && this.field.restUrl) { - this.formService - .getRestFieldValues( - this.field.form.taskId, - this.field.id - ) - .subscribe( - (result: FormFieldOption[]) => { - this.field.options = result || []; - this.field.updateForm(); - }, - this.handleError - ); + if (this.field.form.processDefinitionId) { + this.getOptionsByProcessDefinitionId(); + } else { + this.getOptionsByTaskId(); + } } } + getOptionsByTaskId() { + this.formService + .getRestFieldValues( + this.field.form.taskId, + this.field.id + ) + .subscribe( + (result: FormFieldOption[]) => { + this.field.options = result || []; + this.field.updateForm(); + }, + this.handleError + ); + } + + getOptionsByProcessDefinitionId() { + this.formService + .getRestFieldValuesByProcessId( + this.field.form.processDefinitionId, + this.field.id + ) + .subscribe( + (result: FormFieldOption[]) => { + this.field.options = result || []; + this.field.updateForm(); + }, + this.handleError + ); + } + onOptionClick(optionSelected: any) { this.field.value = optionSelected; this.checkVisibility(this.field); diff --git a/ng2-components/ng2-activiti-form/src/components/widgets/typeahead/typeahead.widget.ts b/ng2-components/ng2-activiti-form/src/components/widgets/typeahead/typeahead.widget.ts index 8b7cc36048..bf336f180e 100644 --- a/ng2-components/ng2-activiti-form/src/components/widgets/typeahead/typeahead.widget.ts +++ b/ng2-components/ng2-activiti-form/src/components/widgets/typeahead/typeahead.widget.ts @@ -38,6 +38,14 @@ export class TypeaheadWidget extends WidgetComponent implements OnInit { } ngOnInit() { + if (this.field.form.processDefinitionId) { + this.getValuesByProcessDefinitionId(); + } else { + this.getValuesByTaskId(); + } + } + + getValuesByTaskId() { this.formService .getRestFieldValues( this.field.form.taskId, @@ -61,6 +69,30 @@ export class TypeaheadWidget extends WidgetComponent implements OnInit { ); } + getValuesByProcessDefinitionId() { + this.formService + .getRestFieldValuesByProcessId( + this.field.form.processDefinitionId, + this.field.id + ) + .subscribe( + (result: FormFieldOption[]) => { + let options = result || []; + this.field.options = options; + this.field.updateForm(); + + let fieldValue = this.field.value; + if (fieldValue) { + let toSelect = options.find(item => item.id === fieldValue); + if (toSelect) { + this.value = toSelect.name; + } + } + }, + this.handleError + ); + } + getOptions(): FormFieldOption[] { let val = this.value.toLocaleLowerCase(); return this.field.options.filter(item => { diff --git a/ng2-components/ng2-activiti-form/src/services/form.service.ts b/ng2-components/ng2-activiti-form/src/services/form.service.ts index d367b100cd..a36ad0d368 100644 --- a/ng2-components/ng2-activiti-form/src/services/form.service.ts +++ b/ng2-components/ng2-activiti-form/src/services/form.service.ts @@ -143,7 +143,7 @@ export class FormService { * @returns {Observable} */ saveTaskForm(taskId: string, formValues: FormValues): Observable { - let body = JSON.stringify({values: formValues}); + let body = JSON.stringify({ values: formValues }); return Observable.fromPromise(this.apiService.getInstance().activiti.taskApi.saveTaskForm(taskId, body)) .catch(this.handleError); @@ -157,7 +157,7 @@ export class FormService { * @returns {Observable} */ completeTaskForm(taskId: string, formValues: FormValues, outcome?: string): Observable { - let data: any = {values: formValues}; + let data: any = { values: formValues }; if (outcome) { data.outcome = outcome; } @@ -223,6 +223,16 @@ export class FormService { return Observable.fromPromise(alfrescoApi.activiti.taskApi.getRestFieldValues(taskId, field)); } + getRestFieldValuesByProcessId(processDefinitionId: string, field: string): Observable { + let alfrescoApi = this.apiService.getInstance(); + return Observable.fromPromise(alfrescoApi.activiti.processApi.getRestFieldValues(processDefinitionId, field)); + } + + getRestFieldValuesColumnByProcessId(processDefinitionId: string, field: string, column?: string): Observable { + let alfrescoApi = this.apiService.getInstance(); + return Observable.fromPromise(alfrescoApi.activiti.processApi.getRestTableFieldValues(processDefinitionId, field, column)); + } + getRestFieldValuesColumn(taskId: string, field: string, column?: string): Observable { let alfrescoApi = this.apiService.getInstance(); return Observable.fromPromise(alfrescoApi.activiti.taskApi.getRestFieldValuesColumn(taskId, field, column));