UNPKG

angular-dynamic-forms-lite

Version:
223 lines 16.3 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import * as tslib_1 from "tslib"; import { bufferCount, map, filter } from "rxjs/operators"; import { FIELD_FORM_CONTROL, FIELD_METADATA, FormFieldInjector, FIELD_DYNAMIC_CONTROLLER, FIELD_NAME } from "./form-field-injector"; import { SubType } from "../form-settings/sub-type"; /** * @record * @template M, T, S */ export function CreateFormContextOptions() { } if (false) { /** @type {?|undefined} */ CreateFormContextOptions.prototype.initialValue; /** @type {?|undefined} */ CreateFormContextOptions.prototype.formControl; /** @type {?} */ CreateFormContextOptions.prototype.setting; /** @type {?} */ CreateFormContextOptions.prototype.settings; } /** * @record * @template T, S */ export function FieldFactory() { } if (false) { /** * @template M * @param {?} params * @return {?} */ FieldFactory.prototype.create = function (params) { }; /** * @param {?} formRoot * @param {?} root * @return {?} */ FieldFactory.prototype.render = function (formRoot, root) { }; /** * @param {?} context * @return {?} */ FieldFactory.prototype.updateChildren = function (context) { }; } var ParentFieldFactory = /** @class */ (function () { function ParentFieldFactory(factories, componentFactoryResolver, injector, formBuilder, settings) { this.factories = factories; this.componentFactoryResolver = componentFactoryResolver; this.injector = injector; this.formBuilder = formBuilder; this.settings = settings; } /** * @template M * @param {?} params * @return {?} */ ParentFieldFactory.prototype.create = /** * @template M * @param {?} params * @return {?} */ function (params) { return this.getFactory(params.setting).create(params); }; /** * @param {?} formRoot * @param {?} root * @return {?} */ ParentFieldFactory.prototype.render = /** * @param {?} formRoot * @param {?} root * @return {?} */ function (formRoot, root) { return this.getFactory(root.setting).render(formRoot, root); }; /** * @param {?} context * @return {?} */ ParentFieldFactory.prototype.updateChildren = /** * @param {?} context * @return {?} */ function (context) { return this.getFactory(context.setting).updateChildren(context); }; /** * @template M, H * @param {?} formControl * @param {?} setting * @param {?} value * @param {?} dynamicController * @return {?} */ ParentFieldFactory.prototype.resolveComponent = /** * @template M, H * @param {?} formControl * @param {?} setting * @param {?} value * @param {?} dynamicController * @return {?} */ function (formControl, setting, value, dynamicController) { /** @type {?} */ var componentFactory; try { componentFactory = this.componentFactoryResolver.resolveComponentFactory(setting.component); } catch (e) { console.error("Cannot resolve component factory for " + setting.name + ". " + (setting.component ? "" : "Component is undefined.")); throw e; } /** @type {?} */ var additionalTokens = new WeakMap(); additionalTokens.set(FIELD_METADATA, setting.metadata || {}); additionalTokens.set(FIELD_FORM_CONTROL, formControl); additionalTokens.set(FIELD_DYNAMIC_CONTROLLER, dynamicController); additionalTokens.set(FIELD_NAME, setting.name); /** @type {?} */ var dynamicInjector = new FormFieldInjector(this.injector, additionalTokens); /** @type {?} */ var componentRef = componentFactory.create(dynamicInjector); dynamicController.componentRef = componentRef; this.patchAsyncChangeDetection(formControl, componentRef.changeDetectorRef); return (/** @type {?} */ ({ initialValue: value, formControl: formControl, setting: setting, settings: this.settings, componentRef: componentRef, children: [] })); }; /** * @private * @param {?} formControl * @param {?} cdr * @return {?} */ ParentFieldFactory.prototype.patchAsyncChangeDetection = /** * @private * @param {?} formControl * @param {?} cdr * @return {?} */ function (formControl, cdr) { formControl.statusChanges .pipe(bufferCount(2, 1), map((/** * @param {?} __0 * @return {?} */ function (_a) { var _b = tslib_1.__read(_a, 1), prevState = _b[0]; return prevState; })), filter((/** * @param {?} prevState * @return {?} */ function (prevState) { return prevState === "PENDING"; }))) .subscribe((/** * @return {?} */ function () { return cdr.markForCheck(); })); }; /** * @private * @template M * @param {?} setting * @return {?} */ ParentFieldFactory.prototype.getFactory = /** * @private * @template M * @param {?} setting * @return {?} */ function (setting) { /** @type {?} */ var factoryType = SubType.toSubType(setting.type).type; /** @type {?} */ var factory = this.factories[factoryType]; if (!factory) { throw new Error("Field factory " + factoryType + " does not exist."); } return new factory(this, this.formBuilder); }; return ParentFieldFactory; }()); export { ParentFieldFactory }; if (false) { /** * @type {?} * @private */ ParentFieldFactory.prototype.factories; /** * @type {?} * @private */ ParentFieldFactory.prototype.componentFactoryResolver; /** * @type {?} * @private */ ParentFieldFactory.prototype.injector; /** * @type {?} * @private */ ParentFieldFactory.prototype.formBuilder; /** * @type {?} * @private */ ParentFieldFactory.prototype.settings; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmllbGQtZmFjdG9yeS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2FuZ3VsYXItZHluYW1pYy1mb3Jtcy1saXRlLyIsInNvdXJjZXMiOlsibGliL2Zvcm0tZmllbGQvZmllbGQtZmFjdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUdBLE9BQU8sRUFBRSxXQUFXLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBTTFELE9BQU8sRUFDTCxrQkFBa0IsRUFDbEIsY0FBYyxFQUNkLGlCQUFpQixFQUNqQix3QkFBd0IsRUFDeEIsVUFBVSxFQUNYLE1BQU0sdUJBQXVCLENBQUM7QUFFL0IsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLDJCQUEyQixDQUFDOzs7OztBQUdwRCw4Q0FLQzs7O0lBSkMsZ0RBQW1DOztJQUNuQywrQ0FBZ0I7O0lBQ2hCLDJDQUFXOztJQUNYLDRDQUE0Qjs7Ozs7O0FBRzlCLGtDQUlDOzs7Ozs7O0lBSEMsc0RBQXdFOzs7Ozs7SUFDeEUsOERBQXdFOzs7OztJQUN4RSwrREFBbUQ7O0FBR3JEO0lBQ0UsNEJBQ1UsU0FBd0YsRUFDeEYsd0JBQWtELEVBQ2xELFFBQWtCLEVBQ2xCLFdBQXdCLEVBQ3hCLFFBQTJCO1FBSjNCLGNBQVMsR0FBVCxTQUFTLENBQStFO1FBQ3hGLDZCQUF3QixHQUF4Qix3QkFBd0IsQ0FBMEI7UUFDbEQsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUNsQixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4QixhQUFRLEdBQVIsUUFBUSxDQUFtQjtJQUNsQyxDQUFDOzs7Ozs7SUFFRyxtQ0FBTTs7Ozs7SUFBYixVQUNFLE1BQXlFO1FBRXpFLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3hELENBQUM7Ozs7OztJQUVNLG1DQUFNOzs7OztJQUFiLFVBQWMsUUFBMkIsRUFBRSxJQUF1QztRQUNo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Q0FBQyxtQkFBaUIsV0FBVyxxQkFBa0IsQ0FBQyxDQUFDO1NBQ2pFO1FBRUQsT0FBTyxJQUFJLE9BQU8sQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFDSCx5QkFBQztBQUFELENBQUMsQUFuRkQsSUFtRkM7Ozs7Ozs7SUFqRkcsdUNBQWdHOzs7OztJQUNoRyxzREFBMEQ7Ozs7O0lBQzFELHNDQUEwQjs7Ozs7SUFDMUIseUNBQWdDOzs7OztJQUNoQyxzQ0FBbUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIEZvcm1CdWlsZGVyIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XG5pbXBvcnQgeyBUeXBlLCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLCBJbmplY3RvciwgVmlld1JlZiB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5cbmltcG9ydCB7IGJ1ZmZlckNvdW50LCBtYXAsIGZpbHRlciB9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xuaW1wb3J0IHsgRm9ybUNvbnRleHQgfSBmcm9tIFwiLi4vZm9ybS9mb3JtLWNvbnRleHRcIjtcbmltcG9ydCB7IEZvcm1GaWVsZFNldHRpbmcgfSBmcm9tIFwiLi4vZm9ybS1zZXR0aW5ncy9mb3JtLWZpZWxkLXNldHRpbmdcIjtcbmltcG9ydCB7IEZvcm1Sb290RGlyZWN0aXZlIH0gZnJvbSBcIi4uL2Zvcm0vZm9ybS1yb290LmRpcmVjdGl2ZVwiO1xuaW1wb3J0IHsgRHluYW1pY0NvbnRyb2xsZXIgfSBmcm9tIFwiLi9keW5hbWljLWNvbnRyb2xsZXJcIjtcbmltcG9ydCB7IEJhc2ljRm9ybUZpZWxkVmFsdWUgfSBmcm9tIFwiLi4vZm9ybS9mb3JtLW1vZGVsXCI7XG5pbXBvcnQge1xuICBGSUVMRF9GT1JNX0NPTlRST0wsXG4gIEZJRUxEX01FVEFEQVRBLFxuICBGb3JtRmllbGRJbmplY3RvcixcbiAgRklFTERfRFlOQU1JQ19DT05UUk9MTEVSLFxuICBGSUVMRF9OQU1FXG59IGZyb20gXCIuL2Zvcm0tZmllbGQtaW5qZWN0b3JcIjtcbmltcG9ydCB7IEZvcm1GaWVsZFNldHRpbmdzIH0gZnJvbSBcIi4uL2Zvcm0tc2V0dGluZ3MvZm9ybS1maWVsZC1zZXR0aW5nc1wiO1xuaW1wb3J0IHsgU3ViVHlwZSB9IGZyb20gXCIuLi9mb3JtLXNldHRpbmdzL3N1Yi10eXBlXCI7XG5pbXBvcnQgeyBEeW5hbWljRm9ybVR5cGUgfSBmcm9tIFwiLi9mb3JtLWZpZWxkLXR5cGVcIjtcblxuZXhwb3J0IGludGVyZmFjZSBDcmVhdGVGb3JtQ29udGV4dE9wdGlvbnM8TSwgVCBleHRlbmRzIEFic3RyYWN0Q29udHJvbCwgUyBleHRlbmRzIEZvcm1GaWVsZFNldHRpbmc8TT4+IHtcbiAgaW5pdGlhbFZhbHVlPzogQmFzaWNGb3JtRmllbGRWYWx1ZTtcbiAgZm9ybUNvbnRyb2w/OiBUO1xuICBzZXR0aW5nOiBTO1xuICBzZXR0aW5nczogRm9ybUZpZWxkU2V0dGluZ3M7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmllbGRGYWN0b3J5PFQgZXh0ZW5kcyBBYnN0cmFjdENvbnRyb2wsIFMgZXh0ZW5kcyBGb3JtRmllbGRTZXR0aW5nPGFueT4+IHtcbiAgY3JlYXRlPE0+KHBhcmFtczogQ3JlYXRlRm9ybUNvbnRleHRPcHRpb25zPE0sIFQsIFM+KTogRm9ybUNvbnRleHQ8TSwgVD47XG4gIHJlbmRlcihmb3JtUm9vdDogRm9ybVJvb3REaXJlY3RpdmUsIHJvb3Q6IEZvcm1Db250ZXh0PGFueSwgVD4pOiBWaWV3UmVmO1xuICB1cGRhdGVDaGlsZHJlbihjb250ZXh0OiBGb3JtQ29udGV4dDxhbnksIFQ+KTogdm9pZDtcbn1cblxuZXhwb3J0IGNsYXNzIFBhcmVudEZpZWxkRmFjdG9yeSBpbXBsZW1lbnRzIEZpZWxkRmFjdG9yeTxBYnN0cmFjdENvbnRyb2wsIEZvcm1GaWVsZFNldHRpbmc8YW55Pj4ge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGZhY3RvcmllczogeyBba2V5OiBzdHJpbmddOiBUeXBlPEZpZWxkRmFjdG9yeTxBYnN0cmFjdENvbnRyb2wsIEZvcm1GaWVsZFNldHRpbmc8YW55Pj4+IH0sXG4gICAgcHJpdmF0ZSBjb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI6IENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcbiAgICBwcml2YXRlIGluamVjdG9yOiBJbmplY3RvcixcbiAgICBwcml2YXRlIGZvcm1CdWlsZGVyOiBGb3JtQnVpbGRlcixcbiAgICBwcml2YXRlIHNldHRpbmdzOiBGb3JtRmllbGRTZXR0aW5nc1xuICApIHt9XG5cbiAgcHVibGljIGNyZWF0ZTxNPihcbiAgICBwYXJhbXM6IENyZWF0ZUZvcm1Db250ZXh0T3B0aW9uczxNLCBBYnN0cmFjdENvbnRyb2wsIEZvcm1GaWVsZFNldHRpbmc8TT4+XG4gICk6IEZvcm1Db250ZXh0PE0sIEFic3RyYWN0Q29udHJvbD4ge1xuICAgIHJldHVybiB0aGlzLmdldEZhY3RvcnkocGFyYW1zLnNldHRpbmcpLmNyZWF0ZShwYXJhbXMpO1xuICB9XG5cbiAgcHVibGljIHJlbmRlcihmb3JtUm9vdDogRm9ybVJvb3REaXJlY3RpdmUsIHJvb3Q6IEZvcm1Db250ZXh0PGFueSwgQWJzdHJhY3RDb250cm9sPik6IFZpZXdSZWYge1xuICAgIHJldHVybiB0aGlzLmdldEZhY3Rvcnkocm9vdC5zZXR0aW5nKS5yZW5kZXIoZm9ybVJvb3QsIHJvb3QpO1xuICB9XG5cbiAgcHVibGljIHVwZGF0ZUNoaWxkcmVuKGNvbnRleHQ6IEZvcm1Db250ZXh0PGFueSwgQWJzdHJhY3RDb250cm9sPik6IHZvaWQge1xuICAgIHJldHVybiB0aGlzLmdldEZhY3RvcnkoY29udGV4dC5zZXR0aW5nKS51cGRhdGVDaGlsZHJlbihjb250ZXh0KTtcbiAgfVxuXG4gIHB1YmxpYyByZXNvbHZlQ29tcG9uZW50PE0sIEggZXh0ZW5kcyBBYnN0cmFjdENvbnRyb2wgPSBBYnN0cmFjdENvbnRyb2w+KFxuICAgIGZvcm1Db250cm9sOiBILFxuICAgIHNldHRpbmc6IEZvcm1GaWVsZFNldHRpbmc8TT4sXG4gICAgdmFsdWU6IEJhc2ljRm9ybUZpZWxkVmFsdWUsXG4gICAgZHluYW1pY0NvbnRyb2xsZXI6IER5bmFtaWNDb250cm9sbGVyXG4gICk6IEZvcm1Db250ZXh0PE0sIEg+IHtcbiAgICBsZXQgY29tcG9uZW50RmFjdG9yeTtcblxuICAgIHRyeSB7XG4gICAgICBjb21wb25lbnRGYWN0b3J5ID0gdGhpcy5jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIucmVzb2x2ZUNvbXBvbmVudEZhY3Rvcnkoc2V0dGluZy5jb21wb25lbnQpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgIGBDYW5ub3QgcmVzb2x2ZSBjb21wb25lbnQgZmFjdG9yeSBmb3IgJHtzZXR0aW5nLm5hbWV9LiAke3NldHRpbmcuY29tcG9uZW50ID8gXCJcIiA6IFwiQ29tcG9uZW50IGlzIHVuZGVmaW5lZC5cIn1gXG4gICAgICApO1xuICAgICAgdGhyb3cgZTtcbiAgICB9XG5cbiAgICBjb25zdCBhZGRpdGlvbmFsVG9rZW5zID0gbmV3IFdlYWtNYXAoKTtcbiAgICBhZGRpdGlvbmFsVG9rZW5zLnNldChGSUVMRF9NRVRBREFUQSwgc2V0dGluZy5tZXRhZGF0YSB8fCB7fSk7XG4gICAgYWRkaXRpb25hbFRva2Vucy5zZXQoRklFTERfRk9STV9DT05UUk9MLCBmb3JtQ29udHJvbCk7XG4gICAgYWRkaXRpb25hbFRva2Vucy5zZXQoRklFTERfRFlOQU1JQ19DT05UUk9MTEVSLCBkeW5hbWljQ29udHJvbGxlcik7XG4gICAgYWRkaXRpb25hbFRva2Vucy5zZXQoRklFTERfTkFNRSwgc2V0dGluZy5uYW1lKTtcblxuICAgIGNvbnN0IGR5bmFtaWNJbmplY3RvciA9IG5ldyBGb3JtRmllbGRJbmplY3Rvcih0aGlzLmluamVjdG9yLCBhZGRpdGlvbmFsVG9rZW5zKTtcbiAgICBjb25zdCBjb21wb25lbnRSZWYgPSBjb21wb25lbnRGYWN0b3J5LmNyZWF0ZShkeW5hbWljSW5qZWN0b3IpO1xuXG4gICAgZHluYW1pY0NvbnRyb2xsZXIuY29tcG9uZW50UmVmID0gY29tcG9uZW50UmVmO1xuXG4gICAgdGhpcy5wYXRjaEFzeW5jQ2hhbmdlRGV0ZWN0aW9uKGZvcm1Db250cm9sLCBjb21wb25lbnRSZWYuY2hhbmdlRGV0ZWN0b3JSZWYpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGluaXRpYWxWYWx1ZTogdmFsdWUsXG4gICAgICBmb3JtQ29udHJvbCxcbiAgICAgIHNldHRpbmcsXG4gICAgICBzZXR0aW5nczogdGhpcy5zZXR0aW5ncyxcbiAgICAgIGNvbXBvbmVudFJlZixcbiAgICAgIGNoaWxkcmVuOiBbXVxuICAgIH0gYXMgRm9ybUNvbnRleHQ8TSwgSD47XG4gIH1cblxuICBwcml2YXRlIHBhdGNoQXN5bmNDaGFuZ2VEZXRlY3Rpb24oZm9ybUNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCwgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZikge1xuICAgIGZvcm1Db250cm9sLnN0YXR1c0NoYW5nZXNcbiAgICAgIC5waXBlKFxuICAgICAgICBidWZmZXJDb3VudCgyLCAxKSxcbiAgICAgICAgbWFwKChbcHJldlN0YXRlXSkgPT4gcHJldlN0YXRlKSxcbiAgICAgICAgZmlsdGVyKHByZXZTdGF0ZSA9PiBwcmV2U3RhdGUgPT09IFwiUEVORElOR1wiKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiBjZHIubWFya0ZvckNoZWNrKCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRGYWN0b3J5PE0+KHNldHRpbmc6IEZvcm1GaWVsZFNldHRpbmc8TT4pOiBGaWVsZEZhY3Rvcnk8QWJzdHJhY3RDb250cm9sLCBGb3JtRmllbGRTZXR0aW5nPiB7XG4gICAgY29uc3QgZmFjdG9yeVR5cGUgPSBTdWJUeXBlLnRvU3ViVHlwZShzZXR0aW5nLnR5cGUpLnR5cGU7XG4gICAgY29uc3QgZmFjdG9yeSA9IHRoaXMuZmFjdG9yaWVzW2ZhY3RvcnlUeXBlXTtcblxuICAgIGlmICghZmFjdG9yeSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBGaWVsZCBmYWN0b3J5ICR7ZmFjdG9yeVR5cGV9IGRvZXMgbm90IGV4aXN0LmApO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgZmFjdG9yeSh0aGlzLCB0aGlzLmZvcm1CdWlsZGVyKTtcbiAgfVxufVxuIl19