UNPKG

angular-typesafe-reactive-forms-helper

Version:
44 lines 9.22 kB
import { Injectable } from '@angular/core'; import { FormBuilder } from '@angular/forms'; import { getPropertyName } from './getPropertyName'; export const generateGetSafeFunction = (gr) => { return (propertyFunction) => { const getStr = getPropertyName(propertyFunction.toString()); const p = gr.get(getStr); return p; }; }; export const generateSetControlSafeFunction = (gr) => { return (propertyFunction, control) => { const getStr = getPropertyName(propertyFunction.toString()); gr.setControl(getStr, control); }; }; export const generateRemoveControlSafeFunction = (gr) => { return (propertyFunction) => { const getStr = getPropertyName(propertyFunction.toString()); gr.removeControl(getStr); }; }; // tslint:disable-next-line: max-classes-per-file export class FormBuilderTypeSafe extends FormBuilder { // override group to be type safe group(controlsConfig, options) { /* NOTE the return FormGroupTypeSafe<T> */ // instantiate group from angular type const gr = super.group(controlsConfig, options); if (gr) { // implement getSafe method gr.getSafe = generateGetSafeFunction(gr); // implement setControlSafe gr.setControlSafe = generateSetControlSafeFunction(gr); // implement removeControlSafe gr.removeControlSafe = generateRemoveControlSafeFunction(gr); } return gr; } } FormBuilderTypeSafe.decorators = [ { type: Injectable } ]; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhclR5cGVzYWZlUmVhY3RpdmVGb3Jtc0hlbHBlci5qcyIsInNvdXJjZVJvb3QiOiIvaG9tZS9ydW5uZXIvd29yay9hbmd1bGFyLXR5cGVzYWZlLXJlYWN0aXZlLWZvcm1zLWhlbHBlci9hbmd1bGFyLXR5cGVzYWZlLXJlYWN0aXZlLWZvcm1zLWhlbHBlci8iLCJzb3VyY2VzIjpbInNyYy9hbmd1bGFyVHlwZXNhZmVSZWFjdGl2ZUZvcm1zSGVscGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFtQixXQUFXLEVBQTZELE1BQU0sZ0JBQWdCLENBQUM7QUFFekgsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBeURwRCxNQUFNLENBQUMsTUFBTSx1QkFBdUIsR0FBRyxDQUFvQixFQUF3QixFQUFFLEVBQUU7SUFDckYsT0FBTyxDQUFDLGdCQUFxQyxFQUFtQixFQUFFO1FBQ2hFLE1BQU0sTUFBTSxHQUFHLGVBQWUsQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQzVELE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUF5QixDQUFDO1FBQ2pELE9BQU8sQ0FBQyxDQUFDO0lBQ1gsQ0FBQyxDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sOEJBQThCLEdBQUcsQ0FBb0IsRUFBd0IsRUFBRSxFQUFFO0lBQzVGLE9BQU8sQ0FBQyxnQkFBcUMsRUFBRSxPQUF3QixFQUFRLEVBQUU7UUFDL0UsTUFBTSxNQUFNLEdBQUcsZUFBZSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDNUQsRUFBRSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDakMsQ0FBQyxDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBR0YsTUFBTSxDQUFDLE1BQU0saUNBQWlDLEdBQUcsQ0FBb0IsRUFBd0IsRUFBRSxFQUFFO0lBQy9GLE9BQU8sQ0FBQyxnQkFBcUMsRUFBUSxFQUFFO1FBQ3JELE1BQU0sTUFBTSxHQUFHLGVBQWUsQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQzVELEVBQUUsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDM0IsQ0FBQyxDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBRUYsaURBQWlEO0FBRWpELE1BQU0sT0FBTyxtQkFBb0IsU0FBUSxXQUFXO0lBQ2xELGlDQUFpQztJQUMxQixLQUFLLENBQ1YsY0FBc0MsRUFDdEMsT0FFTTtRQUNOLDBDQUEwQztRQUUxQyxzQ0FBc0M7UUFDdEMsTUFBTSxFQUFFLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxjQUFjLEVBQUUsT0FBTyxDQUF5QixDQUFDO1FBRXhFLElBQUksRUFBRSxFQUFFO1lBQ04sMkJBQTJCO1lBQzNCLEVBQUUsQ0FBQyxPQUFPLEdBQUcsdUJBQXVCLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDekMsMkJBQTJCO1lBQzNCLEVBQUUsQ0FBQyxjQUFjLEdBQUcsOEJBQThCLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDdkQsOEJBQThCO1lBQzlCLEVBQUUsQ0FBQyxpQkFBaUIsR0FBRyxpQ0FBaUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztTQUM5RDtRQUVELE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQzs7O1lBdkJGLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIEZvcm1CdWlsZGVyLCBGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBBYnN0cmFjdENvbnRyb2xPcHRpb25zLCBGb3JtQXJyYXkgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBnZXRQcm9wZXJ0eU5hbWUgfSBmcm9tICcuL2dldFByb3BlcnR5TmFtZSc7XG5cbmV4cG9ydCB0eXBlIFJlY3Vyc2l2ZVBhcnRpYWw8VD4gPSB7XG4gIFtQIGluIGtleW9mIFRdPzogUmVjdXJzaXZlUGFydGlhbDxUW1BdPjtcbn07XG5cbmV4cG9ydCB0eXBlIEZvcm1Hcm91cENvbnRyb2xzT2Y8VD4gPSB7XG4gIFtQIGluIGtleW9mIFRdOiBGb3JtQ29udHJvbCB8IEZvcm1Hcm91cCB8IEZvcm1BcnJheTtcbn07XG5cbmV4cG9ydCB0eXBlIENvbnRyb2xTdGF0dXMgPSAnVkFMSUQnIHwgJ0lOVkFMSUQnIHwgJ1BFTkRJTkcnIHwgJ0RJU0FCTEVEJztcblxuZXhwb3J0IGludGVyZmFjZSBBYnN0cmFjdENvbnRyb2xUeXBlU2FmZTxUPiBleHRlbmRzIEFic3RyYWN0Q29udHJvbCB7XG4gIC8vIGNvbW1vbiBwcm9wZXJ0aWVzIHRvIEZvcm1Hcm91cCwgRm9ybUNvbnRyb2wgYW5kIEZvcm1BcnJheVxuICByZWFkb25seSB2YWx1ZTogVDtcbiAgcmVhZG9ubHkgdmFsdWVDaGFuZ2VzOiBPYnNlcnZhYmxlPFQ+O1xuXG4gIC8qXG4gICAgQW5ndWxhciBgZ2V0YCBzaWduYXR1cmU6XG4gICAgICBnZXQocGF0aDogQXJyYXk8c3RyaW5nIHwgbnVtYmVyPiB8IHN0cmluZyk6IEFic3RyYWN0Q29udHJvbCB8IG51bGw7XG4gICAgXG4gICAgICBzcGxpdCBpbnRvIHR3byBnZXQgbWV0aG9kc1xuICAqL1xuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IGFycmF5LXR5cGVcbiAgZ2V0KHBhdGg6IEFycmF5PHN0cmluZz4gfCBzdHJpbmcpOiBBYnN0cmFjdENvbnRyb2wgfCBudWxsOyBcbiAgZ2V0KHBhdGg6IG51bWJlcltdKTogQWJzdHJhY3RDb250cm9sVHlwZVNhZmU8VCBleHRlbmRzIChpbmZlciBSKVtdID8gUiA6IFQ+IHwgbnVsbDtcbiAgcmVhZG9ubHkgc3RhdHVzQ2hhbmdlczogT2JzZXJ2YWJsZTxDb250cm9sU3RhdHVzPjtcbn1cblxuLy8gdGhlIGlkZWEgaXMgdG8gdXNlIEFuZ3VsYXIncyBGb3JtR3JvdXAgZXhhY3RseSBhcyBpcyBidXQganVzdCBzcHJpbmtsZSBhIGJpdCBvZiB0eXBlLXNhZmV0eSBpbi1iZXR3ZWVuXG5leHBvcnQgaW50ZXJmYWNlIEZvcm1Hcm91cFR5cGVTYWZlPFQ+IGV4dGVuZHMgRm9ybUdyb3VwIHtcbiAgcmVhZG9ubHkgdmFsdWU6IFQ7XG4gIHJlYWRvbmx5IHZhbHVlQ2hhbmdlczogT2JzZXJ2YWJsZTxUPjtcblxuICAvKiAtLS0tLSBuZXcgZnVuY3Rpb25zIGFkZGVkIG5vdCBwYXJ0IG9mIEZvcm1Hcm91cCAgLS0tLS0gKi9cbiAgLy8gY3JlYXRlIGhlbHBlciBtZXRob2RzIHRvIGFjaGlldmUgdGhpcyBzeW50YXhcbiAgLy8gIGVnOiB0aGlzLmZvcm0uZ2V0U2FmZSh4ID0+IHguaGVyb05hbWUpLnBhdGNoVmFsdWUoJ0hlLU1hbicpXG4gIGdldFNhZmU8UD4ocHJvcGVydHlGdW5jdGlvbjogKHR5cGVWYWw6IFQpID0+IFApOiBBYnN0cmFjdENvbnRyb2xUeXBlU2FmZTxQPiB8IG51bGw7XG4gIC8vIGVnOiB0aGlzLmZvcm0uc2V0Q29udHJvbFNhZmUoeCA9PiB4Lm5hbWUsIG5ldyBGb3JtQ29udHJvbCgnSHVsaycpKTtcbiAgc2V0Q29udHJvbFNhZmUocHJvcGVydHlGdW5jdGlvbjogKHR5cGVWYWw6IFQpID0+IGFueSwgY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogdm9pZDtcbiAgcmVtb3ZlQ29udHJvbFNhZmUocHJvcGVydHlGdW5jdGlvbjogKHR5cGVWYWw6IFQpID0+IGFueSk6IHZvaWQ7XG4gIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cbiAgc2V0VmFsdWUodmFsdWU6IFQsIG9wdGlvbnM/OiB7IG9ubHlTZWxmPzogYm9vbGVhbjsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KTogdm9pZDtcblxuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6YmFuLXR5cGVzXG4gIHBhdGNoVmFsdWUodmFsdWU6IFJlY3Vyc2l2ZVBhcnRpYWw8VD4sIG9wdGlvbnM/OiBPYmplY3QpOiB2b2lkO1xuICByZWFkb25seSBzdGF0dXM6IENvbnRyb2xTdGF0dXM7XG4gIHJlYWRvbmx5IHN0YXR1c0NoYW5nZXM6IE9ic2VydmFibGU8Q29udHJvbFN0YXR1cz47XG4gIGNvbnRyb2xzOiB7IFtQIGluIGtleW9mIFRdOiBBYnN0cmFjdENvbnRyb2xUeXBlU2FmZTxUW1BdPiB9O1xufVxuXG4vLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bWF4LWNsYXNzZXMtcGVyLWZpbGVcbmV4cG9ydCBpbnRlcmZhY2UgRm9ybUNvbnRyb2xUeXBlU2FmZTxUPiBleHRlbmRzIEZvcm1Db250cm9sIHtcbiAgdmFsdWU6IFQgfCB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBjb25zdCBnZW5lcmF0ZUdldFNhZmVGdW5jdGlvbiA9IDxUIGV4dGVuZHMgdW5rbm93bj4oZ3I6IEZvcm1Hcm91cFR5cGVTYWZlPFQ+KSA9PiB7XG4gIHJldHVybiAocHJvcGVydHlGdW5jdGlvbjogKHR5cGVWYWw6IFQpID0+IGFueSk6IEFic3RyYWN0Q29udHJvbCA9PiB7XG4gICAgY29uc3QgZ2V0U3RyID0gZ2V0UHJvcGVydHlOYW1lKHByb3BlcnR5RnVuY3Rpb24udG9TdHJpbmcoKSk7XG4gICAgY29uc3QgcCA9IGdyLmdldChnZXRTdHIpIGFzIEZvcm1Hcm91cFR5cGVTYWZlPFQ+O1xuICAgIHJldHVybiBwO1xuICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IGdlbmVyYXRlU2V0Q29udHJvbFNhZmVGdW5jdGlvbiA9IDxUIGV4dGVuZHMgdW5rbm93bj4oZ3I6IEZvcm1Hcm91cFR5cGVTYWZlPFQ+KSA9PiB7XG4gIHJldHVybiAocHJvcGVydHlGdW5jdGlvbjogKHR5cGVWYWw6IFQpID0+IGFueSwgY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogdm9pZCA9PiB7XG4gICAgY29uc3QgZ2V0U3RyID0gZ2V0UHJvcGVydHlOYW1lKHByb3BlcnR5RnVuY3Rpb24udG9TdHJpbmcoKSk7XG4gICAgZ3Iuc2V0Q29udHJvbChnZXRTdHIsIGNvbnRyb2wpO1xuICB9O1xufTtcblxuXG5leHBvcnQgY29uc3QgZ2VuZXJhdGVSZW1vdmVDb250cm9sU2FmZUZ1bmN0aW9uID0gPFQgZXh0ZW5kcyB1bmtub3duPihncjogRm9ybUdyb3VwVHlwZVNhZmU8VD4pID0+IHtcbiAgcmV0dXJuIChwcm9wZXJ0eUZ1bmN0aW9uOiAodHlwZVZhbDogVCkgPT4gYW55KTogdm9pZCA9PiB7XG4gICAgY29uc3QgZ2V0U3RyID0gZ2V0UHJvcGVydHlOYW1lKHByb3BlcnR5RnVuY3Rpb24udG9TdHJpbmcoKSk7XG4gICAgZ3IucmVtb3ZlQ29udHJvbChnZXRTdHIpO1xuICB9O1xufTtcblxuLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBtYXgtY2xhc3Nlcy1wZXItZmlsZVxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEZvcm1CdWlsZGVyVHlwZVNhZmUgZXh0ZW5kcyBGb3JtQnVpbGRlciB7XG4gIC8vIG92ZXJyaWRlIGdyb3VwIHRvIGJlIHR5cGUgc2FmZVxuICBwdWJsaWMgZ3JvdXA8VD4oXG4gICAgY29udHJvbHNDb25maWc6IEZvcm1Hcm91cENvbnRyb2xzT2Y8VD4sXG4gICAgb3B0aW9ucz86IEFic3RyYWN0Q29udHJvbE9wdGlvbnMgfCB7XG4gICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gIH0gfCBudWxsKTogRm9ybUdyb3VwVHlwZVNhZmU8VD4ge1xuICAgIC8qIE5PVEUgdGhlIHJldHVybiBGb3JtR3JvdXBUeXBlU2FmZTxUPiAqL1xuXG4gICAgLy8gaW5zdGFudGlhdGUgZ3JvdXAgZnJvbSBhbmd1bGFyIHR5cGVcbiAgICBjb25zdCBnciA9IHN1cGVyLmdyb3VwKGNvbnRyb2xzQ29uZmlnLCBvcHRpb25zKSBhcyBGb3JtR3JvdXBUeXBlU2FmZTxUPjtcblxuICAgIGlmIChncikge1xuICAgICAgLy8gaW1wbGVtZW50IGdldFNhZmUgbWV0aG9kXG4gICAgICBnci5nZXRTYWZlID0gZ2VuZXJhdGVHZXRTYWZlRnVuY3Rpb24oZ3IpO1xuICAgICAgLy8gaW1wbGVtZW50IHNldENvbnRyb2xTYWZlXG4gICAgICBnci5zZXRDb250cm9sU2FmZSA9IGdlbmVyYXRlU2V0Q29udHJvbFNhZmVGdW5jdGlvbihncik7XG4gICAgICAvLyBpbXBsZW1lbnQgcmVtb3ZlQ29udHJvbFNhZmVcbiAgICAgIGdyLnJlbW92ZUNvbnRyb2xTYWZlID0gZ2VuZXJhdGVSZW1vdmVDb250cm9sU2FmZUZ1bmN0aW9uKGdyKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZ3I7XG4gIH1cbn1cbiJdfQ==