@webdev-tools/ng-nested-reactive-forms
Version:
Implement Nested FormControl for Angular Reactive Forms.
96 lines • 10.4 kB
JavaScript
import { Directive, EventEmitter, HostListener, Input, Optional, Output, Renderer2, TemplateRef, ViewContainerRef, } from '@angular/core';
import { NrfFormContext } from './form-context.class';
import { NrfSubmitData } from './form-submit-data.class';
import { NrfFormService } from './form.service';
var NrfFormDirective = (function () {
function NrfFormDirective(templateRef, viewContainerRef, formService, renderer) {
this.templateRef = templateRef;
this.viewContainerRef = viewContainerRef;
this.formService = formService;
this.renderer = renderer;
if (!formService) {
this.formService = new NrfFormService();
}
}
Object.defineProperty(NrfFormDirective.prototype, "nrfEntity", {
get: function () {
return this.formService.entity;
},
set: function (entity) {
this.formService.entity = entity;
},
enumerable: true,
configurable: true
});
Object.defineProperty(NrfFormDirective.prototype, "formData", {
get: function () {
return this.formService.formData;
},
enumerable: true,
configurable: true
});
Object.defineProperty(NrfFormDirective.prototype, "formGroup", {
get: function () {
return this.formService.formGroup;
},
enumerable: true,
configurable: true
});
Object.defineProperty(NrfFormDirective.prototype, "nrfSubmit", {
get: function () {
return this.formService.submit$;
},
enumerable: true,
configurable: true
});
NrfFormDirective.prototype.ngOnInit = function () {
if (!this.nrfEntity) {
this.nrfEntity = {};
}
this.renderView();
};
NrfFormDirective.prototype.ngOnDestroy = function () {
this.nrfSubmit.complete();
};
NrfFormDirective.prototype.renderView = function () {
var _this = this;
if (this.templateRef && this.viewContainerRef) {
var embeddedViewRef = this.viewContainerRef.createEmbeddedView(this.templateRef, new NrfFormContext(this));
var formNative = embeddedViewRef.rootNodes[0];
this.renderer.listen(formNative, 'submit', function (event) { return _this.formSubmitWrapper(event); });
}
};
NrfFormDirective.prototype.formSubmitWrapper = function ($event) {
$event.preventDefault();
if (!this.formGroup.valid) {
return;
}
this.nrfSubmit.emit(new NrfSubmitData(this, $event));
};
NrfFormDirective.decorators = [
{ type: Directive, args: [{
selector: '[nrfForm]',
exportAs: 'nrfForm',
},] }
];
NrfFormDirective.ctorParameters = function () { return [
{ type: TemplateRef, decorators: [{ type: Optional }] },
{ type: ViewContainerRef, decorators: [{ type: Optional }] },
{ type: NrfFormService, decorators: [{ type: Optional }] },
{ type: Renderer2 }
]; };
NrfFormDirective.propDecorators = {
nrfEntity: [{ type: Input }],
nrfSubmit: [{ type: Output }],
formSubmitWrapper: [{ type: HostListener, args: ['submit', ['$event'],] }]
};
return NrfFormDirective;
}());
export { NrfFormDirective };
if (false) {
NrfFormDirective.prototype.templateRef;
NrfFormDirective.prototype.viewContainerRef;
NrfFormDirective.prototype.formService;
NrfFormDirective.prototype.renderer;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ad2ViZGV2LXRvb2xzL25nLW5lc3RlZC1yZWFjdGl2ZS1mb3Jtcy8iLCJzb3VyY2VzIjpbImxpYi9mb3JtL2Zvcm0uZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLFlBQVksRUFDWixLQUFLLEVBR0wsUUFBUSxFQUNSLE1BQU0sRUFDTixTQUFTLEVBQ1QsV0FBVyxFQUNYLGdCQUFnQixHQUNqQixNQUFNLGVBQWUsQ0FBQztBQUd2QixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDdEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQWFoRDtJQVFFLDBCQUMrQixXQUE2QixFQUM3QixnQkFBa0MsRUFDbEMsV0FBMkIsRUFDdkMsUUFBbUI7UUFIUCxnQkFBVyxHQUFYLFdBQVcsQ0FBa0I7UUFDN0IscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNsQyxnQkFBVyxHQUFYLFdBQVcsQ0FBZ0I7UUFDdkMsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQUVwQyxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ2hCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxjQUFjLEVBQUUsQ0FBQztTQUN6QztJQUNILENBQUM7SUFLRCxzQkFDSSx1Q0FBUzthQUdiO1lBQ0UsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQztRQUNqQyxDQUFDO2FBTkQsVUFDYyxNQUFXO1lBQ3ZCLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUNuQyxDQUFDOzs7T0FBQTtJQUtELHNCQUFJLHNDQUFRO2FBQVo7WUFDRSxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDO1FBQ25DLENBQUM7OztPQUFBO0lBRUQsc0JBQUksdUNBQVM7YUFBYjtZQUNFLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUM7UUFDcEMsQ0FBQzs7O09BQUE7SUFNRCxzQkFDSSx1Q0FBUzthQURiO1lBRUUsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQztRQUNsQyxDQUFDOzs7T0FBQTtJQU1ELG1DQUFRLEdBQVI7UUFDRSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUNuQixJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQztTQUNyQjtRQUVELElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUNwQixDQUFDO0lBR0Qsc0NBQVcsR0FBWDtRQUNFLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUdPLHFDQUFVLEdBQWxCO1FBQUEsaUJBTUM7UUFMQyxJQUFJLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFO2dCQUN2QyxlQUFlLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ3RHLFVBQVUsR0FBRyxlQUFlLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztZQUMvQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsUUFBUSxFQUFFLFVBQUEsS0FBSyxJQUFJLE9BQUEsS0FBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxFQUE3QixDQUE2QixDQUFDLENBQUM7U0FDcEY7SUFDSCxDQUFDO0lBUUQsNENBQWlCLEdBRGpCLFVBQ2tCLE1BQWE7UUFDN0IsTUFBTSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBRXhCLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRTtZQUN6QixPQUFPO1NBQ1I7UUFFRCxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLGFBQWEsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUN2RCxDQUFDOztnQkF2RkYsU0FBUyxTQUFDO29CQUNULFFBQVEsRUFBRSxXQUFXO29CQUNyQixRQUFRLEVBQUUsU0FBUztpQkFDcEI7OztnQkF2QkMsV0FBVyx1QkE2QlIsUUFBUTtnQkE1QlgsZ0JBQWdCLHVCQTZCYixRQUFRO2dCQXZCSixjQUFjLHVCQXdCbEIsUUFBUTtnQkFoQ1gsU0FBUzs7OzRCQTJDUixLQUFLOzRCQW9CTCxNQUFNO29DQW9DTixZQUFZLFNBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDOztJQVVwQyx1QkFBQztDQUFBLEFBeEZELElBd0ZDO1NBcEZZLGdCQUFnQjs7SUFLekIsdUNBQTBEO0lBQzFELDRDQUErRDtJQUMvRCx1Q0FBd0Q7SUFDeEQsb0NBQW9DIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgRGlyZWN0aXZlLFxuICBFdmVudEVtaXR0ZXIsXG4gIEhvc3RMaXN0ZW5lcixcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPcHRpb25hbCxcbiAgT3V0cHV0LFxuICBSZW5kZXJlcjIsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3Q29udGFpbmVyUmVmLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuaW1wb3J0IHsgTnJmRm9ybUNvbnRleHQgfSBmcm9tICcuL2Zvcm0tY29udGV4dC5jbGFzcyc7XG5pbXBvcnQgeyBOcmZTdWJtaXREYXRhIH0gZnJvbSAnLi9mb3JtLXN1Ym1pdC1kYXRhLmNsYXNzJztcbmltcG9ydCB7IE5yZkZvcm1TZXJ2aWNlIH0gZnJvbSAnLi9mb3JtLnNlcnZpY2UnO1xuXG4vKiB0c2xpbnQ6ZGlzYWJsZTogdGVyLXBhZGRlZC1ibG9ja3MgKi9cbi8qKlxuICogQSBjb21wb25lbnQgdG8gYWJzdHJhY3QgdGhlIGZvcm0gaW1wbGVtZW50YXRpb25cbiAqXG4gKiBJdCBob2xkcyB0aGUgdmFsaWRhdGlvbiBhbmQgdGhlIHN1Ym1pdCBsb2dpY1xuICpcbiAqIEBleGFtcGxlXG4gKiA8Zm9ybSBucmZGb3JtIChucmZTdWJtaXQpPVwiYUNhbGxiYWNrKCRldmVudClcIj5cbiAqICAvLyBJbnB1dHNcbiAqIDwvZm9ybT5cbiAqL1xuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW25yZkZvcm1dJyxcbiAgZXhwb3J0QXM6ICducmZGb3JtJyxcbn0pXG5leHBvcnQgY2xhc3MgTnJmRm9ybURpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNvbnN0cnVjdG9yKFxuICAgIEBPcHRpb25hbCgpIHByaXZhdGUgcmVhZG9ubHkgdGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPGFueT4sXG4gICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSByZWFkb25seSB2aWV3Q29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmLFxuICAgIEBPcHRpb25hbCgpIHByaXZhdGUgcmVhZG9ubHkgZm9ybVNlcnZpY2U6IE5yZkZvcm1TZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgKSB7XG4gICAgaWYgKCFmb3JtU2VydmljZSkge1xuICAgICAgdGhpcy5mb3JtU2VydmljZSA9IG5ldyBOcmZGb3JtU2VydmljZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXByZXNlbnRzIGFuIEVudGl0eSBNb2RlbCB0aGF0IGNvbWVzIGZyb20gRGF0YWJhc2VcbiAgICovXG4gIEBJbnB1dCgpXG4gIHNldCBucmZFbnRpdHkoZW50aXR5OiBhbnkpIHtcbiAgICB0aGlzLmZvcm1TZXJ2aWNlLmVudGl0eSA9IGVudGl0eTtcbiAgfVxuICBnZXQgbnJmRW50aXR5KCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybVNlcnZpY2UuZW50aXR5O1xuICB9XG5cbiAgZ2V0IGZvcm1EYXRhKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybVNlcnZpY2UuZm9ybURhdGE7XG4gIH1cblxuICBnZXQgZm9ybUdyb3VwKCk6IEZvcm1Hcm91cCB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybVNlcnZpY2UuZm9ybUdyb3VwO1xuICB9XG5cbiAgLyoqXG4gICAqIEEgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGNhbGxlZCB3aGVuIHRoZSBmb3JtIGlzIHZhbGlkIGFuZCBhIHN1Ym1pdCBldmVudCBpcyB0cmlnZ2VyZWRcbiAgICogYnkgYSBidXR0b24gY2xpY2sgb3IgcHJvZ3JhbW1hdGljYWxseS5cbiAgICovXG4gIEBPdXRwdXQoKVxuICBnZXQgbnJmU3VibWl0KCk6IEV2ZW50RW1pdHRlcjxOcmZTdWJtaXREYXRhPiB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybVNlcnZpY2Uuc3VibWl0JDtcbiAgfVxuXG5cbiAgLyoqXG4gICAqIEluaXQgYW4gZW1wdHkgbnJmRW50aXR5LCBpbiBjYXNlIG5vbmUgd2hlcmUgcHJvdmlkZWQuXG4gICAqL1xuICBuZ09uSW5pdCgpIHtcbiAgICBpZiAoIXRoaXMubnJmRW50aXR5KSB7XG4gICAgICB0aGlzLm5yZkVudGl0eSA9IHt9O1xuICAgIH1cblxuICAgIHRoaXMucmVuZGVyVmlldygpO1xuICB9XG5cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLm5yZlN1Ym1pdC5jb21wbGV0ZSgpO1xuICB9XG5cblxuICBwcml2YXRlIHJlbmRlclZpZXcoKSB7XG4gICAgaWYgKHRoaXMudGVtcGxhdGVSZWYgJiYgdGhpcy52aWV3Q29udGFpbmVyUmVmKSB7XG4gICAgICBjb25zdCBlbWJlZGRlZFZpZXdSZWYgPSB0aGlzLnZpZXdDb250YWluZXJSZWYuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMudGVtcGxhdGVSZWYsIG5ldyBOcmZGb3JtQ29udGV4dCh0aGlzKSk7XG4gICAgICBjb25zdCBmb3JtTmF0aXZlID0gZW1iZWRkZWRWaWV3UmVmLnJvb3ROb2Rlc1swXTtcbiAgICAgIHRoaXMucmVuZGVyZXIubGlzdGVuKGZvcm1OYXRpdmUsICdzdWJtaXQnLCBldmVudCA9PiB0aGlzLmZvcm1TdWJtaXRXcmFwcGVyKGV2ZW50KSk7XG4gICAgfVxuICB9XG5cblxuICAvKipcbiAgICogIyBTaG91bGQgbm90IGJlIGNhbGxlZCBkaXJlY3RseSFcbiAgICogVGhpcyBtZXRob2Qgd3JhcHMgdGhlIGZvcm0gdmFsaWRhdGlvbiBhbmQgY2FsbCBbbnJmU3VibWl0XXtAbGluayBOcmZGb3JtRGlyZWN0aXZlI25yZlN1Ym1pdH1cbiAgICovXG4gIEBIb3N0TGlzdGVuZXIoJ3N1Ym1pdCcsIFsnJGV2ZW50J10pXG4gIGZvcm1TdWJtaXRXcmFwcGVyKCRldmVudDogRXZlbnQpIHtcbiAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgIGlmICghdGhpcy5mb3JtR3JvdXAudmFsaWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLm5yZlN1Ym1pdC5lbWl0KG5ldyBOcmZTdWJtaXREYXRhKHRoaXMsICRldmVudCkpO1xuICB9XG59XG4iXX0=