UNPKG

@webdev-tools/ng-nested-reactive-forms

Version:
72 lines 10.5 kB
import { Injectable } from '@angular/core'; export class NrfModelSetterService { constructor() { this.getTargetPropToSet = (obj, key, i, pathPieces) => { let nextKey = pathPieces[i + 1]; const isLast = nextKey == null; nextKey = nextKey || pathPieces['finalKey']; const isArrayKey = this.isArrayKey(nextKey); let prop = obj[key]; if (!prop) { prop = isArrayKey ? [] : {}; obj[key] = prop; } else if (isLast) { prop = isArrayKey ? [...prop] : Object.assign({}, prop); obj[key] = prop; } return prop; }; } getValue(path, model, separator = '.') { if (path == null || !model) { return null; } try { const pathPieces = this.generatePathPieces(path, separator); return pathPieces.reduce(this.piecesReducer, model) || null; } catch (err) { return null; } } piecesReducer(obj, key) { return key === '' ? obj.slice(-1)[0] : obj[key]; } setValue(path, value, model, separator = '.') { if (!(path && model)) { return null; } try { const pathPieces = this.generatePathPieces(path, separator); const finalKey = pathPieces.pop(); (((pathPieces)))['finalKey'] = finalKey; const targetProp = pathPieces.reduce(this.getTargetPropToSet, model) || null; if (finalKey === '') { targetProp.push(value); } else { targetProp[finalKey] = value; } } catch (err) { console.error('NestedProps setValue error: ', err); } } isArrayKey(key) { return key === '' || !isNaN(parseInt(key, 10)); } generatePathPieces(path, separator) { return path .replace('[', separator) .replace(']', '') .split(separator); } } NrfModelSetterService.decorators = [ { type: Injectable } ]; if (false) { NrfModelSetterService.prototype.getTargetPropToSet; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWwtc2V0dGVyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ad2ViZGV2LXRvb2xzL25nLW5lc3RlZC1yZWFjdGl2ZS1mb3Jtcy8iLCJzb3VyY2VzIjpbImxpYi9uZXN0ZWQtY29udHJvbC9zZXJ2aWNlcy9tb2RlbC1zZXR0ZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBVTNDLE1BQU0sT0FBTyxxQkFBcUI7SUFEbEM7UUF1RlUsdUJBQWtCLEdBQUcsQ0FBQyxHQUFRLEVBQUUsR0FBVyxFQUFFLENBQVMsRUFBRSxVQUFlLEVBQWUsRUFBRTtnQkFDMUYsT0FBTyxHQUFHLFVBQVUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2tCQUN6QixNQUFNLEdBQUcsT0FBTyxJQUFJLElBQUk7WUFFOUIsT0FBTyxHQUFHLE9BQU8sSUFBSSxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUM7a0JBRXRDLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQztnQkFDdkMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUM7WUFFbkIsSUFBSSxDQUFDLElBQUksRUFBRTtnQkFDVCxJQUFJLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDNUIsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQzthQUNqQjtpQkFBTSxJQUFJLE1BQU0sRUFBRTtnQkFDakIsSUFBSSxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsbUJBQU0sSUFBSSxDQUFFLENBQUM7Z0JBQzVDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7YUFDakI7WUFFRCxPQUFPLElBQUksQ0FBQztRQUNkLENBQUMsQ0FBQztJQW1CSixDQUFDO0lBdEdDLFFBQVEsQ0FBQyxJQUFZLEVBQUUsS0FBa0IsRUFBRSxTQUFTLEdBQUcsR0FBRztRQUN4RCxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDMUIsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUVELElBQUk7a0JBQ0ksVUFBVSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDO1lBQzNELE9BQU8sVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQztTQUM3RDtRQUFDLE9BQU8sR0FBRyxFQUFFO1lBQ1osT0FBTyxJQUFJLENBQUM7U0FDYjtJQUNILENBQUM7SUFTTyxhQUFhLENBQUMsR0FBZ0IsRUFBRSxHQUFXO1FBQ2pELE9BQU8sR0FBRyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQWdCRCxRQUFRLENBQUMsSUFBWSxFQUFFLEtBQVUsRUFBRSxLQUFxQixFQUFFLFNBQVMsR0FBRyxHQUFHO1FBRXZFLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxLQUFLLENBQUMsRUFBRTtZQUNwQixPQUFPLElBQUksQ0FBQztTQUNiO1FBRUQsSUFBSTtrQkFDSSxVQUFVLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksRUFBRSxTQUFTLENBQUM7a0JBQ3JELFFBQVEsR0FBRyxVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2pDLENBQUMsRUFBSyxVQUFVLEVBQUEsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLFFBQVEsQ0FBQztrQkFFbkMsVUFBVSxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLEtBQUssQ0FBQyxJQUFJLElBQUk7WUFFNUUsSUFBSSxRQUFRLEtBQUssRUFBRSxFQUFFO2dCQUNuQixVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQ3hCO2lCQUFNO2dCQUNMLFVBQVUsQ0FBQyxRQUFRLENBQUMsR0FBRyxLQUFLLENBQUM7YUFDOUI7U0FDRjtRQUFDLE9BQU8sR0FBRyxFQUFFO1lBQ1osT0FBTyxDQUFDLEtBQUssQ0FBQyw4QkFBOEIsRUFBRSxHQUFHLENBQUMsQ0FBQztTQUNwRDtJQUNILENBQUM7SUE4Qk8sVUFBVSxDQUFDLEdBQVc7UUFDNUIsT0FBTyxHQUFHLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBS08sa0JBQWtCLENBQUMsSUFBWSxFQUFFLFNBQWlCO1FBQ3hELE9BQU8sSUFBSTthQUNSLE9BQU8sQ0FBQyxHQUFHLEVBQUUsU0FBUyxDQUFDO2FBQ3ZCLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDO2FBQ2hCLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUN0QixDQUFDOzs7WUEzSEYsVUFBVTs7O0lBdUZULG1EQWtCRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuLyogdHNsaW50OmRpc2FibGUgdGVyLXBhZGRlZC1ibG9ja3MgKi9cblxuLyoqXG4gKiBDbGFzcyB0byBhYnN0cmFjdCBnZXQgYW5kIHNldCB2YWx1ZXMgZnJvbSBhbiBvYmplY3Qgb3IgYW4gYXJyYXlcbiAqIHVzaW5nIGRvdC1ub3RhdGlvbiBzdHJpbmcgYXMgdGhlIHBhdGggdG8gdGhlIHByb3BlcnR5XG4gKlxuICovXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgTnJmTW9kZWxTZXR0ZXJTZXJ2aWNlIHtcbiAgLyoqXG4gICAqIEdldCBhIHZhbHVlIHVzaW5nIGEgZG90LW5vdGF0aW9uIHN0cmluZyB0byBmaW5kIHRoZSBuZXN0ZWQgcHJvcGVydHlcbiAgICpcbiAgICogQHBhcmFtIHBhdGggRG90IG5vdGF0aW9uIG9mIHRoZSB2YWx1ZSB0byBiZSBnZXRcbiAgICogQHBhcmFtIG1vZGVsIEFuIG9iamVjdCBvciBhbiBBcnJheVxuICAgKiBAcGFyYW0gc2VwYXJhdG9yIEFuIG9wdGlvbmFsIHBhcmFtIHRvIHNwZWNpZnkgYSBkaWZmZXJlbnQgc2VwYXJhdG9yLCBkZWZhdWx0ICcuJ1xuICAgKlxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGNvbnN0IG5yZkVudGl0eSA9IHtcbiAgICogICAgdXNlcjoge1xuICAgKiAgICAgICAgbmFtZTogJ0pvaG4gRG9lJ1xuICAgKiAgICB9XG4gICAqIH07XG4gICAqIG5lc3RlZFByb3BzLmdldFZhbHVlKCd1c2VyLm5hbWUnLCBucmZFbnRpdHkpO1xuICAgKiAvLyA9PiAnSm9obiBEb2UnXG4gICAqXG4gICAqIG5lc3RlZFByb3BzLmdldFZhbHVlKCd1c2VyLmVtYWlsJywgbnJmRW50aXR5KTtcbiAgICogLy8gPT4gbnVsbFxuICAgKiBgYGBcbiAgICovXG4gIGdldFZhbHVlKHBhdGg6IHN0cmluZywgbW9kZWw6IGFueSB8IGFueVtdLCBzZXBhcmF0b3IgPSAnLicpOiBhbnkgfCBudWxsIHtcbiAgICBpZiAocGF0aCA9PSBudWxsIHx8ICFtb2RlbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBhdGhQaWVjZXMgPSB0aGlzLmdlbmVyYXRlUGF0aFBpZWNlcyhwYXRoLCBzZXBhcmF0b3IpO1xuICAgICAgcmV0dXJuIHBhdGhQaWVjZXMucmVkdWNlKHRoaXMucGllY2VzUmVkdWNlciwgbW9kZWwpIHx8IG51bGw7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKlxuICAgKiBSZXR1cm4gdGhlIHZhbHVlIGFzc29jaWF0ZWQgdG8gdGhlIGdpdmVuIGtleS5cbiAgICpcbiAgICogSWYgdGhlIGtleSBpcyBlbXB0eSwgdGhlIGxhc3QgZWxlbWVudCBvZiBhbiBhcnJheSBpcyByZXR1cm5lZFxuICAgKi9cbiAgcHJpdmF0ZSBwaWVjZXNSZWR1Y2VyKG9iajogYW55W10gfCBhbnksIGtleTogc3RyaW5nKTogYW55IHwgYW55W10ge1xuICAgIHJldHVybiBrZXkgPT09ICcnID8gb2JqLnNsaWNlKC0xKVswXSA6IG9ialtrZXldO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCBhIHZhbHVlIHVzaW5nIGEgZG90LW5vdGF0aW9uIHN0cmluZy5cbiAgICpcbiAgICogSWYgdGhlIHByb3BlcnR5IGRvZXMgbm90IGV4aXN0cywgdGhlIGVudGlyZSBwYXRoIHdpbGwgYmUgY3JlYXRlZC5cbiAgICpcbiAgICogQHBhcmFtIHBhdGggRG90IG5vdGF0aW9uIG9mIHRoZSB2YWx1ZSB0byBiZSBnZXRcbiAgICogQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZSB0byBiZSBzZXRcbiAgICogQHBhcmFtIG1vZGVsIEFuIG9iamVjdCBvciBhbiBBcnJheVxuICAgKiBAcGFyYW0gc2VwYXJhdG9yIEFuIG9wdGlvbmFsIHBhcmFtIHRvIHNwZWNpZnkgYSBkaWZmZXJlbnQgc2VwYXJhdG9yLCBkZWZhdWx0ICcuJ1xuICAgKlxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIG5lc3RlZFByb3BzLnNldFZhbHVlKCd1c2VyLmFnZScsIDM1LCB7IHVzZXI6IHsgbmFtZTogJ0pvaG4gRG9lJyB9IH0pO1xuICAgKiBgYGBcbiAgICovXG4gIHNldFZhbHVlKHBhdGg6IHN0cmluZywgdmFsdWU6IGFueSwgbW9kZWw6IG9iamVjdCB8IGFueVtdLCBzZXBhcmF0b3IgPSAnLicpOiB2b2lkIHtcbiAgICAvLyBUT0RPIHJlbW92ZSB0aGUgZW1wdHkga2V5IGZlYXR1cmUsIGZvcmNlIHVzZXJzIHRvIGRlZmluZSB0aGUgZGVzaXJlZCBhcnJheSBrZXlcbiAgICBpZiAoIShwYXRoICYmIG1vZGVsKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBhdGhQaWVjZXMgPSB0aGlzLmdlbmVyYXRlUGF0aFBpZWNlcyhwYXRoLCBzZXBhcmF0b3IpO1xuICAgICAgY29uc3QgZmluYWxLZXkgPSBwYXRoUGllY2VzLnBvcCgpO1xuICAgICAgKDxhbnk+cGF0aFBpZWNlcylbJ2ZpbmFsS2V5J10gPSBmaW5hbEtleTtcblxuICAgICAgY29uc3QgdGFyZ2V0UHJvcCA9IHBhdGhQaWVjZXMucmVkdWNlKHRoaXMuZ2V0VGFyZ2V0UHJvcFRvU2V0LCBtb2RlbCkgfHwgbnVsbDtcblxuICAgICAgaWYgKGZpbmFsS2V5ID09PSAnJykge1xuICAgICAgICB0YXJnZXRQcm9wLnB1c2godmFsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGFyZ2V0UHJvcFtmaW5hbEtleV0gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ05lc3RlZFByb3BzIHNldFZhbHVlIGVycm9yOiAnLCBlcnIpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGZpbmFsIHByb3BlcnR5IG9mIHRoZSBkb3Qgbm90YXRpb24gcGF0aC5cbiAgICogVGhpcyB3aWxsIGJlIHRoZSBwcm9wZXJ0eSB0aGF0IHdpbGwgcmVjZWl2ZSB0aGUgbmV3IHZhbHVlXG4gICAqL1xuICBwcml2YXRlIGdldFRhcmdldFByb3BUb1NldCA9IChvYmo6IGFueSwga2V5OiBzdHJpbmcsIGk6IG51bWJlciwgcGF0aFBpZWNlczogYW55KTogYW55W10gfCBhbnkgPT4ge1xuICAgIGxldCBuZXh0S2V5ID0gcGF0aFBpZWNlc1tpICsgMV07XG4gICAgY29uc3QgaXNMYXN0ID0gbmV4dEtleSA9PSBudWxsO1xuXG4gICAgbmV4dEtleSA9IG5leHRLZXkgfHwgcGF0aFBpZWNlc1snZmluYWxLZXknXTtcblxuICAgIGNvbnN0IGlzQXJyYXlLZXkgPSB0aGlzLmlzQXJyYXlLZXkobmV4dEtleSk7XG4gICAgbGV0IHByb3AgPSBvYmpba2V5XTtcblxuICAgIGlmICghcHJvcCkge1xuICAgICAgcHJvcCA9IGlzQXJyYXlLZXkgPyBbXSA6IHt9O1xuICAgICAgb2JqW2tleV0gPSBwcm9wO1xuICAgIH0gZWxzZSBpZiAoaXNMYXN0KSB7XG4gICAgICBwcm9wID0gaXNBcnJheUtleSA/IFsuLi5wcm9wXSA6IHsgLi4ucHJvcCB9O1xuICAgICAgb2JqW2tleV0gPSBwcm9wO1xuICAgIH1cblxuICAgIHJldHVybiBwcm9wO1xuICB9O1xuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqIEludGVybmFsIGZ1bmN0aW9uIHRvIGRlZmluZSBpZiBhIGdpdmVuIGtleSBpcyBmb3IgYW4gYXJyYXkgb3IgYW4gb2JqZWN0XG4gICAqL1xuICBwcml2YXRlIGlzQXJyYXlLZXkoa2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4ga2V5ID09PSAnJyB8fCAhaXNOYU4ocGFyc2VJbnQoa2V5LCAxMCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIHRoZSBkb3Qtbm90YXRpb24gcGF0aCBhcyBhbiBBcnJheSB0byBpdGVyYXRlIG92ZXIuXG4gICAqL1xuICBwcml2YXRlIGdlbmVyYXRlUGF0aFBpZWNlcyhwYXRoOiBzdHJpbmcsIHNlcGFyYXRvcjogc3RyaW5nKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBwYXRoXG4gICAgICAucmVwbGFjZSgnWycsIHNlcGFyYXRvcilcbiAgICAgIC5yZXBsYWNlKCddJywgJycpXG4gICAgICAuc3BsaXQoc2VwYXJhdG9yKTtcbiAgfVxufVxuIl19