UNPKG

@c-standard/angular-devui-extension

Version:

an extensional components lib for devui

82 lines 10.7 kB
import { Component, ContentChildren, EventEmitter, forwardRef, Input, Output, } from '@angular/core'; import { forEach, isEmpty, mergeWith } from 'lodash-es'; import { FormField } from './form-field'; import * as i0 from "@angular/core"; import * as i1 from "@angular/forms"; export class FormGroupComponent extends FormField { constructor(fb) { super(); this.fb = fb; this.groupDataChange = new EventEmitter(); this.control = fb.group({}); } set data(value) { this._data = value; if (this._data) { this.control.patchValue(this._data); } } ngAfterContentInit() { this.addFormControls(this.fields); this.fields?.changes.subscribe((f) => { this.addFormControls(f); }); this.control.valueChanges.subscribe((value) => { this.groupDataChange.emit(value); }); } addFormControls(fields) { if (!fields) return; // dynamic add、set or remove control const changedNames = []; forEach(fields.toArray(), (t) => { if (this.control.contains(t.field)) { this.control.setControl(t.field, t.control); } else { this.control.addControl(t.field, t.control); } changedNames.push(t.field); }); // Note 表单field发生改变时,移除对应的control以保证校验通过 const controlNames = Object.keys(this.control.controls); controlNames.forEach((name) => { if (!changedNames.find((t) => t == name)) { this.control.removeControl(name); } }); // Note: 当表单field改变时,其对应的默认值再次填充 this.control.patchValue(mergeWith(this.control.value, this._data, (o, s) => (isEmpty(o) ? s : o))); } } FormGroupComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: FormGroupComponent, deps: [{ token: i1.FormBuilder }], target: i0.ɵɵFactoryTarget.Component }); FormGroupComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.7", type: FormGroupComponent, selector: "d-form-plugin-group", inputs: { data: "data", field: "field" }, outputs: { groupDataChange: "groupDataChange" }, providers: [ { provide: FormField, useExisting: forwardRef(() => FormGroupComponent), }, ], queries: [{ propertyName: "fields", predicate: FormField }], usesInheritance: true, ngImport: i0, template: ` <ng-content></ng-content> `, isInline: true }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: FormGroupComponent, decorators: [{ type: Component, args: [{ selector: 'd-form-plugin-group', template: ` <ng-content></ng-content> `, providers: [ { provide: FormField, useExisting: forwardRef(() => FormGroupComponent), }, ], }] }], ctorParameters: function () { return [{ type: i1.FormBuilder }]; }, propDecorators: { data: [{ type: Input }], field: [{ type: Input }], groupDataChange: [{ type: Output }], fields: [{ type: ContentChildren, args: [FormField] }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1ncm91cC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL2Zvcm0vZm9ybS1ncm91cC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVILFNBQVMsRUFDVCxlQUFlLEVBQ2YsWUFBWSxFQUNaLFVBQVUsRUFDVixLQUFLLEVBQ0wsTUFBTSxHQUVULE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUN4RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sY0FBYyxDQUFDOzs7QUFZekMsTUFBTSxPQUFPLGtCQUFtQixTQUFRLFNBQVM7SUFlN0MsWUFBb0IsRUFBZTtRQUMvQixLQUFLLEVBQUUsQ0FBQztRQURRLE9BQUUsR0FBRixFQUFFLENBQWE7UUFKekIsb0JBQWUsR0FBc0IsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQU1uRSxJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQWhCRCxJQUNJLElBQUksQ0FBQyxLQUFVO1FBQ2YsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDbkIsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ1osSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ3ZDO0lBQ0wsQ0FBQztJQVlELGtCQUFrQjtRQUNkLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1lBQ2pDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDNUIsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUMxQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNyQyxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFTyxlQUFlLENBQUMsTUFBNkI7UUFDakQsSUFBSSxDQUFDLE1BQU07WUFBRSxPQUFPO1FBQ3BCLG9DQUFvQztRQUNwQyxNQUFNLFlBQVksR0FBYSxFQUFFLENBQUM7UUFDbEMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFO1lBQzVCLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUNoQyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQzthQUMvQztpQkFBTTtnQkFDSCxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQzthQUMvQztZQUNELFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQy9CLENBQUMsQ0FBQyxDQUFDO1FBQ0gsd0NBQXdDO1FBQ3hDLE1BQU0sWUFBWSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN4RCxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDMUIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsRUFBRTtnQkFDdEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDcEM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUNILGdDQUFnQztRQUNoQyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FDbkIsU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUM1RSxDQUFDO0lBQ04sQ0FBQzs7K0dBckRRLGtCQUFrQjttR0FBbEIsa0JBQWtCLHlJQVBoQjtRQUNQO1lBQ0ksT0FBTyxFQUFFLFNBQVM7WUFDbEIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQztTQUNwRDtLQUNKLGlEQWNnQixTQUFTLG9EQXBCaEIsNkJBQTZCOzJGQVE5QixrQkFBa0I7a0JBVjlCLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLHFCQUFxQjtvQkFDL0IsUUFBUSxFQUFFLDZCQUE2QjtvQkFDdkMsU0FBUyxFQUFFO3dCQUNQOzRCQUNJLE9BQU8sRUFBRSxTQUFTOzRCQUNsQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxtQkFBbUIsQ0FBQzt5QkFDcEQ7cUJBQ0o7aUJBQ0o7a0dBSU8sSUFBSTtzQkFEUCxLQUFLO2dCQVFHLEtBQUs7c0JBQWIsS0FBSztnQkFDSSxlQUFlO3NCQUF4QixNQUFNO2dCQUNxQixNQUFNO3NCQUFqQyxlQUFlO3VCQUFDLFNBQVMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gICAgQWZ0ZXJDb250ZW50SW5pdCxcclxuICAgIENvbXBvbmVudCxcclxuICAgIENvbnRlbnRDaGlsZHJlbixcclxuICAgIEV2ZW50RW1pdHRlcixcclxuICAgIGZvcndhcmRSZWYsXHJcbiAgICBJbnB1dCxcclxuICAgIE91dHB1dCxcclxuICAgIFF1ZXJ5TGlzdCxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgZm9yRWFjaCwgaXNFbXB0eSwgbWVyZ2VXaXRoIH0gZnJvbSAnbG9kYXNoLWVzJztcclxuaW1wb3J0IHsgRm9ybUZpZWxkIH0gZnJvbSAnLi9mb3JtLWZpZWxkJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdkLWZvcm0tcGx1Z2luLWdyb3VwJyxcclxuICAgIHRlbXBsYXRlOiBgIDxuZy1jb250ZW50PjwvbmctY29udGVudD4gYCxcclxuICAgIHByb3ZpZGVyczogW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcHJvdmlkZTogRm9ybUZpZWxkLFxyXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBGb3JtR3JvdXBDb21wb25lbnQpLFxyXG4gICAgICAgIH0sXHJcbiAgICBdLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgRm9ybUdyb3VwQ29tcG9uZW50IGV4dGVuZHMgRm9ybUZpZWxkIGltcGxlbWVudHMgQWZ0ZXJDb250ZW50SW5pdCB7XHJcbiAgICBwcml2YXRlIF9kYXRhPzogYW55O1xyXG4gICAgQElucHV0KClcclxuICAgIHNldCBkYXRhKHZhbHVlOiBhbnkpIHtcclxuICAgICAgICB0aGlzLl9kYXRhID0gdmFsdWU7XHJcbiAgICAgICAgaWYgKHRoaXMuX2RhdGEpIHtcclxuICAgICAgICAgICAgdGhpcy5jb250cm9sLnBhdGNoVmFsdWUodGhpcy5fZGF0YSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIEBJbnB1dCgpIGZpZWxkITogc3RyaW5nO1xyXG4gICAgQE91dHB1dCgpIGdyb3VwRGF0YUNoYW5nZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICAgIEBDb250ZW50Q2hpbGRyZW4oRm9ybUZpZWxkKSBmaWVsZHMhOiBRdWVyeUxpc3Q8Rm9ybUZpZWxkPjtcclxuICAgIGNvbnRyb2w6IEZvcm1Hcm91cDtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGZiOiBGb3JtQnVpbGRlcikge1xyXG4gICAgICAgIHN1cGVyKCk7XHJcbiAgICAgICAgdGhpcy5jb250cm9sID0gZmIuZ3JvdXAoe30pO1xyXG4gICAgfVxyXG5cclxuICAgIG5nQWZ0ZXJDb250ZW50SW5pdCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmFkZEZvcm1Db250cm9scyh0aGlzLmZpZWxkcyk7XHJcbiAgICAgICAgdGhpcy5maWVsZHM/LmNoYW5nZXMuc3Vic2NyaWJlKChmKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuYWRkRm9ybUNvbnRyb2xzKGYpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuY29udHJvbC52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmdyb3VwRGF0YUNoYW5nZS5lbWl0KHZhbHVlKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFkZEZvcm1Db250cm9scyhmaWVsZHM/OiBRdWVyeUxpc3Q8Rm9ybUZpZWxkPikge1xyXG4gICAgICAgIGlmICghZmllbGRzKSByZXR1cm47XHJcbiAgICAgICAgLy8gZHluYW1pYyBhZGTjgIFzZXQgb3IgcmVtb3ZlIGNvbnRyb2xcclxuICAgICAgICBjb25zdCBjaGFuZ2VkTmFtZXM6IHN0cmluZ1tdID0gW107XHJcbiAgICAgICAgZm9yRWFjaChmaWVsZHMudG9BcnJheSgpLCAodCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5jb250cm9sLmNvbnRhaW5zKHQuZmllbGQpKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRyb2wuc2V0Q29udHJvbCh0LmZpZWxkLCB0LmNvbnRyb2wpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb250cm9sLmFkZENvbnRyb2wodC5maWVsZCwgdC5jb250cm9sKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjaGFuZ2VkTmFtZXMucHVzaCh0LmZpZWxkKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICAvLyBOb3RlIOihqOWNlWZpZWxk5Y+R55Sf5pS55Y+Y5pe277yM56e76Zmk5a+55bqU55qEY29udHJvbOS7peS/neivgeagoemqjOmAmui/h1xyXG4gICAgICAgIGNvbnN0IGNvbnRyb2xOYW1lcyA9IE9iamVjdC5rZXlzKHRoaXMuY29udHJvbC5jb250cm9scyk7XHJcbiAgICAgICAgY29udHJvbE5hbWVzLmZvckVhY2goKG5hbWUpID0+IHtcclxuICAgICAgICAgICAgaWYgKCFjaGFuZ2VkTmFtZXMuZmluZCgodCkgPT4gdCA9PSBuYW1lKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb250cm9sLnJlbW92ZUNvbnRyb2wobmFtZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICAvLyBOb3RlOiDlvZPooajljZVmaWVsZOaUueWPmOaXtu+8jOWFtuWvueW6lOeahOm7mOiupOWAvOWGjeasoeWhq+WFhVxyXG4gICAgICAgIHRoaXMuY29udHJvbC5wYXRjaFZhbHVlKFxyXG4gICAgICAgICAgICBtZXJnZVdpdGgodGhpcy5jb250cm9sLnZhbHVlLCB0aGlzLl9kYXRhLCAobywgcykgPT4gKGlzRW1wdHkobykgPyBzIDogbykpXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxufVxyXG4iXX0=