From b665456b9d8bf30c8d559863316127b126225fd7 Mon Sep 17 00:00:00 2001
From: Giuseppe Digilio <giuseppe.digilio@4science.it>
Date: Thu, 4 Jul 2019 13:03:18 +0200
Subject: [PATCH] Fixed issues with relation group field

---
 src/app/shared/chips/models/chips-item.model.ts           | 8 +++++++-
 .../ds-dynamic-form-ui/models/ds-dynamic-concat.model.ts  | 7 +++++++
 .../relation-group/dynamic-relation-group.components.ts   | 4 +++-
 3 files changed, 17 insertions(+), 2 deletions(-)

diff --git a/src/app/shared/chips/models/chips-item.model.ts b/src/app/shared/chips/models/chips-item.model.ts
index 540f94166f..913232fa71 100644
--- a/src/app/shared/chips/models/chips-item.model.ts
+++ b/src/app/shared/chips/models/chips-item.model.ts
@@ -2,6 +2,7 @@ import { isObject, uniqueId } from 'lodash';
 import { hasValue, isNotEmpty } from '../../empty.util';
 import { FormFieldMetadataValueObject } from '../../form/builder/models/form-field-metadata-value.model';
 import { ConfidenceType } from '../../../core/integration/models/confidence-type';
+import { PLACEHOLDER_PARENT_METADATA } from '../../form/builder/ds-dynamic-form-ui/models/relation-group/dynamic-relation-group.model';
 
 export interface ChipsItemIcon {
   metadata: string;
@@ -62,7 +63,7 @@ export class ChipsItem {
         if (this._item.hasOwnProperty(icon.metadata)
           && (((typeof this._item[icon.metadata] === 'string') && hasValue(this._item[icon.metadata]))
             || (this._item[icon.metadata] as FormFieldMetadataValueObject).hasValue())
-          && !(this._item[icon.metadata] as FormFieldMetadataValueObject).hasPlaceholder()) {
+          && !this.hasPlaceholder(this._item[icon.metadata])) {
           if ((icon.visibleWhenAuthorityEmpty
             || (this._item[icon.metadata] as FormFieldMetadataValueObject).confidence !== ConfidenceType.CF_UNSET)
             && isNotEmpty(icon.style)) {
@@ -109,4 +110,9 @@ export class ChipsItem {
 
     this.display = value;
   }
+
+  private hasPlaceholder(value: any) {
+    return (typeof value === 'string') ? (value === PLACEHOLDER_PARENT_METADATA) :
+      (value as FormFieldMetadataValueObject).hasPlaceholder()
+  }
 }
diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/models/ds-dynamic-concat.model.ts b/src/app/shared/form/builder/ds-dynamic-form-ui/models/ds-dynamic-concat.model.ts
index fc618023f9..66bdf97dad 100644
--- a/src/app/shared/form/builder/ds-dynamic-form-ui/models/ds-dynamic-concat.model.ts
+++ b/src/app/shared/form/builder/ds-dynamic-form-ui/models/ds-dynamic-concat.model.ts
@@ -1,4 +1,7 @@
 import { DynamicFormControlLayout, DynamicFormGroupModel, DynamicFormGroupModelConfig, serializable } from '@ng-dynamic-forms/core';
+
+import { Subject } from 'rxjs';
+
 import { isNotEmpty } from '../../../../empty.util';
 import { DsDynamicInputModel } from './ds-dynamic-input.model';
 import { FormFieldMetadataValueObject } from '../../models/form-field-metadata-value.model';
@@ -16,12 +19,16 @@ export class DynamicConcatModel extends DynamicFormGroupModel {
   @serializable() separator: string;
   @serializable() hasLanguages = false;
   isCustomGroup = true;
+  valueUpdates: Subject<string>;
 
   constructor(config: DynamicConcatModelConfig, layout?: DynamicFormControlLayout) {
 
     super(config, layout);
 
     this.separator = config.separator + ' ';
+
+    this.valueUpdates = new Subject<string>();
+    this.valueUpdates.subscribe((value: string) => this.value = value);
   }
 
   get value() {
diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/models/relation-group/dynamic-relation-group.components.ts b/src/app/shared/form/builder/ds-dynamic-form-ui/models/relation-group/dynamic-relation-group.components.ts
index fde8d4b7bf..1485993375 100644
--- a/src/app/shared/form/builder/ds-dynamic-form-ui/models/relation-group/dynamic-relation-group.components.ts
+++ b/src/app/shared/form/builder/ds-dynamic-form-ui/models/relation-group/dynamic-relation-group.components.ts
@@ -130,7 +130,9 @@ export class DsDynamicRelationGroupComponent extends DynamicFormControlComponent
           ? null
           : this.selectedChipItem.item[model.name];
         if (isNotNull(value)) {
-          model.valueUpdates.next(this.formBuilderService.isInputModel(model) ? value.value : value);
+          const nextValue = (this.formBuilderService.isInputModel(model) && (typeof value !== 'string')) ?
+            value.value : value;
+          model.valueUpdates.next(nextValue);
         }
       });
     });
-- 
GitLab