diff --git a/ng2-components/ng2-activiti-form/src/components/widgets/dropdown/dropdown.widget.css b/ng2-components/ng2-activiti-form/src/components/widgets/dropdown/dropdown.widget.css new file mode 100644 index 0000000000..f1be2ed3ba --- /dev/null +++ b/ng2-components/ng2-activiti-form/src/components/widgets/dropdown/dropdown.widget.css @@ -0,0 +1,7 @@ +.dropdown-widget { + width: 100%; +} + +.dropdown-widget > select { + width: 100%; +} diff --git a/ng2-components/ng2-activiti-form/src/components/widgets/dropdown/dropdown.widget.html b/ng2-components/ng2-activiti-form/src/components/widgets/dropdown/dropdown.widget.html index 3fca63bf47..b25a40fd9a 100644 --- a/ng2-components/ng2-activiti-form/src/components/widgets/dropdown/dropdown.widget.html +++ b/ng2-components/ng2-activiti-form/src/components/widgets/dropdown/dropdown.widget.html @@ -1,4 +1,5 @@ - + 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 70581505b1..ad36310bb0 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 @@ -24,7 +24,8 @@ declare var componentHandler; @Component({ moduleId: __moduleName, selector: 'dropdown-widget', - templateUrl: './dropdown.widget.html' + templateUrl: './dropdown.widget.html', + styleUrls: ['./dropdown.widget.css'] }) export class DropdownWidget 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 a6973985c2..cdbaee64ec 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 @@ -15,7 +15,6 @@ * limitations under the License. */ - export interface FormValues { [key: string]: any; } @@ -39,14 +38,24 @@ export class FormWidgetModel { } } +export interface FormFieldOption { + id: string; + name: string; +} + export class FormFieldModel extends FormWidgetModel { + private _fieldType: string; private _id: string; private _name: string; private _type: string; private _value: string; private _tab: string; + get fieldType(): string { + return this._fieldType; + } + get id(): string { return this._id; } @@ -65,7 +74,7 @@ export class FormFieldModel extends FormWidgetModel { set value(v: any) { this._value = v; - this.form.values[this._id] = v; + this.updateForm(); } get tab(): string { @@ -73,20 +82,58 @@ export class FormFieldModel extends FormWidgetModel { } colspan: number = 1; + options: FormFieldOption[] = []; constructor(form: FormModel, json?: any) { super(form, json); if (json) { + this._fieldType = json.fieldType; this._id = json.id; this._name = json.name; this._type = json.type; - this._value = json.value; this._tab = json.tab; this.colspan = json.colspan; + this.options = json.options || []; - // update form values - form.values[json.id] = json.value; + this._value = this.parseValue(json); + this.updateForm(); + } + } + + private parseValue(json: any): any { + let value = json.value; + + /* + This is needed due to Activiti reading dropdown values as string + but saving back as object: { id: , name: } + */ + // TODO: needs review + if (json.fieldType === 'RestFieldRepresentation') { + if (value === '') { + value = 'empty'; + } + } + + return value; + } + + private updateForm() { + /* + This is needed due to Activiti reading dropdown values as string + but saving back as object: { id: , name: } + */ + if (this.fieldType === 'RestFieldRepresentation') { + if (this.value === 'empty' || this.value === '') { + this.form.values[this.id] = {}; + } else { + let entry: FormFieldOption[] = this.options.filter(opt => opt.id === this.value); + if (entry.length > 0) { + this.form.values[this.id] = entry[0]; + } + } + } else { + this.form.values[this.id] = this.value; } } }