[AAE-2984] fix save not modified Form with dropdown (#5976)

* fix save not modified Form with dropdown

* Update form-field.model.ts

* Update form-field.model.ts

* fix empty value scenario

* fix unit
This commit is contained in:
Eugenio Romano
2020-08-12 22:34:16 +01:00
committed by GitHub
parent 9b3efb5502
commit 8a6358ef44
5 changed files with 38 additions and 34 deletions

View File

@@ -274,14 +274,19 @@ export class FormFieldModel extends FormWidgetModel {
but saving back as object: { id: <id>, name: <name> } but saving back as object: { id: <id>, name: <name> }
*/ */
if (json.type === FormFieldTypes.DROPDOWN) { if (json.type === FormFieldTypes.DROPDOWN) {
if (json.hasEmptyValue && json.options) {
if (json.options) {
const options = <FormFieldOption[]> json.options || []; const options = <FormFieldOption[]> json.options || [];
if (options.length > 0) { if (options.length > 0) {
const emptyOption = json.options[0]; if (json.hasEmptyValue) {
if (value === '' || value === emptyOption.id || value === emptyOption.name) { const emptyOption = json.options[0];
value = emptyOption.id; if (value === '' || value === emptyOption.id || value === emptyOption.name) {
} else if (value.id && value.name) { value = emptyOption.id;
value = value.id; }
} else {
if (value?.id && value?.name) {
value = value.id;
}
} }
} }
} }

View File

@@ -62,7 +62,7 @@ export const fakeForm: any = {
1: [ 1: [
{ {
fieldType: 'RestFieldRepresentation', fieldType: 'RestFieldRepresentation',
id: 'label', id: 'dropdownId',
name: 'Label', name: 'Label',
type: 'dropdown', type: 'dropdown',
value: 'Choose one...', value: 'Choose one...',

View File

@@ -250,9 +250,6 @@ describe('PaginationComponent', () => {
expect(component.isFirstPage).toBe(true, 'isFirstPage'); expect(component.isFirstPage).toBe(true, 'isFirstPage');
expect(component.isLastPage).toBe(true, 'isLastPage'); expect(component.isLastPage).toBe(true, 'isLastPage');
// tslint:disable-next-line: no-console
console.log(JSON.stringify(component.pagination));
expect(component.range).toEqual([ 0, 0 ], 'range'); expect(component.range).toEqual([ 0, 0 ], 'range');
expect(component.pages).toEqual([ 1 ], 'pages'); expect(component.pages).toEqual([ 1 ], 'pages');
}); });

View File

@@ -21,7 +21,7 @@ import { FormCloudService } from '../../../services/form-cloud.service';
import { Subject } from 'rxjs'; import { Subject } from 'rxjs';
import { takeUntil } from 'rxjs/operators'; import { takeUntil } from 'rxjs/operators';
/* tslint:disable:component-selector */ /* tslint:disable:component-selector */
@Component({ @Component({
selector: 'dropdown-cloud-widget', selector: 'dropdown-cloud-widget',
@@ -48,14 +48,14 @@ export class DropdownCloudWidgetComponent extends WidgetComponent implements OnI
constructor(public formService: FormService, constructor(public formService: FormService,
private formCloudService: FormCloudService, private formCloudService: FormCloudService,
private logService: LogService) { private logService: LogService) {
super(formService); super(formService);
} }
ngOnInit() { ngOnInit() {
if (this.field && this.field.restUrl) { if (this.field && this.field.restUrl) {
this.getValuesFromRestApi(); this.getValuesFromRestApi();
} }
} }
getValuesFromRestApi() { getValuesFromRestApi() {
if (this.isValidRestType()) { if (this.isValidRestType()) {
@@ -81,18 +81,18 @@ export class DropdownCloudWidgetComponent extends WidgetComponent implements OnI
} }
compareDropdownValues(opt1: string, opt2: FormFieldOption | string): boolean { compareDropdownValues(opt1: string, opt2: FormFieldOption | string): boolean {
return opt1 && opt2 && typeof opt2 !== 'string' ? ( opt1 === opt2.id || opt1 === opt2.name ) : opt1 === opt2; return opt1 && opt2 && typeof opt2 !== 'string' ? (opt1 === opt2.id || opt1 === opt2.name) : opt1 === opt2;
} }
getOptionValue(option: FormFieldOption, fieldValue: string): string { getOptionValue(option: FormFieldOption, fieldValue: string): string {
let optionValue: string = ''; let optionValue: string = '';
if (option.id === 'empty' || option.name !== fieldValue) { if (option.id === 'empty' || option.name !== fieldValue) {
optionValue = option.id; optionValue = option.id;
} else { } else {
optionValue = option.name; optionValue = option.name;
} }
return optionValue; return optionValue;
} }
isValidRestType(): boolean { isValidRestType(): boolean {
return this.field.optionType === 'rest' && !!this.field.restUrl; return this.field.optionType === 'rest' && !!this.field.restUrl;
@@ -110,4 +110,4 @@ export class DropdownCloudWidgetComponent extends WidgetComponent implements OnI
this.onDestroy$.next(true); this.onDestroy$.next(true);
this.onDestroy$.complete(); this.onDestroy$.complete();
} }
} }

View File

@@ -975,13 +975,13 @@ describe('FormComponent', () => {
formComponent.form = new FormModel(JSON.parse(JSON.stringify(fakeForm))); formComponent.form = new FormModel(JSON.parse(JSON.stringify(fakeForm)));
let formFields = formComponent.form.getFormFields(); let formFields = formComponent.form.getFormFields();
let labelField = formFields.find((field) => field.id === 'label'); let dropdownField = formFields.find((field) => field.id === 'dropdownId');
let radioField = formFields.find((field) => field.id === 'radio'); let radioField = formFields.find((field) => field.id === 'radio');
expect(labelField.value).toBe('empty'); expect(dropdownField.value).toBe('empty');
expect(radioField.value).toBeNull(); expect(radioField.value).toBeNull();
const formValues: any = {}; const formValues: any = {};
formValues.label = { formValues.dropdownId = {
id: 'option_2', id: 'option_2',
name: 'test2' name: 'test2'
}; };
@@ -991,9 +991,11 @@ describe('FormComponent', () => {
formComponent.ngOnChanges({ 'data': change }); formComponent.ngOnChanges({ 'data': change });
formFields = formComponent.form.getFormFields(); formFields = formComponent.form.getFormFields();
labelField = formFields.find((field) => field.id === 'label'); dropdownField = formFields.find((field) => field.id === 'dropdownId');
radioField = formFields.find((field) => field.id === 'radio'); radioField = formFields.find((field) => field.id === 'radio');
expect(labelField.value).toBe('option_2');
expect(dropdownField.value.id).toBe('option_2');
expect(dropdownField.value.name).toBe('test2');
expect(radioField.value).toBe('option_2'); expect(radioField.value).toBe('option_2');
}); });