|
@@ -24,16 +24,6 @@ import { FormBuilder, FormGroup, FormArray, FormControl, AbstractControlOptions
|
|
|
import { reduce, cloneDeep } from 'lodash/fp';
|
|
|
import * as fmdModels from '../models/field.model';
|
|
|
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-interface AbstractControlOptions {
|
|
|
- validators?: ValidatorFn | ValidatorFn[] | null;
|
|
|
- asyncValidators?: AsyncValidatorFn | AsyncValidatorFn[] | null;
|
|
|
- updateOn?: 'change' | 'blur' | 'submit';
|
|
|
-}
|
|
|
-*/
|
|
|
-
|
|
|
|
|
|
|
|
|
|
|
@@ -61,19 +51,56 @@ const autoMeta = model => Object.entries(model)
|
|
|
|
|
|
|
|
|
|
|
|
-
|
|
|
+
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
const combineMetaForField = (metaF, containerSeed, extraMetaF) => ({ ...metaF, ...containerSeed, ...extraMetaF });
|
|
|
const combineExtraMeta = (metaG, extraMeta, createFromExtra = false, containerSeed = {}) => {
|
|
|
const combinedMeta = {};
|
|
|
Object.entries(extraMeta).forEach(([key, val]) => {
|
|
|
if (typeof metaG[key] === 'object' || createFromExtra) {
|
|
|
const isCon = isContainer(val);
|
|
|
+ const isRepeating = isRepeatingContainer(val);
|
|
|
const metaFoG = metaG[key] || {};
|
|
|
const seed = isCon ? {} : containerSeed;
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ if (isRepeating) {
|
|
|
+ const repeatInAutoMeta = Array.isArray(metaG[key].meta) ? metaG[key].meta.length : 0;
|
|
|
+ const repeatInExtraMeta = val['initialRepeat'] || val['minRepeat'];
|
|
|
+ const repeat = Math.max(repeatInAutoMeta, repeatInExtraMeta);
|
|
|
+
|
|
|
+
|
|
|
+ const repeatingGroup = repeatInAutoMeta ?
|
|
|
+ [ ...metaG[key].meta, ...Array(repeat - repeatInAutoMeta).fill(metaG[key].meta[0]) ]
|
|
|
+ :
|
|
|
+ arrayMemberAutoName(repeat).fill(val['meta'][0]);
|
|
|
+
|
|
|
+ if (Array.isArray(metaG[key])) {
|
|
|
+ combinedMeta[key] = combineExtraMeta(metaG[key], val['meta'][0], createFromExtra, val['seed']);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
const extra = isCon ?
|
|
|
{
|
|
|
...val,
|
|
@@ -424,6 +451,12 @@ const isGroup = (metaFoG): boolean => !!metaFoG.meta;
|
|
|
|
|
|
const isContainer = (metaFoG): boolean => isGroup(metaFoG) && (!metaFoG.type || metaFoG.type.toLowerCase() === 'container');
|
|
|
|
|
|
+
|
|
|
+
|
|
|
+const isRepeatingContainer = (metaFoG): boolean => isContainer(metaFoG)
|
|
|
+ && Array.isArray(metaFoG.meta)
|
|
|
+ && !!(metaFoG.minRepeat || metaFoG.maxRepeat || metaFoG.initialRepeat);
|
|
|
+
|
|
|
|
|
|
|
|
|
const addNameIfMissing = (metaFoG, key) => metaFoG.name ? metaFoG : addProp(metaFoG, 'name', key);
|