@webdev-tools/ng-nested-reactive-forms
Version:
Implement Nested FormControl for Angular Reactive Forms.
41 lines • 6.35 kB
JavaScript
import { Injectable } from '@angular/core';
import { FormArray, FormControl, FormGroup } from '@angular/forms';
var NrfFormHierarchyService = (function () {
function NrfFormHierarchyService() {
}
NrfFormHierarchyService.prototype.getNestedControl = function (rootFormGroup, fullPath) {
var parentControl = ((rootFormGroup.get(fullPath)));
if (!parentControl) {
var pathPieces = Array.isArray(fullPath) ? fullPath : fullPath.split('.');
parentControl = pathPieces.reduce(this.createFormGroupHierarchy, rootFormGroup);
}
if (parentControl instanceof FormControl) {
parentControl = parentControl.parent;
}
return parentControl;
};
NrfFormHierarchyService.prototype.createFormGroupHierarchy = function (parentControl, path, index, pathPieces) {
if (index === pathPieces.length - 1) {
return parentControl;
}
var control = ((parentControl.get(path)));
if (!control) {
var nextPath = pathPieces[index + 1] || path;
var isArray = nextPath && !isNaN(((nextPath)));
control = isArray ? new FormArray([]) : new FormGroup({});
}
if (parentControl instanceof FormGroup) {
parentControl.addControl(path, control);
}
else if (parentControl instanceof FormArray) {
parentControl.insert(parseInt(path, 10) || 0, control);
}
return control;
};
NrfFormHierarchyService.decorators = [
{ type: Injectable }
];
return NrfFormHierarchyService;
}());
export { NrfFormHierarchyService };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1oaWVyYXJjaHkuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0B3ZWJkZXYtdG9vbHMvbmctbmVzdGVkLXJlYWN0aXZlLWZvcm1zLyIsInNvdXJjZXMiOlsibGliL25lc3RlZC1jb250cm9sL3NlcnZpY2VzL2Zvcm0taGllcmFyY2h5LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUluRTtJQUFBO0lBdURBLENBQUM7SUE3Q0Msa0RBQWdCLEdBQWhCLFVBQWlCLGFBQW9DLEVBQUUsUUFBMkI7WUFDNUUsYUFBYSxHQUFHLEVBQXVCLGFBQWEsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUE7UUFFdEUsSUFBSSxDQUFDLGFBQWEsRUFBRTtnQkFDWixVQUFVLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQztZQUMzRSxhQUFhLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBd0IsSUFBSSxDQUFDLHdCQUF3QixFQUFFLGFBQWEsQ0FBQyxDQUFDO1NBQ3hHO1FBRUQsSUFBSSxhQUFhLFlBQVksV0FBVyxFQUFFO1lBQ3hDLGFBQWEsR0FBRyxhQUFhLENBQUMsTUFBTSxDQUFDO1NBQ3RDO1FBRUQsT0FBTyxhQUFhLENBQUM7SUFDdkIsQ0FBQztJQUtPLDBEQUF3QixHQUFoQyxVQUNFLGFBQW9DLEVBQ3BDLElBQVksRUFDWixLQUFhLEVBQ2IsVUFBb0I7UUFFcEIsSUFBSSxLQUFLLEtBQUssVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDbkMsT0FBTyxhQUFhLENBQUM7U0FDdEI7WUFFRyxPQUFPLEdBQUcsRUFBdUIsYUFBYSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBQTtRQUU1RCxJQUFJLENBQUMsT0FBTyxFQUFFO2dCQUNOLFFBQVEsR0FBRyxVQUFVLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUk7Z0JBRXhDLE9BQU8sR0FBRyxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBSyxRQUFRLEVBQUEsQ0FBQztZQUNqRCxPQUFPLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDM0Q7UUFFRCxJQUFJLGFBQWEsWUFBWSxTQUFTLEVBQUU7WUFDdEMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7U0FDekM7YUFBTSxJQUFJLGFBQWEsWUFBWSxTQUFTLEVBQUU7WUFDN0MsYUFBYSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztTQUN4RDtRQUVELE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7O2dCQXRERixVQUFVOztJQXVEWCw4QkFBQztDQUFBLEFBdkRELElBdURDO1NBbkRZLHVCQUF1QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1BcnJheSwgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuLyogdHNsaW50OmRpc2FibGUgdGVyLXBhZGRlZC1ibG9ja3MgKi9cblxuQEluamVjdGFibGUoKVxuLyoqXG4gKiBDb250cm9scyB0aGUgSGllcmFyY2h5IG9mIEZvcm1Hcm91cHMgYW5kIEZvcm1BcnJheXNcbiAqL1xuZXhwb3J0IGNsYXNzIE5yZkZvcm1IaWVyYXJjaHlTZXJ2aWNlIHtcbiAgLyoqXG4gICAqIEdldCBhIG5lc3RlZCBjb250cm9sIGlmIGl0IGV4aXN0cyBvciBjcmVhdGUgdGhlIGl0cyBuZWNlc3NhcnkgaGllcmFyY2h5XG4gICAqXG4gICAqIEBwYXJhbSBmdWxsUGF0aCBEb3Qgbm90YXRpb24gcGF0aCBvZiB0aGUgZGVzaXJlZCBjb250cm9sLCBpbmNsdWRpbmcgdGhlIGxhc3QgcGFydCwgdGhhdCBpcyB0aGUgdmFsdWUsIG5vdCB0aGUgZ3JvdXAuXG4gICAqL1xuICBnZXROZXN0ZWRDb250cm9sKHJvb3RGb3JtR3JvdXA6IEZvcm1Hcm91cCB8IEZvcm1BcnJheSwgZnVsbFBhdGg6IHN0cmluZyB8IHN0cmluZ1tdKTogRm9ybUdyb3VwIHwgRm9ybUFycmF5IHtcbiAgICBsZXQgcGFyZW50Q29udHJvbCA9IDxGb3JtR3JvdXAgfCBGb3JtQXJyYXk+cm9vdEZvcm1Hcm91cC5nZXQoZnVsbFBhdGgpO1xuXG4gICAgaWYgKCFwYXJlbnRDb250cm9sKSB7XG4gICAgICBjb25zdCBwYXRoUGllY2VzID0gQXJyYXkuaXNBcnJheShmdWxsUGF0aCkgPyBmdWxsUGF0aCA6IGZ1bGxQYXRoLnNwbGl0KCcuJyk7XG4gICAgICBwYXJlbnRDb250cm9sID0gcGF0aFBpZWNlcy5yZWR1Y2U8Rm9ybUdyb3VwIHwgRm9ybUFycmF5Pih0aGlzLmNyZWF0ZUZvcm1Hcm91cEhpZXJhcmNoeSwgcm9vdEZvcm1Hcm91cCk7XG4gICAgfVxuXG4gICAgaWYgKHBhcmVudENvbnRyb2wgaW5zdGFuY2VvZiBGb3JtQ29udHJvbCkge1xuICAgICAgcGFyZW50Q29udHJvbCA9IHBhcmVudENvbnRyb2wucGFyZW50O1xuICAgIH1cblxuICAgIHJldHVybiBwYXJlbnRDb250cm9sO1xuICB9XG5cbiAgLyoqXG4gICAqIEl0ZXJhdGUgb3ZlciBhbGwgcGF0aCBwaWVjZXMgY3JlYXRpbmcgdGhlIG5lZWRlZCBjb250cm9scyBpZiB0aGV5IGRvIG5vdCBleGlzdHMuXG4gICAqL1xuICBwcml2YXRlIGNyZWF0ZUZvcm1Hcm91cEhpZXJhcmNoeShcbiAgICBwYXJlbnRDb250cm9sOiBGb3JtR3JvdXAgfCBGb3JtQXJyYXksXG4gICAgcGF0aDogc3RyaW5nLFxuICAgIGluZGV4OiBudW1iZXIsXG4gICAgcGF0aFBpZWNlczogc3RyaW5nW10sXG4gICk6IEZvcm1Hcm91cCB8IEZvcm1BcnJheSB7XG4gICAgaWYgKGluZGV4ID09PSBwYXRoUGllY2VzLmxlbmd0aCAtIDEpIHtcbiAgICAgIHJldHVybiBwYXJlbnRDb250cm9sO1xuICAgIH1cblxuICAgIGxldCBjb250cm9sID0gPEZvcm1Hcm91cCB8IEZvcm1BcnJheT5wYXJlbnRDb250cm9sLmdldChwYXRoKTtcblxuICAgIGlmICghY29udHJvbCkge1xuICAgICAgY29uc3QgbmV4dFBhdGggPSBwYXRoUGllY2VzW2luZGV4ICsgMV0gfHwgcGF0aDtcblxuICAgICAgY29uc3QgaXNBcnJheSA9IG5leHRQYXRoICYmICFpc05hTig8YW55Pm5leHRQYXRoKTtcbiAgICAgIGNvbnRyb2wgPSBpc0FycmF5ID8gbmV3IEZvcm1BcnJheShbXSkgOiBuZXcgRm9ybUdyb3VwKHt9KTtcbiAgICB9XG5cbiAgICBpZiAocGFyZW50Q29udHJvbCBpbnN0YW5jZW9mIEZvcm1Hcm91cCkge1xuICAgICAgcGFyZW50Q29udHJvbC5hZGRDb250cm9sKHBhdGgsIGNvbnRyb2wpO1xuICAgIH0gZWxzZSBpZiAocGFyZW50Q29udHJvbCBpbnN0YW5jZW9mIEZvcm1BcnJheSkge1xuICAgICAgcGFyZW50Q29udHJvbC5pbnNlcnQocGFyc2VJbnQocGF0aCwgMTApIHx8IDAsIGNvbnRyb2wpO1xuICAgIH1cblxuICAgIHJldHVybiBjb250cm9sO1xuICB9XG59XG4iXX0=