@tft/crispr-forms 13.0.9 → 13.0.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -18,9 +18,11 @@ export class CrisprFormComponent {
18
18
  this.statusChanges = this.form.statusChanges;
19
19
  this.subs = [];
20
20
  }
21
- ngOnInit() {
21
+ ngOnChanges(changes) {
22
22
  // build out the form, note that we pass in the form as the third argument and the function modifies it
23
- buildFormGroupFromConfig(this.config, this.value, this.form);
23
+ if (changes.config || changes.value || changes.form) {
24
+ buildFormGroupFromConfig(this.config, this.value, this.form);
25
+ }
24
26
  }
25
27
  handleSubmit() {
26
28
  this.form.markAllAsTouched();
@@ -31,7 +33,7 @@ export class CrisprFormComponent {
31
33
  }
32
34
  }
33
35
  CrisprFormComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.1", ngImport: i0, type: CrisprFormComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
34
- CrisprFormComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.1", type: CrisprFormComponent, selector: "crispr-form", inputs: { config: "config", form: "form", value: "value" }, outputs: { submitted: "submitted", valueChanges: "valueChanges", statusChanges: "statusChanges" }, viewQueries: [{ propertyName: "submitTrigger", first: true, predicate: ["submitTrigger"], descendants: true }], ngImport: i0, template: "<form\n class=\"crispr-form\"\n [ngClass]=\"config.classes\"\n [formGroup]=\"form\"\n (ngSubmit)=\"handleSubmit()\"\n [autocomplete]=\"config.autocomplete || 'off'\"\n [errorDictionary]=\"config.errorDictionary\"\n #ngFormElement=\"ngForm\">\n\n <ng-container\n *ngFor=\"let field of config.fields;\"\n crisprField\n [value]=\"value | initialControlValue : field\"\n [config]=\"field\"\n [group]=\"form\">\n </ng-container>\n <!-- Hidden button, programmatically clicked when crispr form triggerSubmit function called.\n Uses a hidden button with type=\"submit\" because it will trigger both native form submit event\n (which the error handler has to listen for) and ngSubmit event -->\n <button #submitTrigger class=\"submit-trigger\" type=\"submit\">\n </button>\n</form>\n", styles: [".submit-trigger{display:none}\n"], directives: [{ type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i2.ControlErrorsFormDirective, selector: "form", inputs: ["errorDictionary"] }, { type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i2.ControlErrorContainerDirective, selector: "[controlErrorContainer], [formGroup]" }, { type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i4.CrisprFieldDirective, selector: "[crisprField]", inputs: ["config", "group", "value"] }], pipes: { "initialControlValue": i5.InitialControlValuePipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush, preserveWhitespaces: true });
36
+ CrisprFormComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.1", type: CrisprFormComponent, selector: "crispr-form", inputs: { config: "config", form: "form", value: "value" }, outputs: { submitted: "submitted", valueChanges: "valueChanges", statusChanges: "statusChanges" }, viewQueries: [{ propertyName: "submitTrigger", first: true, predicate: ["submitTrigger"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<form\n class=\"crispr-form\"\n [ngClass]=\"config.classes\"\n [formGroup]=\"form\"\n (ngSubmit)=\"handleSubmit()\"\n [autocomplete]=\"config.autocomplete || 'off'\"\n [errorDictionary]=\"config.errorDictionary\"\n #ngFormElement=\"ngForm\">\n\n <ng-container\n *ngFor=\"let field of config.fields;\"\n crisprField\n [value]=\"value | initialControlValue : field\"\n [config]=\"field\"\n [group]=\"form\">\n </ng-container>\n <!-- Hidden button, programmatically clicked when crispr form triggerSubmit function called.\n Uses a hidden button with type=\"submit\" because it will trigger both native form submit event\n (which the error handler has to listen for) and ngSubmit event -->\n <button #submitTrigger class=\"submit-trigger\" type=\"submit\">\n </button>\n</form>\n", styles: [".submit-trigger{display:none}\n"], directives: [{ type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i2.ControlErrorsFormDirective, selector: "form", inputs: ["errorDictionary"] }, { type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i2.ControlErrorContainerDirective, selector: "[controlErrorContainer], [formGroup]" }, { type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i4.CrisprFieldDirective, selector: "[crisprField]", inputs: ["config", "group", "value"] }], pipes: { "initialControlValue": i5.InitialControlValuePipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush, preserveWhitespaces: true });
35
37
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.1", ngImport: i0, type: CrisprFormComponent, decorators: [{
36
38
  type: Component,
