From 9a0a5cadddf3c2e8cad61d669b9c494b2697c680 Mon Sep 17 00:00:00 2001 From: Denys Vuika Date: Tue, 26 Jul 2016 15:32:10 +0100 Subject: [PATCH] #476 basic radio buttons widget --- .../widgets/container/container.widget.html | 3 ++ .../widgets/container/container.widget.ts | 4 +- .../src/components/widgets/index.ts | 1 + .../radio-buttons/radio-buttons.widget.css | 1 + .../radio-buttons/radio-buttons.widget.html | 14 +++++++ .../radio-buttons/radio-buttons.widget.ts | 32 ++++++++++++++++ .../src/components/widgets/widget.model.ts | 38 +++++++++++++++++-- 7 files changed, 88 insertions(+), 5 deletions(-) create mode 100644 ng2-components/ng2-activiti-form/src/components/widgets/radio-buttons/radio-buttons.widget.css create mode 100644 ng2-components/ng2-activiti-form/src/components/widgets/radio-buttons/radio-buttons.widget.html create mode 100644 ng2-components/ng2-activiti-form/src/components/widgets/radio-buttons/radio-buttons.widget.ts diff --git a/ng2-components/ng2-activiti-form/src/components/widgets/container/container.widget.html b/ng2-components/ng2-activiti-form/src/components/widgets/container/container.widget.html index ffdb78070b..4721683f73 100644 --- a/ng2-components/ng2-activiti-form/src/components/widgets/container/container.widget.html +++ b/ng2-components/ng2-activiti-form/src/components/widgets/container/container.widget.html @@ -34,6 +34,9 @@
+
+ +
UNKNOWN WIDGET TYPE: {{field.type}}
diff --git a/ng2-components/ng2-activiti-form/src/components/widgets/container/container.widget.ts b/ng2-components/ng2-activiti-form/src/components/widgets/container/container.widget.ts index e11cdc77ec..25dc0657df 100644 --- a/ng2-components/ng2-activiti-form/src/components/widgets/container/container.widget.ts +++ b/ng2-components/ng2-activiti-form/src/components/widgets/container/container.widget.ts @@ -25,6 +25,7 @@ import { CheckboxWidget } from './../checkbox/checkbox.widget'; import { MultilineTextWidget } from './../multiline-text/multiline-text.widget'; import { DropdownWidget } from './../dropdown/dropdown.widget'; import { HyperlinkWidget } from './../hyperlink/hyperlink.widget'; +import { RadioButtonsWidget } from './../radio-buttons/radio-buttons.widget'; declare let __moduleName: string; declare var componentHandler; @@ -41,7 +42,8 @@ declare var componentHandler; CheckboxWidget, MultilineTextWidget, DropdownWidget, - HyperlinkWidget + HyperlinkWidget, + RadioButtonsWidget ] }) export class ContainerWidget implements AfterViewInit { diff --git a/ng2-components/ng2-activiti-form/src/components/widgets/index.ts b/ng2-components/ng2-activiti-form/src/components/widgets/index.ts index 024fa07d8f..eff190fa36 100644 --- a/ng2-components/ng2-activiti-form/src/components/widgets/index.ts +++ b/ng2-components/ng2-activiti-form/src/components/widgets/index.ts @@ -25,3 +25,4 @@ export * from './checkbox/checkbox.widget'; export * from './multiline-text/multiline-text.widget'; export * from './dropdown/dropdown.widget'; export * from './hyperlink/hyperlink.widget'; +export * from './radio-buttons/radio-buttons.widget'; 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 new file mode 100644 index 0000000000..0fe4eb9fe7 --- /dev/null +++ b/ng2-components/ng2-activiti-form/src/components/widgets/radio-buttons/radio-buttons.widget.css @@ -0,0 +1 @@ +.radio-buttons-widget {} 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 new file mode 100644 index 0000000000..cc7fbd8cb2 --- /dev/null +++ b/ng2-components/ng2-activiti-form/src/components/widgets/radio-buttons/radio-buttons.widget.html @@ -0,0 +1,14 @@ +
+
+ +
+
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 new file mode 100644 index 0000000000..e528813c72 --- /dev/null +++ b/ng2-components/ng2-activiti-form/src/components/widgets/radio-buttons/radio-buttons.widget.ts @@ -0,0 +1,32 @@ +/*! + * @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 { Component } from '@angular/core'; +import { WidgetComponent } from './../widget.component'; + +declare let __moduleName: string; +declare var componentHandler; + +@Component({ + moduleId: __moduleName, + selector: 'radio-buttons-widget', + templateUrl: './radio-buttons.widget.html', + styleUrls: ['./radio-buttons.widget.css'] +}) +export class RadioButtonsWidget extends WidgetComponent { + +} diff --git a/ng2-components/ng2-activiti-form/src/components/widgets/widget.model.ts b/ng2-components/ng2-activiti-form/src/components/widgets/widget.model.ts index 79177899c8..f2f26d7ee0 100644 --- a/ng2-components/ng2-activiti-form/src/components/widgets/widget.model.ts +++ b/ng2-components/ng2-activiti-form/src/components/widgets/widget.model.ts @@ -27,6 +27,7 @@ export class FormFieldTypes { static GROUP: string = 'group'; static DROPDOWN: string = 'dropdown'; static HYPERLINK: string = 'hyperlink'; + static RADIO_BUTTONS: string = 'radio-buttons'; } export class FormWidgetModel { @@ -121,7 +122,7 @@ export class FormFieldModel extends FormWidgetModel { let value = json.value; /* - This is needed due to Activiti reading dropdown values as string + This is needed due to Activiti issue related to reading dropdown values as value string but saving back as object: { id: , name: } */ // TODO: needs review @@ -131,13 +132,28 @@ export class FormFieldModel extends FormWidgetModel { } } + /* + This is needed due to Activiti issue related to reading radio button values as value string + 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); + if (entry.length > 0) { + value = entry[0].id; + } else if (this.options.length > 0) { + value = this.options[0].id; + } + } + return value; } updateForm() { /* - This is needed due to Activiti reading dropdown values as string - but saving back as object: { id: , name: } + This is needed due to Activiti reading dropdown values as string + but saving back as object: { id: , name: } */ if (this.type === FormFieldTypes.DROPDOWN) { if (this.value === 'empty' || this.value === '') { @@ -148,7 +164,21 @@ export class FormFieldModel extends FormWidgetModel { this.form.values[this.id] = entry[0]; } } - } else { + } + /* + This is needed due to Activiti issue related to reading radio button values as value string + but saving back as object: { id: , name: } + */ + else if (this.type === FormFieldTypes.RADIO_BUTTONS) { + let entry: FormFieldOption[] = this.options.filter(opt => opt.id === this.value); + if (entry.length > 0) { + this.form.values[this.id] = entry[0]; + } else if (this.options.length > 0) { + this.form.values[this.id] = this.options[0].id; + } + } + // default value resolver + else { this.form.values[this.id] = this.value; } }