UNPKG

angular-dynamic-forms-lite

Version:
142 lines 15 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { DynamicArrayController } from "./dynamic-array-controller"; import { ArrayRenderer } from "./array-renderer"; export class ArrayFieldFactory { /** * @param {?} parentFieldFactory * @param {?} formBuilder */ constructor(parentFieldFactory, formBuilder) { this.parentFieldFactory = parentFieldFactory; this.formBuilder = formBuilder; } /** * @template M * @param {?} options * @return {?} */ create(options) { const { setting } = options; if (!setting.childSetting) { throw new Error(`Array ${options.setting.name} needs 'childSetting' as part of its setting.`); } const [formControl, children] = this.createChildContexts(options); /** @type {?} */ const dynamicController = new DynamicArrayController(this.parentFieldFactory); /** @type {?} */ const arrayComponentContext = Object.assign({}, this.parentFieldFactory.resolveComponent(formControl, setting, options.initialValue, dynamicController), { children }); /** @type {?} */ const arrayComponent = (/** @type {?} */ (arrayComponentContext.componentRef.instance)); if (!arrayComponent.formRoot) { throw new Error(`Array component ${setting.name} is not an array component. It is missing the 'formRoot' directive.`); } // initialize controller after all values and children are resolved dynamicController.onInit(arrayComponentContext); return arrayComponentContext; } /** * @param {?} arrayContext * @return {?} */ updateChildren(arrayContext) { /** @type {?} */ const unchecked = [...arrayContext.formControl.controls]; ((/** @type {?} */ (arrayContext.children))).forEach((/** * @param {?} child * @param {?} i * @return {?} */ (child, i) => { if (arrayContext.formControl.controls.indexOf(child.formControl) === -1) { arrayContext.formControl.insert(i, child.formControl); } else { unchecked.splice(unchecked.indexOf(child.formControl), 1); } })); unchecked.forEach((/** * @param {?} control * @return {?} */ control => arrayContext.formControl.removeAt(arrayContext.formControl.controls.indexOf(control)))); } /** * @param {?} formRoot * @param {?} arrayContext * @return {?} */ render(formRoot, arrayContext) { /** @type {?} */ const viewRef = formRoot.viewContainerRef.insert(arrayContext.componentRef.hostView); viewRef.detectChanges(); /** @type {?} */ const arrayComponent = (/** @type {?} */ (arrayContext.componentRef.instance)); /** @type {?} */ const paginator = ((/** @type {?} */ (arrayContext.setting))).renderStrategy.paginator; /** @type {?} */ const pageEvent = { pageIndex: paginator.pageIndex, pageSize: paginator.pageSize }; /** @type {?} */ const renderer = new ArrayRenderer(this.parentFieldFactory, arrayComponent.formRoot); renderer.render(arrayContext, pageEvent); return viewRef; } /** * @private * @template M * @param {?} options * @return {?} */ createChildContexts(options) { if (options.formControl) { /** @type {?} */ const children = options.formControl.controls.map((/** * @param {?} formControl * @return {?} */ formControl => this.parentFieldFactory.create({ formControl, setting: options.setting.childSetting, settings: options.settings }))); return [options.formControl, children]; } /** @type {?} */ const values = options.initialValue ? options.initialValue : []; if (!Array.isArray(values)) { throw new Error(`Value of ${options.setting.name} is not an array.`); } /** @type {?} */ const children = values.map((/** * @param {?} value * @return {?} */ value => this.parentFieldFactory.create({ initialValue: value, setting: options.setting.childSetting, settings: options.settings }))); /** @type {?} */ const formControl = this.formBuilder.array(children.map((/** * @param {?} context * @return {?} */ context => context.formControl))); return [formControl, children]; } } if (false) { /** * @type {?} * @private */ ArrayFieldFactory.prototype.parentFieldFactory; /** * @type {?} * @private */ ArrayFieldFactory.prototype.formBuilder; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJyYXktZmllbGQtZmFjdG9yeS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2FuZ3VsYXItZHluYW1pYy1mb3Jtcy1saXRlLyIsInNvdXJjZXMiOlsibGliL2Zvcm0tZmllbGQvYXJyYXkvYXJyYXktZmllbGQtZmFjdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBRUEsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFNcEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRWpELE1BQU0sT0FBTyxpQkFBaUI7Ozs7O0lBQzVCLFlBQW9CLGtCQUFzQyxFQUFVLFdBQXdCO1FBQXhFLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUFBVSxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtJQUFHLENBQUM7Ozs7OztJQUV6RixNQUFNLENBQ1gsT0FBeUU7Y0FFbkUsRUFBRSxPQUFPLEVBQUUsR0FBRyxPQUFPO1FBRTNCLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFO1lBQ3pCLE1BQU0sSUFBSSxLQUFLLENBQUMsU0FBUyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksK0NBQStDLENBQUMsQ0FBQztTQUMvRjtjQUVLLENBQUMsV0FBVyxFQUFFLFFBQVEsQ0FBQyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLENBQUM7O2NBRTNELGlCQUFpQixHQUFHLElBQUksc0JBQXNCLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDOztjQUV2RSxxQkFBcUIscUJBQ3RCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxnQkFBZ0IsQ0FDekMsV0FBVyxFQUNYLE9BQU8sRUFDUCxPQUFPLENBQUMsWUFBWSxFQUNwQixpQkFBaUIsQ0FDbEIsSUFDRCxRQUFRLEdBQ1Q7O2NBRUssY0FBYyxHQUFHLG1CQUFBLHFCQUFxQixDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQTJCO1FBRTdGLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxF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T0FBTyxDQUFDLElBQUksbUJBQW1CLENBQUMsQ0FBQztTQUN0RTs7Y0FFSyxRQUFRLEdBQUcsTUFBTSxDQUFDLEdBQUc7Ozs7UUFBQyxLQUFLLENBQUMsRUFBRSxDQUNsQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFNO1lBQ2xDLFlBQVksRUFBRSxLQUFLO1lBQ25CLE9BQU8sRUFBRSxPQUFPLENBQUMsT0FBTyxDQUFDLFlBQVk7WUFDckMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxRQUFRO1NBQzNCLENBQUMsRUFDSDs7Y0FFSyxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEdBQUc7Ozs7UUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUMsQ0FBQztRQUV4RixPQUFPLENBQUMsV0FBVyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ2pDLENBQUM7Q0FDRjs7Ozs7O0lBbkdhLCtDQUE4Qzs7Ozs7SUFBRSx3Q0FBZ0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBGb3JtQnVpbGRlciwgRm9ybUFycmF5IH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XG5pbXBvcnQgeyBGaWVsZEZhY3RvcnksIFBhcmVudEZpZWxkRmFjdG9yeSwgQ3JlYXRlRm9ybUNvbnRleHRPcHRpb25zIH0gZnJvbSBcIi4uL2ZpZWxkLWZhY3RvcnlcIjtcbmltcG9ydCB7IER5bmFtaWNBcnJheUNvbnRyb2xsZXIgfSBmcm9tIFwiLi9keW5hbWljLWFycmF5LWNvbnRyb2xsZXJcIjtcbmltcG9ydCB7IEFycmF5Rm9ybUZpZWxkU2V0dGluZyB9IGZyb20gXCIuL2FycmF5LWZvcm0tZmllbGQtc2V0dGluZ1wiO1xuaW1wb3J0IHsgRm9ybUNvbnRleHQgfSBmcm9tIFwiLi4vLi4vZm9ybS9mb3JtLWNvbnRleHRcIjtcbmltcG9ydCB7IEZvcm1Sb290RGlyZWN0aXZlIH0gZnJvbSBcIi4uLy4uL2Zvcm0vZm9ybS1yb290LmRpcmVjdGl2ZVwiO1xuaW1wb3J0IHsgRm9ybUZpZWxkQXJyYXlDb21wb25lbnQgfSBmcm9tIFwiLi9mb3JtLWZpZWxkLWFycmF5LWNvbXBvbmVudFwiO1xuaW1wb3J0IHsgVmlld1JlZiB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBBcnJheVJlbmRlcmVyIH0gZnJvbSBcIi4vYXJyYXktcmVuZGVyZXJcIjtcblxuZXhwb3J0IGNsYXNzIEFycmF5RmllbGRGYWN0b3J5IGltcGxlbWVudHMgRmllbGRGYWN0b3J5PEZvcm1BcnJheSwgQXJyYXlGb3JtRmllbGRTZXR0aW5nPGFueSwgYW55Pj4ge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHBhcmVudEZpZWxkRmFjdG9yeTogUGFyZW50RmllbGRGYWN0b3J5LCBwcml2YXRlIGZvcm1CdWlsZGVyOiBGb3JtQnVpbGRlcikge31cblxuICBwdWJsaWMgY3JlYXRlPE0+KFxuICAgIG9wdGlvbnM6IENyZWF0ZUZvcm1Db250ZXh0T3B0aW9uczxNLCBGb3JtQXJyYXksIEFycmF5Rm9ybUZpZWxkU2V0dGluZzxNPj5cbiAgKTogRm9ybUNvbnRleHQ8TSwgRm9ybUFycmF5PiB7XG4gICAgY29uc3QgeyBzZXR0aW5nIH0gPSBvcHRpb25zO1xuXG4gICAgaWYgKCFzZXR0aW5nLmNoaWxkU2V0dGluZykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBBcnJheSAke29wdGlvbnMuc2V0dGluZy5uYW1lfSBuZWVkcyAnY2hpbGRTZXR0aW5nJyBhcyBwYXJ0IG9mIGl0cyBzZXR0aW5nLmApO1xuICAgIH1cblxuICAgIGNvbnN0IFtmb3JtQ29udHJvbCwgY2hpbGRyZW5dID0gdGhpcy5jcmVhdGVDaGlsZENvbnRleHRzKG9wdGlvbnMpO1xuXG4gICAgY29uc3QgZHluYW1pY0NvbnRyb2xsZXIgPSBuZXcgRHluYW1pY0FycmF5Q29udHJvbGxlcih0aGlzLnBhcmVudEZpZWxkRmFjdG9yeSk7XG5cbiAgICBjb25zdCBhcnJheUNvbXBvbmVudENvbnRleHQgPSB7XG4gICAgICAuLi50aGlzLnBhcmVudEZpZWxkRmFjdG9yeS5yZXNvbHZlQ29tcG9uZW50PE0sIEZvcm1BcnJheT4oXG4gICAgICAgIGZvcm1Db250cm9sLFxuICAgICAgICBzZXR0aW5nLFxuICAgICAgICBvcHRpb25zLmluaXRpYWxWYWx1ZSxcbiAgICAgICAgZHluYW1pY0NvbnRyb2xsZXJcbiAgICAgICksXG4gICAgICBjaGlsZHJlblxuICAgIH07XG5cbiAgICBjb25zdCBhcnJheUNvbXBvbmVudCA9IGFycmF5Q29tcG9uZW50Q29udGV4dC5jb21wb25lbnRSZWYuaW5zdGFuY2UgYXMgRm9ybUZpZWxkQXJyYXlDb21wb25lbnQ7XG5cbiAgICBpZiAoIWFycmF5Q29tcG9uZW50LmZvcm1Sb290KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBBcnJheSBjb21wb25lbnQgJHtzZXR0aW5nLm5hbWV9IGlzIG5vdCBhbiBhcnJheSBjb21wb25lbnQuIEl0IGlzIG1pc3NpbmcgdGhlICdmb3JtUm9vdCcgZGlyZWN0aXZlLmBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gaW5pdGlhbGl6ZSBjb250cm9sbGVyIGFmdGVyIGFsbCB2YWx1ZXMgYW5kIGNoaWxkcmVuIGFyZSByZXNvbHZlZFxuICAgIGR5bmFtaWNDb250cm9sbGVyLm9uSW5pdChhcnJheUNvbXBvbmVudENvbnRleHQpO1xuXG4gICAgcmV0dXJuIGFycmF5Q29tcG9uZW50Q29udGV4dDtcbiAgfVxuXG4gIHB1YmxpYyB1cGRhdGVDaGlsZHJlbihhcnJheUNvbnRleHQ6IEZvcm1Db250ZXh0PGFueSwgRm9ybUFycmF5Pikge1xuICAgIGNvbnN0IHVuY2hlY2tlZCA9IFsuLi5hcnJheUNvbnRleHQuZm9ybUNvbnRyb2wuY29udHJvbHNdO1xuICAgIChhcnJheUNvbnRleHQuY2hpbGRyZW4gYXMgRm9ybUNvbnRleHQ8YW55PltdKS5mb3JFYWNoKChjaGlsZCwgaSkgPT4ge1xuICAgICAgaWYgKGFycmF5Q29udGV4dC5mb3JtQ29udHJvbC5jb250cm9scy5pbmRleE9mKGNoaWxkLmZvcm1Db250cm9sKSA9PT0gLTEpIHtcbiAgICAgICAgYXJyYXlDb250ZXh0LmZvcm1Db250cm9sLmluc2VydChpLCBjaGlsZC5mb3JtQ29udHJvbCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB1bmNoZWNrZWQuc3BsaWNlKHVuY2hlY2tlZC5pbmRleE9mKGNoaWxkLmZvcm1Db250cm9sKSwgMSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB1bmNoZWNrZWQuZm9yRWFjaChjb250cm9sID0+IGFycmF5Q29udGV4dC5mb3JtQ29udHJvbC5yZW1vdmVBdChhcnJheUNvbnRleHQuZm9ybUNvbnRyb2wuY29udHJvbHMuaW5kZXhPZihjb250cm9sKSkpO1xuICB9XG5cbiAgcHVibGljIHJlbmRlcihmb3JtUm9vdDogRm9ybVJvb3REaXJlY3RpdmUsIGFycmF5Q29udGV4dDogRm9ybUNvbnRleHQ8YW55LCBGb3JtQXJyYXk+KTogVmlld1JlZiB7XG4gICAgY29uc3Qgdmlld1JlZiA9IGZvcm1Sb290LnZpZXdDb250YWluZXJSZWYuaW5zZXJ0KGFycmF5Q29udGV4dC5jb21wb25lbnRSZWYuaG9zdFZpZXcpO1xuICAgIHZpZXdSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuXG4gICAgY29uc3QgYXJyYXlDb21wb25lbnQgPSBhcnJheUNvbnRleHQuY29tcG9uZW50UmVmLmluc3RhbmNlIGFzIEZvcm1GaWVsZEFycmF5Q29tcG9uZW50O1xuICAgIGNvbnN0IHBhZ2luYXRvciA9IChhcnJheUNvbnRleHQuc2V0dGluZyBhcyBBcnJheUZvcm1GaWVsZFNldHRpbmcpLnJlbmRlclN0cmF0ZWd5LnBhZ2luYXRvcjtcbiAgICBjb25zdCBwYWdlRXZlbnQgPSB7IHBhZ2VJbmRleDogcGFnaW5hdG9yLnBhZ2VJbmRleCwgcGFnZVNpemU6IHBhZ2luYXRvci5wYWdlU2l6ZSB9O1xuXG4gICAgY29uc3QgcmVuZGVyZXIgPSBuZXcgQXJyYXlSZW5kZXJlcih0aGlzLnBhcmVudEZpZWxkRmFjdG9yeSwgYXJyYXlDb21wb25lbnQuZm9ybVJvb3QpO1xuICAgIHJlbmRlcmVyLnJlbmRlcihhcnJheUNvbnRleHQsIHBhZ2VFdmVudCk7XG5cbiAgICByZXR1cm4gdmlld1JlZjtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlQ2hpbGRDb250ZXh0czxNPihcbiAgICBvcHRpb25zOiBDcmVhdGVGb3JtQ29udGV4dE9wdGlvbnM8TSwgRm9ybUFycmF5LCBBcnJheUZvcm1GaWVsZFNldHRpbmc8TT4+XG4gICk6IFtGb3JtQXJyYXksIEZvcm1Db250ZXh0PE0+W11dIHtcbiAgICBpZiAob3B0aW9ucy5mb3JtQ29udHJvbCkge1xuICAgICAgY29uc3QgY2hpbGRyZW4gPSBvcHRpb25zLmZvcm1Db250cm9sLmNvbnRyb2xzLm1hcChmb3JtQ29udHJvbCA9PlxuICAgICAgICB0aGlzLnBhcmVudEZpZWxkRmFjdG9yeS5jcmVhdGU8YW55Pih7XG4gICAgICAgICAgZm9ybUNvbnRyb2wsXG4gICAgICAgICAgc2V0dGluZzogb3B0aW9ucy5zZXR0aW5nLmNoaWxkU2V0dGluZyxcbiAgICAgICAgICBzZXR0aW5nczogb3B0aW9ucy5zZXR0aW5nc1xuICAgICAgICB9KVxuICAgICAgKTtcblxuICAgICAgcmV0dXJuIFtvcHRpb25zLmZvcm1Db250cm9sLCBjaGlsZHJlbl07XG4gICAgfVxuXG4gICAgY29uc3QgdmFsdWVzID0gb3B0aW9ucy5pbml0aWFsVmFsdWUgPyBvcHRpb25zLmluaXRpYWxWYWx1ZSA6IFtdO1xuXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHZhbHVlcykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVmFsdWUgb2YgJHtvcHRpb25zLnNldHRpbmcubmFtZX0gaXMgbm90IGFuIGFycmF5LmApO1xuICAgIH1cblxuICAgIGNvbnN0IGNoaWxkcmVuID0gdmFsdWVzLm1hcCh2YWx1ZSA9PlxuICAgICAgdGhpcy5wYXJlbnRGaWVsZEZhY3RvcnkuY3JlYXRlPGFueT4oe1xuICAgICAgICBpbml0aWFsVmFsdWU6IHZhbHVlLFxuICAgICAgICBzZXR0aW5nOiBvcHRpb25zLnNldHRpbmcuY2hpbGRTZXR0aW5nLFxuICAgICAgICBzZXR0aW5nczogb3B0aW9ucy5zZXR0aW5nc1xuICAgICAgfSlcbiAgICApO1xuXG4gICAgY29uc3QgZm9ybUNvbnRyb2wgPSB0aGlzLmZvcm1CdWlsZGVyLmFycmF5KGNoaWxkcmVuLm1hcChjb250ZXh0ID0+IGNvbnRleHQuZm9ybUNvbnRyb2wpKTtcblxuICAgIHJldHVybiBbZm9ybUNvbnRyb2wsIGNoaWxkcmVuXTtcbiAgfVxufVxuIl19