37
39
  args: [{ selector: 'crispr-form', changeDetection: ChangeDetectionStrategy.OnPush, template: "<form\n class=\"crispr-form\"\n [ngClass]=\"config.classes\"\n [formGroup]=\"form\"\n (ngSubmit)=\"handleSubmit()\"\n [autocomplete]=\"config.autocomplete || 'off'\"\n [errorDictionary]=\"config.errorDictionary\"\n #ngFormElement=\"ngForm\">\n\n <ng-container\n *ngFor=\"let field of config.fields;\"\n crisprField\n [value]=\"value | initialControlValue : field\"\n [config]=\"field\"\n [group]=\"form\">\n </ng-container>\n <!-- Hidden button, programmatically clicked when crispr form triggerSubmit function called.\n Uses a hidden button with type=\"submit\" because it will trigger both native form submit event\n (which the error handler has to listen for) and ngSubmit event -->\n <button #submitTrigger class=\"submit-trigger\" type=\"submit\">\n </button>\n</form>\n", styles: [".submit-trigger{display:none}\n"] }]
@@ -51,4 +53,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.1", ngImpor
51
53
  type: ViewChild,
52
54
  args: ['submitTrigger']
53
55
  }] } });
54
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NyaXNwci1mb3Jtcy9zcmMvbGliL2Zvcm0vZm9ybS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NyaXNwci1mb3Jtcy9zcmMvbGliL2Zvcm0vZm9ybS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsWUFBWSxFQUFFLHVCQUF1QixFQUFhLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUksT0FBTyxFQUFFLFNBQVMsRUFBVSxNQUFNLGdCQUFnQixDQUFDO0FBRW5ELE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNELE9BQU8sRUFBZ0IsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7Ozs7O0FBT2hELE1BQU0sT0FBTyxtQkFBbUI7SUFOaEM7UUFTVyxTQUFJLEdBQWMsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDcEMsVUFBSyxHQUFzQixJQUFJLENBQUM7UUFFL0IsY0FBUyxHQUFHLElBQUksWUFBWSxFQUFhLENBQUM7UUFDcEQsc0VBQXNFO1FBQzVELGlCQUFZLEdBQW9CLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDO1FBQ3ZELGtCQUFhLEdBQXVCLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDO1FBRXRFLFNBQUksR0FBbUIsRUFBRSxDQUFDO0tBaUIzQjtJQWJDLFFBQVE7UUFDTix1R0FBdUc7UUFDdkcsd0JBQXdCLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMvRCxDQUFDO0lBRUQsWUFBWTtRQUNWLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUM3QixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVELGFBQWE7UUFDWCxJQUFJLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUMzQyxDQUFDOztnSEEzQlUsbUJBQW1CO29HQUFuQixtQkFBbUIsa1VDWGhDLDJ5QkFzQkE7MkZEWGEsbUJBQW1CO2tCQU4vQixTQUFTOytCQUNFLGFBQWEsbUJBR04sdUJBQXVCLENBQUMsTUFBTTs4QkFJdEMsTUFBTTtzQkFBZCxLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBRUksU0FBUztzQkFBbEIsTUFBTTtnQkFFRyxZQUFZO3NCQUFyQixNQUFNO2dCQUNHLGFBQWE7c0JBQXRCLE1BQU07Z0JBSXFCLGFBQWE7c0JBQXhDLFNBQVM7dUJBQUMsZUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBPbkRlc3Ryb3ksIFZpZXdDaGlsZCwgRWxlbWVudFJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUdyb3VwLCBOZ0Zvcm0gfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBDb250cm9sR3JvdXBWYWx1ZSwgQ29udHJvbFZhbHVlLCBGb3JtQ29uZmlnIH0gZnJvbSAnLi4vbW9kZWxzJztcbmltcG9ydCB7IGJ1aWxkRm9ybUdyb3VwRnJvbUNvbmZpZyB9IGZyb20gJy4uL2Zvcm0uaGVscGVycyc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24sIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2NyaXNwci1mb3JtJyxcbiAgc3R5bGVVcmxzOiBbJ2Zvcm0uY29tcG9uZW50LnNjc3MnXSxcbiAgdGVtcGxhdGVVcmw6ICdmb3JtLmNvbXBvbmVudC5odG1sJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgQ3Jpc3ByRm9ybUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIC8vIGlmIG5vIGZvcm0gaGFzIGJlZW4gcGFzc2VkIGluIGJ5IGNvbnN1bWluZyBjb21wb25lbnQsIHdlIGNyZWF0ZSBhbiBlbXB0eSBncm91cCB0byBidWlsZCBvdXRcbiAgQElucHV0KCkgY29uZmlnOiBGb3JtQ29uZmlnO1xuICBASW5wdXQoKSBmb3JtOiBGb3JtR3JvdXAgPSBuZXcgRm9ybUdyb3VwKHt9KTtcbiAgQElucHV0KCkgdmFsdWU6IENvbnRyb2xHcm91cFZhbHVlID0gbnVsbDtcblxuICBAT3V0cHV0KCkgc3VibWl0dGVkID0gbmV3IEV2ZW50RW1pdHRlcjxGb3JtR3JvdXA+KCk7XG4gIC8vIHByb3h5IHZhbHVlIGFuZCBzdGF0dXMgY2hhbmdlIGV2ZW50cyB0aHJvdWdoIHRvIGNvbnN1bWluZyBjb21wb25lbnRcbiAgQE91dHB1dCgpIHZhbHVlQ2hhbmdlczogT2JzZXJ2YWJsZTxhbnk+ID0gdGhpcy5mb3JtLnZhbHVlQ2hhbmdlcztcbiAgQE91dHB1dCgpIHN0YXR1c0NoYW5nZXM6IE9ic2VydmFibGU8c3RyaW5nPiA9IHRoaXMuZm9ybS5zdGF0dXNDaGFuZ2VzO1xuXG4gIHN1YnM6IFN1YnNjcmlwdGlvbltdID0gW107XG5cbiAgQFZpZXdDaGlsZCgnc3VibWl0VHJpZ2dlcicpIHN1Ym1pdFRyaWdnZXI6IEVsZW1lbnRSZWY8SFRNTEJ1dHRvbkVsZW1lbnQ+O1xuXG4gIG5nT25Jbml0KCkge1xuICAgIC8vIGJ1aWxkIG91dCB0aGUgZm9ybSwgbm90ZSB0aGF0IHdlIHBhc3MgaW4gdGhlIGZvcm0gYXMgdGhlIHRoaXJkIGFyZ3VtZW50IGFuZCB0aGUgZnVuY3Rpb24gbW9kaWZpZXMgaXRcbiAgICBidWlsZEZvcm1Hcm91cEZyb21Db25maWcodGhpcy5jb25maWcsIHRoaXMudmFsdWUsIHRoaXMuZm9ybSk7XG4gIH1cblxuICBoYW5kbGVTdWJtaXQoKSB7XG4gICAgdGhpcy5mb3JtLm1hcmtBbGxBc1RvdWNoZWQoKTtcbiAgICB0aGlzLnN1Ym1pdHRlZC5lbWl0KHRoaXMuZm9ybSk7XG4gIH1cblxuICB0cmlnZ2VyU3VibWl0KCkge1xuICAgIHRoaXMuc3VibWl0VHJpZ2dlci5uYXRpdmVFbGVtZW50LmNsaWNrKCk7XG4gIH1cbn1cbiIsIjxmb3JtXG4gIGNsYXNzPVwiY3Jpc3ByLWZvcm1cIlxuICBbbmdDbGFzc109XCJjb25maWcuY2xhc3Nlc1wiXG4gIFtmb3JtR3JvdXBdPVwiZm9ybVwiXG4gIChuZ1N1Ym1pdCk9XCJoYW5kbGVTdWJtaXQoKVwiXG4gIFthdXRvY29tcGxldGVdPVwiY29uZmlnLmF1dG9jb21wbGV0ZSB8fCAnb2ZmJ1wiXG4gIFtlcnJvckRpY3Rpb25hcnldPVwiY29uZmlnLmVycm9yRGljdGlvbmFyeVwiXG4gICNuZ0Zvcm1FbGVtZW50PVwibmdGb3JtXCI+XG5cbiAgPG5nLWNvbnRhaW5lclxuICAgICpuZ0Zvcj1cImxldCBmaWVsZCBvZiBjb25maWcuZmllbGRzO1wiXG4gICAgY3Jpc3ByRmllbGRcbiAgICBbdmFsdWVdPVwidmFsdWUgfCBpbml0aWFsQ29udHJvbFZhbHVlIDogZmllbGRcIlxuICAgIFtjb25maWddPVwiZmllbGRcIlxuICAgIFtncm91cF09XCJmb3JtXCI+XG4gIDwvbmctY29udGFpbmVyPlxuICA8IS0tIEhpZGRlbiBidXR0b24sIHByb2dyYW1tYXRpY2FsbHkgY2xpY2tlZCB3aGVuIGNyaXNwciBmb3JtIHRyaWdnZXJTdWJtaXQgZnVuY3Rpb24gY2FsbGVkLlxuICAgIFVzZXMgYSBoaWRkZW4gYnV0dG9uIHdpdGggdHlwZT1cInN1Ym1pdFwiIGJlY2F1c2UgaXQgd2lsbCB0cmlnZ2VyIGJvdGggbmF0aXZlIGZvcm0gc3VibWl0IGV2ZW50XG4gICAgKHdoaWNoIHRoZSBlcnJvciBoYW5kbGVyIGhhcyB0byBsaXN0ZW4gZm9yKSBhbmQgbmdTdWJtaXQgZXZlbnQgIC0tPlxuICA8YnV0dG9uICNzdWJtaXRUcmlnZ2VyIGNsYXNzPVwic3VibWl0LXRyaWdnZXJcIiB0eXBlPVwic3VibWl0XCI+XG4gIDwvYnV0dG9uPlxuPC9mb3JtPlxuIl19
56
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NyaXNwci1mb3Jtcy9zcmMvbGliL2Zvcm0vZm9ybS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NyaXNwci1mb3Jtcy9zcmMvbGliL2Zvcm0vZm9ybS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQTRCLE1BQU0sZUFBZSxDQUFDO0FBQ2pKLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUzQyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzRCxPQUFPLEVBQWdCLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7Ozs7OztBQU9oRCxNQUFNLE9BQU8sbUJBQW1CO0lBTmhDO1FBU1csU0FBSSxHQUFjLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3BDLFVBQUssR0FBc0IsSUFBSSxDQUFDO1FBRS9CLGNBQVMsR0FBRyxJQUFJLFlBQVksRUFBYSxDQUFDO1FBQ3BELHNFQUFzRTtRQUM1RCxpQkFBWSxHQUFvQixJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQztRQUN2RCxrQkFBYSxHQUF1QixJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQztRQUV0RSxTQUFJLEdBQW1CLEVBQUUsQ0FBQztLQW1CM0I7SUFmQyxXQUFXLENBQUMsT0FBc0I7UUFDaEMsdUdBQXVHO1FBQ3ZHLElBQUcsT0FBTyxDQUFDLE1BQU0sSUFBSSxPQUFPLENBQUMsS0FBSyxJQUFJLE9BQU8sQ0FBQyxJQUFJLEVBQUU7WUFDbEQsd0JBQXdCLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUM5RDtJQUNILENBQUM7SUFFRCxZQUFZO1FBQ1YsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQzdCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRUQsYUFBYTtRQUNYLElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQzNDLENBQUM7O2dIQTdCVSxtQkFBbUI7b0dBQW5CLG1CQUFtQix1VkNYaEMsMnlCQXNCQTsyRkRYYSxtQkFBbUI7a0JBTi9CLFNBQVM7K0JBQ0UsYUFBYSxtQkFHTix1QkFBdUIsQ0FBQyxNQUFNOzhCQUl0QyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFFSSxTQUFTO3NCQUFsQixNQUFNO2dCQUVHLFlBQVk7c0JBQXJCLE1BQU07Z0JBQ0csYUFBYTtzQkFBdEIsTUFBTTtnQkFJcUIsYUFBYTtzQkFBeEMsU0FBUzt1QkFBQyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBWaWV3Q2hpbGQsIEVsZW1lbnRSZWYsIE9uQ2hhbmdlcywgU2ltcGxlQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQ29udHJvbEdyb3VwVmFsdWUsIEZvcm1Db25maWcgfSBmcm9tICcuLi9tb2RlbHMnO1xuaW1wb3J0IHsgYnVpbGRGb3JtR3JvdXBGcm9tQ29uZmlnIH0gZnJvbSAnLi4vZm9ybS5oZWxwZXJzJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY3Jpc3ByLWZvcm0nLFxuICBzdHlsZVVybHM6IFsnZm9ybS5jb21wb25lbnQuc2NzcyddLFxuICB0ZW1wbGF0ZVVybDogJ2Zvcm0uY29tcG9uZW50Lmh0bWwnLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBDcmlzcHJGb3JtQ29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzIHtcbiAgLy8gaWYgbm8gZm9ybSBoYXMgYmVlbiBwYXNzZWQgaW4gYnkgY29uc3VtaW5nIGNvbXBvbmVudCwgd2UgY3JlYXRlIGFuIGVtcHR5IGdyb3VwIHRvIGJ1aWxkIG91dFxuICBASW5wdXQoKSBjb25maWc6IEZvcm1Db25maWc7XG4gIEBJbnB1dCgpIGZvcm06IEZvcm1Hcm91cCA9IG5ldyBGb3JtR3JvdXAoe30pO1xuICBASW5wdXQoKSB2YWx1ZTogQ29udHJvbEdyb3VwVmFsdWUgPSBudWxsO1xuXG4gIEBPdXRwdXQoKSBzdWJtaXR0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPEZvcm1Hcm91cD4oKTtcbiAgLy8gcHJveHkgdmFsdWUgYW5kIHN0YXR1cyBjaGFuZ2UgZXZlbnRzIHRocm91Z2ggdG8gY29uc3VtaW5nIGNvbXBvbmVudFxuICBAT3V0cHV0KCkgdmFsdWVDaGFuZ2VzOiBPYnNlcnZhYmxlPGFueT4gPSB0aGlzLmZvcm0udmFsdWVDaGFuZ2VzO1xuICBAT3V0cHV0KCkgc3RhdHVzQ2hhbmdlczogT2JzZXJ2YWJsZTxzdHJpbmc+ID0gdGhpcy5mb3JtLnN0YXR1c0NoYW5nZXM7XG5cbiAgc3ViczogU3Vic2NyaXB0aW9uW10gPSBbXTtcblxuICBAVmlld0NoaWxkKCdzdWJtaXRUcmlnZ2VyJykgc3VibWl0VHJpZ2dlcjogRWxlbWVudFJlZjxIVE1MQnV0dG9uRWxlbWVudD47XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgIC8vIGJ1aWxkIG91dCB0aGUgZm9ybSwgbm90ZSB0aGF0IHdlIHBhc3MgaW4gdGhlIGZvcm0gYXMgdGhlIHRoaXJkIGFyZ3VtZW50IGFuZCB0aGUgZnVuY3Rpb24gbW9kaWZpZXMgaXRcbiAgICBpZihjaGFuZ2VzLmNvbmZpZyB8fCBjaGFuZ2VzLnZhbHVlIHx8IGNoYW5nZXMuZm9ybSkge1xuICAgICAgYnVpbGRGb3JtR3JvdXBGcm9tQ29uZmlnKHRoaXMuY29uZmlnLCB0aGlzLnZhbHVlLCB0aGlzLmZvcm0pO1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZVN1Ym1pdCgpIHtcbiAgICB0aGlzLmZvcm0ubWFya0FsbEFzVG91Y2hlZCgpO1xuICAgIHRoaXMuc3VibWl0dGVkLmVtaXQodGhpcy5mb3JtKTtcbiAgfVxuXG4gIHRyaWdnZXJTdWJtaXQoKSB7XG4gICAgdGhpcy5zdWJtaXRUcmlnZ2VyLm5hdGl2ZUVsZW1lbnQuY2xpY2soKTtcbiAgfVxufVxuIiwiPGZvcm1cbiAgY2xhc3M9XCJjcmlzcHItZm9ybVwiXG4gIFtuZ0NsYXNzXT1cImNvbmZpZy5jbGFzc2VzXCJcbiAgW2Zvcm1Hcm91cF09XCJmb3JtXCJcbiAgKG5nU3VibWl0KT1cImhhbmRsZVN1Ym1pdCgpXCJcbiAgW2F1dG9jb21wbGV0ZV09XCJjb25maWcuYXV0b2NvbXBsZXRlIHx8ICdvZmYnXCJcbiAgW2Vycm9yRGljdGlvbmFyeV09XCJjb25maWcuZXJyb3JEaWN0aW9uYXJ5XCJcbiAgI25nRm9ybUVsZW1lbnQ9XCJuZ0Zvcm1cIj5cblxuICA8bmctY29udGFpbmVyXG4gICAgKm5nRm9yPVwibGV0IGZpZWxkIG9mIGNvbmZpZy5maWVsZHM7XCJcbiAgICBjcmlzcHJGaWVsZFxuICAgIFt2YWx1ZV09XCJ2YWx1ZSB8IGluaXRpYWxDb250cm9sVmFsdWUgOiBmaWVsZFwiXG4gICAgW2NvbmZpZ109XCJmaWVsZFwiXG4gICAgW2dyb3VwXT1cImZvcm1cIj5cbiAgPC9uZy1jb250YWluZXI+XG4gIDwhLS0gSGlkZGVuIGJ1dHRvbiwgcHJvZ3JhbW1hdGljYWxseSBjbGlja2VkIHdoZW4gY3Jpc3ByIGZvcm0gdHJpZ2dlclN1Ym1pdCBmdW5jdGlvbiBjYWxsZWQuXG4gICAgVXNlcyBhIGhpZGRlbiBidXR0b24gd2l0aCB0eXBlPVwic3VibWl0XCIgYmVjYXVzZSBpdCB3aWxsIHRyaWdnZXIgYm90aCBuYXRpdmUgZm9ybSBzdWJtaXQgZXZlbnRcbiAgICAod2hpY2ggdGhlIGVycm9yIGhhbmRsZXIgaGFzIHRvIGxpc3RlbiBmb3IpIGFuZCBuZ1N1Ym1pdCBldmVudCAgLS0+XG4gIDxidXR0b24gI3N1Ym1pdFRyaWdnZXIgY2xhc3M9XCJzdWJtaXQtdHJpZ2dlclwiIHR5cGU9XCJzdWJtaXRcIj5cbiAgPC9idXR0b24+XG48L2Zvcm0+XG4iXX0=
@@ -1672,9 +1672,11 @@ class CrisprFormComponent {
1672
1672
  this.statusChanges = this.form.statusChanges;
1673
1673
  this.subs = [];
1674
1674
  }
