mirror of
https://github.com/Alfresco/alfresco-ng2-components.git
synced 2025-07-24 17:32:15 +00:00
[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:
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -62,7 +62,7 @@ export const fakeForm: any = {
|
||||
1: [
|
||||
{
|
||||
fieldType: 'RestFieldRepresentation',
|
||||
id: 'label',
|
||||
id: 'dropdownId',
|
||||
name: 'Label',
|
||||
type: 'dropdown',
|
||||
value: 'Choose one...',
|
||||
|
@@ -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');
|
||||
});
|
||||
|
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -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');
|
||||
});
|
||||
|
||||
|
Reference in New Issue
Block a user