UNPKG

@ng-flexy/form

Version:

Flexy components and tools to build Angular 8+ applications

50 lines 6.21 kB
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=