|
@@ -31,8 +31,8 @@ import * as fmdModels from '../models/field.model';
|
|
|
|
|
|
|
|
|
|
|
|
-const isScalar = val => typeof val === 'boolean' || typeof val === 'number' || typeof val === 'string';
|
|
|
-const isArray = val => Array.isArray(val);
|
|
|
+const isScalar = (val: any) => typeof val === 'boolean' || typeof val === 'number' || typeof val === 'string';
|
|
|
+const isArray = (val: any) => Array.isArray(val);
|
|
|
|
|
|
const keyValPairToMeta = (val: any, key: string) => ({ name: key, [isScalar(val) ? 'value' : 'meta']: val });
|
|
|
const keyValPairToMetaRecursive = ( [key, val] ) => {
|
|
@@ -72,11 +72,10 @@ const combineExtraMeta = (metaG, extraMeta, createFromExtra = false, containerSe
|
|
|
Object.entries(extraMeta).forEach(([key, val]: [string, StringMap<any>]) => {
|
|
|
if (typeof metaG[key] === 'object' || createFromExtra) {
|
|
|
const isCon = isContainer(val);
|
|
|
- const isRepeating = isRepeatingContainer(val);
|
|
|
const metaFoG = metaG[key] || {};
|
|
|
const seed = isCon ? {} : containerSeed;
|
|
|
|
|
|
- if (isRepeating)
|
|
|
+ if (isRepeatingContainer(val))
|
|
|
{
|
|
|
|
|
|
const baseObjWithAllKeys = getRCBaseObjectWithAllKeys(metaFoG, val, createFromExtra);
|
|
@@ -102,9 +101,10 @@ const combineExtraMeta = (metaG, extraMeta, createFromExtra = false, containerSe
|
|
|
val['seed'] || containerSeed
|
|
|
);
|
|
|
}
|
|
|
- else
|
|
|
+ else
|
|
|
{
|
|
|
|
|
|
+
|
|
|
const extra = isCon ?
|
|
|
{
|
|
|
...val,
|
|
@@ -116,7 +116,31 @@ const combineExtraMeta = (metaG, extraMeta, createFromExtra = false, containerSe
|
|
|
)
|
|
|
}
|
|
|
:
|
|
|
- val;
|
|
|
+ isRepeatingField(val) ? [ val, val, val ] : val;
|
|
|
+ */
|
|
|
+ let extra: StringMap<any>;
|
|
|
+ if (isCon) {
|
|
|
+ extra = {
|
|
|
+ ...val,
|
|
|
+ meta: combineExtraMeta(
|
|
|
+ metaFoG.meta || {},
|
|
|
+ val['meta'],
|
|
|
+ createFromExtra,
|
|
|
+ val['seed'] || containerSeed
|
|
|
+ )
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ if (isRepeatingField(val)) {
|
|
|
+ extra = {
|
|
|
+ ...val,
|
|
|
+ meta: [ val, val, val ]
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ extra = val;
|
|
|
+ }
|
|
|
+ }
|
|
|
combinedMeta[key] = combineMetaForField(metaFoG, seed, extra);
|
|
|
}
|
|
|
}
|
|
@@ -664,6 +688,10 @@ const undefinedNullOrScalar = val => {
|
|
|
|
|
|
const addProp = (obj, key, val) => { obj[key] = val; return obj; };
|
|
|
|
|
|
+
|
|
|
+
|
|
|
+const isRepeatingField = (metaF): boolean => metaF.minRepeat || metaF.maxRepeat || metaF.initialRepeat;
|
|
|
+
|
|
|
|
|
|
|
|
|
const isGroup = (metaFoG): boolean => !!metaFoG.meta;
|