@webdev-tools/ng-nested-reactive-forms
Version:
Implement Nested FormControl for Angular Reactive Forms.
78 lines • 11.1 kB
JavaScript
import * as tslib_1 from "tslib";
import { Injectable } from '@angular/core';
var NrfModelSetterService = (function () {
function NrfModelSetterService() {
var _this = this;
this.getTargetPropToSet = function (obj, key, i, pathPieces) {
var nextKey = pathPieces[i + 1];
var isLast = nextKey == null;
nextKey = nextKey || pathPieces['finalKey'];
var isArrayKey = _this.isArrayKey(nextKey);
var prop = obj[key];
if (!prop) {
prop = isArrayKey ? [] : {};
obj[key] = prop;
}
else if (isLast) {
prop = isArrayKey ? tslib_1.__spread(prop) : tslib_1.__assign({}, prop);
obj[key] = prop;
}
return prop;
};
}
NrfModelSetterService.prototype.getValue = function (path, model, separator) {
if (separator === void 0) { separator = '.'; }
if (path == null || !model) {
return null;
}
try {
var pathPieces = this.generatePathPieces(path, separator);
return pathPieces.reduce(this.piecesReducer, model) || null;
}
catch (err) {
return null;
}
};
NrfModelSetterService.prototype.piecesReducer = function (obj, key) {
return key === '' ? obj.slice(-1)[0] : obj[key];
};
NrfModelSetterService.prototype.setValue = function (path, value, model, separator) {
if (separator === void 0) { separator = '.'; }
if (!(path && model)) {
return null;
}
try {
var pathPieces = this.generatePathPieces(path, separator);
var finalKey = pathPieces.pop();
(((pathPieces)))['finalKey'] = finalKey;
var targetProp = pathPieces.reduce(this.getTargetPropToSet, model) || null;
if (finalKey === '') {
targetProp.push(value);
}
else {
targetProp[finalKey] = value;
}
}
catch (err) {
console.error('NestedProps setValue error: ', err);
}
};
NrfModelSetterService.prototype.isArrayKey = function (key) {
return key === '' || !isNaN(parseInt(key, 10));
};
NrfModelSetterService.prototype.generatePathPieces = function (path, separator) {
return path
.replace('[', separator)
.replace(']', '')
.split(separator);
};
NrfModelSetterService.decorators = [
{ type: Injectable }
];
return NrfModelSetterService;
}());
export { NrfModelSetterService };
if (false) {
NrfModelSetterService.prototype.getTargetPropToSet;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWwtc2V0dGVyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ad2ViZGV2LXRvb2xzL25nLW5lc3RlZC1yZWFjdGl2ZS1mb3Jtcy8iLCJzb3VyY2VzIjpbImxpYi9uZXN0ZWQtY29udHJvbC9zZXJ2aWNlcy9tb2RlbC1zZXR0ZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQVMzQztJQUFBO1FBQUEsaUJBNEhDO1FBckNTLHVCQUFrQixHQUFHLFVBQUMsR0FBUSxFQUFFLEdBQVcsRUFBRSxDQUFTLEVBQUUsVUFBZTtnQkFDekUsT0FBTyxHQUFHLFVBQVUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUN6QixNQUFNLEdBQUcsT0FBTyxJQUFJLElBQUk7WUFFOUIsT0FBTyxHQUFHLE9BQU8sSUFBSSxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUM7Z0JBRXRDLFVBQVUsR0FBRyxLQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQztnQkFDdkMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUM7WUFFbkIsSUFBSSxDQUFDLElBQUksRUFBRTtnQkFDVCxJQUFJLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDNUIsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQzthQUNqQjtpQkFBTSxJQUFJLE1BQU0sRUFBRTtnQkFDakIsSUFBSSxHQUFHLFVBQVUsQ0FBQyxDQUFDLGtCQUFLLElBQUksRUFBRSxDQUFDLHNCQUFNLElBQUksQ0FBRSxDQUFDO2dCQUM1QyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO2FBQ2pCO1lBRUQsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDLENBQUM7SUFtQkosQ0FBQztJQXRHQyx3Q0FBUSxHQUFSLFVBQVMsSUFBWSxFQUFFLEtBQWtCLEVBQUUsU0FBZTtRQUFmLDBCQUFBLEVBQUEsZUFBZTtRQUN4RCxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDMUIsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUVELElBQUk7Z0JBQ0ksVUFBVSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDO1lBQzNELE9BQU8sVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQztTQUM3RDtRQUFDLE9BQU8sR0FBRyxFQUFFO1lBQ1osT0FBTyxJQUFJLENBQUM7U0FDYjtJQUNILENBQUM7SUFTTyw2Q0FBYSxHQUFyQixVQUFzQixHQUFnQixFQUFFLEdBQVc7UUFDakQsT0FBTyxHQUFHLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBZ0JELHdDQUFRLEdBQVIsVUFBUyxJQUFZLEVBQUUsS0FBVSxFQUFFLEtBQXFCLEVBQUUsU0FBZTtRQUFmLDBCQUFBLEVBQUEsZUFBZTtRQUV2RSxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksS0FBSyxDQUFDLEVBQUU7WUFDcEIsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUVELElBQUk7Z0JBQ0ksVUFBVSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDO2dCQUNyRCxRQUFRLEdBQUcsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNqQyxDQUFDLEVBQUssVUFBVSxFQUFBLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxRQUFRLENBQUM7Z0JBRW5DLFVBQVUsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxLQUFLLENBQUMsSUFBSSxJQUFJO1lBRTVFLElBQUksUUFBUSxLQUFLLEVBQUUsRUFBRTtnQkFDbkIsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUN4QjtpQkFBTTtnQkFDTCxVQUFVLENBQUMsUUFBUSxDQUFDLEdBQUcsS0FBSyxDQUFDO2FBQzlCO1NBQ0Y7UUFBQyxPQUFPLEdBQUcsRUFBRTtZQUNaLE9BQU8sQ0FBQyxLQUFLLENBQUMsOEJBQThCLEVBQUUsR0FBRyxDQUFDLENBQUM7U0FDcEQ7SUFDSCxDQUFDO0lBOEJPLDBDQUFVLEdBQWxCLFVBQW1CLEdBQVc7UUFDNUIsT0FBTyxHQUFHLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBS08sa0RBQWtCLEdBQTFCLFVBQTJCLElBQVksRUFBRSxTQUFpQjtRQUN4RCxPQUFPLElBQUk7YUFDUixPQUFPLENBQUMsR0FBRyxFQUFFLFNBQVMsQ0FBQzthQUN2QixPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQzthQUNoQixLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDdEIsQ0FBQzs7Z0JBM0hGLFVBQVU7O0lBNEhYLDRCQUFDO0NBQUEsQUE1SEQsSUE0SEM7U0EzSFkscUJBQXFCOztJQXNGaEMsbURBa0JFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG4vKiB0c2xpbnQ6ZGlzYWJsZSB0ZXItcGFkZGVkLWJsb2NrcyAqL1xuXG4vKipcbiAqIENsYXNzIHRvIGFic3RyYWN0IGdldCBhbmQgc2V0IHZhbHVlcyBmcm9tIGFuIG9iamVjdCBvciBhbiBhcnJheVxuICogdXNpbmcgZG90LW5vdGF0aW9uIHN0cmluZyBhcyB0aGUgcGF0aCB0byB0aGUgcHJvcGVydHlcbiAqXG4gKi9cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBOcmZNb2RlbFNldHRlclNlcnZpY2Uge1xuICAvKipcbiAgICogR2V0IGEgdmFsdWUgdXNpbmcgYSBkb3Qtbm90YXRpb24gc3RyaW5nIHRvIGZpbmQgdGhlIG5lc3RlZCBwcm9wZXJ0eVxuICAgKlxuICAgKiBAcGFyYW0gcGF0aCBEb3Qgbm90YXRpb24gb2YgdGhlIHZhbHVlIHRvIGJlIGdldFxuICAgKiBAcGFyYW0gbW9kZWwgQW4gb2JqZWN0IG9yIGFuIEFycmF5XG4gICAqIEBwYXJhbSBzZXBhcmF0b3IgQW4gb3B0aW9uYWwgcGFyYW0gdG8gc3BlY2lmeSBhIGRpZmZlcmVudCBzZXBhcmF0b3IsIGRlZmF1bHQgJy4nXG4gICAqXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogY29uc3QgbnJmRW50aXR5ID0ge1xuICAgKiAgICB1c2VyOiB7XG4gICAqICAgICAgICBuYW1lOiAnSm9obiBEb2UnXG4gICAqICAgIH1cbiAgICogfTtcbiAgICogbmVzdGVkUHJvcHMuZ2V0VmFsdWUoJ3VzZXIubmFtZScsIG5yZkVudGl0eSk7XG4gICAqIC8vID0+ICdKb2huIERvZSdcbiAgICpcbiAgICogbmVzdGVkUHJvcHMuZ2V0VmFsdWUoJ3VzZXIuZW1haWwnLCBucmZFbnRpdHkpO1xuICAgKiAvLyA9PiBudWxsXG4gICAqIGBgYFxuICAgKi9cbiAgZ2V0VmFsdWUocGF0aDogc3RyaW5nLCBtb2RlbDogYW55IHwgYW55W10sIHNlcGFyYXRvciA9ICcuJyk6IGFueSB8IG51bGwge1xuICAgIGlmIChwYXRoID09IG51bGwgfHwgIW1vZGVsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgcGF0aFBpZWNlcyA9IHRoaXMuZ2VuZXJhdGVQYXRoUGllY2VzKHBhdGgsIHNlcGFyYXRvcik7XG4gICAgICByZXR1cm4gcGF0aFBpZWNlcy5yZWR1Y2UodGhpcy5waWVjZXNSZWR1Y2VyLCBtb2RlbCkgfHwgbnVsbDtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqXG4gICAqIFJldHVybiB0aGUgdmFsdWUgYXNzb2NpYXRlZCB0byB0aGUgZ2l2ZW4ga2V5LlxuICAgKlxuICAgKiBJZiB0aGUga2V5IGlzIGVtcHR5LCB0aGUgbGFzdCBlbGVtZW50IG9mIGFuIGFycmF5IGlzIHJldHVybmVkXG4gICAqL1xuICBwcml2YXRlIHBpZWNlc1JlZHVjZXIob2JqOiBhbnlbXSB8IGFueSwga2V5OiBzdHJpbmcpOiBhbnkgfCBhbnlbXSB7XG4gICAgcmV0dXJuIGtleSA9PT0gJycgPyBvYmouc2xpY2UoLTEpWzBdIDogb2JqW2tleV07XG4gIH1cblxuICAvKipcbiAgICogU2V0IGEgdmFsdWUgdXNpbmcgYSBkb3Qtbm90YXRpb24gc3RyaW5nLlxuICAgKlxuICAgKiBJZiB0aGUgcHJvcGVydHkgZG9lcyBub3QgZXhpc3RzLCB0aGUgZW50aXJlIHBhdGggd2lsbCBiZSBjcmVhdGVkLlxuICAgKlxuICAgKiBAcGFyYW0gcGF0aCBEb3Qgbm90YXRpb24gb2YgdGhlIHZhbHVlIHRvIGJlIGdldFxuICAgKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlIHRvIGJlIHNldFxuICAgKiBAcGFyYW0gbW9kZWwgQW4gb2JqZWN0IG9yIGFuIEFycmF5XG4gICAqIEBwYXJhbSBzZXBhcmF0b3IgQW4gb3B0aW9uYWwgcGFyYW0gdG8gc3BlY2lmeSBhIGRpZmZlcmVudCBzZXBhcmF0b3IsIGRlZmF1bHQgJy4nXG4gICAqXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogbmVzdGVkUHJvcHMuc2V0VmFsdWUoJ3VzZXIuYWdlJywgMzUsIHsgdXNlcjogeyBuYW1lOiAnSm9obiBEb2UnIH0gfSk7XG4gICAqIGBgYFxuICAgKi9cbiAgc2V0VmFsdWUocGF0aDogc3RyaW5nLCB2YWx1ZTogYW55LCBtb2RlbDogb2JqZWN0IHwgYW55W10sIHNlcGFyYXRvciA9ICcuJyk6IHZvaWQge1xuICAgIC8vIFRPRE8gcmVtb3ZlIHRoZSBlbXB0eSBrZXkgZmVhdHVyZSwgZm9yY2UgdXNlcnMgdG8gZGVmaW5lIHRoZSBkZXNpcmVkIGFycmF5IGtleVxuICAgIGlmICghKHBhdGggJiYgbW9kZWwpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgcGF0aFBpZWNlcyA9IHRoaXMuZ2VuZXJhdGVQYXRoUGllY2VzKHBhdGgsIHNlcGFyYXRvcik7XG4gICAgICBjb25zdCBmaW5hbEtleSA9IHBhdGhQaWVjZXMucG9wKCk7XG4gICAgICAoPGFueT5wYXRoUGllY2VzKVsnZmluYWxLZXknXSA9IGZpbmFsS2V5O1xuXG4gICAgICBjb25zdCB0YXJnZXRQcm9wID0gcGF0aFBpZWNlcy5yZWR1Y2UodGhpcy5nZXRUYXJnZXRQcm9wVG9TZXQsIG1vZGVsKSB8fCBudWxsO1xuXG4gICAgICBpZiAoZmluYWxLZXkgPT09ICcnKSB7XG4gICAgICAgIHRhcmdldFByb3AucHVzaCh2YWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0YXJnZXRQcm9wW2ZpbmFsS2V5XSA9IHZhbHVlO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY29uc29sZS5lcnJvcignTmVzdGVkUHJvcHMgc2V0VmFsdWUgZXJyb3I6ICcsIGVycik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgZmluYWwgcHJvcGVydHkgb2YgdGhlIGRvdCBub3RhdGlvbiBwYXRoLlxuICAgKiBUaGlzIHdpbGwgYmUgdGhlIHByb3BlcnR5IHRoYXQgd2lsbCByZWNlaXZlIHRoZSBuZXcgdmFsdWVcbiAgICovXG4gIHByaXZhdGUgZ2V0VGFyZ2V0UHJvcFRvU2V0ID0gKG9iajogYW55LCBrZXk6IHN0cmluZywgaTogbnVtYmVyLCBwYXRoUGllY2VzOiBhbnkpOiBhbnlbXSB8IGFueSA9PiB7XG4gICAgbGV0IG5leHRLZXkgPSBwYXRoUGllY2VzW2kgKyAxXTtcbiAgICBjb25zdCBpc0xhc3QgPSBuZXh0S2V5ID09IG51bGw7XG5cbiAgICBuZXh0S2V5ID0gbmV4dEtleSB8fCBwYXRoUGllY2VzWydmaW5hbEtleSddO1xuXG4gICAgY29uc3QgaXNBcnJheUtleSA9IHRoaXMuaXNBcnJheUtleShuZXh0S2V5KTtcbiAgICBsZXQgcHJvcCA9IG9ialtrZXldO1xuXG4gICAgaWYgKCFwcm9wKSB7XG4gICAgICBwcm9wID0gaXNBcnJheUtleSA/IFtdIDoge307XG4gICAgICBvYmpba2V5XSA9IHByb3A7XG4gICAgfSBlbHNlIGlmIChpc0xhc3QpIHtcbiAgICAgIHByb3AgPSBpc0FycmF5S2V5ID8gWy4uLnByb3BdIDogeyAuLi5wcm9wIH07XG4gICAgICBvYmpba2V5XSA9IHByb3A7XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb3A7XG4gIH07XG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICogSW50ZXJuYWwgZnVuY3Rpb24gdG8gZGVmaW5lIGlmIGEgZ2l2ZW4ga2V5IGlzIGZvciBhbiBhcnJheSBvciBhbiBvYmplY3RcbiAgICovXG4gIHByaXZhdGUgaXNBcnJheUtleShrZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBrZXkgPT09ICcnIHx8ICFpc05hTihwYXJzZUludChrZXksIDEwKSk7XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGUgdGhlIGRvdC1ub3RhdGlvbiBwYXRoIGFzIGFuIEFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAgICovXG4gIHByaXZhdGUgZ2VuZXJhdGVQYXRoUGllY2VzKHBhdGg6IHN0cmluZywgc2VwYXJhdG9yOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHBhdGhcbiAgICAgIC5yZXBsYWNlKCdbJywgc2VwYXJhdG9yKVxuICAgICAgLnJlcGxhY2UoJ10nLCAnJylcbiAgICAgIC5zcGxpdChzZXBhcmF0b3IpO1xuICB9XG59XG4iXX0=