Bläddra i källkod

Handling repeating groups - now looking promising

Richard Knight 6 år sedan
förälder
incheckning
20d21cb5dc
1 ändrade filer med 10 tillägg och 16 borttagningar
  1. 10 16
      src/app/dynaform/services/_formdata-utils.ts

+ 10 - 16
src/app/dynaform/services/_formdata-utils.ts

@@ -42,13 +42,18 @@ const keyValPairToMetaRecursive = ( [key, val] ) => {
 	return [key, metaVal];
 };
 
-// Here, if array member is an object, generate autoMeta for the object members 
-
+/*
 const arrayMemberAutoName = (val, i) => {
 	isScalar(val) ? val : val.__typename || val.constructor.name;
 }
+*/
 const arrayToMeta = array => array.map((val, i) => {
-	return { name: arrayMemberAutoName(val, i), 'value' : val };
+	const name = (i + 1).toString();
+	if (isScalar(val)) {
+		return { name, 'value' : val };
+	} else {
+		return { name, meta: autoMeta(val) };
+	}
 });
 
 const autoMeta = model => Object.entries(model)
@@ -63,10 +68,6 @@ const autoMeta = model => Object.entries(model)
 
 // containerSeed = Metadata from container which seeds all contained fields
 
-
-
-
-
 const combineMetaForField = (metaF, containerSeed, extraMetaF) => ({ ...metaF, ...containerSeed, ...extraMetaF });
 const combineExtraMeta = (metaG, extraMeta, createFromExtra = false, containerSeed = {}) => {
 	const combinedMeta = {};
@@ -77,10 +78,8 @@ const combineExtraMeta = (metaG, extraMeta, createFromExtra = false, containerSe
 			const metaFoG = metaG[key] || {};
 			const seed = isCon ? {} : containerSeed; // Container's don't seed themselves, only their children
 			
-
-			// OK, so we need to... expand repeating containers here
+			// Have we got a repeating container?
 			if (isRepeating) {
-				
 				const repeatInAutoMeta = Array.isArray(metaFoG.meta) ? metaFoG.meta.length : 0;
 				const repeatInExtraMeta = val['initialRepeat'] || val['minRepeat'];
 				const repeat = Math.max(repeatInAutoMeta, repeatInExtraMeta);
@@ -91,14 +90,11 @@ const combineExtraMeta = (metaG, extraMeta, createFromExtra = false, containerSe
 					[ ...metaFoG.meta, ...Array(repeat - repeatInAutoMeta).fill(metaFoG.meta[0]) ] // RETHING DEFAULT HERE - its first val from data repeated
 					:
 					Array(repeat).fill({});
-					console.log('repeatingGroup is', repeatingGroup);
-
+				console.log('repeatingGroup is', repeatingGroup);
 				combinedMeta[key] = repeatingGroup.map(metaG => combineExtraMeta(metaG, val['meta'][0], createFromExtra, val['seed']));
 				console.log('combinedMeta is', combinedMeta[key]);
 			}
-			
 			else
-
 			{
 				const extra = isCon ?
 					{
@@ -114,8 +110,6 @@ const combineExtraMeta = (metaG, extraMeta, createFromExtra = false, containerSe
 					val;
 				combinedMeta[key] = combineMetaForField(metaFoG, seed, extra);
 			}
-
-			
 		}
 	});
 	return { ...metaG, ...combinedMeta };