@c-standard/angular-devui-extension
Version:
an extensional components lib for devui
82 lines • 10.7 kB
JavaScript
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=