From 3878ea29a40a20ce5bd3915a6c9a3487d19917e3 Mon Sep 17 00:00:00 2001 From: Denys Vuika Date: Wed, 14 Sep 2016 20:26:21 +0100 Subject: [PATCH] #726 required validator for radio buttons, bug fixes - REST service data support, fixes #747 - proper value selection on reload, fixes #746 --- .../widgets/core/form-field-validator.ts | 8 ++++- .../widgets/core/form-field.model.ts | 9 +++--- .../widgets/dropdown/dropdown.widget.ts | 1 - .../radio-buttons/radio-buttons.widget.css | 16 ++++++++++ .../radio-buttons/radio-buttons.widget.html | 5 ++- .../radio-buttons/radio-buttons.widget.ts | 32 +++++++++++++++++-- 6 files changed, 61 insertions(+), 10 deletions(-) diff --git a/ng2-components/ng2-activiti-form/src/components/widgets/core/form-field-validator.ts b/ng2-components/ng2-activiti-form/src/components/widgets/core/form-field-validator.ts index 6dfe487705..2ecc3bdbf5 100644 --- a/ng2-components/ng2-activiti-form/src/components/widgets/core/form-field-validator.ts +++ b/ng2-components/ng2-activiti-form/src/components/widgets/core/form-field-validator.ts @@ -34,7 +34,8 @@ export class RequiredFieldValidator implements FormFieldValidator { FormFieldTypes.TYPEAHEAD, FormFieldTypes.DROPDOWN, FormFieldTypes.PEOPLE, - FormFieldTypes.FUNCTIONAL_GROUP + FormFieldTypes.FUNCTIONAL_GROUP, + FormFieldTypes.RADIO_BUTTONS ]; isSupported(field: FormFieldModel): boolean { @@ -54,6 +55,11 @@ export class RequiredFieldValidator implements FormFieldValidator { } } + if (field.type === FormFieldTypes.RADIO_BUTTONS) { + let option = field.options.find(opt => opt.id === field.value); + return !!option; + } + if (!field.value) { return false; } diff --git a/ng2-components/ng2-activiti-form/src/components/widgets/core/form-field.model.ts b/ng2-components/ng2-activiti-form/src/components/widgets/core/form-field.model.ts index e62eaaafb1..00f3294b41 100644 --- a/ng2-components/ng2-activiti-form/src/components/widgets/core/form-field.model.ts +++ b/ng2-components/ng2-activiti-form/src/components/widgets/core/form-field.model.ts @@ -182,13 +182,12 @@ export class FormFieldModel extends FormWidgetModel { but saving back as object: { id: , name: } */ if (json.type === FormFieldTypes.RADIO_BUTTONS) { - // Activiti has a bug with default radio button value, - // so try resolving current one with a fallback to first entry - let entry: FormFieldOption[] = this.options.filter(opt => opt.id === value); + // Activiti has a bug with default radio button value where initial selection passed as `name` value + // so try resolving current one with a fallback to first entry via name or id + // TODO: needs to be reported and fixed at Activiti side + let entry: FormFieldOption[] = this.options.filter(opt => opt.id === value || opt.name === value); if (entry.length > 0) { value = entry[0].id; - } else if (this.options.length > 0) { - value = this.options[0].id; } } 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 7aebd23bae..3bfcbe26a3 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 @@ -21,7 +21,6 @@ import { WidgetComponent } from './../widget.component'; import { FormFieldOption } from './../core/form-field-option'; declare let __moduleName: string; -declare var componentHandler; @Component({ moduleId: __moduleName, diff --git a/ng2-components/ng2-activiti-form/src/components/widgets/radio-buttons/radio-buttons.widget.css b/ng2-components/ng2-activiti-form/src/components/widgets/radio-buttons/radio-buttons.widget.css index 0fe4eb9fe7..f835d42bd9 100644 --- a/ng2-components/ng2-activiti-form/src/components/widgets/radio-buttons/radio-buttons.widget.css +++ b/ng2-components/ng2-activiti-form/src/components/widgets/radio-buttons/radio-buttons.widget.css @@ -1 +1,17 @@ .radio-buttons-widget {} + +.radio-buttons-widget__invalid .mdl-radio__label { + color: #d50000; +} + +.radio-buttons-widget__invalid .radio-buttons-widget__label { + color: #d50000; +} + +.radio-buttons-widget__invalid .radio-buttons-widget__label:after { + background-color: #d50000; +} + +.radio-buttons-widget__invalid .mdl-textfield__error { + visibility: visible !important; +} diff --git a/ng2-components/ng2-activiti-form/src/components/widgets/radio-buttons/radio-buttons.widget.html b/ng2-components/ng2-activiti-form/src/components/widgets/radio-buttons/radio-buttons.widget.html index a832a925f2..e9124c2dd8 100644 --- a/ng2-components/ng2-activiti-form/src/components/widgets/radio-buttons/radio-buttons.widget.html +++ b/ng2-components/ng2-activiti-form/src/components/widgets/radio-buttons/radio-buttons.widget.html @@ -1,4 +1,6 @@ -
+
+
+ {{field.validationSummary}}
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 e528813c72..d5ccb7a970 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 @@ -15,8 +15,10 @@ * limitations under the License. */ -import { Component } from '@angular/core'; +import { Component, OnInit } from '@angular/core'; import { WidgetComponent } from './../widget.component'; +import { FormService } from '../../../services/form.service'; +import { FormFieldOption } from './../core/form-field-option'; declare let __moduleName: string; declare var componentHandler; @@ -27,6 +29,32 @@ declare var componentHandler; templateUrl: './radio-buttons.widget.html', styleUrls: ['./radio-buttons.widget.css'] }) -export class RadioButtonsWidget extends WidgetComponent { +export class RadioButtonsWidget extends WidgetComponent implements OnInit { + + constructor(private formService: FormService) { + super(); + } + + ngOnInit() { + if (this.field && this.field.restUrl) { + this.formService + .getRestFieldValues( + this.field.form.taskId, + this.field.id + ) + .subscribe( + (result: FormFieldOption[]) => { + let options = []; + this.field.options = result || []; + this.field.updateForm(); + }, + this.handleError + ); + } + } + + handleError(error: any) { + console.error(error); + } }