[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> }
*/
if (json.type === FormFieldTypes.DROPDOWN) {
if (json.hasEmptyValue && json.options) {
if (json.options) {
const options = <FormFieldOption[]> json.options || [];
if (options.length > 0) {
const emptyOption = json.options[0];
if (value === '' || value === emptyOption.id || value === emptyOption.name) {
value = emptyOption.id;
} else if (value.id && value.name) {
value = value.id;
if (json.hasEmptyValue) {
const emptyOption = json.options[0];
if (value === '' || value === emptyOption.id || value === emptyOption.name) {
value = emptyOption.id;
}
} else {
if (value?.id && value?.name) {
value = value.id;
}
}
}
}

View File

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

View File

@@ -250,9 +250,6 @@ describe('PaginationComponent', () => {
expect(component.isFirstPage).toBe(true, 'isFirstPage');
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.pages).toEqual([ 1 ], 'pages');
});

View File

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

View File

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