UNPKG

@ng-dynamic-forms/core

Version:

A rapid form development library for Angular

76 lines 10.8 kB
import { Inject, Injectable, InjectionToken, Optional } from "@angular/core"; import { isFunction, isNumber } from "../utils/core.utils"; import * as i0 from "@angular/core"; export const DYNAMIC_FORM_CONTROL_MAP_FN = new InjectionToken("DYNAMIC_FORM_CONTROL_MAP_FN"); export class DynamicFormComponentService { constructor(DYNAMIC_FORM_CONTROL_MAP_FN) { this.DYNAMIC_FORM_CONTROL_MAP_FN = DYNAMIC_FORM_CONTROL_MAP_FN; this.forms = []; this.formControls = {}; this.DYNAMIC_FORM_CONTROL_MAP_FN = DYNAMIC_FORM_CONTROL_MAP_FN; } getForms() { return this.forms.values(); } registerForm(component) { this.forms.push(component); } unregisterForm(component) { const indexOf = this.forms.indexOf(component); if (indexOf !== -1) { this.forms.splice(indexOf, 1); } } getFormControlRef(modelId, index) { const ref = this.formControls[modelId]; if (isNumber(index)) { return Array.isArray(ref) ? ref[index] : undefined; } else { return ref; } } registerFormControl(model, ref, index) { if (isNumber(index)) { // threat model as array child const arrayRef = this.formControls[model.id] || []; if (Array.isArray(arrayRef)) { arrayRef.splice(index, 0, ref); this.formControls[model.id] = arrayRef; } else { console.warn(`registerFormControlRef is called with index for a non-array form control: ${model.id}`); } } else { this.formControls[model.id] = ref; } } unregisterFormControl(modelId, index) { const componentRef = this.formControls[modelId]; if (isNumber(index)) { if (Array.isArray(componentRef) && componentRef[index] !== undefined) { componentRef.splice(index, 1); } } else if (componentRef !== undefined) { delete this.formControls[modelId]; } } getCustomComponentType(model) { return isFunction(this.DYNAMIC_FORM_CONTROL_MAP_FN) ? this.DYNAMIC_FORM_CONTROL_MAP_FN(model) : null; } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.3", ngImport: i0, type: DynamicFormComponentService, deps: [{ token: DYNAMIC_FORM_CONTROL_MAP_FN, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); } static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.3", ngImport: i0, type: DynamicFormComponentService, providedIn: "root" }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.3", ngImport: i0, type: DynamicFormComponentService, decorators: [{ type: Injectable, args: [{ providedIn: "root" }] }], ctorParameters: function () { return [{ type: undefined, decorators: [{ type: Inject, args: [DYNAMIC_FORM_CONTROL_MAP_FN] }, { type: Optional }] }]; } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1mb3JtLWNvbXBvbmVudC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctZHluYW1pYy1mb3Jtcy9jb3JlL3NyYy9saWIvc2VydmljZS9keW5hbWljLWZvcm0tY29tcG9uZW50LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFnQixNQUFNLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxRQUFRLEVBQVEsTUFBTSxlQUFlLENBQUM7QUFJakcsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7QUFLM0QsTUFBTSxDQUFDLE1BQU0sMkJBQTJCLEdBQUcsSUFBSSxjQUFjLENBQTBCLDZCQUE2QixDQUFDLENBQUM7QUFLdEgsTUFBTSxPQUFPLDJCQUEyQjtJQUlwQyxZQUE4RSwyQkFBZ0M7UUFBaEMsZ0NBQTJCLEdBQTNCLDJCQUEyQixDQUFLO1FBSHRHLFVBQUssR0FBMkIsRUFBRSxDQUFDO1FBQ25DLGlCQUFZLEdBQXVFLEVBQUUsQ0FBQztRQUcxRixJQUFJLENBQUMsMkJBQTJCLEdBQUcsMkJBQXNELENBQUM7SUFDOUYsQ0FBQztJQUVELFFBQVE7UUFDSixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDL0IsQ0FBQztJQUVELFlBQVksQ0FBQyxTQUErQjtRQUN4QyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBRUQsY0FBYyxDQUFDLFNBQStCO1FBQzFDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRTlDLElBQUksT0FBTyxLQUFLLENBQUMsQ0FBQyxFQUFFO1lBQ2hCLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQztTQUNqQztJQUNMLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxPQUFlLEVBQUUsS0FBYztRQUM3QyxNQUFNLEdBQUcsR0FBb0QsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUV4RixJQUFJLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNqQixPQUFPLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1NBRXREO2FBQU07WUFDSCxPQUFPLEdBQTRCLENBQUM7U0FDdkM7SUFDTCxDQUFDO0lBRUQsbUJBQW1CLENBQUMsS0FBOEIsRUFBRSxHQUEwQixFQUFFLEtBQWM7UUFDMUYsSUFBSSxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSw4QkFBOEI7WUFDakQsTUFBTSxRQUFRLEdBQTRCLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBNEIsSUFBSSxFQUFFLENBQUM7WUFFdkcsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFO2dCQUN6QixRQUFRLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7Z0JBQy9CLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFFBQVEsQ0FBQzthQUUxQztpQkFBTTtnQkFDSCxPQUFPLENBQUMsSUFBSSxDQUFDLDZFQUE2RSxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQzthQUN6RztTQUVKO2FBQU07WUFDSCxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7U0FDckM7SUFDTCxDQUFDO0lBRUQscUJBQXFCLENBQUMsT0FBZSxFQUFFLEtBQWM7UUFDakQsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUVoRCxJQUFJLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNqQixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLElBQUksWUFBWSxDQUFDLEtBQUssQ0FBQyxLQUFLLFNBQVMsRUFBRTtnQkFDbEUsWUFBWSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7YUFDakM7U0FFSjthQUFNLElBQUksWUFBWSxLQUFLLFNBQVMsRUFBRTtZQUNuQyxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDckM7SUFDTCxDQUFDO0lBRUQsc0JBQXNCLENBQUMsS0FBOEI7UUFDakQsT0FBTyxVQUFVLENBQUMsSUFBSSxDQUFDLDJCQUEyQixDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQ3pHLENBQUM7OEdBbkVRLDJCQUEyQixrQkFJaEIsMkJBQTJCO2tIQUp0QywyQkFBMkIsY0FGeEIsTUFBTTs7MkZBRVQsMkJBQTJCO2tCQUh2QyxVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQjs7MEJBS2dCLE1BQU07MkJBQUMsMkJBQTJCOzswQkFBRyxRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50UmVmLCBJbmplY3QsIEluamVjdGFibGUsIEluamVjdGlvblRva2VuLCBPcHRpb25hbCwgVHlwZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBEeW5hbWljRm9ybUNvbnRyb2wgfSBmcm9tIFwiLi4vY29tcG9uZW50L2R5bmFtaWMtZm9ybS1jb250cm9sLWludGVyZmFjZVwiO1xuaW1wb3J0IHsgRHluYW1pY0Zvcm1Db21wb25lbnQgfSBmcm9tIFwiLi4vY29tcG9uZW50L2R5bmFtaWMtZm9ybS5jb21wb25lbnRcIjtcbmltcG9ydCB7IER5bmFtaWNGb3JtQ29udHJvbE1vZGVsIH0gZnJvbSBcIi4uL21vZGVsL2R5bmFtaWMtZm9ybS1jb250cm9sLm1vZGVsXCI7XG5pbXBvcnQgeyBpc0Z1bmN0aW9uLCBpc051bWJlciB9IGZyb20gXCIuLi91dGlscy9jb3JlLnV0aWxzXCI7XG5cbmV4cG9ydCB0eXBlIER5bmFtaWNGb3JtQ29udHJvbFJlZiA9IENvbXBvbmVudFJlZjxEeW5hbWljRm9ybUNvbnRyb2w+O1xuZXhwb3J0IHR5cGUgRHluYW1pY0Zvcm1Db250cm9sTWFwRm4gPSAobW9kZWw6IER5bmFtaWNGb3JtQ29udHJvbE1vZGVsKSA9PiBUeXBlPER5bmFtaWNGb3JtQ29udHJvbD4gfCBudWxsO1xuXG5leHBvcnQgY29uc3QgRFlOQU1JQ19GT1JNX0NPTlRST0xfTUFQX0ZOID0gbmV3IEluamVjdGlvblRva2VuPER5bmFtaWNGb3JtQ29udHJvbE1hcEZuPihcIkRZTkFNSUNfRk9STV9DT05UUk9MX01BUF9GTlwiKTtcblxuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46IFwicm9vdFwiXG59KVxuZXhwb3J0IGNsYXNzIER5bmFtaWNGb3JtQ29tcG9uZW50U2VydmljZSB7XG4gICAgcHJpdmF0ZSBmb3JtczogRHluYW1pY0Zvcm1Db21wb25lbnRbXSA9IFtdO1xuICAgIHByaXZhdGUgZm9ybUNvbnRyb2xzOiB7IFtrZXk6IHN0cmluZ106IER5bmFtaWNGb3JtQ29udHJvbFJlZiB8IER5bmFtaWNGb3JtQ29udHJvbFJlZltdIH0gPSB7fTtcblxuICAgIGNvbnN0cnVjdG9yKEBJbmplY3QoRFlOQU1JQ19GT1JNX0NPTlRST0xfTUFQX0ZOKSBAT3B0aW9uYWwoKSBwcml2YXRlIHJlYWRvbmx5IERZTkFNSUNfRk9STV9DT05UUk9MX01BUF9GTjogYW55KSB7XG4gICAgICAgIHRoaXMuRFlOQU1JQ19GT1JNX0NPTlRST0xfTUFQX0ZOID0gRFlOQU1JQ19GT1JNX0NPTlRST0xfTUFQX0ZOIGFzIER5bmFtaWNGb3JtQ29udHJvbE1hcEZuO1xuICAgIH1cblxuICAgIGdldEZvcm1zKCk6IEl0ZXJhYmxlSXRlcmF0b3I8RHluYW1pY0Zvcm1Db21wb25lbnQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybXMudmFsdWVzKCk7XG4gICAgfVxuXG4gICAgcmVnaXN0ZXJGb3JtKGNvbXBvbmVudDogRHluYW1pY0Zvcm1Db21wb25lbnQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5mb3Jtcy5wdXNoKGNvbXBvbmVudCk7XG4gICAgfVxuXG4gICAgdW5yZWdpc3RlckZvcm0oY29tcG9uZW50OiBEeW5hbWljRm9ybUNvbXBvbmVudCk6IHZvaWQge1xuICAgICAgICBjb25zdCBpbmRleE9mID0gdGhpcy5mb3Jtcy5pbmRleE9mKGNvbXBvbmVudCk7XG5cbiAgICAgICAgaWYgKGluZGV4T2YgIT09IC0xKSB7XG4gICAgICAgICAgICB0aGlzLmZvcm1zLnNwbGljZShpbmRleE9mLCAxKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldEZvcm1Db250cm9sUmVmKG1vZGVsSWQ6IHN0cmluZywgaW5kZXg/OiBudW1iZXIpOiBEeW5hbWljRm9ybUNvbnRyb2xSZWYgfCB1bmRlZmluZWQge1xuICAgICAgICBjb25zdCByZWY6IER5bmFtaWNGb3JtQ29udHJvbFJlZiB8IER5bmFtaWNGb3JtQ29udHJvbFJlZltdID0gdGhpcy5mb3JtQ29udHJvbHNbbW9kZWxJZF07XG5cbiAgICAgICAgaWYgKGlzTnVtYmVyKGluZGV4KSkge1xuICAgICAgICAgICAgcmV0dXJuIEFycmF5LmlzQXJyYXkocmVmKSA/IHJlZltpbmRleF0gOiB1bmRlZmluZWQ7XG5cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiByZWYgYXMgRHluYW1pY0Zvcm1Db250cm9sUmVmO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVnaXN0ZXJGb3JtQ29udHJvbChtb2RlbDogRHluYW1pY0Zvcm1Db250cm9sTW9kZWwsIHJlZjogRHluYW1pY0Zvcm1Db250cm9sUmVmLCBpbmRleD86IG51bWJlcik6IHZvaWQge1xuICAgICAgICBpZiAoaXNOdW1iZXIoaW5kZXgpKSB7IC8vIHRocmVhdCBtb2RlbCBhcyBhcnJheSBjaGlsZFxuICAgICAgICAgICAgY29uc3QgYXJyYXlSZWY6IER5bmFtaWNGb3JtQ29udHJvbFJlZltdID0gdGhpcy5mb3JtQ29udHJvbHNbbW9kZWwuaWRdIGFzIER5bmFtaWNGb3JtQ29udHJvbFJlZltdIHx8IFtdO1xuXG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShhcnJheVJlZikpIHtcbiAgICAgICAgICAgICAgICBhcnJheVJlZi5zcGxpY2UoaW5kZXgsIDAsIHJlZik7XG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtQ29udHJvbHNbbW9kZWwuaWRdID0gYXJyYXlSZWY7XG5cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKGByZWdpc3RlckZvcm1Db250cm9sUmVmIGlzIGNhbGxlZCB3aXRoIGluZGV4IGZvciBhIG5vbi1hcnJheSBmb3JtIGNvbnRyb2w6ICR7bW9kZWwuaWR9YCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZm9ybUNvbnRyb2xzW21vZGVsLmlkXSA9IHJlZjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHVucmVnaXN0ZXJGb3JtQ29udHJvbChtb2RlbElkOiBzdHJpbmcsIGluZGV4PzogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudFJlZiA9IHRoaXMuZm9ybUNvbnRyb2xzW21vZGVsSWRdO1xuXG4gICAgICAgIGlmIChpc051bWJlcihpbmRleCkpIHtcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGNvbXBvbmVudFJlZikgJiYgY29tcG9uZW50UmVmW2luZGV4XSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50UmVmLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfSBlbHNlIGlmIChjb21wb25lbnRSZWYgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMuZm9ybUNvbnRyb2xzW21vZGVsSWRdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0Q3VzdG9tQ29tcG9uZW50VHlwZShtb2RlbDogRHluYW1pY0Zvcm1Db250cm9sTW9kZWwpOiBUeXBlPER5bmFtaWNGb3JtQ29udHJvbD4gfCBudWxsIHtcbiAgICAgICAgcmV0dXJuIGlzRnVuY3Rpb24odGhpcy5EWU5BTUlDX0ZPUk1fQ09OVFJPTF9NQVBfRk4pID8gdGhpcy5EWU5BTUlDX0ZPUk1fQ09OVFJPTF9NQVBfRk4obW9kZWwpIDogbnVsbDtcbiAgICB9XG59XG4iXX0=