77 DYNAMIC_FORM_CONTROL_TYPE_GROUP ,
88 DYNAMIC_FORM_CONTROL_TYPE_INPUT ,
99 DYNAMIC_FORM_CONTROL_TYPE_RADIO_GROUP ,
10- DynamicFormArrayModel ,
10+ DynamicFormArrayModel , DynamicFormControlEvent ,
1111 DynamicFormControlModel ,
1212 DynamicFormGroupModel ,
1313 DynamicFormService , DynamicFormValidationService ,
@@ -16,7 +16,7 @@ import {
1616import { isObject , isString , mergeWith } from 'lodash' ;
1717
1818import { hasValue , isEmpty , isNotEmpty , isNotNull , isNotUndefined , isNull } from '../../empty.util' ;
19- import { DynamicQualdropModel } from './ds-dynamic-form-ui/models/ds-dynamic-qualdrop.model' ;
19+ import { DynamicQualdropModel } from './ds-dynamic-form-ui/models/ds-dynamic-qualdrop.model' ;
2020import { SubmissionFormsModel } from '../../../core/config/models/config-submission-forms.model' ;
2121import { DYNAMIC_FORM_CONTROL_TYPE_TAG } from './ds-dynamic-form-ui/models/tag/dynamic-tag.model' ;
2222import { RowParser } from './parsers/row-parser' ;
@@ -26,6 +26,7 @@ import { DsDynamicInputModel } from './ds-dynamic-form-ui/models/ds-dynamic-inpu
2626import { FormFieldMetadataValueObject } from './models/form-field-metadata-value.model' ;
2727import { isNgbDateStruct } from '../../date.util' ;
2828import { DYNAMIC_FORM_CONTROL_TYPE_RELATION_GROUP } from './ds-dynamic-form-ui/ds-dynamic-form-constants' ;
29+ import { CONCAT_GROUP_SUFFIX , DynamicConcatModel } from './ds-dynamic-form-ui/models/ds-dynamic-concat.model' ;
2930
3031@Injectable ( )
3132export class FormBuilderService extends DynamicFormService {
@@ -54,6 +55,13 @@ export class FormBuilderService extends DynamicFormService {
5455 break ;
5556 }
5657
58+ if ( this . isConcatGroup ( controlModel ) ) {
59+ if ( controlModel . id . match ( new RegExp ( findId + CONCAT_GROUP_SUFFIX + `_\\d+$` ) ) ) {
60+ result = ( controlModel as DynamicConcatModel ) . group [ 0 ] ;
61+ break ;
62+ }
63+ }
64+
5765 if ( this . isGroup ( controlModel ) ) {
5866 findByIdFn ( findId , ( controlModel as DynamicFormGroupModel ) . group , findArrayIndex ) ;
5967 }
@@ -247,6 +255,10 @@ export class FormBuilderService extends DynamicFormService {
247255 return model && ( ( model as any ) . type === DYNAMIC_FORM_CONTROL_TYPE_GROUP && ( model as any ) . isCustomGroup === true ) ;
248256 }
249257
258+ isConcatGroup ( model : DynamicFormControlModel ) : boolean {
259+ return this . isCustomGroup ( model ) && ( model . id . indexOf ( CONCAT_GROUP_SUFFIX ) !== - 1 ) ;
260+ }
261+
250262 isRowGroup ( model : DynamicFormControlModel ) : boolean {
251263 return model && ( ( model as any ) . type === DYNAMIC_FORM_CONTROL_TYPE_GROUP && ( model as any ) . isRowGroup === true ) ;
252264 }
@@ -303,4 +315,76 @@ export class FormBuilderService extends DynamicFormService {
303315 return ( tempModel . id !== tempModel . name ) ? tempModel . name : tempModel . id ;
304316 }
305317
318+ /**
319+ * Calculate the metadata list related to the event.
320+ * @param event
321+ */
322+ getMetadataIdsFromEvent ( event : DynamicFormControlEvent ) : string [ ] {
323+
324+ let model = event . model ;
325+ while ( model . parent ) {
326+ model = model . parent as any ;
327+ }
328+
329+ const iterateControlModels = ( findGroupModel : DynamicFormControlModel [ ] , controlModelIndex : number = 0 ) : string [ ] => {
330+ let iterateResult = Object . create ( { } ) ;
331+
332+ // Iterate over all group's controls
333+ for ( const controlModel of findGroupModel ) {
334+
335+ if ( this . isRowGroup ( controlModel ) && ! this . isCustomOrListGroup ( controlModel ) ) {
336+ iterateResult = mergeWith ( iterateResult , iterateControlModels ( ( controlModel as DynamicFormGroupModel ) . group ) ) ;
337+ continue ;
338+ }
339+
340+ if ( this . isGroup ( controlModel ) && ! this . isCustomOrListGroup ( controlModel ) ) {
341+ iterateResult [ controlModel . name ] = iterateControlModels ( ( controlModel as DynamicFormGroupModel ) . group ) ;
342+ continue ;
343+ }
344+
345+ if ( this . isRowArrayGroup ( controlModel ) ) {
346+ for ( const arrayItemModel of ( controlModel as DynamicRowArrayModel ) . groups ) {
347+ iterateResult = mergeWith ( iterateResult , iterateControlModels ( arrayItemModel . group , arrayItemModel . index ) ) ;
348+ }
349+ continue ;
350+ }
351+
352+ if ( this . isArrayGroup ( controlModel ) ) {
353+ iterateResult [ controlModel . name ] = [ ] ;
354+ for ( const arrayItemModel of ( controlModel as DynamicFormArrayModel ) . groups ) {
355+ iterateResult [ controlModel . name ] . push ( iterateControlModels ( arrayItemModel . group , arrayItemModel . index ) ) ;
356+ }
357+ continue ;
358+ }
359+
360+ let controlId ;
361+ // Get the field's name
362+ if ( this . isQualdropGroup ( controlModel ) ) {
363+ // If is instance of DynamicQualdropModel take the qualdrop id as field's name
364+ controlId = ( controlModel as DynamicQualdropModel ) . qualdropId ;
365+ } else {
366+ controlId = controlModel . name ;
367+ }
368+
369+ if ( this . isRelationGroup ( controlModel ) ) {
370+ const values = ( controlModel as DynamicRelationGroupModel ) . getGroupValue ( ) ;
371+ values . forEach ( ( groupValue , groupIndex ) => {
372+ Object . keys ( groupValue ) . forEach ( ( key ) => {
373+ iterateResult [ key ] = true ;
374+ } ) ;
375+ } ) ;
376+ } else {
377+ iterateResult [ controlId ] = true ;
378+ }
379+
380+ }
381+
382+ return iterateResult ;
383+ } ;
384+
385+ const result = iterateControlModels ( [ model ] ) ;
386+
387+ return Object . keys ( result ) ;
388+ }
389+
306390}
0 commit comments