@ng-dynamic-forms/core
Version:
A rapid form development library for Angular
67 lines • 10.1 kB
JavaScript
import { isString } from "../utils/core.utils";
export class DynamicFormControlComponent {
constructor(layoutService, validationService) {
this.layoutService = layoutService;
this.validationService = validationService;
this._hasFocus = false;
}
get control() {
const control = this.group.get(this.model.id);
if (control === null) {
throw new Error(`form group does not contain an abstract control with id ${this.model.id}`);
}
return control;
}
get id() {
return this.layoutService.getElementId(this.model);
}
get hasFocus() {
return this._hasFocus;
}
get isInvalid() {
return this.control.invalid;
}
get isValid() {
return this.control.valid;
}
get errorMessages() {
return this.validationService.createErrorMessages(this.control, this.model);
}
get showErrorMessages() {
return this.validationService.showErrorMessages(this.control, this.model, this.hasFocus);
}
getClass(context, place, model = this.model) {
const controlLayout = model === this.model ? this.layout :
this.layoutService.findByModel(model, this.formLayout) ?? model.layout;
return this.layoutService.getClass(controlLayout, context, place);
}
onBlur($event) {
if ($event instanceof Event) {
$event.stopPropagation();
}
this._hasFocus = false;
this.blur.emit($event);
}
onChange($event) {
if ($event instanceof Event) {
$event.stopPropagation();
}
this.change.emit($event);
}
onCustomEvent($event, type = null, bypass = false) {
if (bypass) {
this.customEvent?.emit($event);
}
else if (isString(type)) {
this.customEvent?.emit({ customEvent: $event, customEventType: type });
}
}
onFocus($event) {
if ($event instanceof Event) {
$event.stopPropagation();
}
this._hasFocus = true;
this.focus.emit($event);
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1mb3JtLWNvbnRyb2wuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctZHluYW1pYy1mb3Jtcy9jb3JlL3NyYy9saWIvY29tcG9uZW50L2R5bmFtaWMtZm9ybS1jb250cm9sLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFnQkEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRS9DLE1BQU0sT0FBZ0IsMkJBQTJCO0lBYzdDLFlBQWdDLGFBQXVDLEVBQVksaUJBQStDO1FBQWxHLGtCQUFhLEdBQWIsYUFBYSxDQUEwQjtRQUFZLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBOEI7UUFGMUgsY0FBUyxHQUFHLEtBQUssQ0FBQztJQUcxQixDQUFDO0lBRUQsSUFBSSxPQUFPO1FBQ1AsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUU5QyxJQUFJLE9BQU8sS0FBSyxJQUFJLEVBQUU7WUFDbEIsTUFBTSxJQUFJLEtBQUssQ0FBQywyREFBMkQsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1NBQy9GO1FBRUQsT0FBTyxPQUFPLENBQUM7SUFDbkIsQ0FBQztJQUVELElBQUksRUFBRTtRQUNGLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFFRCxJQUFJLFFBQVE7UUFDUixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDMUIsQ0FBQztJQUVELElBQUksU0FBUztRQUNULE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUM7SUFDaEMsQ0FBQztJQUVELElBQUksT0FBTztRQUNQLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7SUFDOUIsQ0FBQztJQUVELElBQUksYUFBYTtRQUNiLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2hGLENBQUM7SUFFRCxJQUFJLGlCQUFpQjtRQUNqQixPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzdGLENBQUM7SUFFRCxRQUFRLENBQUMsT0FBd0MsRUFBRSxLQUFvQyxFQUM5RSxRQUFpQyxJQUFJLENBQUMsS0FBSztRQUNoRCxNQUFNLGFBQWEsR0FBRyxLQUFLLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3RELElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksS0FBSyxDQUFDLE1BQWtDLENBQUM7UUFFdkcsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxhQUFhLEVBQUUsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3RFLENBQUM7SUFFRCxNQUFNLENBQUMsTUFBVztRQUNkLElBQUksTUFBTSxZQUFZLEtBQUssRUFBRTtZQUN6QixNQUFNLENBQUMsZUFBZSxFQUFFLENBQUM7U0FDNUI7UUFFRCxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztRQUN2QixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMzQixDQUFDO0lBRUQsUUFBUSxDQUFDLE1BQVc7UUFDaEIsSUFBSSxNQUFNLFlBQVksS0FBSyxFQUFFO1lBQ3pCLE1BQU0sQ0FBQyxlQUFlLEVBQUUsQ0FBQztTQUM1QjtRQUVELElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFRCxhQUFhLENBQUMsTUFBVyxFQUFFLE9BQXNCLElBQUksRUFBRSxTQUFrQixLQUFLO1FBQzFFLElBQUksTUFBTSxFQUFFO1lBQ1IsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7U0FFbEM7YUFBTSxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUN2QixJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxFQUFDLFdBQVcsRUFBRSxNQUFNLEVBQUUsZUFBZSxFQUFFLElBQUksRUFBQyxDQUFDLENBQUM7U0FDeEU7SUFDTCxDQUFDO0lBRUQsT0FBTyxDQUFDLE1BQVc7UUFDZixJQUFJLE1BQU0sWUFBWSxLQUFLLEVBQUU7WUFDekIsTUFBTSxDQUFDLGVBQWUsRUFBRSxDQUFDO1NBQzVCO1FBRUQsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7UUFDdEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDNUIsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgVW50eXBlZEZvcm1Hcm91cCB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xuaW1wb3J0IHsgRHluYW1pY0Zvcm1Db250cm9sIH0gZnJvbSBcIi4vZHluYW1pYy1mb3JtLWNvbnRyb2wtaW50ZXJmYWNlXCI7XG5pbXBvcnQgeyBEeW5hbWljRm9ybUNvbnRyb2xDdXN0b21FdmVudCB9IGZyb20gXCIuL2R5bmFtaWMtZm9ybS1jb250cm9sLWV2ZW50XCI7XG5pbXBvcnQgeyBEeW5hbWljRm9ybUNvbnRyb2xNb2RlbCB9IGZyb20gXCIuLi9tb2RlbC9keW5hbWljLWZvcm0tY29udHJvbC5tb2RlbFwiO1xuaW1wb3J0IHtcbiAgICBEeW5hbWljRm9ybUNvbnRyb2xMYXlvdXQsXG4gICAgRHluYW1pY0Zvcm1Db250cm9sTGF5b3V0Q29udGV4dCxcbiAgICBEeW5hbWljRm9ybUNvbnRyb2xMYXlvdXRQbGFjZVxufSBmcm9tIFwiLi4vbW9kZWwvbWlzYy9keW5hbWljLWZvcm0tY29udHJvbC1sYXlvdXQubW9kZWxcIjtcbmltcG9ydCB7IER5bmFtaWNGb3JtVmFsaWRhdGlvblNlcnZpY2UgfSBmcm9tIFwiLi4vc2VydmljZS9keW5hbWljLWZvcm0tdmFsaWRhdGlvbi5zZXJ2aWNlXCI7XG5pbXBvcnQge1xuICAgIER5bmFtaWNGb3JtTGF5b3V0LFxuICAgIER5bmFtaWNGb3JtTGF5b3V0U2VydmljZSxcbiAgICBEeW5hbWljRm9ybUNvbnRyb2xUZW1wbGF0ZXNcbn0gZnJvbSBcIi4uL3NlcnZpY2UvZHluYW1pYy1mb3JtLWxheW91dC5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBpc1N0cmluZyB9IGZyb20gXCIuLi91dGlscy9jb3JlLnV0aWxzXCI7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBEeW5hbWljRm9ybUNvbnRyb2xDb21wb25lbnQgaW1wbGVtZW50cyBEeW5hbWljRm9ybUNvbnRyb2wge1xuICAgIGZvcm1MYXlvdXQ/OiBEeW5hbWljRm9ybUxheW91dDtcbiAgICBncm91cCE6IFVudHlwZWRGb3JtR3JvdXA7XG4gICAgbGF5b3V0PzogRHluYW1pY0Zvcm1Db250cm9sTGF5b3V0O1xuICAgIG1vZGVsITogRHluYW1pY0Zvcm1Db250cm9sTW9kZWw7XG4gICAgdGVtcGxhdGVzPzogRHluYW1pY0Zvcm1Db250cm9sVGVtcGxhdGVzO1xuXG4gICAgYmx1ciE6IEV2ZW50RW1pdHRlcjxhbnk+O1xuICAgIGNoYW5nZSE6IEV2ZW50RW1pdHRlcjxhbnk+O1xuICAgIGN1c3RvbUV2ZW50PzogRXZlbnRFbWl0dGVyPER5bmFtaWNGb3JtQ29udHJvbEN1c3RvbUV2ZW50PjtcbiAgICBmb2N1cyE6IEV2ZW50RW1pdHRlcjxhbnk+O1xuXG4gICAgcHJpdmF0ZSBfaGFzRm9jdXMgPSBmYWxzZTtcblxuICAgIHByb3RlY3RlZCBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgbGF5b3V0U2VydmljZTogRHluYW1pY0Zvcm1MYXlvdXRTZXJ2aWNlLCBwcm90ZWN0ZWQgdmFsaWRhdGlvblNlcnZpY2U6IER5bmFtaWNGb3JtVmFsaWRhdGlvblNlcnZpY2UpIHtcbiAgICB9XG5cbiAgICBnZXQgY29udHJvbCgpOiBBYnN0cmFjdENvbnRyb2wgfCBuZXZlciB7XG4gICAgICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLmdyb3VwLmdldCh0aGlzLm1vZGVsLmlkKTtcblxuICAgICAgICBpZiAoY29udHJvbCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBmb3JtIGdyb3VwIGRvZXMgbm90IGNvbnRhaW4gYW4gYWJzdHJhY3QgY29udHJvbCB3aXRoIGlkICR7dGhpcy5tb2RlbC5pZH1gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjb250cm9sO1xuICAgIH1cblxuICAgIGdldCBpZCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5sYXlvdXRTZXJ2aWNlLmdldEVsZW1lbnRJZCh0aGlzLm1vZGVsKTtcbiAgICB9XG5cbiAgICBnZXQgaGFzRm9jdXMoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9oYXNGb2N1cztcbiAgICB9XG5cbiAgICBnZXQgaXNJbnZhbGlkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5jb250cm9sLmludmFsaWQ7XG4gICAgfVxuXG4gICAgZ2V0IGlzVmFsaWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnRyb2wudmFsaWQ7XG4gICAgfVxuXG4gICAgZ2V0IGVycm9yTWVzc2FnZXMoKTogc3RyaW5nW10ge1xuICAgICAgICByZXR1cm4gdGhpcy52YWxpZGF0aW9uU2VydmljZS5jcmVhdGVFcnJvck1lc3NhZ2VzKHRoaXMuY29udHJvbCwgdGhpcy5tb2RlbCk7XG4gICAgfVxuXG4gICAgZ2V0IHNob3dFcnJvck1lc3NhZ2VzKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy52YWxpZGF0aW9uU2VydmljZS5zaG93RXJyb3JNZXNzYWdlcyh0aGlzLmNvbnRyb2wsIHRoaXMubW9kZWwsIHRoaXMuaGFzRm9jdXMpO1xuICAgIH1cblxuICAgIGdldENsYXNzKGNvbnRleHQ6IER5bmFtaWNGb3JtQ29udHJvbExheW91dENvbnRleHQsIHBsYWNlOiBEeW5hbWljRm9ybUNvbnRyb2xMYXlvdXRQbGFjZSxcbiAgICAgICAgICAgICBtb2RlbDogRHluYW1pY0Zvcm1Db250cm9sTW9kZWwgPSB0aGlzLm1vZGVsKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgY29udHJvbExheW91dCA9IG1vZGVsID09PSB0aGlzLm1vZGVsID8gdGhpcy5sYXlvdXQgOlxuICAgICAgICAgICAgdGhpcy5sYXlvdXRTZXJ2aWNlLmZpbmRCeU1vZGVsKG1vZGVsLCB0aGlzLmZvcm1MYXlvdXQpID8/IG1vZGVsLmxheW91dCBhcyBEeW5hbWljRm9ybUNvbnRyb2xMYXlvdXQ7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMubGF5b3V0U2VydmljZS5nZXRDbGFzcyhjb250cm9sTGF5b3V0LCBjb250ZXh0LCBwbGFjZSk7XG4gICAgfVxuXG4gICAgb25CbHVyKCRldmVudDogYW55KSB7XG4gICAgICAgIGlmICgkZXZlbnQgaW5zdGFuY2VvZiBFdmVudCkge1xuICAgICAgICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5faGFzRm9jdXMgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5ibHVyLmVtaXQoJGV2ZW50KTtcbiAgICB9XG5cbiAgICBvbkNoYW5nZSgkZXZlbnQ6IGFueSkge1xuICAgICAgICBpZiAoJGV2ZW50IGluc3RhbmNlb2YgRXZlbnQpIHtcbiAgICAgICAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY2hhbmdlLmVtaXQoJGV2ZW50KTtcbiAgICB9XG5cbiAgICBvbkN1c3RvbUV2ZW50KCRldmVudDogYW55LCB0eXBlOiBzdHJpbmcgfCBudWxsID0gbnVsbCwgYnlwYXNzOiBib29sZWFuID0gZmFsc2UpIHtcbiAgICAgICAgaWYgKGJ5cGFzcykge1xuICAgICAgICAgICAgdGhpcy5jdXN0b21FdmVudD8uZW1pdCgkZXZlbnQpO1xuXG4gICAgICAgIH0gZWxzZSBpZiAoaXNTdHJpbmcodHlwZSkpIHtcbiAgICAgICAgICAgIHRoaXMuY3VzdG9tRXZlbnQ/LmVtaXQoe2N1c3RvbUV2ZW50OiAkZXZlbnQsIGN1c3RvbUV2ZW50VHlwZTogdHlwZX0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25Gb2N1cygkZXZlbnQ6IGFueSkge1xuICAgICAgICBpZiAoJGV2ZW50IGluc3RhbmNlb2YgRXZlbnQpIHtcbiAgICAgICAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2hhc0ZvY3VzID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5mb2N1cy5lbWl0KCRldmVudCk7XG4gICAgfVxufVxuIl19