From c2fd019ebddd26661e491088bac2e8c31f924cdb Mon Sep 17 00:00:00 2001 From: Art Lowel Date: Wed, 5 Aug 2020 13:55:26 +0200 Subject: [PATCH 1/3] fix exception when adding a field for a repeatable dropdown --- .../sections/form/section-form-operations.service.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/app/submission/sections/form/section-form-operations.service.ts b/src/app/submission/sections/form/section-form-operations.service.ts index 6e7a35fe26..8b6c2dc4d6 100644 --- a/src/app/submission/sections/form/section-form-operations.service.ts +++ b/src/app/submission/sections/form/section-form-operations.service.ts @@ -28,6 +28,7 @@ import { FormBuilderService } from '../../../shared/form/builder/form-builder.se import { FormFieldMetadataValueObject } from '../../../shared/form/builder/models/form-field-metadata-value.model'; import { DynamicQualdropModel } from '../../../shared/form/builder/ds-dynamic-form-ui/models/ds-dynamic-qualdrop.model'; import { DynamicRelationGroupModel } from '../../../shared/form/builder/ds-dynamic-form-ui/models/relation-group/dynamic-relation-group.model'; +import { deepClone } from 'fast-json-patch'; /** * The service handling all form section operations @@ -249,7 +250,10 @@ export class SectionFormOperationsService { fieldValue = new FormFieldMetadataValueObject(value); } - return fieldValue; + // make a copy of fieldvalue for returning, + // so any changes to it can't influence the original. + // fixes #817 + return deepClone(fieldValue); } /** From 8bfccaa6243eb45acd6444dfe6babd21cbe6f10b Mon Sep 17 00:00:00 2001 From: Art Lowel Date: Wed, 5 Aug 2020 15:37:10 +0200 Subject: [PATCH 2/3] fix issue where adding multiple fields at the same time to an empty dropdown would only add the last field --- src/app/shared/form/form.component.ts | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/app/shared/form/form.component.ts b/src/app/shared/form/form.component.ts index dee06c29b2..9886eb28d2 100644 --- a/src/app/shared/form/form.component.ts +++ b/src/app/shared/form/form.component.ts @@ -318,6 +318,12 @@ export class FormComponent implements OnDestroy, OnInit { const model = arrayContext.groups[arrayContext.groups.length - 1].group[0] as any; if (model.type === DYNAMIC_FORM_CONTROL_TYPE_SCROLLABLE_DROPDOWN) { model.value = Object.values(value)[0]; + const ctrl = formArrayControl.controls[formArrayControl.length - 1]; + const ctrlValue = ctrl.value; + const ctrlValueKey = Object.keys(ctrlValue)[0]; + ctrl.setValue({ + [ctrlValueKey]: model.value + }); } else if (this.formBuilderService.isQualdropGroup(model)) { const ctrl = formArrayControl.controls[formArrayControl.length - 1]; const ctrlKey = Object.keys(ctrl.value).find((key: string) => isNotEmpty(key.match(QUALDROP_GROUP_REGEX))); From d560e08b207ed8929c72fd71773103c91bf8d285 Mon Sep 17 00:00:00 2001 From: Art Lowel Date: Wed, 5 Aug 2020 16:03:51 +0200 Subject: [PATCH 3/3] only clone for add events --- .../sections/form/section-form-operations.service.ts | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/src/app/submission/sections/form/section-form-operations.service.ts b/src/app/submission/sections/form/section-form-operations.service.ts index 8b6c2dc4d6..28bf71b210 100644 --- a/src/app/submission/sections/form/section-form-operations.service.ts +++ b/src/app/submission/sections/form/section-form-operations.service.ts @@ -250,10 +250,7 @@ export class SectionFormOperationsService { fieldValue = new FormFieldMetadataValueObject(value); } - // make a copy of fieldvalue for returning, - // so any changes to it can't influence the original. - // fixes #817 - return deepClone(fieldValue); + return fieldValue; } /** @@ -314,7 +311,7 @@ export class SectionFormOperationsService { event: DynamicFormControlEvent ): void { const path = this.getFieldPathSegmentedFromChangeEvent(event); - const value = this.getFieldValueFromChangeEvent(event); + const value = deepClone(this.getFieldValueFromChangeEvent(event)); if (isNotEmpty(value)) { value.place = this.getArrayIndexFromEvent(event); if (hasValue(event.group) && hasValue(event.group.value)) {