1675
- ngOnInit() {
1675
+ ngOnChanges(changes) {
1676
1676
  // build out the form, note that we pass in the form as the third argument and the function modifies it
1677
- buildFormGroupFromConfig(this.config, this.value, this.form);
1677
+ if (changes.config || changes.value || changes.form) {
1678
+ buildFormGroupFromConfig(this.config, this.value, this.form);
1679
+ }
1678
1680
  }
1679
1681
  handleSubmit() {
1680
1682
  this.form.markAllAsTouched();
@@ -1685,7 +1687,7 @@ class CrisprFormComponent {
1685
1687
  }
1686
1688
  }
1687
1689
  CrisprFormComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.1", ngImport: i0, type: CrisprFormComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1688
- CrisprFormComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.1", type: CrisprFormComponent, selector: "crispr-form", inputs: { config: "config", form: "form", value: "value" }, outputs: { submitted: "submitted", valueChanges: "valueChanges", statusChanges: "statusChanges" }, viewQueries: [{ propertyName: "submitTrigger", first: true, predicate: ["submitTrigger"], descendants: true }], ngImport: i0, template: "<form\n class=\"crispr-form\"\n [ngClass]=\"config.classes\"\n [formGroup]=\"form\"\n (ngSubmit)=\"handleSubmit()\"\n [autocomplete]=\"config.autocomplete || 'off'\"\n [errorDictionary]=\"config.errorDictionary\"\n #ngFormElement=\"ngForm\">\n\n <ng-container\n *ngFor=\"let field of config.fields;\"\n crisprField\n [value]=\"value | initialControlValue : field\"\n [config]=\"field\"\n [group]=\"form\">\n </ng-container>\n <!-- Hidden button, programmatically clicked when crispr form triggerSubmit function called.\n Uses a hidden button with type=\"submit\" because it will trigger both native form submit event\n (which the error handler has to listen for) and ngSubmit event -->\n <button #submitTrigger class=\"submit-trigger\" type=\"submit\">\n </button>\n</form>\n", styles: [".submit-trigger{display:none}\n"], directives: [{ type: i4$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i4$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i5.ControlErrorsFormDirective, selector: "form", inputs: ["errorDictionary"] }, { type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i4$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i5.ControlErrorContainerDirective, selector: "[controlErrorContainer], [formGroup]" }, { type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: CrisprFieldDirective, selector: "[crisprField]", inputs: ["config", "group", "value"] }], pipes: { "initialControlValue": InitialControlValuePipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush, preserveWhitespaces: true });
1690
+ CrisprFormComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.1", type: CrisprFormComponent, selector: "crispr-form", inputs: { config: "config", form: "form", value: "value" }, outputs: { submitted: "submitted", valueChanges: "valueChanges", statusChanges: "statusChanges" }, viewQueries: [{ propertyName: "submitTrigger", first: true, predicate: ["submitTrigger"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<form\n class=\"crispr-form\"\n [ngClass]=\"config.classes\"\n [formGroup]=\"form\"\n (ngSubmit)=\"handleSubmit()\"\n [autocomplete]=\"config.autocomplete || 'off'\"\n [errorDictionary]=\"config.errorDictionary\"\n #ngFormElement=\"ngForm\">\n\n <ng-container\n *ngFor=\"let field of config.fields;\"\n crisprField\n [value]=\"value | initialControlValue : field\"\n [config]=\"field\"\n [group]=\"form\">\n </ng-container>\n <!-- Hidden button, programmatically clicked when crispr form triggerSubmit function called.\n Uses a hidden button with type=\"submit\" because it will trigger both native form submit event\n (which the error handler has to listen for) and ngSubmit event -->\n <button #submitTrigger class=\"submit-trigger\" type=\"submit\">\n </button>\n</form>\n", styles: [".submit-trigger{display:none}\n"], directives: [{ type: i4$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i4$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i5.ControlErrorsFormDirective, selector: "form", inputs: ["errorDictionary"] }, { type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i4$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i5.ControlErrorContainerDirective, selector: "[controlErrorContainer], [formGroup]" }, { type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: CrisprFieldDirective, selector: "[crisprField]", inputs: ["config", "group", "value"] }], pipes: { "initialControlValue": InitialControlValuePipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush, preserveWhitespaces: true });
1689
1691
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.1", ngImport: i0, type: CrisprFormComponent, decorators: [{
1690
1692
  type: Component,
1691
1693
  args: [{ selector: 'crispr-form', changeDetection: ChangeDetectionStrategy.OnPush, template: "<form\n class=\"crispr-form\"\n [ngClass]=\"config.classes\"\n [formGroup]=\"form\"\n (ngSubmit)=\"handleSubmit()\"\n [autocomplete]=\"config.autocomplete || 'off'\"\n [errorDictionary]=\"config.errorDictionary\"\n #ngFormElement=\"ngForm\">\n\n <ng-container\n *ngFor=\"let field of config.fields;\"\n crisprField\n [value]=\"value | initialControlValue : field\"\n [config]=\"field\"\n [group]=\"form\">\n </ng-container>\n <!-- Hidden button, programmatically clicked when crispr form triggerSubmit function called.\n Uses a hidden button with type=\"submit\" because it will trigger both native form submit event\n (which the error handler has to listen for) and ngSubmit event -->\n <button #submitTrigger class=\"submit-trigger\" type=\"submit\">\n </button>\n</form>\n", styles: [".submit-trigger{display:none}\n"] }]