geminis-ng
Version:
This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 8.2.14.
149 lines • 17.4 kB
JavaScript
import { ChangeDetectorRef, Directive, ElementRef, Input, Optional, Renderer2 } from '@angular/core';
import { ControlContainer, FormGroup, FormGroupDirective } from '@angular/forms';
import { HttpClient } from '@angular/common/http';
import { NzModalRef } from 'ng-zorro-antd/modal';
import { GnJsonUtils, GnObjectUtils } from 'geminis-ng-core';
export function controlContainerFactory() {
const formGroupDirective = new FormGroupDirective([], []);
formGroupDirective.form = new FormGroup({});
return formGroupDirective;
}
export class GnFormDirective {
constructor(controlContainer, elementRef, renderer, http, changeDetectorRef, modalRef) {
this.controlContainer = controlContainer;
this.elementRef = elementRef;
this.renderer = renderer;
this.http = http;
this.changeDetectorRef = changeDetectorRef;
this.binded = false;
this.labelWidth = 6;
this.controlWidth = 18;
this.autoLoadData = true;
this.submitMethod = 'put';
this.loadMethod = 'post';
this.format = 'json';
this.formGroup = controlContainer.control;
this.formGroup.valueChanges.subscribe(newValue => {
if (modalRef) {
modalRef.updateConfig({ nzOkDisabled: this.formGroup.invalid });
}
if (this.innerBindValue && this.binded) {
Object.assign(this.innerBindValue, newValue);
}
});
}
set cols(value) {
this.colsValue = value;
if (!this.colsValue || this.colsValue < 1) {
return;
}
this.renderer.setStyle(this.elementRef.nativeElement, 'display', 'grid');
this.renderer.setStyle(this.elementRef.nativeElement, 'grid-template-columns', 'repeat(' + this.colsValue + ', 1fr)');
}
get cols() {
return this.colsValue;
}
set bindValue(value) {
this.binded = false;
this.innerBindValue = value;
this.formGroup.patchValue(value);
this.binded = true;
}
setValue(value) {
this.defaultValue = value;
this.formGroup.patchValue(value);
}
get submitValue() {
let submitValue;
if (this.defaultValue) {
submitValue = Object.assign(GnObjectUtils.deepCopy(this.defaultValue), this.formGroup.value);
}
else {
submitValue = this.formGroup.value;
}
if (this.format === 'form') {
submitValue = GnJsonUtils.obj2FormData(submitValue);
}
return submitValue;
}
submit() {
if (!this.url) {
return Promise.resolve(this.submitValue);
}
else {
const options = Object.assign({ body: this.submitValue }, this.submitOptions);
return this.http.request(this.submitMethod, this.url, options).toPromise();
}
}
loadData() {
if (!this.url || !this.dataId) {
if (this.defaultValue) {
this.formGroup.patchValue(this.defaultValue);
}
return Promise.resolve(null);
}
const queryParameter = {
pageSize: 1,
pageIndex: 0,
includes: this.dataIncludes,
filterGroup: {
type: 'and',
filters: [{ field: this.dataKey, compareType: '=', value: this.dataId }]
}
};
const options = Object.assign({ body: queryParameter }, this.loadOptions);
return this.http.request(this.loadMethod, this.url, options)
.toPromise()
.then((resp) => {
if (resp.content.length === 0) {
throw new Error(`未找到数据[${this.dataId}]`);
}
this.defaultValue = this.defaultValue || {};
Object.assign(this.defaultValue, resp.content[0]);
this.formGroup.patchValue(this.defaultValue);
return this.defaultValue;
});
}
ngOnInit() {
if (this.autoLoadData) {
this.loadData();
}
}
ngAfterViewInit() {
this.changeDetectorRef.detectChanges();
}
}
GnFormDirective.decorators = [
{ type: Directive, args: [{
selector: '[gn-form]',
providers: [
{ provide: ControlContainer, useFactory: controlContainerFactory }
]
},] }
];
GnFormDirective.ctorParameters = () => [
{ type: ControlContainer },
{ type: ElementRef },
{ type: Renderer2 },
{ type: HttpClient },
{ type: ChangeDetectorRef },
{ type: NzModalRef, decorators: [{ type: Optional }] }
];
GnFormDirective.propDecorators = {
url: [{ type: Input }],
labelWidth: [{ type: Input }],
controlWidth: [{ type: Input }],
dataId: [{ type: Input }],
dataKey: [{ type: Input }],
dataIncludes: [{ type: Input }],
autoLoadData: [{ type: Input }],
submitMethod: [{ type: Input }],
loadMethod: [{ type: Input }],
format: [{ type: Input }],
submitOptions: [{ type: Input }],
loadOptions: [{ type: Input }],
defaultValue: [{ type: Input }],
cols: [{ type: Input }],
bindValue: [{ type: Input }]
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9nZW1pbmlzLW5nL3NyYy9mb3JtL2Zvcm0uZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCxpQkFBaUIsRUFDakIsU0FBUyxFQUNULFVBQVUsRUFDVixLQUFLLEVBRUwsUUFBUSxFQUNSLFNBQVMsRUFDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUMsZ0JBQWdCLEVBQUUsU0FBUyxFQUFFLGtCQUFrQixFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDL0UsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQ2hELE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUMvQyxPQUFPLEVBQUMsV0FBVyxFQUFFLGFBQWEsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBRTNELE1BQU0sVUFBVSx1QkFBdUI7SUFDckMsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLGtCQUFrQixDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUMxRCxrQkFBa0IsQ0FBQyxJQUFJLEdBQUcsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDNUMsT0FBTyxrQkFBa0IsQ0FBQztBQUM1QixDQUFDO0FBUUQsTUFBTSxPQUFPLGVBQWU7SUEwQzFCLFlBQW9CLGdCQUFrQyxFQUNsQyxVQUFzQixFQUN0QixRQUFtQixFQUNuQixJQUFnQixFQUNoQixpQkFBb0MsRUFDaEMsUUFBb0I7UUFMeEIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNsQyxlQUFVLEdBQVYsVUFBVSxDQUFZO1FBQ3RCLGFBQVEsR0FBUixRQUFRLENBQVc7UUFDbkIsU0FBSSxHQUFKLElBQUksQ0FBWTtRQUNoQixzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBMUNoRCxXQUFNLEdBQUcsS0FBSyxDQUFD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LCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgRGlyZWN0aXZlLFxuICBFbGVtZW50UmVmLFxuICBJbnB1dCxcbiAgT25Jbml0LFxuICBPcHRpb25hbCxcbiAgUmVuZGVyZXIyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtDb250cm9sQ29udGFpbmVyLCBGb3JtR3JvdXAsIEZvcm1Hcm91cERpcmVjdGl2ZX0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtIdHRwQ2xpZW50fSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQge056TW9kYWxSZWZ9IGZyb20gJ25nLXpvcnJvLWFudGQvbW9kYWwnO1xuaW1wb3J0IHtHbkpzb25VdGlscywgR25PYmplY3RVdGlsc30gZnJvbSAnZ2VtaW5pcy1uZy1jb3JlJztcblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnRyb2xDb250YWluZXJGYWN0b3J5KCk6IEZvcm1Hcm91cERpcmVjdGl2ZSB7XG4gIGNvbnN0IGZvcm1Hcm91cERpcmVjdGl2ZSA9IG5ldyBGb3JtR3JvdXBEaXJlY3RpdmUoW10sIFtdKTtcbiAgZm9ybUdyb3VwRGlyZWN0aXZlLmZvcm0gPSBuZXcgRm9ybUdyb3VwKHt9KTtcbiAgcmV0dXJuIGZvcm1Hcm91cERpcmVjdGl2ZTtcbn1cblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW2duLWZvcm1dJyxcbiAgcHJvdmlkZXJzOiBbXG4gICAge3Byb3ZpZGU6IENvbnRyb2xDb250YWluZXIsIHVzZUZhY3Rvcnk6IGNvbnRyb2xDb250YWluZXJGYWN0b3J5fVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIEduRm9ybURpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCB7XG5cbiAgcHJpdmF0ZSBjb2xzVmFsdWU6IG51bWJlcjtcbiAgcHJpdmF0ZSBpbm5lckJpbmRWYWx1ZTogYW55O1xuICBwcml2YXRlIGJpbmRlZCA9IGZhbHNlO1xuXG4gIGZvcm1Hcm91cDogRm9ybUdyb3VwO1xuXG4gIEBJbnB1dCgpIHVybDogc3RyaW5nO1xuICBASW5wdXQoKSBsYWJlbFdpZHRoID0gNjtcbiAgQElucHV0KCkgY29udHJvbFdpZHRoID0gMTg7XG4gIEBJbnB1dCgpIGRhdGFJZDogc3RyaW5nO1xuICBASW5wdXQoKSBkYXRhS2V5OiBzdHJpbmc7XG4gIEBJbnB1dCgpIGRhdGFJbmNsdWRlczogc3RyaW5nW107XG4gIEBJbnB1dCgpIGF1dG9Mb2FkRGF0YSA9IHRydWU7XG4gIEBJbnB1dCgpIHN1Ym1pdE1ldGhvZDogJ3Bvc3QnIHwgJ3B1dCcgPSAncHV0JztcbiAgQElucHV0KCkgbG9hZE1ldGhvZDogJ3Bvc3QnIHwgJ3B1dCcgfCAnZ2V0JyA9ICdwb3N0JztcbiAgQElucHV0KCkgZm9ybWF0OiAnanNvbicgfCAnZm9ybScgPSAnanNvbic7XG4gIEBJbnB1dCgpIHN1Ym1pdE9wdGlvbnM6IGFueTtcbiAgQElucHV0KCkgbG9hZE9wdGlvbnM6IGFueTtcbiAgQElucHV0KCkgZGVmYXVsdFZhbHVlOiBhbnk7XG5cbiAgQElucHV0KCkgc2V0IGNvbHModmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuY29sc1ZhbHVlID0gdmFsdWU7XG4gICAgaWYgKCF0aGlzLmNvbHNWYWx1ZSB8fCB0aGlzLmNvbHNWYWx1ZSA8IDEpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgJ2Rpc3BsYXknLCAnZ3JpZCcpO1xuICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICdncmlkLXRlbXBsYXRlLWNvbHVtbnMnLCAncmVwZWF0KCcgKyB0aGlzLmNvbHNWYWx1ZSArICcsIDFmciknKTtcbiAgfVxuXG4gIGdldCBjb2xzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuY29sc1ZhbHVlO1xuICB9XG5cbiAgQElucHV0KCkgc2V0IGJpbmRWYWx1ZSh2YWx1ZTogYW55KSB7XG4gICAgdGhpcy5iaW5kZWQgPSBmYWxzZTtcbiAgICB0aGlzLmlubmVyQmluZFZhbHVlID0gdmFsdWU7XG4gICAgdGhpcy5mb3JtR3JvdXAucGF0Y2hWYWx1ZSh2YWx1ZSk7XG4gICAgdGhpcy5iaW5kZWQgPSB0cnVlO1xuICB9XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjb250cm9sQ29udGFpbmVyOiBDb250cm9sQ29udGFpbmVyLFxuICAgICAgICAgICAgICBwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgICAgICAgICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICAgICAgICAgICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LFxuICAgICAgICAgICAgICBwcml2YXRlIGNoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgICAgICAgQE9wdGlvbmFsKCkgbW9kYWxSZWY6IE56TW9kYWxSZWYpIHtcbiAgICB0aGlzLmZvcm1Hcm91cCA9IGNvbnRyb2xDb250YWluZXIuY29udHJvbCBhcyBGb3JtR3JvdXA7XG4gICAgdGhpcy5mb3JtR3JvdXAudmFsdWVDaGFuZ2VzLnN1YnNjcmliZShuZXdWYWx1ZSA9PiB7XG4gICAgICBpZiAobW9kYWxSZWYpIHtcbiAgICAgICAgbW9kYWxSZWYudXBkYXRlQ29uZmlnKHtuek9rRGlzYWJsZWQ6IHRoaXMuZm9ybUdyb3VwLmludmFsaWR9KTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmlubmVyQmluZFZhbHVlICYmIHRoaXMuYmluZGVkKSB7XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcy5pbm5lckJpbmRWYWx1ZSwgbmV3VmFsdWUpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgc2V0VmFsdWUodmFsdWU6IGFueSk6IHZvaWQge1xuICAgIHRoaXMuZGVmYXVsdFZhbHVlID0gdmFsdWU7XG4gICAgdGhpcy5mb3JtR3JvdXAucGF0Y2hWYWx1ZSh2YWx1ZSk7XG4gIH1cblxuICBnZXQgc3VibWl0VmFsdWUoKTogYW55IHtcbiAgICBsZXQgc3VibWl0VmFsdWU6IGFueTtcblxuICAgIGlmICh0aGlzLmRlZmF1bHRWYWx1ZSkge1xuICAgICAgc3VibWl0VmFsdWUgPSBPYmplY3QuYXNzaWduKEduT2JqZWN0VXRpbHMuZGVlcENvcHkodGhpcy5kZWZhdWx0VmFsdWUpLCB0aGlzLmZvcm1Hcm91cC52YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN1Ym1pdFZhbHVlID0gdGhpcy5mb3JtR3JvdXAudmFsdWU7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZm9ybWF0ID09PSAnZm9ybScpIHtcbiAgICAgIHN1Ym1pdFZhbHVlID0gR25Kc29uVXRpbHMub2JqMkZvcm1EYXRhKHN1Ym1pdFZhbHVlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3VibWl0VmFsdWU7XG4gIH1cblxuICBzdWJtaXQoKTogUHJvbWlzZTxhbnk+IHtcbiAgICBpZiAoIXRoaXMudXJsKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuc3VibWl0VmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBvcHRpb25zID0gT2JqZWN0LmFzc2lnbih7Ym9keTogdGhpcy5zdWJtaXRWYWx1ZX0sIHRoaXMuc3VibWl0T3B0aW9ucyk7XG4gICAgICByZXR1cm4gdGhpcy5odHRwLnJlcXVlc3QodGhpcy5zdWJtaXRNZXRob2QsIHRoaXMudXJsLCBvcHRpb25zKS50b1Byb21pc2UoKTtcbiAgICB9XG4gIH1cblxuICBsb2FkRGF0YSgpOiBQcm9taXNlPGFueT4ge1xuICAgIGlmICghdGhpcy51cmwgfHwgIXRoaXMuZGF0YUlkKSB7XG4gICAgICBpZiAodGhpcy5kZWZhdWx0VmFsdWUpIHtcbiAgICAgICAgdGhpcy5mb3JtR3JvdXAucGF0Y2hWYWx1ZSh0aGlzLmRlZmF1bHRWYWx1ZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG51bGwpO1xuICAgIH1cblxuICAgIGNvbnN0IHF1ZXJ5UGFyYW1ldGVyID0ge1xuICAgICAgcGFnZVNpemU6IDEsXG4gICAgICBwYWdlSW5kZXg6IDAsXG4gICAgICBpbmNsdWRlczogdGhpcy5kYXRhSW5jbHVkZXMsXG4gICAgICBmaWx0ZXJHcm91cDoge1xuICAgICAgICB0eXBlOiAnYW5kJyxcbiAgICAgICAgZmlsdGVyczogW3tmaWVsZDogdGhpcy5kYXRhS2V5LCBjb21wYXJlVHlwZTogJz0nLCB2YWx1ZTogdGhpcy5kYXRhSWR9XVxuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBvcHRpb25zID0gT2JqZWN0LmFzc2lnbih7Ym9keTogcXVlcnlQYXJhbWV0ZXJ9LCB0aGlzLmxvYWRPcHRpb25zKTtcblxuICAgIHJldHVybiB0aGlzLmh0dHAucmVxdWVzdCh0aGlzLmxvYWRNZXRob2QsIHRoaXMudXJsLCBvcHRpb25zKVxuICAgICAgLnRvUHJvbWlzZSgpXG4gICAgICAudGhlbigocmVzcDogYW55KSA9PiB7XG4gICAgICAgIGlmIChyZXNwLmNvbnRlbnQubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDmnKrmib7liLDmlbDmja5bJHt0aGlzLmRhdGFJZH1dYCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kZWZhdWx0VmFsdWUgPSB0aGlzLmRlZmF1bHRWYWx1ZSB8fCB7fTtcbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLmRlZmF1bHRWYWx1ZSwgcmVzcC5jb250ZW50WzBdKTtcbiAgICAgICAgdGhpcy5mb3JtR3JvdXAucGF0Y2hWYWx1ZSh0aGlzLmRlZmF1bHRWYWx1ZSk7XG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRWYWx1ZTtcbiAgICAgIH0pO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuYXV0b0xvYWREYXRhKSB7XG4gICAgICB0aGlzLmxvYWREYXRhKCk7XG4gICAgfVxuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbn1cbiJdfQ==