@ng-flexy/form
Version:
Flexy components and tools to build Angular 8+ applications
50 lines • 6.21 kB
JavaScript
import { ChangeDetectorRef, Component, EventEmitter, Input, Output } from '@angular/core';
import { FlexyFormJsonMapperService } from '../services/json-mapper.service';
import { cloneDeep } from 'lodash';
import { debounceTime, skip } from 'rxjs/operators';
const CHNAGES_DEBOUNCE_TIME = 50;
export class FlexyFormComponent {
constructor(jsonMapper, cdr) {
this.jsonMapper = jsonMapper;
this.cdr = cdr;
this.readonly = false;
this.changesDebounceTime = CHNAGES_DEBOUNCE_TIME;
this.created = new EventEmitter();
this.changed = new EventEmitter();
}
ngOnInit() {
this.form = this.jsonMapper.createForm(cloneDeep(this.json), this.readonly, this.data);
this.created.emit(this.form);
this._changesSubscription = this.form.currentData$
.pipe(skip(1), debounceTime(this.changesDebounceTime || CHNAGES_DEBOUNCE_TIME))
.subscribe(data => {
this.changed.emit({ valid: this.form.valid, data });
});
}
ngOnDestroy() {
if (this._changesSubscription) {
this._changesSubscription.unsubscribe();
}
}
}
FlexyFormComponent.decorators = [
{ type: Component, args: [{
selector: 'flexy-form',
template: `
<flexy-form-container *ngIf="form" [form]="form" [schema]="form.schema"></flexy-form-container>
`
},] }
];
FlexyFormComponent.ctorParameters = () => [
{ type: FlexyFormJsonMapperService },
{ type: ChangeDetectorRef }
];
FlexyFormComponent.propDecorators = {
json: [{ type: Input }],
data: [{ type: Input }],
readonly: [{ type: Input }],
changesDebounceTime: [{ type: Input }],
created: [{ type: Output }],
changed: [{ type: Output }]
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mb3JtL3NyYy9saWIvY29tcG9uZW50cy9mb3JtLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUk3RyxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUM3RSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBRW5DLE9BQU8sRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFPcEQsTUFBTSxxQkFBcUIsR0FBRyxFQUFFLENBQUM7QUFRakMsTUFBTSxPQUFPLGtCQUFrQjtJQWE3QixZQUFvQixVQUFzQyxFQUFVLEdBQXNCO1FBQXRFLGVBQVUsR0FBVixVQUFVLENBQTRCO1FBQVUsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFWakYsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUNqQix3QkFBbUIsR0FBRyxxQkFBcUIsQ0FBQztRQUUzQyxZQUFPLEdBQUcsSUFBSSxZQUFZLEVBQWEsQ0FBQztRQUN4QyxZQUFPLEdBQUcsSUFBSSxZQUFZLEVBQW9CLENBQUM7SUFNb0MsQ0FBQztJQUU5RixRQUFRO1FBQ04sSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3ZGLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM3QixJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZO2FBQy9DLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsSUFBSSxxQkFBcUIsQ0FBQyxDQUFDO2FBQzlFLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNoQixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ3RELENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLElBQUksQ0FBQyxvQkFBb0IsRUFBRTtZQUM3QixJQUFJLENBQUMsb0JBQW9CLENBQUMsV0FBVyxFQUFFLENBQUM7U0FDekM7SUFDSCxDQUFDOzs7WUFuQ0YsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSxZQUFZO2dCQUN0QixRQUFRLEVBQUU7O0dBRVQ7YUFDRjs7O1lBakJRLDBCQUEwQjtZQUoxQixpQkFBaUI7OzttQkF1QnZCLEtBQUs7bUJBQ0wsS0FBSzt1QkFDTCxLQUFLO2tDQUNMLEtBQUs7c0JBRUwsTUFBTTtzQkFDTixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRmxleHlGb3JtIH0gZnJvbSAnLi4vbW9kZWxzL2Zvcm0ubW9kZWwnO1xuaW1wb3J0IHsgRmxleHlGb3JtTGF5b3V0SnNvbiB9IGZyb20gJy4uL21vZGVscy9sYXlvdXQtanNvbi1zY2hlbWEubW9kZWwnO1xuaW1wb3J0IHsgRmxleHlGb3JtRGF0YSB9IGZyb20gJy4uL21vZGVscy9mb3JtLmRhdGEnO1xuaW1wb3J0IHsgRmxleHlGb3JtSnNvbk1hcHBlclNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9qc29uLW1hcHBlci5zZXJ2aWNlJztcbmltcG9ydCB7IGNsb25lRGVlcCB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgc2tpcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuZXhwb3J0IGludGVyZmFjZSBGbGV4eUZvcm1DaGFuZ2VzIHtcbiAgdmFsaWQ6IGJvb2xlYW47XG4gIGRhdGE6IEZsZXh5Rm9ybURhdGE7XG59XG5cbmNvbnN0IENITkFHRVNfREVCT1VOQ0VfVElNRSA9IDUwO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdmbGV4eS1mb3JtJyxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZmxleHktZm9ybS1jb250YWluZXIgKm5nSWY9XCJmb3JtXCIgW2Zvcm1dPVwiZm9ybVwiIFtzY2hlbWFdPVwiZm9ybS5zY2hlbWFcIj48L2ZsZXh5LWZvcm0tY29udGFpbmVyPlxuICBgXG59KVxuZXhwb3J0IGNsYXNzIEZsZXh5Rm9ybUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgQElucHV0KCkganNvbjogRmxleHlGb3JtTGF5b3V0SnNvbjtcbiAgQElucHV0KCkgZGF0YTogRmxleHlGb3JtRGF0YTtcbiAgQElucHV0KCkgcmVhZG9ubHkgPSBmYWxzZTtcbiAgQElucHV0KCkgY2hhbmdlc0RlYm91bmNlVGltZSA9IENITkFHRVNfREVCT1VOQ0VfVElNRTtcblxuICBAT3V0cHV0KCkgY3JlYXRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8RmxleHlGb3JtPigpO1xuICBAT3V0cHV0KCkgY2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8RmxleHlGb3JtQ2hhbmdlcz4oKTtcblxuICBmb3JtOiBGbGV4eUZvcm07XG5cbiAgcHJpdmF0ZSBfY2hhbmdlc1N1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUganNvbk1hcHBlcjogRmxleHlGb3JtSnNvbk1hcHBlclNlcnZpY2UsIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZikge31cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmZvcm0gPSB0aGlzLmpzb25NYXBwZXIuY3JlYXRlRm9ybShjbG9uZURlZXAodGhpcy5qc29uKSwgdGhpcy5yZWFkb25seSwgdGhpcy5kYXRhKTtcbiAgICB0aGlzLmNyZWF0ZWQuZW1pdCh0aGlzLmZvcm0pO1xuICAgIHRoaXMuX2NoYW5nZXNTdWJzY3JpcHRpb24gPSB0aGlzLmZvcm0uY3VycmVudERhdGEkXG4gICAgICAucGlwZShza2lwKDEpLCBkZWJvdW5jZVRpbWUodGhpcy5jaGFuZ2VzRGVib3VuY2VUaW1lIHx8IENITkFHRVNfREVCT1VOQ0VfVElNRSkpXG4gICAgICAuc3Vic2NyaWJlKGRhdGEgPT4ge1xuICAgICAgICB0aGlzLmNoYW5nZWQuZW1pdCh7IHZhbGlkOiB0aGlzLmZvcm0udmFsaWQsIGRhdGEgfSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9jaGFuZ2VzU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLl9jaGFuZ2VzU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG59XG4iXX0=