@stemy/ngx-dynamic-form 10.2.28 → 10.2.31

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"stemy-ngx-dynamic-form.js","sources":["../../src/ngx-dynamic-form/common-types.ts","../../src/ngx-dynamic-form/utils/validators.ts","../../src/ngx-dynamic-form/utils/form-subject.ts","../../src/ngx-dynamic-form/utils/form-select-subject.ts","../../src/ngx-dynamic-form/utils/misc.ts","../../src/ngx-dynamic-form/utils/dynamic-form-array.model.ts","../../src/ngx-dynamic-form/services/dynamic-form.service.ts","../../src/ngx-dynamic-form/directives/async-submit.directive.ts","../../src/ngx-dynamic-form/components/base/dynamic-base-form.component.ts","../../src/ngx-dynamic-form/components/base/dynamic-base-form-array.component.ts","../../src/ngx-dynamic-form/components/base/dynamic-base-form-control-container.component.ts","../../src/ngx-dynamic-form/components/base/dynamic-base-form-group.component.ts","../../src/ngx-dynamic-form/ngx-dynamic-form.module.ts","../../src/stemy-ngx-dynamic-form.ts"],"sourcesContent":["import {EventEmitter, TemplateRef} from \"@angular/core\";\r\nimport {AbstractControl, FormArray} from \"@angular/forms\";\r\nimport {Observable} from \"rxjs\";\r\nimport {\r\n DynamicFormControl,\r\n DynamicFormOptionConfig,\r\n DynamicFormValueControlModel,\r\n DynamicValidatorDescriptor,\r\n DynamicValidatorsConfig\r\n} from \"@ng-dynamic-forms/core\";\r\nimport {\r\n IAsyncMessage,\r\n IRequestOptions,\r\n IResolveFactory,\r\n ObjectUtils,\r\n ReflectUtils,\r\n UniqueUtils\r\n} from \"@stemy/ngx-utils\";\r\n\r\n// --- Basic form control interfaces ---\r\n\r\nexport interface IDynamicFormBase {\r\n\r\n status: DynamicFormState;\r\n\r\n onStatusChange: EventEmitter<IDynamicFormBase>;\r\n onValueChange: EventEmitter<IDynamicFormBase>;\r\n onSubmit: EventEmitter<IDynamicFormBase>;\r\n\r\n validate(): Promise<any>;\r\n serialize(validate?: boolean): Promise<any>;\r\n}\r\n\r\nexport interface IDynamicForm extends IDynamicFormBase{\r\n\r\n}\r\n\r\nexport interface OnCreatedFormControl extends DynamicFormControl {\r\n onCreated(): any;\r\n}\r\n\r\nexport type IFormControlSerializer = (model: DynamicFormValueControlModel<any>, control: AbstractControl) => Promise<any>;\r\nexport type IFormInputMask = string | RegExp;\r\nexport type IFormInputMaskFunction = (raw: string) => IFormInputMask[];\r\nexport type IFormInputUnMaskFunction = (value: string) => any;\r\n\r\nexport interface IFormSerializer {\r\n id: string;\r\n func: IFormControlSerializer;\r\n}\r\n\r\nexport interface IFormSerializers {\r\n [id: string]: IFormControlSerializer | IResolveFactory | null\r\n}\r\n\r\nexport type DynamicFormState = \"VALID\" | \"INVALID\" | \"PENDING\" | \"DISABLED\" | \"LOADING\";\r\nexport type DynamicFormUpdateOn = \"change\" | \"blur\" | \"submit\";\r\n\r\nexport interface IFormControl {\r\n id: string;\r\n type: string;\r\n visible?: boolean;\r\n data?: IFormControlData;\r\n}\r\n\r\nexport interface IFormControlData {\r\n label?: string;\r\n labelAlign?: string;\r\n fieldSet?: string;\r\n classes?: string;\r\n readonly?: FormControlTesterFactory;\r\n hidden?: FormControlTesterFactory;\r\n shouldSerialize?: FormControlTesterFactory;\r\n shouldValidate?: FormControlTesterFactory;\r\n validator?: DynamicValidatorDescriptor;\r\n validators?: DynamicValidatorsConfig;\r\n updateOn?: DynamicFormUpdateOn;\r\n reload?: string | string[];\r\n}\r\n\r\nexport interface IFormInputData extends IFormControlData {\r\n type?: string;\r\n autocomplete?: string;\r\n placeholder?: string;\r\n useLanguage?: boolean;\r\n mask?: IFormInputMaskFunction | IFormInputMask[];\r\n unmask?: IFormInputUnMaskFunction;\r\n step?: number;\r\n min?: number;\r\n max?: number;\r\n}\r\n\r\nexport interface IFormSelectData extends IFormControlData {\r\n options?: DynamicFormOptionConfig<any>[] | Observable<DynamicFormOptionConfig<any>[]>;\r\n emptyOption?: boolean;\r\n type?: string;\r\n multi?: boolean;\r\n}\r\n\r\nexport interface IFormStaticData extends IFormControlData {\r\n properties?: string[];\r\n style?: string;\r\n}\r\n\r\nexport interface IFormFileData extends IFormControlData {\r\n accept?: string;\r\n multi?: boolean;\r\n baseUrl?: string;\r\n asFile?: boolean;\r\n asDataUrl?: boolean;\r\n uploadUrl?: string;\r\n uploadOptions?: IRequestOptions;\r\n createUploadData?: (file: File) => any;\r\n}\r\n\r\nexport interface IFormModelData extends IFormControlData, IDynamicFormInfo {\r\n\r\n}\r\n\r\nexport interface IFormFieldSet {\r\n id: string;\r\n classes?: string;\r\n title?: string;\r\n titleClasses?: string;\r\n setClasses?: string;\r\n controlClasses?: string;\r\n}\r\n\r\nexport interface IFormControlOption {\r\n id: any;\r\n label: string;\r\n selectable?: boolean;\r\n}\r\n\r\n// --- Basic form interfaces ---\r\n\r\nexport interface IDynamicFormTemplates {\r\n [id: string]: TemplateRef<any>;\r\n}\r\n\r\nexport interface IDynamicFormConfig {\r\n path?: string | number | Array<string | number>;\r\n name?: string;\r\n classes?: string;\r\n formClasses?: string;\r\n innerFormClasses?: string;\r\n id: string;\r\n}\r\n\r\nexport interface IDynamicSingleFormConfig extends IDynamicFormConfig, IDynamicFormInfo {\r\n data: any;\r\n controlData?: IFormControlData;\r\n multi?: false;\r\n}\r\n\r\nexport interface IDynamicMultiFormConfig extends IDynamicFormConfig {\r\n data: IDynamicFormsConfigs;\r\n multi: true;\r\n}\r\n\r\nexport type IDynamicFormsConfigs = Array<IDynamicSingleFormConfig | IDynamicMultiFormConfig>;\r\n\r\nexport declare type AsyncSubmitMethod = (form: IDynamicFormBase, context?: any) => Promise<IAsyncMessage>;\r\n\r\nexport interface IDynamicFormInfo {\r\n name?: string;\r\n controls?: IFormControl[];\r\n serializers?: IFormSerializers;\r\n fieldSets?: IFormFieldSet[];\r\n}\r\n\r\nexport interface IDynamicFormFieldSets {\r\n [id: string]: IFormFieldSet\r\n}\r\n\r\n// --- Basic form types ---\r\nexport type FormControlTester = (control: AbstractControl) => Promise<boolean>;\r\nexport type FormControlTesterFactory = FormControlTester | IResolveFactory;\r\n\r\n// --- Decorator functions ---\r\nconst emptyArray: any = [];\r\nconst emptyTester: FormControlTester = () => {\r\n return Promise.resolve(false);\r\n};\r\n\r\nexport function defaultSerializer(id: string, parent: FormArray): Promise<any> {\r\n const control = parent.get(id);\r\n return !control ? null: control.value;\r\n}\r\n\r\nexport function FormSerializable(serializer?: IFormControlSerializer | IResolveFactory): PropertyDecorator {\r\n return (target: any, propertyKey: string): void => {\r\n ReflectUtils.defineMetadata(\"dynamicFormSerializer\", serializer || defaultSerializer, target, propertyKey);\r\n };\r\n}\r\n\r\nexport function FormInput(data?: IFormInputData): PropertyDecorator {\r\n return (target: any, propertyKey: string): void => {\r\n const meta = ReflectUtils.getOwnMetadata(\"design:type\", target, propertyKey);\r\n const type = meta ? meta.name : \"\";\r\n let inputType = propertyKey.indexOf(\"password\") < 0 ? \"text\" : \"password\";\r\n switch (type) {\r\n case \"Number\":\r\n inputType = \"number\";\r\n break;\r\n case \"Boolean\":\r\n inputType = \"checkbox\";\r\n break;\r\n }\r\n defineFormControl(target, propertyKey, createFormInput(propertyKey, data, inputType));\r\n };\r\n}\r\n\r\nexport function FormSelect(data?: IFormSelectData): PropertyDecorator {\r\n return (target: any, propertyKey: string): void => {\r\n defineFormControl(target, propertyKey, createFormSelect(propertyKey, data));\r\n };\r\n}\r\n\r\nexport function FormStatic(data?: IFormStaticData): PropertyDecorator {\r\n return (target: any, propertyKey: string): void => {\r\n defineFormControl(target, propertyKey, createFormStatic(propertyKey, data));\r\n };\r\n}\r\n\r\nexport function FormModel(data?: IFormModelData): PropertyDecorator {\r\n return (target: any, propertyKey: string): void => {\r\n defineFormControl(target, propertyKey, createFormModel(propertyKey, data));\r\n };\r\n}\r\n\r\nexport function FormFile(data?: IFormFileData): PropertyDecorator {\r\n return (target: any, propertyKey: string): void => {\r\n defineFormControl(target, propertyKey, createFormFile(propertyKey, data));\r\n };\r\n}\r\n\r\nexport function FormFieldSet(data: IFormFieldSet): ClassDecorator {\r\n return (target: any): void => {\r\n const sets = getFormFieldSets(target);\r\n data.classes = data.classes || \"\";\r\n sets[data.id] = data;\r\n ReflectUtils.defineMetadata(\"dynamicFormFieldSets\", sets, target);\r\n };\r\n}\r\n\r\nexport function defineFormControl(target: any, propertyKey: string, control: IFormControl): void {\r\n ReflectUtils.defineMetadata(\"dynamicFormControl\", control, target, propertyKey);\r\n}\r\n\r\nexport function getFormFieldSets(target: any): IDynamicFormFieldSets {\r\n return ReflectUtils.getMetadata(\"dynamicFormFieldSets\", target) || {};\r\n}\r\n\r\nexport function getFormControl(target: any, propertyKey: string): IFormControl {\r\n return ReflectUtils.getMetadata(\"dynamicFormControl\", target, propertyKey);\r\n}\r\n\r\nexport function getFormSerializer(target: any, propertyKey: string): IFormControlSerializer | IResolveFactory {\r\n return ReflectUtils.getMetadata(\"dynamicFormSerializer\", target, propertyKey);\r\n}\r\n\r\nexport function createFormControl(id: string, type: string, data?: IFormControlData): IFormControl {\r\n data = data || {};\r\n data.label = ObjectUtils.isNullOrUndefined(data.label) ? id : data.label;\r\n data.labelAlign = data.labelAlign || \"left\";\r\n data.fieldSet = data.fieldSet || UniqueUtils.uuid();\r\n data.classes = data.classes || \"\";\r\n data.readonly = data.readonly || emptyTester;\r\n data.hidden = data.hidden || emptyTester;\r\n data.validators = data.validators || emptyArray;\r\n return {\r\n id: id,\r\n type: type,\r\n data: data\r\n };\r\n}\r\n\r\nexport function createFormInput(id: string, data: IFormInputData, type: string = \"text\"): IFormControl {\r\n const control = createFormControl(id, \"input\", data);\r\n data = control.data;\r\n data.type = data.type || type;\r\n data.classes = !data.classes ? `form-group-${data.type}` : `${data.classes} form-group-${data.type}`;\r\n data.placeholder = data.placeholder || (data.type == \"mask\" ? \"_\" : \"\");\r\n data.step = data.step || 1;\r\n data.mask = data.mask || [/\\w*/gi];\r\n return control;\r\n}\r\n\r\nexport function createFormSelect(id: string, data: IFormSelectData): IFormControl {\r\n const control = createFormControl(id, \"select\", data);\r\n data = control.data;\r\n data.options = data.options || [];\r\n data.type = data.type || \"select\";\r\n const classType = data.type == \"select\" ? \"select\" : `select-${data.type}`;\r\n data.classes = !data.classes ? `form-group-${classType}` : `${data.classes} form-group-${classType}`;\r\n return control;\r\n}\r\n\r\nexport function createFormStatic(id: string, data: IFormStaticData): IFormControl {\r\n const control = createFormControl(id, \"static\", data);\r\n data = control.data;\r\n data.style = data.style || \"table\";\r\n return control;\r\n}\r\n\r\nexport function createFormModel(id: string, data: IFormModelData): IFormControl {\r\n const control = createFormControl(id, \"model\", data);\r\n data = control.data;\r\n data.name = data.name || \"\";\r\n return control;\r\n}\r\n\r\nexport function createFormFile(id: string, data: IFormFileData): IFormControl {\r\n const control = createFormControl(id, \"file\", data);\r\n data = control.data;\r\n data.accept = data.accept || \".jpg,.jpeg,.png\";\r\n data.multi = data.multi || false;\r\n data.baseUrl = ObjectUtils.isString(data.baseUrl) ? data.baseUrl : \"assets/\";\r\n data.uploadUrl = ObjectUtils.isString(data.uploadUrl) ? data.uploadUrl : \"assets\";\r\n data.createUploadData = data.createUploadData || ((file: File) => {\r\n const form = new FormData();\r\n form.append(\"file\", file);\r\n return form;\r\n });\r\n return control;\r\n}\r\n","import {AbstractControl, ValidationErrors, ValidatorFn} from \"@angular/forms\";\r\n\r\nexport function validateJSON(control: AbstractControl): ValidationErrors | null {\r\n const value = control.value;\r\n if (!value) return null;\r\n try {\r\n JSON.parse(value);\r\n return null;\r\n } catch (e) {\r\n return {json: true};\r\n }\r\n}\r\n\r\nexport function validateRequiredTranslation(control: AbstractControl): ValidationErrors | null {\r\n const value: any[] = control.value;\r\n if (!value || value.length == 0) return {requiredTranslation: true};\r\n return value.findIndex(t => (t.lang == \"de\" || t.lang == \"en\") && !t.translation) < 0\r\n ? null\r\n : {requiredTranslation: true};\r\n}\r\n\r\nexport function validatePhone(control: AbstractControl): ValidationErrors | null {\r\n const value = control.value;\r\n if (!value) return Promise.resolve(null);\r\n const phoneRegexp = /^(?:\\d){10,12}$/;\r\n return phoneRegexp.test(value) ? null : {phone: true};\r\n}\r\n\r\nexport function validateItemsMinLength(minLength: number): ValidatorFn {\r\n return (control: AbstractControl): ValidationErrors | null => {\r\n const value = control.value;\r\n return (Array.isArray(value) && value.every(v => typeof v == \"string\" && v.length >= minLength))\r\n ? null : {itemsMinLength: minLength}\r\n };\r\n}\r\n\r\nexport function validateItemsMaxLength(maxLength: number): ValidatorFn {\r\n return (control: AbstractControl): ValidationErrors | null => {\r\n const value = control.value;\r\n return (Array.isArray(value) && value.every(v => typeof v == \"string\" && v.length <= maxLength))\r\n ? null : {itemsMaxLength: maxLength}\r\n };\r\n}\r\n\r\nexport function validateItemsMinValue(min: number): ValidatorFn {\r\n return (control: AbstractControl): ValidationErrors | null => {\r\n const value = control.value;\r\n return (Array.isArray(value) && value.every(v => typeof v == \"number\" && v >= min))\r\n ? null : {itemsMinValue: min}\r\n };\r\n}\r\n\r\nexport function validateItemsMaxValue(max: number): ValidatorFn {\r\n return (control: AbstractControl): ValidationErrors | null => {\r\n const value = control.value;\r\n return (Array.isArray(value) && value.every(v => typeof v == \"number\" && v <= max))\r\n ? null : {itemsMaxValue: max}\r\n };\r\n}\r\n","import {Subject} from \"rxjs\";\r\nimport {AbstractControl} from \"@angular/forms\";\r\nimport {DynamicFormControlModel} from \"@ng-dynamic-forms/core\";\r\nimport {DynamicPathable} from \"@ng-dynamic-forms/core/lib/model/misc/dynamic-form-control-path.model\";\r\n\r\nexport class FormSubject<T> extends Subject<T> {\r\n\r\n private readonly notifyCallback: (controlModel: DynamicFormControlModel, control: AbstractControl, index?: number) => T | Promise<T>;\r\n\r\n constructor(notifyCallback: (formModel: DynamicFormControlModel, control: AbstractControl, index?: number) => T | Promise<T>) {\r\n super();\r\n this.notifyCallback = notifyCallback;\r\n }\r\n\r\n protected handleNotifiedValue(controlModel: DynamicFormControlModel, control: AbstractControl, val: Promise<T>) {\r\n val.then(v => this.next(v));\r\n }\r\n\r\n notify(controlModel: DynamicFormControlModel, control: AbstractControl): void {\r\n let path = controlModel as DynamicPathable;\r\n while (path && isNaN(path.index)) {\r\n path = path.parent;\r\n }\r\n let value = this.notifyCallback(controlModel, control, path?.index);\r\n if (!(value instanceof Promise)) {\r\n value = Promise.resolve(value);\r\n }\r\n this.handleNotifiedValue(controlModel, control, value);\r\n }\r\n}\r\n","import {AbstractControl} from \"@angular/forms\";\r\nimport {DynamicFormOptionConfig, DynamicSelectModel} from \"@ng-dynamic-forms/core\";\r\nimport {FormSubject} from \"./form-subject\";\r\n\r\nexport class FormSelectSubject<T extends DynamicFormOptionConfig<any>[]> extends FormSubject<T> {\r\n\r\n protected handleNotifiedValue(controlModel: DynamicSelectModel<any>, control: AbstractControl, val: Promise<T>) {\r\n val.then(options => {\r\n this.next(options);\r\n const currentVal = control.value;\r\n if (controlModel.multiple) {\r\n const correctVal = (currentVal || []).filter(t => options.findIndex(o => o.value == t) >= 0);\r\n if (correctVal.length !== currentVal?.length) {\r\n control.setValue(correctVal, {onlySelf: true, emitEvent: false});\r\n }\r\n return;\r\n }\r\n const option = options.find(t => t.value == currentVal);\r\n if (!option) {\r\n control.setValue(options[0]?.value ?? null, {onlySelf: true, emitEvent: false});\r\n }\r\n });\r\n }\r\n}\r\n","import {DynamicPathable} from \"@ng-dynamic-forms/core\";\r\n\r\nexport function isStringWithVal(val: any): boolean {\r\n return typeof val == \"string\" && val.length > 0;\r\n}\r\n\r\nexport function collectPathAble<T extends DynamicPathable>(start: T, getter: (cur: T) => string): string[] {\r\n if (!start || !getter(start)) return [];\r\n const parts = [];\r\n let currentPath = start;\r\n while (currentPath) {\r\n const val = getter(currentPath);\r\n if (val) {\r\n parts.unshift(val);\r\n }\r\n currentPath = currentPath.parent as T;\r\n }\r\n return parts;\r\n}\r\n","import {\r\n DynamicFormArrayModel as Base,\r\n DynamicFormArrayModelConfig as ConfigBase,\r\n DynamicFormControlLayout\r\n} from \"@ng-dynamic-forms/core\";\r\n\r\nexport interface DynamicFormArrayModelConfig extends ConfigBase {\r\n additional?: {[key: string]: any};\r\n}\r\n\r\nexport class DynamicFormArrayModel extends Base {\r\n\r\n readonly additional: {[key: string]: any};\r\n\r\n constructor(config: DynamicFormArrayModelConfig, layout?: DynamicFormControlLayout) {\r\n super(config, layout);\r\n this.additional = config.additional || {};\r\n }\r\n}\r\n","import {EventEmitter, Injectable} from \"@angular/core\";\r\nimport {AbstractControl, FormArray, FormGroup} from \"@angular/forms\";\r\nimport {Subject} from \"rxjs\";\r\nimport {\r\n DynamicCheckboxModel,\r\n DynamicCheckboxModelConfig,\r\n DynamicFileUploadModel,\r\n DynamicFileUploadModelConfig,\r\n DynamicFormArrayModel as DynamicFormArrayModelBase,\r\n DynamicFormComponent,\r\n DynamicFormComponentService,\r\n DynamicFormControlModel,\r\n DynamicFormGroupModel,\r\n DynamicFormGroupModelConfig,\r\n DynamicFormModel,\r\n DynamicFormOptionConfig,\r\n DynamicFormService as Base,\r\n DynamicFormValidationService,\r\n DynamicFormValueControlModel,\r\n DynamicFormValueControlModelConfig,\r\n DynamicInputModel,\r\n DynamicInputModelConfig,\r\n DynamicSelectModel,\r\n DynamicSelectModelConfig,\r\n DynamicTextAreaModel,\r\n DynamicTextAreaModelConfig,\r\n DynamicValidatorsConfig\r\n} from \"@ng-dynamic-forms/core\";\r\nimport {\r\n IApiService,\r\n ILanguageService,\r\n IOpenApiSchema,\r\n IOpenApiSchemaProperty,\r\n IOpenApiSchemas,\r\n ObjectUtils,\r\n OpenApiService,\r\n StringUtils\r\n} from \"@stemy/ngx-utils\";\r\n\r\nimport {IFormControlSerializer} from \"../common-types\";\r\n\r\nimport {isStringWithVal} from \"../utils/misc\";\r\nimport {FormSelectSubject} from \"../utils/form-select-subject\";\r\nimport {FormSubject} from \"../utils/form-subject\";\r\nimport {DynamicFormArrayModel, DynamicFormArrayModelConfig} from \"../utils/dynamic-form-array.model\";\r\n\r\n@Injectable()\r\nexport class DynamicFormService extends Base {\r\n\r\n get api(): IApiService {\r\n return this.openApi.api;\r\n }\r\n\r\n get language(): ILanguageService {\r\n return this.api.language;\r\n }\r\n\r\n readonly onDetectChanges: EventEmitter<DynamicFormComponent>;\r\n protected schemas: IOpenApiSchemas;\r\n\r\n constructor(cs: DynamicFormComponentService, vs: DynamicFormValidationService, readonly openApi: OpenApiService) {\r\n super(cs, vs);\r\n this.onDetectChanges = new EventEmitter<DynamicFormComponent>();\r\n }\r\n\r\n patchGroup(value: any, formModel: DynamicFormModel, formGroup: FormGroup): void {\r\n this.patchValueRecursive(value, formModel, formGroup);\r\n this.detectChanges();\r\n formGroup.patchValue(ObjectUtils.copy(value));\r\n }\r\n\r\n patchForm(value: any, component: DynamicFormComponent): void {\r\n this.patchValueRecursive(value, component.model, component.group);\r\n this.detectChanges(component);\r\n component.group.patchValue(value);\r\n }\r\n\r\n serialize(formModel: DynamicFormModel, formGroup: FormGroup): Promise<any> {\r\n return this.serializeRecursive(formModel, formGroup);\r\n }\r\n\r\n notifyChanges(formModel: DynamicFormModel, formGroup: FormGroup): void {\r\n this.notifyChangesRecursive(formModel, formGroup);\r\n }\r\n\r\n updateSelectOptions(formControlModel: DynamicFormControlModel, formControl: AbstractControl): void {\r\n if (formControlModel instanceof DynamicSelectModel) {\r\n let options = formControlModel.options$;\r\n if (options instanceof FormSubject) {\r\n options.notify(formControlModel, formControl);\r\n return;\r\n }\r\n while (options instanceof Subject && options.source) {\r\n options = options.source;\r\n if (options instanceof FormSubject) {\r\n options.notify(formControlModel, formControl);\r\n }\r\n }\r\n }\r\n }\r\n\r\n showErrors(form: DynamicFormComponent): void {\r\n this.showErrorsForGroup(form.group);\r\n this.detectChanges(form);\r\n }\r\n\r\n detectChanges(formComponent?: DynamicFormComponent) {\r\n super.detectChanges(formComponent);\r\n this.onDetectChanges.emit(formComponent);\r\n }\r\n\r\n protected patchValueRecursive(value: any, formModel: DynamicFormModel, formGroup: FormGroup): void {\r\n Object.keys(value).forEach(key => {\r\n const subModel = this.findModelById(key, formModel);\r\n const subValue = value[key];\r\n if (!subModel) return;\r\n const subControl = this.findControlByModel(subModel, formGroup);\r\n if (subModel instanceof DynamicSelectModel && ObjectUtils.isObject(subValue)) {\r\n value[key] = subValue.id || subValue._id || subValue;\r\n return;\r\n }\r\n if (subModel instanceof DynamicFormArrayModelBase) {\r\n const length = Array.isArray(subValue) ? subValue.length : 0;\r\n const subArray = subControl as FormArray;\r\n while (subModel.size > length) {\r\n this.removeFormArrayGroup(0, subArray, subModel);\r\n }\r\n while (subModel.size < length) {\r\n this.insertFormArrayGroup(subModel.size, subArray, subModel);\r\n }\r\n for (let i = 0; i < length; i++) {\r\n const itemModel = subModel.get(i);\r\n this.patchValueRecursive(subValue[i], itemModel.group, subArray.at(i) as FormGroup);\r\n }\r\n return;\r\n }\r\n if (subModel instanceof DynamicFormGroupModel) {\r\n this.patchValueRecursive(subValue, subModel.group, subControl as FormGroup);\r\n }\r\n });\r\n }\r\n\r\n protected async serializeRecursive(formModel: DynamicFormModel, formGroup: FormGroup): Promise<any> {\r\n const result = {};\r\n if (!formModel || !formGroup || !formGroup.value) return result;\r\n for (const i in formModel) {\r\n const subModel = formModel[i] as DynamicFormValueControlModel<any>;\r\n const subControl = this.findControlByModel(subModel, formGroup);\r\n const serializer = subModel.additional?.serializer as IFormControlSerializer;\r\n if (ObjectUtils.isFunction(serializer)) {\r\n result[subModel.id] = await serializer(subModel, subControl);\r\n continue;\r\n }\r\n if (subModel instanceof DynamicFormArrayModelBase) {\r\n const length = Array.isArray(subControl.value) ? subControl.value.length : 0;\r\n const subArray = subControl as FormArray;\r\n const resArray = [];\r\n for (let i = 0; i < length; i++) {\r\n const itemModel = subModel.get(i);\r\n resArray.push(\r\n await this.serializeRecursive(itemModel.group, subArray.at(i) as FormGroup)\r\n );\r\n }\r\n result[subModel.id] = resArray;\r\n continue;\r\n }\r\n if (subModel instanceof DynamicFormGroupModel) {\r\n result[subModel.id] = await this.serializeRecursive(subModel.group, subControl as FormGroup);\r\n continue;\r\n }\r\n if (subModel instanceof DynamicInputModel && !ObjectUtils.isNullOrUndefined(subControl.value)) {\r\n result[subModel.id] = subModel.inputType == \"number\"\r\n ? parseFloat((`${subControl.value}` || \"0\").replace(/,/gi, \".\")) ?? null\r\n : subControl.value;\r\n continue;\r\n }\r\n result[subModel.id] = subControl.value;\r\n }\r\n return result;\r\n }\r\n\r\n protected notifyChangesRecursive(formModel: DynamicFormModel, formGroup: FormGroup): void {\r\n if (!formModel || !formGroup) return;\r\n for (const i in formModel) {\r\n const subModel = formModel[i] as DynamicFormValueControlModel<any>;\r\n const subControl = this.findControlByModel(subModel, formGroup);\r\n if (subModel instanceof DynamicFormArrayModelBase) {\r\n const length = Array.isArray(subControl.value) ? subControl.value.length : 0;\r\n const subArray = subControl as FormArray;\r\n for (let i = 0; i < length; i++) {\r\n const itemModel = subModel.get(i);\r\n this.notifyChangesRecursive(itemModel.group, subArray.at(i) as FormGroup);\r\n }\r\n continue;\r\n }\r\n if (subModel instanceof DynamicFormGroupModel) {\r\n this.notifyChangesRecursive(subModel.group, subControl as FormGroup);\r\n continue;\r\n }\r\n this.updateSelectOptions(subModel, subControl);\r\n }\r\n }\r\n\r\n protected showErrorsForGroup(formGroup: FormGroup): void {\r\n if (!formGroup) return;\r\n formGroup.markAsTouched({onlySelf: true});\r\n const controls = Object.keys(formGroup.controls).map(id => formGroup.controls[id]);\r\n this.showErrorsForControls(controls);\r\n }\r\n\r\n protected showErrorsForControls(controls: AbstractControl[]): void {\r\n controls.forEach(control => {\r\n if (control instanceof FormGroup) {\r\n this.showErrorsForGroup(control);\r\n return;\r\n }\r\n control.markAsTouched({onlySelf: true});\r\n if (control instanceof FormArray) {\r\n this.showErrorsForControls(control.controls);\r\n }\r\n });\r\n }\r\n\r\n async getFormModelForSchema(name: string): Promise<DynamicFormModel> {\r\n this.api.cache = {};\r\n this.schemas = await this.openApi.getSchemas();\r\n return this.getFormModelForSchemaDef(this.schemas[name]);\r\n }\r\n\r\n protected getFormModelForSchemaDef(schema: IOpenApiSchema): DynamicFormModel {\r\n if (!schema)\r\n return [];\r\n return Object.keys(schema.properties || {}).map(p => {\r\n const property = schema.properties[p];\r\n return this.getFormControlModel(property, schema);\r\n }).filter(t => null !== t);\r\n }\r\n\r\n protected getFormControlModel(property: IOpenApiSchemaProperty, schema: IOpenApiSchema): DynamicFormControlModel {\r\n const $enum = property.items?.enum || property.enum;\r\n if (Array.isArray($enum) || isStringWithVal(property.optionsPath) || isStringWithVal(property.endpoint)) {\r\n return new DynamicSelectModel<any>(this.getFormSelectConfig(property, schema));\r\n }\r\n switch (property.type) {\r\n case \"string\":\r\n case \"number\":\r\n case \"integer\":\r\n return new DynamicInputModel(this.getFormInputConfig(property, schema));\r\n case \"textarea\":\r\n return new DynamicTextAreaModel(this.getFormTextareaConfig(property, schema));\r\n case \"boolean\":\r\n return new DynamicCheckboxModel(this.getFormCheckboxConfig(property, schema));\r\n case \"array\":\r\n if (property.items?.$ref || property.$ref) {\r\n return new DynamicFormArrayModel(this.getFormArrayConfig(property, schema));\r\n } else {\r\n return new DynamicInputModel(this.getFormInputConfig(property, schema));\r\n }\r\n case \"file\":\r\n return new DynamicFileUploadModel(this.getFormUploadConfig(property, schema));\r\n }\r\n if (property.$ref) {\r\n return new DynamicFormGroupModel(this.getFormGroupConfig(property, schema));\r\n }\r\n return null;\r\n }\r\n\r\n protected getFormControlConfig(property: IOpenApiSchemaProperty, schema: IOpenApiSchema): DynamicFormValueControlModelConfig<any> {\r\n const validators = this.getValidators(property, schema);\r\n const errorMessages = Object.keys(validators).reduce((res, key) => {\r\n res[key] = `error.${key}`;\r\n return res;\r\n }, {});\r\n return {\r\n id: property.id,\r\n label: ObjectUtils.isString(property.label) ? property.label : property.id,\r\n hidden: property.hidden,\r\n disabled: property.disabled,\r\n validators,\r\n errorMessages,\r\n additional: Object.assign({}, property)\r\n };\r\n }\r\n\r\n protected getFormArrayConfig(property: IOpenApiSchemaProperty, schema: IOpenApiSchema): DynamicFormArrayModelConfig {\r\n const ref = property.items?.$ref || property.$ref || \"\";\r\n const subSchema = this.schemas[ref.split(\"/\").pop()];\r\n return Object.assign(this.getFormControlConfig(property, schema), {groupFactory: () => this.getFormModelForSchemaDef(subSchema)});\r\n }\r\n\r\n protected getFormGroupConfig(property: IOpenApiSchemaProperty, schema: IOpenApiSchema): DynamicFormGroupModelConfig {\r\n const ref = property.$ref || \"\";\r\n const subSchema = this.schemas[ref.split(\"/\").pop()];\r\n return Object.assign(this.getFormControlConfig(property, schema), {group: this.getFormModelForSchemaDef(subSchema)});\r\n }\r\n\r\n protected getFormInputConfig(property: IOpenApiSchemaProperty, schema: IOpenApiSchema): DynamicInputModelConfig {\r\n let inputType = StringUtils.has(property.id, \"password\", \"Password\") ? \"password\" : (property.items?.type || property.type);\r\n switch (inputType) {\r\n case \"boolean\":\r\n inputType = \"checkbox\";\r\n break;\r\n case \"textarea\":\r\n inputType = \"textarea\";\r\n break;\r\n case \"integer\":\r\n inputType = \"number\";\r\n break;\r\n }\r\n const sub = property.type == \"array\" ? property.items || property : property;\r\n return Object.assign(\r\n this.getFormControlConfig(property, schema),\r\n {\r\n inputType,\r\n autoComplete: property.autoComplete || \"off\",\r\n multiple: property.type == \"array\",\r\n accept: ObjectUtils.isString(property.accept) ? property.accept : null,\r\n mask: ObjectUtils.isString(property.mask) ? property.mask : null,\r\n pattern: ObjectUtils.isString(property.pattern) ? property.pattern : null,\r\n step: isNaN(sub.step) ? (isNaN(property.step) ? 1 : property.step) : sub.step,\r\n min: isNaN(sub.minimum) ? Number.MIN_SAFE_INTEGER : sub.minimum,\r\n max: isNaN(sub.maximum) ? Number.MAX_SAFE_INTEGER : sub.maximum,\r\n minLength: isNaN(sub.minLength) ? Number.MIN_SAFE_INTEGER : sub.minLength,\r\n maxLength: isNaN(sub.maxLength) ? Number.MAX_SAFE_INTEGER : sub.maxLength,\r\n }\r\n );\r\n }\r\n\r\n protected getFormTextareaConfig(property: IOpenApiSchemaProperty, schema: IOpenApiSchema): DynamicTextAreaModelConfig {\r\n return Object.assign(\r\n this.getFormControlConfig(property, schema),\r\n {\r\n cols: property.cols || null,\r\n rows: property.rows || 10,\r\n wrap: property.wrap || false,\r\n autoComplete: property.autoComplete || \"off\",\r\n multiple: property.type == \"array\"\r\n }\r\n );\r\n }\r\n\r\n protected getFormSelectConfig(property: IOpenApiSchemaProperty, schema: IOpenApiSchema): DynamicSelectModelConfig<any> {\r\n return Object.assign(\r\n this.getFormControlConfig(property, schema),\r\n {\r\n options: this.getFormSelectOptions(property, schema),\r\n multiple: property.type == \"array\"\r\n }\r\n );\r\n }\r\n\r\n protected getFormCheckboxConfig(property: IOpenApiSchemaProperty, schema: IOpenApiSchema): DynamicCheckboxModelConfig {\r\n return Object.assign(\r\n this.getFormControlConfig(property, schema),\r\n {\r\n indeterminate: property.indeterminate === true\r\n }\r\n );\r\n }\r\n\r\n protected async translateOptions(options: DynamicFormOptionConfig<any>[]): Promise<DynamicFormOptionConfig<any>[]> {\r\n if (!options) return [];\r\n for (const option of options) {\r\n option.label = await this.language.getTranslation(option.label);\r\n }\r\n return options;\r\n }\r\n\r\n protected getFormSelectOptions(property: IOpenApiSchemaProperty, schema: IOpenApiSchema) {\r\n const $enum = property.items?.enum || property.enum;\r\n if (Array.isArray($enum)) {\r\n return new FormSelectSubject(() => {\r\n const options = $enum.map(value => {\r\n const label = property.translatable ? `${property.id}.${value}` : value;\r\n return {value, label};\r\n });\r\n return this.translateOptions(options);\r\n });\r\n }\r\n if (isStringWithVal(property.optionsPath)) {\r\n return new FormSelectSubject((formModel, control, index) => {\r\n let path = property.optionsPath;\r\n let target = control;\r\n if (path.startsWith(\"$root\")) {\r\n path = path.substr(5);\r\n while (target.parent) {\r\n target = target.parent;\r\n }\r\n }\r\n while (path.startsWith(\".\")) {\r\n path = path.substr(1);\r\n if (target.parent) {\r\n target = target.parent;\r\n }\r\n }\r\n const value = ObjectUtils.getValue(target.value, path.replace(/\\$ix/gi, index));\r\n const options = (!ObjectUtils.isArray(value) ? [] : value).map(value => ({value, label: value}));\r\n return this.translateOptions(options);\r\n });\r\n }\r\n return new FormSelectSubject(async () => {\r\n this.api.cache[property.endpoint] = this.api.cache[property.endpoint] || this.api.list(property.endpoint, this.api.makeListParams(1, -1)).then(result => {\r\n return result.items.map(i => {\r\n return {value: i.id || i._id, label: i[property.labelField] || i.label || i.id || i._id};\r\n });\r\n });\r\n const options = (await this.api.cache[property.endpoint]).map(t => Object.assign({}, t));\r\n return this.translateOptions(options);\r\n });\r\n }\r\n\r\n protected getFormUploadConfig(property: IOpenApiSchemaProperty, schema: IOpenApiSchema): DynamicFileUploadModelConfig {\r\n const url = this.api.url(property.url || \"assets\");\r\n const {accept, autoUpload, maxSize, minSize, removeUrl, showFileList} = property;\r\n return Object.assign(this.getFormControlConfig(property, schema), {\r\n url,\r\n accept,\r\n autoUpload,\r\n maxSize,\r\n minSize,\r\n removeUrl,\r\n showFileList\r\n });\r\n }\r\n\r\n protected getValidators(property: IOpenApiSchemaProperty, schema: IOpenApiSchema): DynamicValidatorsConfig {\r\n const validators: DynamicValidatorsConfig = {};\r\n if (ObjectUtils.isArray(schema.required) && schema.required.indexOf(property.id) >= 0) {\r\n validators.required = null;\r\n }\r\n this.addPropertyValidators(validators, property);\r\n this.addItemsValidators(validators, property.items);\r\n return validators;\r\n }\r\n\r\n protected addPropertyValidators(validators: DynamicValidatorsConfig, property: IOpenApiSchemaProperty): void {\r\n if (!property) return;\r\n if (!isNaN(property.minLength)) {\r\n validators.minLength = property.minLength;\r\n }\r\n if (!isNaN(property.maxLength)) {\r\n validators.maxLength = property.maxLength;\r\n }\r\n if (!isNaN(property.minimum)) {\r\n validators.min = property.minimum;\r\n }\r\n if (!isNaN(property.maximum)) {\r\n validators.max = property.maximum;\r\n }\r\n switch (property.format) {\r\n case \"email\":\r\n validators.email = null;\r\n break;\r\n }\r\n }\r\n\r\n protected addItemsValidators(validators: DynamicValidatorsConfig, items: IOpenApiSchemaProperty): void {\r\n if (!items) return;\r\n if (!isNaN(items.minLength)) {\r\n validators.itemsMinLength = items.minLength;\r\n }\r\n if (!isNaN(items.maxLength)) {\r\n validators.itemsMaxLength = items.maxLength;\r\n }\r\n if (!isNaN(items.minimum)) {\r\n validators.itemsMinValue = items.minimum;\r\n }\r\n if (!isNaN(items.maximum)) {\r\n validators.itemsMaxValue = items.maximum;\r\n }\r\n }\r\n}\r\n","import {\r\n ChangeDetectorRef,\r\n Directive,\r\n ElementRef,\r\n EventEmitter,\r\n HostBinding,\r\n HostListener,\r\n Inject,\r\n Input,\r\n OnDestroy,\r\n OnInit,\r\n Output,\r\n Renderer2\r\n} from \"@angular/core\";\r\nimport {Subscription} from \"rxjs\";\r\nimport {IAsyncMessage, IToasterService, TOASTER_SERVICE} from \"@stemy/ngx-utils\";\r\nimport {AsyncSubmitMethod, IDynamicFormBase} from \"../common-types\";\r\n\r\n@Directive({\r\n selector: \"[async-submit]\",\r\n exportAs: \"async-submit\"\r\n})\r\nexport class AsyncSubmitDirective implements OnInit, OnDestroy {\r\n\r\n @Input(\"async-submit\") method: AsyncSubmitMethod;\r\n @Input() form: IDynamicFormBase;\r\n @Input() context: any;\r\n\r\n @Output() onSuccess: EventEmitter<IAsyncMessage>;\r\n @Output() onError: EventEmitter<IAsyncMessage>;\r\n\r\n private loading: boolean;\r\n private disabled: boolean;\r\n private callback: Function;\r\n private onStatusChange: Subscription;\r\n private onSubmit: Subscription;\r\n\r\n @HostBinding(\"class.disabled\")\r\n get isDisabled(): boolean {\r\n return this.disabled;\r\n }\r\n\r\n set isDisabled(value: boolean) {\r\n this.disabled = value;\r\n if (value) {\r\n this.renderer.setAttribute(this.elem.nativeElement, \"disabled\", \"disabled\");\r\n return;\r\n }\r\n this.renderer.removeAttribute(this.elem.nativeElement, \"disabled\");\r\n }\r\n\r\n @HostBinding(\"class.loading\")\r\n get isLoading(): boolean {\r\n return this.loading;\r\n }\r\n\r\n constructor(@Inject(TOASTER_SERVICE) private toaster: IToasterService,\r\n readonly cdr: ChangeDetectorRef,\r\n readonly elem: ElementRef,\r\n readonly renderer: Renderer2) {\r\n this.onSuccess = new EventEmitter<IAsyncMessage>();\r\n this.onError = new EventEmitter<IAsyncMessage>();\r\n if (elem.nativeElement.tagName !== \"BUTTON\") return;\r\n renderer.setAttribute(elem.nativeElement, \"type\", \"button\");\r\n }\r\n\r\n ngOnInit(): void {\r\n if (!this.form) return;\r\n this.isDisabled = this.form.status !== \"VALID\";\r\n this.cdr.detectChanges();\r\n this.onStatusChange = this.form.onStatusChange.subscribe(() => {\r\n this.isDisabled = this.form.status !== \"VALID\";\r\n this.cdr.detectChanges();\r\n if (!this.callback || this.form.status == \"PENDING\") return;\r\n if (!this.disabled) {\r\n this.callback();\r\n }\r\n this.callback = null;\r\n });\r\n this.onSubmit = this.form.onSubmit.subscribe(() => this.callMethod());\r\n }\r\n\r\n ngOnDestroy(): void {\r\n if (this.onStatusChange) this.onStatusChange.unsubscribe();\r\n if (this.onSubmit) this.onSubmit.unsubscribe();\r\n }\r\n\r\n @HostListener(\"click\")\r\n click(): void {\r\n this.callback = () => this.callMethod();\r\n if (this.form.status !== \"VALID\" && this.form.status !== \"INVALID\") return;\r\n this.callback();\r\n this.callback = null;\r\n }\r\n\r\n callMethod(): void {\r\n if (this.loading) return;\r\n this.loading = true;\r\n this.method(this.form, this.context).then(result => {\r\n this.loading = false;\r\n if (result) {\r\n this.onSuccess.emit(result);\r\n this.toaster.success(result.message, result.context);\r\n }\r\n }, reason => {\r\n if (!reason || !reason.message)\r\n throw new Error(\"Reason must implement IAsyncMessage interface\");\r\n this.loading = false;\r\n this.onError.emit(reason);\r\n this.toaster.error(reason.message, reason.context);\r\n });\r\n }\r\n}\r\n","import {\r\n AfterViewInit,\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n ContentChildren,\r\n EventEmitter,\r\n Inject,\r\n Input,\r\n OnChanges,\r\n Output,\r\n QueryList,\r\n SimpleChanges,\r\n ViewChild,\r\n ViewChildren\r\n} from \"@angular/core\";\r\nimport {FormArray, FormGroup, NgForm} from \"@angular/forms\";\r\nimport {Subscription} from \"rxjs\";\r\nimport {first} from \"rxjs/operators\";\r\nimport {\r\n DynamicFormArrayModel,\r\n DynamicFormComponent,\r\n DynamicFormComponentService,\r\n DynamicFormControlEvent,\r\n DynamicFormControlModel,\r\n DynamicFormGroupModel,\r\n DynamicFormLayout,\r\n DynamicFormModel,\r\n DynamicTemplateDirective\r\n} from \"@ng-dynamic-forms/core\";\r\nimport {EventsService, ObservableUtils} from \"@stemy/ngx-utils\";\r\nimport {DynamicFormState, IDynamicForm, IDynamicFormBase} from \"../../common-types\";\r\nimport {DynamicFormService} from \"../../services/dynamic-form.service\";\r\nimport {collectPathAble} from \"../../utils/misc\";\r\n\r\n@Component({\r\n selector: \"dynamic-base-form\",\r\n template: \"\",\r\n changeDetection: ChangeDetectionStrategy.Default\r\n})\r\nexport class DynamicBaseFormComponent extends DynamicFormComponent implements OnChanges, AfterViewInit, IDynamicForm {\r\n\r\n @Input() group: FormGroup;\r\n @Input() model: DynamicFormModel;\r\n @Input() layout: DynamicFormLayout;\r\n @Input() labelPrefix: string;\r\n\r\n @Output() blur: EventEmitter<DynamicFormControlEvent>;\r\n @Output() change: EventEmitter<DynamicFormControlEvent>;\r\n @Output() focus: EventEmitter<DynamicFormControlEvent>;\r\n\r\n @ContentChildren(DynamicTemplateDirective) contentTemplates: QueryList<DynamicTemplateDirective>;\r\n @ViewChildren(DynamicTemplateDirective) viewTemplates: QueryList<DynamicTemplateDirective>;\r\n\r\n get status(): DynamicFormState {\r\n return !this.group ? null : this.group.status as DynamicFormState;\r\n }\r\n\r\n @Output() readonly onStatusChange: EventEmitter<IDynamicFormBase>;\r\n @Output() readonly onValueChange: EventEmitter<IDynamicFormBase>;\r\n @Output() readonly onSubmit: EventEmitter<IDynamicFormBase>;\r\n\r\n @ViewChild(NgForm)\r\n protected ngForm: NgForm;\r\n protected subscription: Subscription;\r\n protected groupSubscription: Subscription;\r\n\r\n constructor(@Inject(DynamicFormService) readonly formService: DynamicFormService,\r\n @Inject(EventsService) readonly events: EventsService,\r\n changeDetectorRef: ChangeDetectorRef,\r\n componentService: DynamicFormComponentService,) {\r\n super(changeDetectorRef, componentService);\r\n this.blur = new EventEmitter<DynamicFormControlEvent>();\r\n this.change = new EventEmitter<DynamicFormControlEvent>();\r\n this.focus = new EventEmitter<DynamicFormControlEvent>();\r\n this.onStatusChange = new EventEmitter<IDynamicFormBase>();\r\n this.onValueChange = new EventEmitter<IDynamicFormBase>();\r\n this.onSubmit = new EventEmitter<IDynamicFormBase>();\r\n this.templates = new QueryList<DynamicTemplateDirective>();\r\n this.subscription = new Subscription();\r\n this.groupSubscription = new Subscription();\r\n this.labelPrefix = \"label\";\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n this.groupSubscription.unsubscribe();\r\n if (this.group) {\r\n this.groupSubscription = ObservableUtils.multiSubscription(\r\n this.group.statusChanges.subscribe(() => {\r\n this.onStatusChange.emit(this);\r\n }),\r\n this.group.valueChanges.subscribe(() => {\r\n this.onValueChange.emit(this);\r\n this.formService.notifyChanges(this.model, this.group);\r\n })\r\n );\r\n }\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n this.subscription = ObservableUtils.multiSubscription(\r\n ObservableUtils.subscribe(\r\n {\r\n subjects: [this.contentTemplates.changes, this.viewTemplates.changes],\r\n cb: () => {\r\n const templates = this.contentTemplates.toArray().concat(this.viewTemplates.toArray());\r\n this.templates.reset(templates);\r\n }\r\n }\r\n ),\r\n this.events.languageChanged.subscribe(() => {\r\n this.formService.detectChanges(this)\r\n }),\r\n this.ngForm.ngSubmit.subscribe(() => {\r\n this.onSubmit.emit(this);\r\n })\r\n );\r\n }\r\n\r\n ngOnDestroy(): void {\r\n super.ngOnDestroy();\r\n this.subscription.unsubscribe();\r\n this.groupSubscription.unsubscribe();\r\n }\r\n\r\n insertFormArrayGroup(index: number, formArray: FormArray, formArrayModel: DynamicFormArrayModel): void {\r\n this.formService.insertFormArrayGroup(index, formArray, formArrayModel);\r\n this.changeDetectorRef.detectChanges();\r\n }\r\n\r\n removeFormArrayGroup(index: number, formArray: FormArray, formArrayModel: DynamicFormArrayModel): void {\r\n this.formService.removeFormArrayGroup(index, formArray, formArrayModel);\r\n this.changeDetectorRef.detectChanges();\r\n }\r\n\r\n moveFormArrayGroup(index: number, step: number, formArray: FormArray, formArrayModel: DynamicFormArrayModel): void {\r\n this.formService.moveFormArrayGroup(index, step, formArray, formArrayModel);\r\n this.changeDetectorRef.detectChanges();\r\n }\r\n\r\n clearFormArray(formArray: FormArray, formArrayModel: DynamicFormArrayModel): void {\r\n this.formService.clearFormArray(formArray, formArrayModel);\r\n this.changeDetectorRef.detectChanges();\r\n }\r\n\r\n getClass(model?: DynamicFormControlModel): string {\r\n const parts = collectPathAble(model, p => p.id);\r\n if (parts.length == 0) return \"\";\r\n if (model instanceof DynamicFormGroupModel) {\r\n return `form-group-${parts.join(\"-\")}`;\r\n }\r\n return `form-control-${parts.join(\"-\")}`;\r\n }\r\n\r\n validate(showErrors: boolean = true): Promise<any> {\r\n if (!this.group) return Promise.resolve();\r\n return new Promise<any>((resolve, reject) => {\r\n this.group.statusChanges.pipe(first(status => status == \"VALID\" || status == \"INVALID\")).subscribe(status => {\r\n if (showErrors) {\r\n this.formService.showErrors(this);\r\n }\r\n if (status == \"VALID\") {\r\n resolve(null);\r\n return;\r\n }\r\n reject(null);\r\n });\r\n this.group.updateValueAndValidity();\r\n });\r\n }\r\n\r\n async serialize(validate?: boolean): Promise<any> {\r\n if (!this.group) return null;\r\n if (validate) {\r\n await this.validate();\r\n }\r\n return await this.formService.serialize(this.model, this.group);\r\n }\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n EventEmitter,\r\n forwardRef,\r\n Input,\r\n Output,\r\n QueryList,\r\n ViewChildren\r\n} from \"@angular/core\";\r\nimport {FormGroup} from \"@angular/forms\";\r\nimport {\r\n DynamicFormArrayComponent,\r\n DynamicFormArrayModel,\r\n DynamicFormControlContainerComponent,\r\n DynamicFormControlCustomEvent,\r\n DynamicFormControlLayout,\r\n DynamicFormControlLayoutContext,\r\n DynamicFormControlLayoutPlace,\r\n DynamicFormControlModel,\r\n DynamicFormGroupModel,\r\n DynamicFormLayout,\r\n DynamicFormLayoutService,\r\n DynamicFormValidationService,\r\n DynamicTemplateDirective\r\n} from \"@ng-dynamic-forms/core\";\r\nimport {collectPathAble} from \"../../utils/misc\";\r\n\r\n@Component({\r\n selector: \"dynamic-base-form-array\",\r\n template: \"\",\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class DynamicBaseFormArrayComponent extends DynamicFormArrayComponent {\r\n\r\n @Input() formLayout: DynamicFormLayout;\r\n @Input() group: FormGroup;\r\n @Input() layout: DynamicFormControlLayout;\r\n @Input() model: DynamicFormArrayModel;\r\n @Input() templates: QueryList<DynamicTemplateDirective> | undefined;\r\n\r\n @Output() blur: EventEmitter<any> = new EventEmitter();\r\n @Output() change: EventEmitter<any> = new EventEmitter();\r\n @Output() customEvent: EventEmitter<DynamicFormControlCustomEvent> = new EventEmitter();\r\n @Output() focus: EventEmitter<any> = new EventEmitter();\r\n\r\n @ViewChildren(forwardRef(() => DynamicFormControlContainerComponent))\r\n components: QueryList<DynamicFormControlContainerComponent>;\r\n\r\n constructor(protected layoutService: DynamicFormLayoutService,\r\n protected validationService: DynamicFormValidationService) {\r\n\r\n super(layoutService, validationService);\r\n }\r\n\r\n getClass(context: DynamicFormControlLayoutContext, place: DynamicFormControlLayoutPlace, model?: DynamicFormControlModel): string {\r\n return [\r\n context == \"element\" ? this.getModelClass(model) : null,\r\n super.getClass(context, place, model)\r\n ].filter(cls => !!cls).join(\" \");\r\n }\r\n\r\n protected getModelClass(model?: DynamicFormControlModel): string {\r\n const parts = collectPathAble(model, p => p.id);\r\n if (parts.length == 0) return \"\";\r\n if (model instanceof DynamicFormGroupModel) {\r\n return `form-group-${parts.join(\"-\")}`;\r\n }\r\n return `form-control-${parts.join(\"-\")}`;\r\n }\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n ComponentFactoryResolver,\r\n ContentChildren,\r\n EventEmitter,\r\n HostBinding,\r\n Input,\r\n OnInit,\r\n Output,\r\n QueryList,\r\n Type,\r\n ViewChild,\r\n ViewContainerRef\r\n} from \"@angular/core\";\r\nimport {FormGroup} from \"@angular/forms\";\r\nimport {Subscription} from \"rxjs\";\r\nimport {\r\n DYNAMIC_FORM_CONTROL_TYPE_ARRAY,\r\n DynamicFormArrayGroupModel,\r\n DynamicFormComponentService,\r\n DynamicFormControl,\r\n DynamicFormControlContainerComponent,\r\n DynamicFormControlEvent,\r\n DynamicFormControlModel,\r\n DynamicFormLayout,\r\n DynamicFormLayoutService,\r\n DynamicFormRelationService,\r\n DynamicFormValidationService,\r\n DynamicTemplateDirective\r\n} from \"@ng-dynamic-forms/core\";\r\nimport {ObjectUtils} from \"@stemy/ngx-utils\";\r\n\r\nimport {OnCreatedFormControl} from \"../../common-types\";\r\nimport {collectPathAble} from \"../../utils/misc\";\r\nimport {DynamicBaseFormComponent} from \"./dynamic-base-form.component\";\r\nimport {DynamicFormService} from \"../../services/dynamic-form.service\";\r\n\r\n@Component({\r\n selector: \"dynamic-base-form-control\",\r\n template: \"\",\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class DynamicBaseFormControlContainerComponent extends DynamicFormControlContainerComponent implements OnInit {\r\n\r\n @ContentChildren(DynamicTemplateDirective) contentTemplateList: QueryList<DynamicTemplateDirective>;\r\n\r\n @HostBinding(\"class\") klass;\r\n\r\n @Input() context: DynamicFormArrayGroupModel | null = null;\r\n @Input() group: FormGroup;\r\n @Input() hostClass: string[];\r\n @Input(\"templates\") inputTemplateList: QueryList<DynamicTemplateDirective>;\r\n @Input() layout: DynamicFormLayout;\r\n @Input() model: DynamicFormControlModel;\r\n\r\n @Output() blur: EventEmitter<DynamicFormControlEvent> = new EventEmitter<DynamicFormControlEvent>();\r\n @Output() change: EventEmitter<DynamicFormControlEvent> = new EventEmitter<DynamicFormControlEvent>();\r\n @Output() focus: EventEmitter<DynamicFormControlEvent> = new EventEmitter<DynamicFormControlEvent>();\r\n\r\n @ViewChild(\"componentViewContainer\", {read: ViewContainerRef, static: true}) componentViewContainerRef: ViewContainerRef;\r\n\r\n protected onDetectChanges: Subscription;\r\n\r\n get componentType(): Type<DynamicFormControl> | null {\r\n return this.componentService.getCustomComponentType(this.model) ?? this.getComponentType(this.model);\r\n }\r\n\r\n get startTemplate(): DynamicTemplateDirective {\r\n return (this.model.type == DYNAMIC_FORM_CONTROL_TYPE_ARRAY)\r\n ? this.layoutService.getAlignedTemplate(this.model, this.templates, \"ARRAY_START\" as any)\r\n : this.layoutService.getStartTemplate(this.model, this.templates);\r\n }\r\n\r\n get endTemplate(): DynamicTemplateDirective {\r\n return (this.model.type == DYNAMIC_FORM_CONTROL_TYPE_ARRAY)\r\n ? this.layoutService.getAlignedTemplate(this.model, this.templates, \"ARRAY_END\" as any)\r\n : this.layoutService.getEndTemplate(this.model, this.templates);\r\n }\r\n\r\n get formService(): DynamicFormService {\r\n return this.form.formService;\r\n }\r\n\r\n constructor(readonly form: DynamicBaseFormComponent,\r\n readonly changeDetectorRef: ChangeDetectorRef,\r\n readonly componentFactoryResolver: ComponentFactoryResolver,\r\n readonly layoutService: DynamicFormLayoutService,\r\n readonly validationService: DynamicFormValidationService,\r\n readonly componentService: DynamicFormComponentService,\r\n readonly relationService: DynamicFormRelationService) {\r\n super(changeDetectorRef, componentFactoryResolver, layoutService, validationService, componentService, relationService);\r\n }\r\n\r\n ngOnInit(): void {\r\n this.onDetectChanges = this.formService.onDetectChanges.subscribe(form => {\r\n if (form !== this.form) return;\r\n this.changeDetectorRef.detectChanges();\r\n this.formService.updateSelectOptions(this.model, this.control);\r\n });\r\n }\r\n\r\n ngOnDestroy() {\r\n super.ngOnDestroy();\r\n this.onDetectChanges.unsubscribe();\r\n }\r\n\r\n getLabel(): string {\r\n const label = collectPathAble(this.model, p => p.label);\r\n if (label.length == 0) return \"\";\r\n if (this.form?.labelPrefix) {\r\n label.unshift(this.form.labelPrefix);\r\n }\r\n return label.join(\".\");\r\n }\r\n\r\n protected createFormControlComponent() {\r\n super.createFormControlComponent();\r\n const component = this.componentRef?.instance as OnCreatedFormControl;\r\n if (!component || !ObjectUtils.isFunction(component.onCreated)) return;\r\n component.onCreated();\r\n }\r\n\r\n protected getComponentType(model: DynamicFormControlModel): Type<DynamicFormControl> | null {\r\n return null;\r\n }\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n EventEmitter,\r\n forwardRef,\r\n Input,\r\n Output,\r\n QueryList,\r\n ViewChildren\r\n} from \"@angular/core\";\r\nimport {FormGroup} from \"@angular/forms\";\r\nimport {\r\n DynamicFormControlContainerComponent,\r\n DynamicFormControlCustomEvent,\r\n DynamicFormControlLayout,\r\n DynamicFormControlLayoutContext,\r\n DynamicFormControlLayoutPlace,\r\n DynamicFormControlModel,\r\n DynamicFormGroupComponent,\r\n DynamicFormGroupModel,\r\n DynamicFormLayout,\r\n DynamicFormLayoutService,\r\n DynamicFormValidationService,\r\n DynamicTemplateDirective\r\n} from \"@ng-dynamic-forms/core\";\r\nimport {collectPathAble} from \"../../utils/misc\";\r\n\r\n@Component({\r\n selector: \"dynamic-base-form-group\",\r\n template: \"\",\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class DynamicBaseFormGroupComponent extends DynamicFormGroupComponent {\r\n\r\n @Input() formLayout: DynamicFormLayout;\r\n @Input() group: FormGroup;\r\n @Input() layout: DynamicFormControlLayout;\r\n @Input() model: DynamicFormGroupModel;\r\n @Input() templates: QueryList<DynamicTemplateDirective> | DynamicTemplateDirective[] | undefined;\r\n\r\n @Output() blur: EventEmitter<any> = new EventEmitter();\r\n @Output() change: EventEmitter<any> = new EventEmitter();\r\n @Output() customEvent: EventEmitter<DynamicFormControlCustomEvent> = new EventEmitter();\r\n @Output() focus: EventEmitter<any> = new EventEmitter();\r\n\r\n @ViewChildren(forwardRef(() => DynamicFormControlContainerComponent))\r\n components: QueryList<DynamicFormControlContainerComponent>;\r\n\r\n constructor(protected layoutService: DynamicFormLayoutService,\r\n protected validationService: DynamicFormValidationService) {\r\n super(layoutService, validationService);\r\n }\r\n\r\n getClass(context: DynamicFormControlLayoutContext, place: DynamicFormControlLayoutPlace, model?: DynamicFormControlModel): string {\r\n return [\r\n context == \"element\" ? this.getModelClass(model) : null,\r\n super.getClass(context, place, model)\r\n ].filter(cls => !!cls).join(\" \");\r\n }\r\n\r\n protected getModelClass(model?: DynamicFormControlModel): string {\r\n const parts = collectPathAble(model, p => p.id);\r\n if (parts.length == 0) return \"\";\r\n if (model instanceof DynamicFormGroupModel) {\r\n return `form-group-${parts.join(\"-\")}`;\r\n }\r\n return `form-control-${parts.join(\"-\")}`;\r\n }\r\n}\r\n","import {ModuleWithProviders, NgModule} from \"@angular/core\";\r\nimport {CommonModule} from \"@angular/common\";\r\nimport {FormsModule, NG_VALIDATORS, ReactiveFormsModule} from \"@angular/forms\";\r\nimport {\r\n DYNAMIC_VALIDATORS,\r\n DynamicFormService as BaseDynamicFormService,\r\n Validator,\r\n ValidatorFactory\r\n} from \"@ng-dynamic-forms/core\";\r\nimport {NgxUtilsModule} from \"@stemy/ngx-utils\";\r\n\r\nimport {AsyncSubmitDirective} from \"./directives/async-submit.directive\";\r\n\r\nimport {\r\n validateItemsMaxLength,\r\n validateItemsMaxValue,\r\n validateItemsMinLength,\r\n validateItemsMinValue,\r\n validateJSON,\r\n validatePhone,\r\n validateRequiredTranslation\r\n} from \"./utils/validators\";\r\n\r\nimport {DynamicBaseFormComponent} from \"./components/base/dynamic-base-form.component\";\r\nimport {DynamicBaseFormArrayComponent} from \"./components/base/dynamic-base-form-array.component\";\r\nimport {\r\n DynamicBaseFormControlContainerComponent\r\n} from \"./components/base/dynamic-base-form-control-container.component\";\r\nimport {DynamicBaseFormGroupComponent} from \"./components/base/dynamic-base-form-group.component\";\r\n\r\nimport {DynamicFormService} from \"./services/dynamic-form.service\";\r\n\r\n// --- Components ---\r\nexport const components = [\r\n DynamicBaseFormComponent,\r\n DynamicBaseFormArrayComponent,\r\n DynamicBaseFormControlContainerComponent,\r\n DynamicBaseFormGroupComponent\r\n];\r\n\r\n// --- Directives ---\r\nexport const directives = [\r\n AsyncSubmitDirective,\r\n];\r\n\r\n// --- Pipes ---\r\nexport const pipes = [];\r\n\r\n@NgModule({\r\n declarations: [\r\n ...components,\r\n ...directives,\r\n ...pipes\r\n ],\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n NgxUtilsModule\r\n ],\r\n exports: [\r\n ...components,\r\n ...directives,\r\n ...pipes,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n NgxUtilsModule\r\n ],\r\n entryComponents: components,\r\n providers: [\r\n ...pipes,\r\n {provide: NG_VALIDATORS, useValue: validateJSON, multi: true},\r\n {provide: NG_VALIDATORS, useValue: validateRequiredTranslation, multi: true},\r\n {provide: NG_VALIDATORS, useValue: validateItemsMinLength, multi: true},\r\n {provide: NG_VALIDATORS, useValue: validateItemsMaxLength, multi: true},\r\n {provide: NG_VALIDATORS, useValue: validateItemsMinValue, multi: true},\r\n {provide: NG_VALIDATORS, useValue: validateItemsMaxValue, multi: true},\r\n {\r\n provide: DYNAMIC_VALIDATORS,\r\n useValue: new Map<string, Validator | ValidatorFactory>([\r\n [\"json\", validateJSON],\r\n [\"requiredTranslation\", validateRequiredTranslation],\r\n [\"phone\", validatePhone],\r\n [\"itemsMinLength\", validateItemsMinLength],\r\n [\"itemsMaxLength\", validateItemsMaxLength],\r\n [\"itemsMinValue\", validateItemsMinValue],\r\n [\"itemsMaxValue\", validateItemsMaxValue],\r\n ])\r\n }\r\n ]\r\n})\r\nexport class NgxDynamicFormModule {\r\n\r\n static forRoot(): ModuleWithProviders<NgxDynamicFormModule> {\r\n return {\r\n ngModule: NgxDynamicFormModule,\r\n providers: [\r\n DynamicFormService,\r\n {\r\n provide: BaseDynamicFormService,\r\n useExisting: DynamicFormService\r\n }\r\n ]\r\n }\r\n }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n\nexport {components as ɵa,directives as ɵb,pipes as ɵc} from './ngx-dynamic-form/ngx-dynamic-form.module';"],"names":["Base","DynamicFormArrayModelBase","BaseDynamicFormService"],"mappings":"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"}
1
+ {"version":3,"file":"stemy-ngx-dynamic-form.js","sources":["../../src/ngx-dynamic-form/common-types.ts","../../src/ngx-dynamic-form/utils/validators.ts","../../src/ngx-dynamic-form/utils/form-subject.ts","../../src/ngx-dynamic-form/utils/form-select-subject.ts","../../src/ngx-dynamic-form/utils/misc.ts","../../src/ngx-dynamic-form/utils/dynamic-form-array.model.ts","../../src/ngx-dynamic-form/services/dynamic-form.service.ts","../../src/ngx-dynamic-form/directives/async-submit.directive.ts","../../src/ngx-dynamic-form/components/base/dynamic-base-form.component.ts","../../src/ngx-dynamic-form/components/base/dynamic-base-form-array.component.ts","../../src/ngx-dynamic-form/components/base/dynamic-base-form-control-container.component.ts","../../src/ngx-dynamic-form/components/base/dynamic-base-form-group.component.ts","../../src/ngx-dynamic-form/ngx-dynamic-form.module.ts","../../src/stemy-ngx-dynamic-form.ts"],"sourcesContent":["import {EventEmitter, Injector, TemplateRef} from \"@angular/core\";\r\nimport {AbstractControl, FormArray} from \"@angular/forms\";\r\nimport {\r\n DynamicFileUploadModelConfig,\r\n DynamicFormControl,\r\n DynamicFormControlModel,\r\n DynamicFormControlModelConfig,\r\n DynamicFormGroupModelConfig,\r\n DynamicFormValueControlModel,\r\n DynamicInputModelConfig,\r\n DynamicSelectModelConfig\r\n} from \"@ng-dynamic-forms/core\";\r\nimport {\r\n IAsyncMessage,\r\n IOpenApiSchema,\r\n IOpenApiSchemaProperty,\r\n IResolveFactory,\r\n ObjectUtils,\r\n ReflectUtils\r\n} from \"@stemy/ngx-utils\";\r\n\r\n// --- Basic form control interfaces ---\r\n\r\nexport type DynamicFormState = \"VALID\" | \"INVALID\" | \"PENDING\" | \"DISABLED\" | \"LOADING\";\r\nexport type DynamicFormUpdateOn = \"change\" | \"blur\" | \"submit\";\r\n\r\nexport interface IDynamicFormBase {\r\n\r\n status: DynamicFormState;\r\n\r\n onStatusChange: EventEmitter<IDynamicFormBase>;\r\n onValueChange: EventEmitter<IDynamicFormBase>;\r\n onSubmit: EventEmitter<IDynamicFormBase>;\r\n\r\n validate(): Promise<any>;\r\n serialize(validate?: boolean): Promise<any>;\r\n}\r\n\r\nexport interface IDynamicForm extends IDynamicFormBase {\r\n\r\n}\r\n\r\nexport interface OnCreatedFormControl extends DynamicFormControl {\r\n onCreated(): any;\r\n}\r\n\r\nexport declare interface ModelType extends Function {\r\n new (config: DynamicFormControlModelConfig): DynamicFormControlModel;\r\n}\r\n\r\nexport type FormControlSerializer = (model: DynamicFormValueControlModel<any>, control: AbstractControl) => Promise<any>;\r\nexport type FormModelCustomizer = (\r\n property: IOpenApiSchemaProperty, schema: IOpenApiSchema,\r\n model: DynamicFormControlModel, config: DynamicFormControlModelConfig, injector: Injector\r\n) => DynamicFormControlModel | DynamicFormControlModel[];\r\nexport type FormModelCustomizerWrap = (\r\n property: IOpenApiSchemaProperty, schema: IOpenApiSchema,\r\n modelType: ModelType, config: DynamicFormControlModelConfig\r\n) => DynamicFormControlModel[];\r\n\r\nexport interface IFormControl {\r\n id: string;\r\n type: string;\r\n config?: DynamicFormControlModelConfig;\r\n}\r\n\r\nexport interface IFormControlOption {\r\n id: any;\r\n label: string;\r\n selectable?: boolean;\r\n}\r\n\r\n// --- Basic form interfaces ---\r\n\r\nexport interface IDynamicFormTemplates {\r\n [id: string]: TemplateRef<any>;\r\n}\r\n\r\nexport interface IDynamicFormConfig {\r\n path?: string | number | Array<string | number>;\r\n name?: string;\r\n classes?: string;\r\n formClasses?: string;\r\n innerFormClasses?: string;\r\n id: string;\r\n}\r\n\r\nexport interface IDynamicSingleFormConfig extends IDynamicFormConfig, IDynamicFormInfo {\r\n data: any;\r\n controlData?: DynamicFormGroupModelConfig;\r\n multi?: false;\r\n}\r\n\r\nexport interface IDynamicMultiFormConfig extends IDynamicFormConfig {\r\n data: IDynamicFormsConfigs;\r\n multi: true;\r\n}\r\n\r\nexport type IDynamicFormsConfigs = Array<IDynamicSingleFormConfig | IDynamicMultiFormConfig>;\r\n\r\nexport declare type AsyncSubmitMethod = (form: IDynamicFormBase, context?: any) => Promise<IAsyncMessage>;\r\n\r\nexport interface IDynamicFormInfo {\r\n name?: string;\r\n controls?: IFormControl[];\r\n}\r\n\r\n// --- Decorator functions ---\r\nexport function defaultSerializer(id: string, parent: FormArray): Promise<any> {\r\n const control = parent.get(id);\r\n return !control ? null: control.value;\r\n}\r\n\r\nexport function FormSerializable(serializer?: FormControlSerializer | IResolveFactory): PropertyDecorator {\r\n return (target: any, propertyKey: string): void => {\r\n ReflectUtils.defineMetadata(\"dynamicFormSerializer\", serializer || defaultSerializer, target, propertyKey);\r\n };\r\n}\r\n\r\nexport function FormInput(data?: DynamicInputModelConfig): PropertyDecorator {\r\n return (target: any, propertyKey: string): void => {\r\n const meta = ReflectUtils.getOwnMetadata(\"design:type\", target, propertyKey);\r\n const type = meta ? meta.name : \"\";\r\n let inputType = propertyKey.indexOf(\"password\") < 0 ? \"text\" : \"password\";\r\n switch (type) {\r\n case \"Number\":\r\n inputType = \"number\";\r\n break;\r\n case \"Boolean\":\r\n inputType = \"checkbox\";\r\n break;\r\n }\r\n defineFormControl(target, propertyKey, createFormInput(propertyKey, data, inputType));\r\n };\r\n}\r\n\r\nexport function FormSelect(data?: DynamicSelectModelConfig<any>): PropertyDecorator {\r\n return (target: any, propertyKey: string): void => {\r\n defineFormControl(target, propertyKey, createFormSelect(propertyKey, data));\r\n };\r\n}\r\n\r\nexport function FormStatic(data?: DynamicFormControlModelConfig): PropertyDecorator {\r\n return (target: any, propertyKey: string): void => {\r\n defineFormControl(target, propertyKey, createFormStatic(propertyKey, data));\r\n };\r\n}\r\n\r\nexport function FormModel(data?: DynamicFormGroupModelConfig): PropertyDecorator {\r\n return (target: any, propertyKey: string): void => {\r\n defineFormControl(target, propertyKey, createFormModel(propertyKey, data));\r\n };\r\n}\r\n\r\nexport function FormFile(data?: DynamicFileUploadModelConfig): PropertyDecorator {\r\n return (target: any, propertyKey: string): void => {\r\n defineFormControl(target, propertyKey, createFormFile(propertyKey, data));\r\n };\r\n}\r\n\r\nexport function defineFormControl(target: any, propertyKey: string, control: IFormControl): void {\r\n ReflectUtils.defineMetadata(\"dynamicFormControl\", control, target, propertyKey);\r\n}\r\n\r\nexport function getFormControl(target: any, propertyKey: string): IFormControl {\r\n return ReflectUtils.getMetadata(\"dynamicFormControl\", target, propertyKey);\r\n}\r\n\r\nexport function getFormSerializer(target: any, propertyKey: string): FormControlSerializer | IResolveFactory {\r\n return ReflectUtils.getMetadata(\"dynamicFormSerializer\", target, propertyKey);\r\n}\r\n\r\nexport function createFormControl(id: string, type: string, config?: DynamicFormControlModelConfig): IFormControl {\r\n config = config || {id};\r\n config.id = id;\r\n config.label = ObjectUtils.isNullOrUndefined(config.label) ? id : config.label;\r\n config.disabled = config.disabled || false;\r\n config.hidden = config.hidden || false;\r\n return {id, type, config};\r\n}\r\n\r\nexport function createFormInput(id: string, config: DynamicInputModelConfig, type: string = \"text\"): IFormControl {\r\n const control = createFormControl(id, \"input\", config);\r\n config = control.config;\r\n config.inputType = config.inputType || type;\r\n config.placeholder = config.placeholder || (config.inputType == \"mask\" ? \"_\" : \"\");\r\n config.step = config.step || 1;\r\n config.mask = config.mask || [/\\w*/gi];\r\n return control;\r\n}\r\n\r\nexport function createFormSelect(id: string, data: DynamicSelectModelConfig<any>): IFormControl {\r\n const control = createFormControl(id, \"select\", data);\r\n data = control.config;\r\n data.options = data.options || [];\r\n return control;\r\n}\r\n\r\nexport function createFormStatic(id: string, config: DynamicFormControlModelConfig): IFormControl {\r\n return createFormControl(id, \"static\", config);\r\n}\r\n\r\nexport function createFormModel(id: string, data: DynamicFormGroupModelConfig): IFormControl {\r\n const control = createFormControl(id, \"group\", data);\r\n data = control.config;\r\n data.name = data.name || \"\";\r\n return control;\r\n}\r\n\r\nexport function createFormFile(id: string, data: DynamicFileUploadModelConfig): IFormControl {\r\n const control = createFormControl(id, \"file\", data);\r\n data = control.config;\r\n data.accept = data.accept || [\"jpg\", \"jpeg\", \"png\"];\r\n data.multiple = data.multiple || false;\r\n data.url = ObjectUtils.isString(data.url) ? data.url : \"assets\";\r\n return control;\r\n}\r\n","import {AbstractControl, ValidationErrors, ValidatorFn} from \"@angular/forms\";\r\n\r\nexport function validateJSON(control: AbstractControl): ValidationErrors | null {\r\n const value = control.value;\r\n if (!value) return null;\r\n try {\r\n JSON.parse(value);\r\n return null;\r\n } catch (e) {\r\n return {json: true};\r\n }\r\n}\r\n\r\nexport function validateRequiredTranslation(control: AbstractControl): ValidationErrors | null {\r\n const value: any[] = control.value;\r\n if (!value || value.length == 0) return {requiredTranslation: true};\r\n return value.findIndex(t => (t.lang == \"de\" || t.lang == \"en\") && !t.translation) < 0\r\n ? null\r\n : {requiredTranslation: true};\r\n}\r\n\r\nexport function validatePhone(control: AbstractControl): ValidationErrors | null {\r\n const value = control.value;\r\n if (!value) return Promise.resolve(null);\r\n const phoneRegexp = /^(?:\\d){10,12}$/;\r\n return phoneRegexp.test(value) ? null : {phone: true};\r\n}\r\n\r\nexport function validateItemsMinLength(minLength: number): ValidatorFn {\r\n return (control: AbstractControl): ValidationErrors | null => {\r\n const value = control.value;\r\n return (Array.isArray(value) && value.every(v => typeof v == \"string\" && v.length >= minLength))\r\n ? null : {itemsMinLength: minLength}\r\n };\r\n}\r\n\r\nexport function validateItemsMaxLength(maxLength: number): ValidatorFn {\r\n return (control: AbstractControl): ValidationErrors | null => {\r\n const value = control.value;\r\n return (Array.isArray(value) && value.every(v => typeof v == \"string\" && v.length <= maxLength))\r\n ? null : {itemsMaxLength: maxLength}\r\n };\r\n}\r\n\r\nexport function validateItemsMinValue(min: number): ValidatorFn {\r\n return (control: AbstractControl): ValidationErrors | null => {\r\n const value = control.value;\r\n return (Array.isArray(value) && value.every(v => typeof v == \"number\" && v >= min))\r\n ? null : {itemsMinValue: min}\r\n };\r\n}\r\n\r\nexport function validateItemsMaxValue(max: number): ValidatorFn {\r\n return (control: AbstractControl): ValidationErrors | null => {\r\n const value = control.value;\r\n return (Array.isArray(value) && value.every(v => typeof v == \"number\" && v <= max))\r\n ? null : {itemsMaxValue: max}\r\n };\r\n}\r\n","import {Subject} from \"rxjs\";\r\nimport {AbstractControl} from \"@angular/forms\";\r\nimport {DynamicFormControlModel} from \"@ng-dynamic-forms/core\";\r\nimport {DynamicPathable} from \"@ng-dynamic-forms/core/lib/model/misc/dynamic-form-control-path.model\";\r\n\r\nexport class FormSubject<T> extends Subject<T> {\r\n\r\n private readonly notifyCallback: (controlModel: DynamicFormControlModel, control: AbstractControl, index?: number) => T | Promise<T>;\r\n\r\n constructor(notifyCallback: (formModel: DynamicFormControlModel, control: AbstractControl, index?: number) => T | Promise<T>) {\r\n super();\r\n this.notifyCallback = notifyCallback;\r\n }\r\n\r\n protected handleNotifiedValue(controlModel: DynamicFormControlModel, control: AbstractControl, val: Promise<T>) {\r\n val.then(v => this.next(v));\r\n }\r\n\r\n notify(controlModel: DynamicFormControlModel, control: AbstractControl): void {\r\n let path = controlModel as DynamicPathable;\r\n while (path && isNaN(path.index)) {\r\n path = path.parent;\r\n }\r\n let value = this.notifyCallback(controlModel, control, path?.index);\r\n if (!(value instanceof Promise)) {\r\n value = Promise.resolve(value);\r\n }\r\n this.handleNotifiedValue(controlModel, control, value);\r\n }\r\n}\r\n","import {AbstractControl} from \"@angular/forms\";\r\nimport {DynamicFormOptionConfig, DynamicSelectModel} from \"@ng-dynamic-forms/core\";\r\nimport {FormSubject} from \"./form-subject\";\r\n\r\nexport class FormSelectSubject<T extends DynamicFormOptionConfig<any>[]> extends FormSubject<T> {\r\n\r\n protected handleNotifiedValue(controlModel: DynamicSelectModel<any>, control: AbstractControl, val: Promise<T>) {\r\n val.then(options => {\r\n this.next(options);\r\n if (options.length == 0) return;\r\n const currentVal = control.value;\r\n if (controlModel.multiple) {\r\n const correctVal = (currentVal || []).filter(t => options.findIndex(o => o.value == t) >= 0);\r\n if (correctVal.length !== currentVal?.length) {\r\n control.setValue(correctVal, {onlySelf: true, emitEvent: false});\r\n }\r\n return;\r\n }\r\n const option = options.find(t => t.value == currentVal);\r\n if (!option) {\r\n control.setValue(options[0]?.value ?? null, {onlySelf: true, emitEvent: false});\r\n }\r\n });\r\n }\r\n}\r\n","import {DynamicPathable} from \"@ng-dynamic-forms/core\";\r\n\r\nexport function isStringWithVal(val: any): boolean {\r\n return typeof val == \"string\" && val.length > 0;\r\n}\r\n\r\nexport function collectPathAble<T extends DynamicPathable>(start: T, getter: (cur: T) => string): string[] {\r\n if (!start || !getter(start)) return [];\r\n const parts = [];\r\n let currentPath = start;\r\n while (currentPath) {\r\n const val = getter(currentPath);\r\n if (val) {\r\n parts.unshift(val);\r\n }\r\n currentPath = currentPath.parent as T;\r\n }\r\n return parts;\r\n}\r\n","import {\r\n DynamicFormArrayModel as Base,\r\n DynamicFormArrayModelConfig as ConfigBase,\r\n DynamicFormControlLayout\r\n} from \"@ng-dynamic-forms/core\";\r\n\r\nexport interface DynamicFormArrayModelConfig extends ConfigBase {\r\n additional?: {[key: string]: any};\r\n}\r\n\r\nexport class DynamicFormArrayModel extends Base {\r\n\r\n readonly additional: {[key: string]: any};\r\n\r\n constructor(config: DynamicFormArrayModelConfig, layout?: DynamicFormControlLayout) {\r\n super(config, layout);\r\n this.additional = config.additional || {};\r\n }\r\n}\r\n","import {EventEmitter, Inject, Injectable, Injector} from \"@angular/core\";\r\nimport {AbstractControl, FormArray, FormGroup} from \"@angular/forms\";\r\nimport {Subject} from \"rxjs\";\r\nimport {\r\n DynamicCheckboxModel,\r\n DynamicCheckboxModelConfig,\r\n DynamicFileUploadModel,\r\n DynamicFileUploadModelConfig,\r\n DynamicFormArrayModel as DynamicFormArrayModelBase,\r\n DynamicFormComponent,\r\n DynamicFormComponentService,\r\n DynamicFormControlModel,\r\n DynamicFormControlModelConfig,\r\n DynamicFormGroupModel,\r\n DynamicFormGroupModelConfig,\r\n DynamicFormModel,\r\n DynamicFormOptionConfig,\r\n DynamicFormService as Base,\r\n DynamicFormValidationService,\r\n DynamicFormValueControlModel,\r\n DynamicFormValueControlModelConfig,\r\n DynamicInputModel,\r\n DynamicInputModelConfig,\r\n DynamicSelectModel,\r\n DynamicSelectModelConfig,\r\n DynamicTextAreaModel,\r\n DynamicTextAreaModelConfig,\r\n DynamicValidatorsConfig\r\n} from \"@ng-dynamic-forms/core\";\r\nimport {\r\n IApiService,\r\n ILanguageService,\r\n IOpenApiSchema,\r\n IOpenApiSchemaProperty,\r\n IOpenApiSchemas,\r\n ObjectUtils,\r\n OpenApiService,\r\n StringUtils\r\n} from \"@stemy/ngx-utils\";\r\n\r\nimport {FormControlSerializer, FormModelCustomizer, FormModelCustomizerWrap, ModelType} from \"../common-types\";\r\n\r\nimport {isStringWithVal} from \"../utils/misc\";\r\nimport {FormSelectSubject} from \"../utils/form-select-subject\";\r\nimport {FormSubject} from \"../utils/form-subject\";\r\nimport {DynamicFormArrayModel, DynamicFormArrayModelConfig} from \"../utils/dynamic-form-array.model\";\r\n\r\n@Injectable()\r\nexport class DynamicFormService extends Base {\r\n\r\n get api(): IApiService {\r\n return this.openApi.api;\r\n }\r\n\r\n get language(): ILanguageService {\r\n return this.api.language;\r\n }\r\n\r\n readonly onDetectChanges: EventEmitter<DynamicFormComponent>;\r\n protected schemas: IOpenApiSchemas;\r\n\r\n constructor(cs: DynamicFormComponentService,\r\n vs: DynamicFormValidationService,\r\n @Inject(OpenApiService) readonly openApi: OpenApiService,\r\n @Inject(Injector) readonly injector: Injector) {\r\n super(cs, vs);\r\n this.onDetectChanges = new EventEmitter<DynamicFormComponent>();\r\n }\r\n\r\n patchGroup(value: any, formModel: DynamicFormModel, formGroup: FormGroup): void {\r\n this.patchValueRecursive(value, formModel, formGroup);\r\n this.detectChanges();\r\n formGroup.patchValue(ObjectUtils.copy(value));\r\n }\r\n\r\n patchForm(value: any, component: DynamicFormComponent): void {\r\n this.patchValueRecursive(value, component.model, component.group);\r\n this.detectChanges(component);\r\n component.group.patchValue(value);\r\n }\r\n\r\n serialize(formModel: DynamicFormModel, formGroup: FormGroup): Promise<any> {\r\n return this.serializeRecursive(formModel, formGroup);\r\n }\r\n\r\n notifyChanges(formModel: DynamicFormModel, formGroup: FormGroup): void {\r\n this.notifyChangesRecursive(formModel, formGroup);\r\n }\r\n\r\n updateSelectOptions(formControlModel: DynamicFormControlModel, formControl: AbstractControl): void {\r\n if (formControlModel instanceof DynamicSelectModel) {\r\n let options = formControlModel.options$;\r\n if (options instanceof FormSubject) {\r\n options.notify(formControlModel, formControl);\r\n return;\r\n }\r\n while (options instanceof Subject && options.source) {\r\n options = options.source;\r\n if (options instanceof FormSubject) {\r\n options.notify(formControlModel, formControl);\r\n }\r\n }\r\n }\r\n }\r\n\r\n showErrors(form: DynamicFormComponent): void {\r\n this.showErrorsForGroup(form.group);\r\n this.detectChanges(form);\r\n }\r\n\r\n detectChanges(formComponent?: DynamicFormComponent) {\r\n super.detectChanges(formComponent);\r\n this.onDetectChanges.emit(formComponent);\r\n }\r\n\r\n protected patchValueRecursive(value: any, formModel: DynamicFormModel, formGroup: FormGroup): void {\r\n Object.keys(value).forEach(key => {\r\n const subModel = this.findModelById(key, formModel);\r\n const subValue = value[key];\r\n if (!subModel) return;\r\n const subControl = this.findControlByModel(subModel, formGroup);\r\n if (subModel instanceof DynamicSelectModel && ObjectUtils.isObject(subValue)) {\r\n value[key] = subValue.id || subValue._id || subValue;\r\n return;\r\n }\r\n if (subModel instanceof DynamicFormArrayModelBase) {\r\n const length = Array.isArray(subValue) ? subValue.length : 0;\r\n const subArray = subControl as FormArray;\r\n while (subModel.size > length) {\r\n this.removeFormArrayGroup(0, subArray, subModel);\r\n }\r\n while (subModel.size < length) {\r\n this.insertFormArrayGroup(subModel.size, subArray, subModel);\r\n }\r\n for (let i = 0; i < length; i++) {\r\n const itemModel = subModel.get(i);\r\n this.patchValueRecursive(subValue[i], itemModel.group, subArray.at(i) as FormGroup);\r\n }\r\n return;\r\n }\r\n if (subModel instanceof DynamicFormGroupModel) {\r\n this.patchValueRecursive(subValue, subModel.group, subControl as FormGroup);\r\n }\r\n });\r\n }\r\n\r\n protected async serializeRecursive(formModel: DynamicFormModel, formGroup: FormGroup): Promise<any> {\r\n const result = {};\r\n if (!formModel || !formGroup || !formGroup.value) return result;\r\n for (const i in formModel) {\r\n const subModel = formModel[i] as DynamicFormValueControlModel<any>;\r\n const subControl = this.findControlByModel(subModel, formGroup);\r\n const serializer = subModel.additional?.serializer as FormControlSerializer;\r\n if (ObjectUtils.isFunction(serializer)) {\r\n result[subModel.id] = await serializer(subModel, subControl);\r\n continue;\r\n }\r\n if (subModel instanceof DynamicFormArrayModelBase) {\r\n const length = Array.isArray(subControl.value) ? subControl.value.length : 0;\r\n const subArray = subControl as FormArray;\r\n const resArray = [];\r\n for (let i = 0; i < length; i++) {\r\n const itemModel = subModel.get(i);\r\n resArray.push(\r\n await this.serializeRecursive(itemModel.group, subArray.at(i) as FormGroup)\r\n );\r\n }\r\n result[subModel.id] = resArray;\r\n continue;\r\n }\r\n if (subModel instanceof DynamicFormGroupModel) {\r\n result[subModel.id] = await this.serializeRecursive(subModel.group, subControl as FormGroup);\r\n continue;\r\n }\r\n if (subModel instanceof DynamicInputModel && !ObjectUtils.isNullOrUndefined(subControl.value)) {\r\n result[subModel.id] = subModel.inputType == \"number\"\r\n ? parseFloat((`${subControl.value}` || \"0\").replace(/,/gi, \".\")) ?? null\r\n : subControl.value;\r\n continue;\r\n }\r\n result[subModel.id] = subControl.value;\r\n }\r\n return result;\r\n }\r\n\r\n protected notifyChangesRecursive(formModel: DynamicFormModel, formGroup: FormGroup): void {\r\n if (!formModel || !formGroup) return;\r\n for (const i in formModel) {\r\n const subModel = formModel[i] as DynamicFormValueControlModel<any>;\r\n const subControl = this.findControlByModel(subModel, formGroup);\r\n if (subModel instanceof DynamicFormArrayModelBase) {\r\n const length = Array.isArray(subControl.value) ? subControl.value.length : 0;\r\n const subArray = subControl as FormArray;\r\n for (let i = 0; i < length; i++) {\r\n const itemModel = subModel.get(i);\r\n this.notifyChangesRecursive(itemModel.group, subArray.at(i) as FormGroup);\r\n }\r\n continue;\r\n }\r\n if (subModel instanceof DynamicFormGroupModel) {\r\n this.notifyChangesRecursive(subModel.group, subControl as FormGroup);\r\n continue;\r\n }\r\n this.updateSelectOptions(subModel, subControl);\r\n }\r\n }\r\n\r\n protected showErrorsForGroup(formGroup: FormGroup): void {\r\n if (!formGroup) return;\r\n formGroup.markAsTouched({onlySelf: true});\r\n const controls = Object.keys(formGroup.controls).map(id => formGroup.controls[id]);\r\n this.showErrorsForControls(controls);\r\n }\r\n\r\n protected showErrorsForControls(controls: AbstractControl[]): void {\r\n controls.forEach(control => {\r\n if (control instanceof FormGroup) {\r\n this.showErrorsForGroup(control);\r\n return;\r\n }\r\n control.markAsTouched({onlySelf: true});\r\n if (control instanceof FormArray) {\r\n this.showErrorsForControls(control.controls);\r\n }\r\n });\r\n }\r\n\r\n async getFormModelForSchema(name: string, customizeModel?: FormModelCustomizer): Promise<DynamicFormModel> {\r\n this.api.cache = {};\r\n this.schemas = await this.openApi.getSchemas();\r\n const customizeModels: FormModelCustomizerWrap = (\r\n property: IOpenApiSchemaProperty, schema: IOpenApiSchema,\r\n modelType: ModelType, config: DynamicFormControlModelConfig) => {\r\n const model = new modelType(config);\r\n if (!ObjectUtils.isFunction(customizeModel)) return [model];\r\n const res = customizeModel(property, schema, model, config, this.injector);\r\n return Array.isArray(res) ? res : [res];\r\n };\r\n return this.getFormModelForSchemaDef(this.schemas[name], customizeModels);\r\n }\r\n\r\n protected getFormModelForSchemaDef(schema: IOpenApiSchema, customizeModels: FormModelCustomizerWrap): DynamicFormModel {\r\n if (!schema)\r\n return [];\r\n const keys = Object.keys(schema.properties || {});\r\n const controls: DynamicFormModel = [];\r\n for (const p of keys) {\r\n const property = schema.properties[p];\r\n controls.push(...this.getFormControlModels(property, schema, customizeModels));\r\n }\r\n return controls.filter(t => null !== t);\r\n }\r\n\r\n protected getFormControlModels(property: IOpenApiSchemaProperty, schema: IOpenApiSchema, customizeModels: FormModelCustomizerWrap): DynamicFormControlModel[] {\r\n const $enum = property.items?.enum || property.enum;\r\n if (Array.isArray($enum) || isStringWithVal(property.optionsPath) || isStringWithVal(property.endpoint)) {\r\n return customizeModels(property, schema, DynamicSelectModel, this.getFormSelectConfig(property, schema));\r\n }\r\n switch (property.type) {\r\n case \"string\":\r\n case \"number\":\r\n case \"integer\":\r\n return customizeModels(property, schema, DynamicInputModel, this.getFormInputConfig(property, schema));\r\n case \"textarea\":\r\n return customizeModels(property, schema, DynamicTextAreaModel, this.getFormTextareaConfig(property, schema));\r\n case \"boolean\":\r\n return customizeModels(property, schema, DynamicCheckboxModel, this.getFormCheckboxConfig(property, schema));\r\n case \"array\":\r\n if (property.items?.$ref || property.$ref) {\r\n return customizeModels(property, schema, DynamicFormArrayModel, this.getFormArrayConfig(property, schema, customizeModels));\r\n } else {\r\n return customizeModels(property, schema, DynamicInputModel, this.getFormInputConfig(property, schema));\r\n }\r\n case \"file\":\r\n return customizeModels(property, schema, DynamicFileUploadModel, this.getFormUploadConfig(property, schema));\r\n }\r\n if (property.$ref) {\r\n return customizeModels(property, schema, DynamicFormGroupModel, this.getFormGroupConfig(property, schema, customizeModels));\r\n }\r\n return [];\r\n }\r\n\r\n getFormControlConfig(property: IOpenApiSchemaProperty, schema: IOpenApiSchema): DynamicFormValueControlModelConfig<any> {\r\n const validators = this.getValidators(property, schema);\r\n const errorMessages = Object.keys(validators).reduce((res, key) => {\r\n res[key] = `error.${key}`;\r\n return res;\r\n }, {});\r\n return {\r\n id: property.id,\r\n label: ObjectUtils.isString(property.label) ? property.label : property.id,\r\n hidden: property.hidden,\r\n disabled: property.disabled,\r\n validators,\r\n errorMessages,\r\n additional: Object.assign({}, property)\r\n };\r\n }\r\n\r\n getFormArrayConfig(property: IOpenApiSchemaProperty, schema: IOpenApiSchema, customizeModels: FormModelCustomizerWrap): DynamicFormArrayModelConfig {\r\n const ref = property.items?.$ref || property.$ref || \"\";\r\n const subSchema = this.schemas[ref.split(\"/\").pop()];\r\n return Object.assign(this.getFormControlConfig(property, schema), {groupFactory: () => this.getFormModelForSchemaDef(subSchema, customizeModels)});\r\n }\r\n\r\n getFormGroupConfig(property: IOpenApiSchemaProperty, schema: IOpenApiSchema, customizeModels: FormModelCustomizerWrap): DynamicFormGroupModelConfig {\r\n const ref = property.$ref || \"\";\r\n const subSchema = this.schemas[ref.split(\"/\").pop()];\r\n return Object.assign(this.getFormControlConfig(property, schema), {group: this.getFormModelForSchemaDef(subSchema, customizeModels)});\r\n }\r\n\r\n getFormInputConfig(property: IOpenApiSchemaProperty, schema: IOpenApiSchema): DynamicInputModelConfig {\r\n let inputType = StringUtils.has(property.id, \"password\", \"Password\") ? \"password\" : (property.items?.type || property.type);\r\n switch (inputType) {\r\n case \"boolean\":\r\n inputType = \"checkbox\";\r\n break;\r\n case \"textarea\":\r\n inputType = \"textarea\";\r\n break;\r\n case \"integer\":\r\n inputType = \"number\";\r\n break;\r\n }\r\n const sub = property.type == \"array\" ? property.items || property : property;\r\n return Object.assign(\r\n this.getFormControlConfig(property, schema),\r\n {\r\n inputType,\r\n autoComplete: property.autoComplete || \"off\",\r\n multiple: property.type == \"array\",\r\n accept: ObjectUtils.isString(property.accept) ? property.accept : null,\r\n mask: ObjectUtils.isString(property.mask) ? property.mask : null,\r\n pattern: ObjectUtils.isString(property.pattern) ? property.pattern : null,\r\n step: isNaN(sub.step) ? (isNaN(property.step) ? 1 : property.step) : sub.step,\r\n min: isNaN(sub.minimum) ? Number.MIN_SAFE_INTEGER : sub.minimum,\r\n max: isNaN(sub.maximum) ? Number.MAX_SAFE_INTEGER : sub.maximum,\r\n minLength: isNaN(sub.minLength) ? Number.MIN_SAFE_INTEGER : sub.minLength,\r\n maxLength: isNaN(sub.maxLength) ? Number.MAX_SAFE_INTEGER : sub.maxLength,\r\n }\r\n );\r\n }\r\n\r\n getFormTextareaConfig(property: IOpenApiSchemaProperty, schema: IOpenApiSchema): DynamicTextAreaModelConfig {\r\n return Object.assign(\r\n this.getFormControlConfig(property, schema),\r\n {\r\n cols: property.cols || null,\r\n rows: property.rows || 10,\r\n wrap: property.wrap || false,\r\n autoComplete: property.autoComplete || \"off\",\r\n multiple: property.type == \"array\"\r\n }\r\n );\r\n }\r\n\r\n getFormSelectConfig(property: IOpenApiSchemaProperty, schema: IOpenApiSchema): DynamicSelectModelConfig<any> {\r\n return Object.assign(\r\n this.getFormControlConfig(property, schema),\r\n {\r\n options: this.getFormSelectOptions(property, schema),\r\n multiple: property.type == \"array\"\r\n }\r\n );\r\n }\r\n\r\n getFormCheckboxConfig(property: IOpenApiSchemaProperty, schema: IOpenApiSchema): DynamicCheckboxModelConfig {\r\n return Object.assign(\r\n this.getFormControlConfig(property, schema),\r\n {\r\n indeterminate: property.indeterminate === true\r\n }\r\n );\r\n }\r\n\r\n protected async translateOptions(options: DynamicFormOptionConfig<any>[]): Promise<DynamicFormOptionConfig<any>[]> {\r\n if (!options) return [];\r\n for (const option of options) {\r\n option.label = await this.language.getTranslation(option.label);\r\n }\r\n return options;\r\n }\r\n\r\n protected getFormSelectOptions(property: IOpenApiSchemaProperty, schema: IOpenApiSchema) {\r\n const $enum = property.items?.enum || property.enum;\r\n if (Array.isArray($enum)) {\r\n return new FormSelectSubject(() => {\r\n const options = $enum.map(value => {\r\n const label = property.translatable ? `${property.id}.${value}` : `${value}`;\r\n return {value, label};\r\n });\r\n return this.translateOptions(options);\r\n });\r\n }\r\n if (isStringWithVal(property.optionsPath)) {\r\n return new FormSelectSubject((formModel, control, index) => {\r\n let path = property.optionsPath;\r\n let target = control;\r\n if (path.startsWith(\"$root\")) {\r\n path = path.substr(5);\r\n while (target.parent) {\r\n target = target.parent;\r\n }\r\n }\r\n while (path.startsWith(\".\")) {\r\n path = path.substr(1);\r\n if (target.parent) {\r\n target = target.parent;\r\n }\r\n }\r\n const value = ObjectUtils.getValue(target.value, path.replace(/\\$ix/gi, index));\r\n const options = (!ObjectUtils.isArray(value) ? [] : value).map(value => ({value, label: value}));\r\n return this.translateOptions(options);\r\n });\r\n }\r\n return new FormSelectSubject(async () => {\r\n this.api.cache[property.endpoint] = this.api.cache[property.endpoint] || this.api.list(property.endpoint, this.api.makeListParams(1, -1)).then(result => {\r\n return result.items.map(i => {\r\n return {value: i.id || i._id, label: i[property.labelField] || i.label || i.id || i._id};\r\n });\r\n });\r\n const options = (await this.api.cache[property.endpoint]).map(t => Object.assign({}, t));\r\n return this.translateOptions(options);\r\n });\r\n }\r\n\r\n protected getFormUploadConfig(property: IOpenApiSchemaProperty, schema: IOpenApiSchema): DynamicFileUploadModelConfig {\r\n const url = this.api.url(property.url || \"assets\");\r\n const {accept, autoUpload, maxSize, minSize, removeUrl, showFileList} = property;\r\n return Object.assign(this.getFormControlConfig(property, schema), {\r\n url,\r\n accept,\r\n autoUpload,\r\n maxSize,\r\n minSize,\r\n removeUrl,\r\n showFileList\r\n });\r\n }\r\n\r\n protected getValidators(property: IOpenApiSchemaProperty, schema: IOpenApiSchema): DynamicValidatorsConfig {\r\n const validators: DynamicValidatorsConfig = {};\r\n if (ObjectUtils.isArray(schema.required) && schema.required.indexOf(property.id) >= 0) {\r\n validators.required = null;\r\n }\r\n this.addPropertyValidators(validators, property);\r\n this.addItemsValidators(validators, property.items);\r\n return validators;\r\n }\r\n\r\n protected addPropertyValidators(validators: DynamicValidatorsConfig, property: IOpenApiSchemaProperty): void {\r\n if (!property) return;\r\n if (!isNaN(property.minLength)) {\r\n validators.minLength = property.minLength;\r\n }\r\n if (!isNaN(property.maxLength)) {\r\n validators.maxLength = property.maxLength;\r\n }\r\n if (!isNaN(property.minimum)) {\r\n validators.min = property.minimum;\r\n }\r\n if (!isNaN(property.maximum)) {\r\n validators.max = property.maximum;\r\n }\r\n switch (property.format) {\r\n case \"email\":\r\n validators.email = null;\r\n break;\r\n }\r\n }\r\n\r\n protected addItemsValidators(validators: DynamicValidatorsConfig, items: IOpenApiSchemaProperty): void {\r\n if (!items) return;\r\n if (!isNaN(items.minLength)) {\r\n validators.itemsMinLength = items.minLength;\r\n }\r\n if (!isNaN(items.maxLength)) {\r\n validators.itemsMaxLength = items.maxLength;\r\n }\r\n if (!isNaN(items.minimum)) {\r\n validators.itemsMinValue = items.minimum;\r\n }\r\n if (!isNaN(items.maximum)) {\r\n validators.itemsMaxValue = items.maximum;\r\n }\r\n }\r\n}\r\n","import {\r\n ChangeDetectorRef,\r\n Directive,\r\n ElementRef,\r\n EventEmitter,\r\n HostBinding,\r\n HostListener,\r\n Inject,\r\n Input,\r\n OnDestroy,\r\n OnInit,\r\n Output,\r\n Renderer2\r\n} from \"@angular/core\";\r\nimport {Subscription} from \"rxjs\";\r\nimport {IAsyncMessage, IToasterService, TOASTER_SERVICE} from \"@stemy/ngx-utils\";\r\nimport {AsyncSubmitMethod, IDynamicFormBase} from \"../common-types\";\r\n\r\n@Directive({\r\n selector: \"[async-submit]\",\r\n exportAs: \"async-submit\"\r\n})\r\nexport class AsyncSubmitDirective implements OnInit, OnDestroy {\r\n\r\n @Input(\"async-submit\") method: AsyncSubmitMethod;\r\n @Input() form: IDynamicFormBase;\r\n @Input() context: any;\r\n\r\n @Output() onSuccess: EventEmitter<IAsyncMessage>;\r\n @Output() onError: EventEmitter<IAsyncMessage>;\r\n\r\n private loading: boolean;\r\n private disabled: boolean;\r\n private callback: Function;\r\n private onStatusChange: Subscription;\r\n private onSubmit: Subscription;\r\n\r\n @HostBinding(\"class.disabled\")\r\n get isDisabled(): boolean {\r\n return this.disabled;\r\n }\r\n\r\n set isDisabled(value: boolean) {\r\n this.disabled = value;\r\n if (value) {\r\n this.renderer.setAttribute(this.elem.nativeElement, \"disabled\", \"disabled\");\r\n return;\r\n }\r\n this.renderer.removeAttribute(this.elem.nativeElement, \"disabled\");\r\n }\r\n\r\n @HostBinding(\"class.loading\")\r\n get isLoading(): boolean {\r\n return this.loading;\r\n }\r\n\r\n constructor(@Inject(TOASTER_SERVICE) private toaster: IToasterService,\r\n readonly cdr: ChangeDetectorRef,\r\n readonly elem: ElementRef,\r\n readonly renderer: Renderer2) {\r\n this.onSuccess = new EventEmitter<IAsyncMessage>();\r\n this.onError = new EventEmitter<IAsyncMessage>();\r\n if (elem.nativeElement.tagName !== \"BUTTON\") return;\r\n renderer.setAttribute(elem.nativeElement, \"type\", \"button\");\r\n }\r\n\r\n ngOnInit(): void {\r\n if (!this.form) return;\r\n this.isDisabled = this.form.status !== \"VALID\";\r\n this.cdr.detectChanges();\r\n this.onStatusChange = this.form.onStatusChange.subscribe(() => {\r\n this.isDisabled = this.form.status !== \"VALID\";\r\n this.cdr.detectChanges();\r\n if (!this.callback || this.form.status == \"PENDING\") return;\r\n if (!this.disabled) {\r\n this.callback();\r\n }\r\n this.callback = null;\r\n });\r\n this.onSubmit = this.form.onSubmit.subscribe(() => this.callMethod());\r\n }\r\n\r\n ngOnDestroy(): void {\r\n if (this.onStatusChange) this.onStatusChange.unsubscribe();\r\n if (this.onSubmit) this.onSubmit.unsubscribe();\r\n }\r\n\r\n @HostListener(\"click\")\r\n click(): void {\r\n this.callback = () => this.callMethod();\r\n if (this.form.status !== \"VALID\" && this.form.status !== \"INVALID\") return;\r\n this.callback();\r\n this.callback = null;\r\n }\r\n\r\n callMethod(): void {\r\n if (this.loading) return;\r\n this.loading = true;\r\n this.method(this.form, this.context).then(result => {\r\n this.loading = false;\r\n if (result) {\r\n this.onSuccess.emit(result);\r\n this.toaster.success(result.message, result.context);\r\n }\r\n }, reason => {\r\n if (!reason || !reason.message)\r\n throw new Error(\"Reason must implement IAsyncMessage interface\");\r\n this.loading = false;\r\n this.onError.emit(reason);\r\n this.toaster.error(reason.message, reason.context);\r\n });\r\n }\r\n}\r\n","import {\r\n AfterViewInit,\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n ContentChildren,\r\n EventEmitter,\r\n Inject,\r\n Input,\r\n OnChanges,\r\n Output,\r\n QueryList,\r\n SimpleChanges,\r\n ViewChild,\r\n ViewChildren\r\n} from \"@angular/core\";\r\nimport {FormArray, FormGroup, NgForm} from \"@angular/forms\";\r\nimport {Subscription} from \"rxjs\";\r\nimport {first} from \"rxjs/operators\";\r\nimport {\r\n DynamicFormArrayModel,\r\n DynamicFormComponent,\r\n DynamicFormComponentService,\r\n DynamicFormControlEvent,\r\n DynamicFormControlModel,\r\n DynamicFormGroupModel,\r\n DynamicFormLayout,\r\n DynamicFormModel,\r\n DynamicTemplateDirective\r\n} from \"@ng-dynamic-forms/core\";\r\nimport {EventsService, ObservableUtils} from \"@stemy/ngx-utils\";\r\nimport {DynamicFormState, IDynamicForm, IDynamicFormBase} from \"../../common-types\";\r\nimport {DynamicFormService} from \"../../services/dynamic-form.service\";\r\nimport {collectPathAble} from \"../../utils/misc\";\r\n\r\n@Component({\r\n selector: \"dynamic-base-form\",\r\n template: \"\",\r\n changeDetection: ChangeDetectionStrategy.Default\r\n})\r\nexport class DynamicBaseFormComponent extends DynamicFormComponent implements OnChanges, AfterViewInit, IDynamicForm {\r\n\r\n @Input() group: FormGroup;\r\n @Input() model: DynamicFormModel;\r\n @Input() layout: DynamicFormLayout;\r\n @Input() labelPrefix: string;\r\n\r\n @Output() blur: EventEmitter<DynamicFormControlEvent>;\r\n @Output() change: EventEmitter<DynamicFormControlEvent>;\r\n @Output() focus: EventEmitter<DynamicFormControlEvent>;\r\n\r\n @ContentChildren(DynamicTemplateDirective) contentTemplates: QueryList<DynamicTemplateDirective>;\r\n @ViewChildren(DynamicTemplateDirective) viewTemplates: QueryList<DynamicTemplateDirective>;\r\n\r\n get status(): DynamicFormState {\r\n return !this.group ? null : this.group.status as DynamicFormState;\r\n }\r\n\r\n @Output() readonly onStatusChange: EventEmitter<IDynamicFormBase>;\r\n @Output() readonly onValueChange: EventEmitter<IDynamicFormBase>;\r\n @Output() readonly onSubmit: EventEmitter<IDynamicFormBase>;\r\n\r\n @ViewChild(NgForm)\r\n protected ngForm: NgForm;\r\n protected subscription: Subscription;\r\n protected groupSubscription: Subscription;\r\n\r\n constructor(@Inject(DynamicFormService) readonly formService: DynamicFormService,\r\n @Inject(EventsService) readonly events: EventsService,\r\n changeDetectorRef: ChangeDetectorRef,\r\n componentService: DynamicFormComponentService,) {\r\n super(changeDetectorRef, componentService);\r\n this.blur = new EventEmitter<DynamicFormControlEvent>();\r\n this.change = new EventEmitter<DynamicFormControlEvent>();\r\n this.focus = new EventEmitter<DynamicFormControlEvent>();\r\n this.onStatusChange = new EventEmitter<IDynamicFormBase>();\r\n this.onValueChange = new EventEmitter<IDynamicFormBase>();\r\n this.onSubmit = new EventEmitter<IDynamicFormBase>();\r\n this.templates = new QueryList<DynamicTemplateDirective>();\r\n this.subscription = new Subscription();\r\n this.groupSubscription = new Subscription();\r\n this.labelPrefix = \"label\";\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n this.groupSubscription.unsubscribe();\r\n if (this.group) {\r\n this.groupSubscription = ObservableUtils.multiSubscription(\r\n this.group.statusChanges.subscribe(() => {\r\n this.onStatusChange.emit(this);\r\n }),\r\n this.group.valueChanges.subscribe(() => {\r\n this.onValueChange.emit(this);\r\n this.formService.notifyChanges(this.model, this.group);\r\n })\r\n );\r\n }\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n this.subscription = ObservableUtils.multiSubscription(\r\n ObservableUtils.subscribe(\r\n {\r\n subjects: [this.contentTemplates.changes, this.viewTemplates.changes],\r\n cb: () => {\r\n const templates = this.contentTemplates.toArray().concat(this.viewTemplates.toArray());\r\n this.templates.reset(templates);\r\n }\r\n }\r\n ),\r\n this.events.languageChanged.subscribe(() => {\r\n this.formService.detectChanges(this)\r\n }),\r\n this.ngForm.ngSubmit.subscribe(() => {\r\n this.onSubmit.emit(this);\r\n })\r\n );\r\n }\r\n\r\n ngOnDestroy(): void {\r\n super.ngOnDestroy();\r\n this.subscription.unsubscribe();\r\n this.groupSubscription.unsubscribe();\r\n }\r\n\r\n insertFormArrayGroup(index: number, formArray: FormArray, formArrayModel: DynamicFormArrayModel): void {\r\n this.formService.insertFormArrayGroup(index, formArray, formArrayModel);\r\n this.changeDetectorRef.detectChanges();\r\n }\r\n\r\n removeFormArrayGroup(index: number, formArray: FormArray, formArrayModel: DynamicFormArrayModel): void {\r\n this.formService.removeFormArrayGroup(index, formArray, formArrayModel);\r\n this.changeDetectorRef.detectChanges();\r\n }\r\n\r\n moveFormArrayGroup(index: number, step: number, formArray: FormArray, formArrayModel: DynamicFormArrayModel): void {\r\n this.formService.moveFormArrayGroup(index, step, formArray, formArrayModel);\r\n this.changeDetectorRef.detectChanges();\r\n }\r\n\r\n clearFormArray(formArray: FormArray, formArrayModel: DynamicFormArrayModel): void {\r\n this.formService.clearFormArray(formArray, formArrayModel);\r\n this.changeDetectorRef.detectChanges();\r\n }\r\n\r\n getClass(model?: DynamicFormControlModel): string {\r\n const parts = collectPathAble(model, p => p.id);\r\n if (parts.length == 0) return \"\";\r\n if (model instanceof DynamicFormGroupModel) {\r\n return `form-group-${parts.join(\"-\")}`;\r\n }\r\n return `form-control-${parts.join(\"-\")}`;\r\n }\r\n\r\n validate(showErrors: boolean = true): Promise<any> {\r\n if (!this.group) return Promise.resolve();\r\n return new Promise<any>((resolve, reject) => {\r\n this.group.statusChanges.pipe(first(status => status == \"VALID\" || status == \"INVALID\")).subscribe(status => {\r\n if (showErrors) {\r\n this.formService.showErrors(this);\r\n }\r\n if (status == \"VALID\") {\r\n resolve(null);\r\n return;\r\n }\r\n reject(null);\r\n });\r\n this.group.updateValueAndValidity();\r\n });\r\n }\r\n\r\n async serialize(validate?: boolean): Promise<any> {\r\n if (!this.group) return null;\r\n if (validate) {\r\n await this.validate();\r\n }\r\n return await this.formService.serialize(this.model, this.group);\r\n }\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n EventEmitter,\r\n forwardRef,\r\n Input,\r\n Output,\r\n QueryList,\r\n ViewChildren\r\n} from \"@angular/core\";\r\nimport {FormGroup} from \"@angular/forms\";\r\nimport {\r\n DynamicFormArrayComponent,\r\n DynamicFormArrayModel,\r\n DynamicFormControlContainerComponent,\r\n DynamicFormControlCustomEvent,\r\n DynamicFormControlLayout,\r\n DynamicFormControlLayoutContext,\r\n DynamicFormControlLayoutPlace,\r\n DynamicFormControlModel,\r\n DynamicFormGroupModel,\r\n DynamicFormLayout,\r\n DynamicFormLayoutService,\r\n DynamicFormValidationService,\r\n DynamicTemplateDirective\r\n} from \"@ng-dynamic-forms/core\";\r\nimport {collectPathAble} from \"../../utils/misc\";\r\n\r\n@Component({\r\n selector: \"dynamic-base-form-array\",\r\n template: \"\",\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class DynamicBaseFormArrayComponent extends DynamicFormArrayComponent {\r\n\r\n @Input() formLayout: DynamicFormLayout;\r\n @Input() group: FormGroup;\r\n @Input() layout: DynamicFormControlLayout;\r\n @Input() model: DynamicFormArrayModel;\r\n @Input() templates: QueryList<DynamicTemplateDirective> | undefined;\r\n\r\n @Output() blur: EventEmitter<any> = new EventEmitter();\r\n @Output() change: EventEmitter<any> = new EventEmitter();\r\n @Output() customEvent: EventEmitter<DynamicFormControlCustomEvent> = new EventEmitter();\r\n @Output() focus: EventEmitter<any> = new EventEmitter();\r\n\r\n @ViewChildren(forwardRef(() => DynamicFormControlContainerComponent))\r\n components: QueryList<DynamicFormControlContainerComponent>;\r\n\r\n constructor(protected layoutService: DynamicFormLayoutService,\r\n protected validationService: DynamicFormValidationService) {\r\n\r\n super(layoutService, validationService);\r\n }\r\n\r\n getClass(context: DynamicFormControlLayoutContext, place: DynamicFormControlLayoutPlace, model?: DynamicFormControlModel): string {\r\n return [\r\n context == \"element\" ? this.getModelClass(model) : null,\r\n super.getClass(context, place, model)\r\n ].filter(cls => !!cls).join(\" \");\r\n }\r\n\r\n protected getModelClass(model?: DynamicFormControlModel): string {\r\n const parts = collectPathAble(model, p => p.id);\r\n if (parts.length == 0) return \"\";\r\n if (model instanceof DynamicFormGroupModel) {\r\n return `form-group-${parts.join(\"-\")}`;\r\n }\r\n return `form-control-${parts.join(\"-\")}`;\r\n }\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n ComponentFactoryResolver,\r\n ContentChildren,\r\n EventEmitter,\r\n HostBinding,\r\n Input,\r\n OnInit,\r\n Output,\r\n QueryList,\r\n Type,\r\n ViewChild,\r\n ViewContainerRef\r\n} from \"@angular/core\";\r\nimport {FormGroup} from \"@angular/forms\";\r\nimport {Subscription} from \"rxjs\";\r\nimport {\r\n DYNAMIC_FORM_CONTROL_TYPE_ARRAY,\r\n DynamicFormArrayGroupModel,\r\n DynamicFormComponentService,\r\n DynamicFormControl,\r\n DynamicFormControlContainerComponent,\r\n DynamicFormControlEvent,\r\n DynamicFormControlModel,\r\n DynamicFormLayout,\r\n DynamicFormLayoutService,\r\n DynamicFormRelationService,\r\n DynamicFormValidationService,\r\n DynamicTemplateDirective\r\n} from \"@ng-dynamic-forms/core\";\r\nimport {ObjectUtils} from \"@stemy/ngx-utils\";\r\n\r\nimport {OnCreatedFormControl} from \"../../common-types\";\r\nimport {collectPathAble} from \"../../utils/misc\";\r\nimport {DynamicBaseFormComponent} from \"./dynamic-base-form.component\";\r\nimport {DynamicFormService} from \"../../services/dynamic-form.service\";\r\n\r\n@Component({\r\n selector: \"dynamic-base-form-control\",\r\n template: \"\",\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class DynamicBaseFormControlContainerComponent extends DynamicFormControlContainerComponent implements OnInit {\r\n\r\n @ContentChildren(DynamicTemplateDirective) contentTemplateList: QueryList<DynamicTemplateDirective>;\r\n\r\n @HostBinding(\"class\") klass;\r\n\r\n @Input() context: DynamicFormArrayGroupModel | null = null;\r\n @Input() group: FormGroup;\r\n @Input() hostClass: string[];\r\n @Input(\"templates\") inputTemplateList: QueryList<DynamicTemplateDirective>;\r\n @Input() layout: DynamicFormLayout;\r\n @Input() model: DynamicFormControlModel;\r\n\r\n @Output() blur: EventEmitter<DynamicFormControlEvent> = new EventEmitter<DynamicFormControlEvent>();\r\n @Output() change: EventEmitter<DynamicFormControlEvent> = new EventEmitter<DynamicFormControlEvent>();\r\n @Output() focus: EventEmitter<DynamicFormControlEvent> = new EventEmitter<DynamicFormControlEvent>();\r\n\r\n @ViewChild(\"componentViewContainer\", {read: ViewContainerRef, static: true}) componentViewContainerRef: ViewContainerRef;\r\n\r\n protected onDetectChanges: Subscription;\r\n\r\n get componentType(): Type<DynamicFormControl> | null {\r\n return this.componentService.getCustomComponentType(this.model) ?? this.getComponentType(this.model);\r\n }\r\n\r\n get startTemplate(): DynamicTemplateDirective {\r\n return (this.model.type == DYNAMIC_FORM_CONTROL_TYPE_ARRAY)\r\n ? this.layoutService.getAlignedTemplate(this.model, this.templates, \"ARRAY_START\" as any)\r\n : this.layoutService.getStartTemplate(this.model, this.templates);\r\n }\r\n\r\n get endTemplate(): DynamicTemplateDirective {\r\n return (this.model.type == DYNAMIC_FORM_CONTROL_TYPE_ARRAY)\r\n ? this.layoutService.getAlignedTemplate(this.model, this.templates, \"ARRAY_END\" as any)\r\n : this.layoutService.getEndTemplate(this.model, this.templates);\r\n }\r\n\r\n get formService(): DynamicFormService {\r\n return this.form.formService;\r\n }\r\n\r\n constructor(readonly form: DynamicBaseFormComponent,\r\n readonly changeDetectorRef: ChangeDetectorRef,\r\n readonly componentFactoryResolver: ComponentFactoryResolver,\r\n readonly layoutService: DynamicFormLayoutService,\r\n readonly validationService: DynamicFormValidationService,\r\n readonly componentService: DynamicFormComponentService,\r\n readonly relationService: DynamicFormRelationService) {\r\n super(changeDetectorRef, componentFactoryResolver, layoutService, validationService, componentService, relationService);\r\n }\r\n\r\n ngOnInit(): void {\r\n this.onDetectChanges = this.formService.onDetectChanges.subscribe(form => {\r\n if (form !== this.form) return;\r\n this.changeDetectorRef.detectChanges();\r\n this.formService.updateSelectOptions(this.model, this.control);\r\n });\r\n }\r\n\r\n ngOnDestroy() {\r\n super.ngOnDestroy();\r\n this.onDetectChanges.unsubscribe();\r\n }\r\n\r\n getLabel(): string {\r\n const label = collectPathAble(this.model, p => p.label);\r\n if (label.length == 0) return \"\";\r\n if (this.form?.labelPrefix) {\r\n label.unshift(this.form.labelPrefix);\r\n }\r\n return label.join(\".\");\r\n }\r\n\r\n protected createFormControlComponent() {\r\n super.createFormControlComponent();\r\n const component = this.componentRef?.instance as OnCreatedFormControl;\r\n if (!component || !ObjectUtils.isFunction(component.onCreated)) return;\r\n component.onCreated();\r\n }\r\n\r\n protected getComponentType(model: DynamicFormControlModel): Type<DynamicFormControl> | null {\r\n return null;\r\n }\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n EventEmitter,\r\n forwardRef,\r\n Input,\r\n Output,\r\n QueryList,\r\n ViewChildren\r\n} from \"@angular/core\";\r\nimport {FormGroup} from \"@angular/forms\";\r\nimport {\r\n DynamicFormControlContainerComponent,\r\n DynamicFormControlCustomEvent,\r\n DynamicFormControlLayout,\r\n DynamicFormControlLayoutContext,\r\n DynamicFormControlLayoutPlace,\r\n DynamicFormControlModel,\r\n DynamicFormGroupComponent,\r\n DynamicFormGroupModel,\r\n DynamicFormLayout,\r\n DynamicFormLayoutService,\r\n DynamicFormValidationService,\r\n DynamicTemplateDirective\r\n} from \"@ng-dynamic-forms/core\";\r\nimport {collectPathAble} from \"../../utils/misc\";\r\n\r\n@Component({\r\n selector: \"dynamic-base-form-group\",\r\n template: \"\",\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class DynamicBaseFormGroupComponent extends DynamicFormGroupComponent {\r\n\r\n @Input() formLayout: DynamicFormLayout;\r\n @Input() group: FormGroup;\r\n @Input() layout: DynamicFormControlLayout;\r\n @Input() model: DynamicFormGroupModel;\r\n @Input() templates: QueryList<DynamicTemplateDirective> | DynamicTemplateDirective[] | undefined;\r\n\r\n @Output() blur: EventEmitter<any> = new EventEmitter();\r\n @Output() change: EventEmitter<any> = new EventEmitter();\r\n @Output() customEvent: EventEmitter<DynamicFormControlCustomEvent> = new EventEmitter();\r\n @Output() focus: EventEmitter<any> = new EventEmitter();\r\n\r\n @ViewChildren(forwardRef(() => DynamicFormControlContainerComponent))\r\n components: QueryList<DynamicFormControlContainerComponent>;\r\n\r\n constructor(protected layoutService: DynamicFormLayoutService,\r\n protected validationService: DynamicFormValidationService) {\r\n super(layoutService, validationService);\r\n }\r\n\r\n getClass(context: DynamicFormControlLayoutContext, place: DynamicFormControlLayoutPlace, model?: DynamicFormControlModel): string {\r\n return [\r\n context == \"element\" ? this.getModelClass(model) : null,\r\n super.getClass(context, place, model)\r\n ].filter(cls => !!cls).join(\" \");\r\n }\r\n\r\n protected getModelClass(model?: DynamicFormControlModel): string {\r\n const parts = collectPathAble(model, p => p.id);\r\n if (parts.length == 0) return \"\";\r\n if (model instanceof DynamicFormGroupModel) {\r\n return `form-group-${parts.join(\"-\")}`;\r\n }\r\n return `form-control-${parts.join(\"-\")}`;\r\n }\r\n}\r\n","import {ModuleWithProviders, NgModule} from \"@angular/core\";\r\nimport {CommonModule} from \"@angular/common\";\r\nimport {FormsModule, NG_VALIDATORS, ReactiveFormsModule} from \"@angular/forms\";\r\nimport {\r\n DYNAMIC_VALIDATORS,\r\n DynamicFormService as BaseDynamicFormService,\r\n Validator,\r\n ValidatorFactory\r\n} from \"@ng-dynamic-forms/core\";\r\nimport {NgxUtilsModule} from \"@stemy/ngx-utils\";\r\n\r\nimport {AsyncSubmitDirective} from \"./directives/async-submit.directive\";\r\n\r\nimport {\r\n validateItemsMaxLength,\r\n validateItemsMaxValue,\r\n validateItemsMinLength,\r\n validateItemsMinValue,\r\n validateJSON,\r\n validatePhone,\r\n validateRequiredTranslation\r\n} from \"./utils/validators\";\r\n\r\nimport {DynamicBaseFormComponent} from \"./components/base/dynamic-base-form.component\";\r\nimport {DynamicBaseFormArrayComponent} from \"./components/base/dynamic-base-form-array.component\";\r\nimport {\r\n DynamicBaseFormControlContainerComponent\r\n} from \"./components/base/dynamic-base-form-control-container.component\";\r\nimport {DynamicBaseFormGroupComponent} from \"./components/base/dynamic-base-form-group.component\";\r\n\r\nimport {DynamicFormService} from \"./services/dynamic-form.service\";\r\n\r\n// --- Components ---\r\nexport const components = [\r\n DynamicBaseFormComponent,\r\n DynamicBaseFormArrayComponent,\r\n DynamicBaseFormControlContainerComponent,\r\n DynamicBaseFormGroupComponent\r\n];\r\n\r\n// --- Directives ---\r\nexport const directives = [\r\n AsyncSubmitDirective,\r\n];\r\n\r\n// --- Pipes ---\r\nexport const pipes = [];\r\n\r\n@NgModule({\r\n declarations: [\r\n ...components,\r\n ...directives,\r\n ...pipes\r\n ],\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n NgxUtilsModule\r\n ],\r\n exports: [\r\n ...components,\r\n ...directives,\r\n ...pipes,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n NgxUtilsModule\r\n ],\r\n entryComponents: components,\r\n providers: [\r\n ...pipes,\r\n {provide: NG_VALIDATORS, useValue: validateJSON, multi: true},\r\n {provide: NG_VALIDATORS, useValue: validateRequiredTranslation, multi: true},\r\n {provide: NG_VALIDATORS, useValue: validateItemsMinLength, multi: true},\r\n {provide: NG_VALIDATORS, useValue: validateItemsMaxLength, multi: true},\r\n {provide: NG_VALIDATORS, useValue: validateItemsMinValue, multi: true},\r\n {provide: NG_VALIDATORS, useValue: validateItemsMaxValue, multi: true},\r\n {\r\n provide: DYNAMIC_VALIDATORS,\r\n useValue: new Map<string, Validator | ValidatorFactory>([\r\n [\"json\", validateJSON],\r\n [\"requiredTranslation\", validateRequiredTranslation],\r\n [\"phone\", validatePhone],\r\n [\"itemsMinLength\", validateItemsMinLength],\r\n [\"itemsMaxLength\", validateItemsMaxLength],\r\n [\"itemsMinValue\", validateItemsMinValue],\r\n [\"itemsMaxValue\", validateItemsMaxValue],\r\n ])\r\n }\r\n ]\r\n})\r\nexport class NgxDynamicFormModule {\r\n\r\n static forRoot(): ModuleWithProviders<NgxDynamicFormModule> {\r\n return {\r\n ngModule: NgxDynamicFormModule,\r\n providers: [\r\n DynamicFormService,\r\n {\r\n provide: BaseDynamicFormService,\r\n useExisting: DynamicFormService\r\n }\r\n ]\r\n }\r\n }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n\nexport {components as ɵa,directives as ɵb,pipes as ɵc} from './ngx-dynamic-form/ngx-dynamic-form.module';"],"names":["Base","DynamicFormArrayModelBase","BaseDynamicFormService"],"mappings":"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"}