Sfoglia il codice sorgente

Adding new Repeatingcontainer members - now working

Richard Knight 6 anni fa
parent
commit
12b84793da

+ 21 - 7
package-lock.json

@@ -4061,12 +4061,14 @@
         "balanced-match": {
           "version": "1.0.0",
           "bundled": true,
-          "dev": true
+          "dev": true,
+          "optional": true
         },
         "brace-expansion": {
           "version": "1.1.11",
           "bundled": true,
           "dev": true,
+          "optional": true,
           "requires": {
             "balanced-match": "^1.0.0",
             "concat-map": "0.0.1"
@@ -4081,17 +4083,20 @@
         "code-point-at": {
           "version": "1.1.0",
           "bundled": true,
-          "dev": true
+          "dev": true,
+          "optional": true
         },
         "concat-map": {
           "version": "0.0.1",
           "bundled": true,
-          "dev": true
+          "dev": true,
+          "optional": true
         },
         "console-control-strings": {
           "version": "1.1.0",
           "bundled": true,
-          "dev": true
+          "dev": true,
+          "optional": true
         },
         "core-util-is": {
           "version": "1.0.2",
@@ -4208,7 +4213,8 @@
         "inherits": {
           "version": "2.0.3",
           "bundled": true,
-          "dev": true
+          "dev": true,
+          "optional": true
         },
         "ini": {
           "version": "1.3.5",
@@ -4220,6 +4226,7 @@
           "version": "1.0.0",
           "bundled": true,
           "dev": true,
+          "optional": true,
           "requires": {
             "number-is-nan": "^1.0.0"
           }
@@ -4234,6 +4241,7 @@
           "version": "3.0.4",
           "bundled": true,
           "dev": true,
+          "optional": true,
           "requires": {
             "brace-expansion": "^1.1.7"
           }
@@ -4241,12 +4249,14 @@
         "minimist": {
           "version": "0.0.8",
           "bundled": true,
-          "dev": true
+          "dev": true,
+          "optional": true
         },
         "minipass": {
           "version": "2.3.5",
           "bundled": true,
           "dev": true,
+          "optional": true,
           "requires": {
             "safe-buffer": "^5.1.2",
             "yallist": "^3.0.0"
@@ -4265,6 +4275,7 @@
           "version": "0.5.1",
           "bundled": true,
           "dev": true,
+          "optional": true,
           "requires": {
             "minimist": "0.0.8"
           }
@@ -4345,7 +4356,8 @@
         "number-is-nan": {
           "version": "1.0.1",
           "bundled": true,
-          "dev": true
+          "dev": true,
+          "optional": true
         },
         "object-assign": {
           "version": "4.1.1",
@@ -4357,6 +4369,7 @@
           "version": "1.4.0",
           "bundled": true,
           "dev": true,
+          "optional": true,
           "requires": {
             "wrappy": "1"
           }
@@ -4478,6 +4491,7 @@
           "version": "1.0.2",
           "bundled": true,
           "dev": true,
+          "optional": true,
           "requires": {
             "code-point-at": "^1.0.0",
             "is-fullwidth-code-point": "^1.0.0",

+ 14 - 4
src/app/dynaform/dynaform.component.ts

@@ -1,7 +1,8 @@
 import { Component, Input, Output, EventEmitter, TemplateRef, Optional, OnInit, ChangeDetectionStrategy } from '@angular/core';
-import { FormControl, FormGroup, FormArray, FormGroupName, AbstractControl, ControlContainer } from '@angular/forms';
+import { FormBuilder, FormControl, FormGroup, FormArray, FormGroupName, AbstractControl, ControlContainer } from '@angular/forms';
 import { SuperForm } from 'angular-super-validator';
-import { unwrapResolvedMetadata } from '@angular/compiler';
+import { buildFormGroupFunctionFactory } from './services/_formdata-utils';
+import { cloneDeep } from 'lodash/fp';
 
 export interface DynarowContext {
 	control: AbstractControl;
@@ -180,10 +181,19 @@ export class DynaformComponent implements OnInit {
 		
 	}
 
+	// Maybe move the next two funtions to _formdata-utils.ts ?
 	addRCMember(repeatingContainerName: string): void {
+		// (1) Add metadata for new container member
 		const rcMeta = this.formMetaData[repeatingContainerName];
-		rcMeta.meta.push(rcMeta.__defaultContainer);
-		console.log(rcMeta);
+		const containerTemplate = cloneDeep(rcMeta.__containerTemplate);
+		const i = this.formMetaData[repeatingContainerName].meta.length;
+		containerTemplate.name = `group${i+1}`;
+		rcMeta.meta.push(containerTemplate);
+
+		// (2) Add FormGroup for new container member
+		const buildFormGroup = buildFormGroupFunctionFactory(new FormBuilder());
+		const newFormGroup = buildFormGroup(containerTemplate.meta);
+		(this.formGroup.get(repeatingContainerName) as FormArray).push(newFormGroup);
 	}
 
 	deleteRCMember(repeatingContainerName: string, index: number): void {

+ 4 - 4
src/app/dynaform/services/_formdata-utils.ts

@@ -95,7 +95,7 @@ const combineExtraMeta = (metaG, extraMeta, createFromExtra = false, containerSe
 				combinedMeta[key] = combineMetaForField(metaFoG, {}, extra);
 				
 				// Stash a 'conbtainer template' for adding extra containers to the repeating container
-				combinedMeta[key].__defaultContainer = combineExtraMeta(
+				combinedMeta[key].__containerTemplate = combineExtraMeta(
 					cloneDeep(baseObjWithAllKeys),
 					val['meta'][0],
 					false,
@@ -204,10 +204,10 @@ const buildFieldSpecificMetaInClosure = (metaG, context) => {
 			modeledGroupMember.meta = _buildFieldSpecificMeta(modeledGroupMember.meta);
 		} else if (isRepeatingContainer(metaFoG)) {
 			modeledGroupMember.meta = modeledGroupMember.meta.map(rcMem => ({ ...rcMem, meta: _buildFieldSpecificMeta(rcMem.meta) }));
-			modeledGroupMember.__defaultContainer = {
+			modeledGroupMember.__containerTemplate = {
 				...modeledGroupMember.meta[0],
-				meta: _buildFieldSpecificMeta(modeledGroupMember.__defaultContainer),
-				name: '__defaultContainer',
+				meta: _buildFieldSpecificMeta(modeledGroupMember.__containerTemplate),
+				name: '__containerTemplate',
 				button: ''
 			};
 		}