angular-dynamic-forms-lite
Version:
Efficient dynamic and customizable Angular 7+ forms.
223 lines • 16.3 kB
JavaScript
/**
* @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