@stemy/ngx-dynamic-form 19.0.7 → 19.0.8
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.
|
@@ -5,7 +5,7 @@ import * as i2 from '@stemy/ngx-utils';
|
|
|
5
5
|
import { ObjectUtils, TimerUtils, cachedFactory, StringUtils, OpenApiService, TOASTER_SERVICE, ObservableUtils, EventsService, NgxUtilsModule } from '@stemy/ngx-utils';
|
|
6
6
|
import { __decorate } from 'tslib';
|
|
7
7
|
import { BehaviorSubject, isObservable, of, Subject, firstValueFrom, Subscription } from 'rxjs';
|
|
8
|
-
import { map,
|
|
8
|
+
import { map, debounceTime, first, groupBy, mergeMap } from 'rxjs/operators';
|
|
9
9
|
import * as i0 from '@angular/core';
|
|
10
10
|
import { Injector, Injectable, Inject, EventEmitter, Directive, Input, Output, HostBinding, HostListener, QueryList, Component, ChangeDetectionStrategy, ContentChildren, ViewChildren, ViewContainerRef, ViewChild, forwardRef, Optional, NgModule } from '@angular/core';
|
|
11
11
|
import { FormGroup, FormArray, FormsModule, ReactiveFormsModule, NG_VALIDATORS } from '@angular/forms';
|
|
@@ -541,6 +541,15 @@ class DynamicFormService extends DynamicFormService$1 {
|
|
|
541
541
|
this.openApi = openApi;
|
|
542
542
|
this.injector = injector;
|
|
543
543
|
}
|
|
544
|
+
createFormGroup(formModel, options, parent) {
|
|
545
|
+
const group = super.createFormGroup(formModel, options, parent);
|
|
546
|
+
if (!parent) {
|
|
547
|
+
group.valueChanges.pipe(debounceTime(500)).subscribe(() => {
|
|
548
|
+
this.notifyChanges(formModel, group);
|
|
549
|
+
});
|
|
550
|
+
}
|
|
551
|
+
return group;
|
|
552
|
+
}
|
|
544
553
|
patchGroup(value, formModel, formGroup) {
|
|
545
554
|
value = ObjectUtils.copy(value);
|
|
546
555
|
this.patchValueRecursive(value, formModel, formGroup);
|
|
@@ -989,6 +998,7 @@ class DynamicFormService extends DynamicFormService$1 {
|
|
|
989
998
|
}
|
|
990
999
|
getFormSelectOptions(property, schema) {
|
|
991
1000
|
const $enum = property.items?.enum || property.enum;
|
|
1001
|
+
console.log(property, schema, Array.isArray($enum), isStringWithVal(property.optionsPath));
|
|
992
1002
|
if (Array.isArray($enum)) {
|
|
993
1003
|
return new FormSelectSubject((selectModel, formControl) => {
|
|
994
1004
|
const options = $enum.map(value => {
|
|
@@ -1032,7 +1042,9 @@ class DynamicFormService extends DynamicFormService$1 {
|
|
|
1032
1042
|
return this.fixSelectOptions(selectModel, control, options);
|
|
1033
1043
|
});
|
|
1034
1044
|
}
|
|
1045
|
+
console.log(property.id, "helo");
|
|
1035
1046
|
return new FormSelectSubject(async (selectModel, control) => {
|
|
1047
|
+
console.log(property.id, "helo2");
|
|
1036
1048
|
const entries = Object.entries(control.root?.controls || {});
|
|
1037
1049
|
const endpoint = entries.reduce((res, [key, control]) => {
|
|
1038
1050
|
return res.replace(new RegExp(`\\$${key}`, "gi"), `${control?.value ?? ""}`);
|
|
@@ -1317,8 +1329,6 @@ class DynamicBaseFormComponent extends DynamicFormComponent {
|
|
|
1317
1329
|
if (this.group) {
|
|
1318
1330
|
this.groupSubscription = ObservableUtils.multiSubscription(this.group.statusChanges.subscribe(() => {
|
|
1319
1331
|
this.onStatusChange.emit(this);
|
|
1320
|
-
}), this.group.valueChanges.pipe(debounceTime(500)).subscribe(() => {
|
|
1321
|
-
this.formService.notifyChanges(this.model, this.group);
|
|
1322
1332
|
}), this.change.pipe(groupBy(ev => ev.model))
|
|
1323
1333
|
.pipe(mergeMap(t => t.pipe(debounceTime(500))))
|
|
1324
1334
|
.subscribe(ev => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stemy-ngx-dynamic-form.mjs","sources":["../../src/ngx-dynamic-form/utils/dynamic-editor.model.ts","../../src/ngx-dynamic-form/utils/dynamic-form-array.model.ts","../../src/ngx-dynamic-form/utils/dynamic-form-group.model.ts","../../src/ngx-dynamic-form/utils/dynamic-select.model.ts","../../src/ngx-dynamic-form/utils/creators.ts","../../src/ngx-dynamic-form/utils/customizer.ts","../../src/ngx-dynamic-form/utils/misc.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/validation-errors.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-control-container.component.ts","../../src/ngx-dynamic-form/components/base/dynamic-base-form-array.component.ts","../../src/ngx-dynamic-form/components/base/dynamic-base-form-control.component.ts","../../src/ngx-dynamic-form/components/base/dynamic-base-form-group.component.ts","../../src/ngx-dynamic-form/components/base/dynamic-base-select.component.ts","../../src/ngx-dynamic-form/ngx-dynamic-form.imports.ts","../../src/ngx-dynamic-form/ngx-dynamic-form.module.ts","../../src/stemy-ngx-dynamic-form.ts"],"sourcesContent":["import {\r\n DYNAMIC_FORM_CONTROL_TYPE_EDITOR,\r\n DynamicFormControlLayout,\r\n DynamicInputControlModel,\r\n DynamicInputControlModelConfig,\r\n serializable\r\n} from \"@ng-dynamic-forms/core\";\r\n\r\nexport interface DynamicEditorModelConfig extends DynamicInputControlModelConfig<string | Object> {\r\n inputType: string;\r\n convertObject?: boolean;\r\n}\r\n\r\nexport class DynamicEditorModel extends DynamicInputControlModel<string | Object> {\r\n\r\n @serializable() readonly type: string = DYNAMIC_FORM_CONTROL_TYPE_EDITOR;\r\n\r\n readonly inputType: string;\r\n readonly convertObject: boolean;\r\n\r\n constructor(config: DynamicEditorModelConfig, layout?: DynamicFormControlLayout) {\r\n super(config, layout);\r\n this.inputType = config.inputType || \"javascript\";\r\n this.convertObject = config.convertObject !== false;\r\n }\r\n}\r\n","import {ChangeDetectorRef, Injector} from \"@angular/core\";\r\nimport {FormArray} from \"@angular/forms\";\r\nimport {BehaviorSubject} from \"rxjs\";\r\nimport {\r\n DynamicFormArrayGroupModel as GroupBase,\r\n DynamicFormArrayModel as Base,\r\n DynamicFormArrayModelConfig as ConfigBase,\r\n DynamicFormControlLayout,\r\n DynamicFormModel\r\n} from \"@ng-dynamic-forms/core\";\r\nimport {ITimer, ObjectUtils, TimerUtils} from \"@stemy/ngx-utils\";\r\n\r\nexport type SaveTabFunc = (index: number, model: DynamicFormArrayGroupModel, arrayModel: DynamicFormArrayModel, injector: Injector) => void;\r\nexport type RestoreTabFunc = (arrayModel: DynamicFormArrayModel, injector: Injector) => number;\r\nexport type TabLabelFunc = (index: number, model: DynamicFormArrayGroupModel, arrayModel: DynamicFormArrayModel, array: FormArray, injector: Injector) => string;\r\n\r\nexport class DynamicFormArrayGroupModel extends GroupBase {\r\n\r\n get hidden(): boolean {\r\n return this.isHidden;\r\n }\r\n\r\n set hidden(value: boolean) {\r\n if (this.isHidden == value) return;\r\n this.isHidden = value || false;\r\n this.context?.filterGroups();\r\n }\r\n\r\n protected isHidden: boolean;\r\n\r\n constructor(readonly context: DynamicFormArrayModel, group: DynamicFormModel, index: number = -1) {\r\n super(context, group, index);\r\n this.isHidden = false;\r\n }\r\n}\r\n\r\nexport interface DynamicFormArrayModelConfig extends ConfigBase {\r\n\r\n groups?: DynamicFormArrayGroupModel[] | null;\r\n sortable?: boolean;\r\n useTabs?: boolean;\r\n saveTab?: SaveTabFunc;\r\n restoreTab?: RestoreTabFunc;\r\n getTabLabel?: TabLabelFunc;\r\n additional?: { [key: string]: any };\r\n\r\n addItem?: boolean;\r\n insertItem?: boolean;\r\n cloneItem?: boolean;\r\n moveItem?: boolean;\r\n removeItem?: boolean;\r\n clearItems?: boolean;\r\n}\r\n\r\nexport class DynamicFormArrayModel extends Base {\r\n\r\n readonly filteredGroups: BehaviorSubject<ReadonlyArray<DynamicFormArrayGroupModel>>;\r\n readonly sortable: boolean;\r\n readonly useTabs: boolean;\r\n readonly saveTab: SaveTabFunc;\r\n readonly restoreTab: RestoreTabFunc;\r\n readonly getTabLabel: TabLabelFunc;\r\n readonly additional: { [key: string]: any };\r\n\r\n groups: DynamicFormArrayGroupModel[] = [];\r\n tabIndex: number = 0;\r\n\r\n protected _sortBy: string;\r\n protected _sortDescending: boolean;\r\n protected _formArray: FormArray;\r\n protected _filteredGroups: ReadonlyArray<DynamicFormArrayGroupModel>;\r\n protected _filterTimer: ITimer;\r\n\r\n get addItem(): boolean {\r\n return this.config.addItem !== false;\r\n }\r\n\r\n get insertItem(): boolean {\r\n return !this._sortBy && this.config.insertItem !== false;\r\n }\r\n\r\n get cloneItem(): boolean {\r\n return this.config.cloneItem !== false;\r\n }\r\n\r\n get moveItem(): boolean {\r\n return !this._sortBy && this.config.moveItem !== false;\r\n }\r\n\r\n get removeItem(): boolean {\r\n return this.config.removeItem !== false;\r\n }\r\n\r\n get clearItems(): boolean {\r\n return this.config.clearItems !== false;\r\n }\r\n\r\n get sortBy(): string {\r\n return this._sortBy;\r\n }\r\n\r\n set sortBy(value: string) {\r\n if (!this.sortable) return;\r\n value = value || null;\r\n if (this._sortBy !== value) {\r\n this._sortBy = value;\r\n this._sortDescending = false;\r\n } else if (this._sortDescending) {\r\n this._sortBy = null;\r\n this._sortDescending = false;\r\n } else {\r\n this._sortDescending = true;\r\n }\r\n this.filterGroups();\r\n }\r\n\r\n get sortDescending(): boolean {\r\n return this._sortDescending;\r\n }\r\n\r\n get sortOrder(): string {\r\n return this.sortDescending ? \"desc\" : \"asc\";\r\n }\r\n\r\n constructor(protected config: DynamicFormArrayModelConfig, layout?: DynamicFormControlLayout) {\r\n super(config, layout);\r\n this.filteredGroups = new BehaviorSubject<ReadonlyArray<DynamicFormArrayGroupModel>>([]);\r\n this.sortable = config.sortable || false;\r\n this.useTabs = config.useTabs || false;\r\n this.saveTab = ObjectUtils.isFunction(config.saveTab) ? config.saveTab : ((index, model, arrayModel) => {\r\n arrayModel.tabIndex = index;\r\n });\r\n this.restoreTab = ObjectUtils.isFunction(config.restoreTab) ? config.restoreTab : ((model) => {\r\n return model.tabIndex;\r\n });\r\n this.getTabLabel = ObjectUtils.isFunction(config.getTabLabel) ? config.getTabLabel : ((index) => {\r\n return `${index + 1}`;\r\n });\r\n this.additional = config.additional || {};\r\n this.tabIndex = 0;\r\n this._sortBy = null;\r\n this._sortDescending = false;\r\n this._formArray = null;\r\n }\r\n\r\n initialize(array?: FormArray): void {\r\n this._formArray = array || this._formArray;\r\n this.filterGroups();\r\n }\r\n\r\n filterGroups(): void {\r\n this._filterTimer = this._filterTimer || TimerUtils.createTimeout();\r\n this._filterTimer.set(() => {\r\n const filtered = this.groups.filter(g => !g.hidden);\r\n if (this._sortBy && this._formArray) {\r\n const compare: (a: any, b: any) => number = this._sortDescending\r\n ? (a, b) => this.compareModels(b, a)\r\n : (a, b) => this.compareModels(a, b);\r\n filtered.sort(compare);\r\n }\r\n this._filteredGroups = filtered;\r\n this.filteredGroups.next(filtered);\r\n }, 100);\r\n }\r\n\r\n getFiltered(index: number): DynamicFormArrayGroupModel {\r\n return !this._filteredGroups ? null : this._filteredGroups[index];\r\n }\r\n\r\n insertGroup(index: number): DynamicFormArrayGroupModel {\r\n const group = new DynamicFormArrayGroupModel(this, this.groupFactory());\r\n this.groups.splice(index, 0, group);\r\n this.groups.forEach((g, index) => g.index = index);\r\n this.filterGroups();\r\n return group;\r\n }\r\n\r\n moveGroup(index: number, step: number): void {\r\n super.moveGroup(index, step);\r\n this.filterGroups();\r\n }\r\n\r\n removeGroup(index: number): void {\r\n super.removeGroup(index);\r\n this.filterGroups();\r\n }\r\n\r\n protected compareModels(a: DynamicFormArrayGroupModel, b: DynamicFormArrayGroupModel): number {\r\n const aGroup = this._formArray.at(a.index).get(this._sortBy)?.value || null;\r\n const bGroup = this._formArray.at(b.index).get(this._sortBy)?.value || null;\r\n return ObjectUtils.compare(aGroup, bGroup);\r\n }\r\n}\r\n","import {\r\n DynamicFormControlLayout,\r\n DynamicFormControlModel,\r\n DynamicFormGroupModel as Base,\r\n DynamicFormGroupModelConfig as BaseConfig,\r\n} from \"@ng-dynamic-forms/core\";\r\n\r\nexport interface DynamicFormFieldSet<T> {\r\n id: string;\r\n legend: string;\r\n fields: T[];\r\n}\r\n\r\nexport type DynamicFormFieldSets<T> = ReadonlyArray<DynamicFormFieldSet<T>>;\r\n\r\nexport interface DynamicFormGroupModelConfig extends BaseConfig {\r\n fieldSets?: DynamicFormFieldSets<string>;\r\n}\r\n\r\nexport class DynamicFormGroupModel extends Base {\r\n\r\n readonly groups: DynamicFormFieldSets<DynamicFormControlModel>;\r\n\r\n constructor(config: DynamicFormGroupModelConfig, layout?: DynamicFormControlLayout) {\r\n super(config, layout);\r\n const controls = [...config.group];\r\n const groups: DynamicFormFieldSet<DynamicFormControlModel>[] = [];\r\n const sets = config.fieldSets || [];\r\n for (const fs of sets) {\r\n const fields: DynamicFormControlModel[] = [];\r\n for (const f of fs.fields) {\r\n const ix = controls.findIndex(c => c.id === f);\r\n if (ix < 0) continue;\r\n fields.push(controls.splice(ix, 1)[0]);\r\n }\r\n if (fields.length === 0) continue;\r\n groups.push({id: fs.id, legend: fs.legend, fields});\r\n }\r\n if (controls.length > 0) {\r\n groups.unshift({id: \"root-controls\", legend: config.legend, fields: controls});\r\n }\r\n this.groups = groups;\r\n }\r\n}\r\n","import {Injector} from \"@angular/core\";\r\nimport {FormControl} from \"@angular/forms\";\r\nimport {isObservable, Observable, of} from \"rxjs\";\r\nimport {map} from \"rxjs/operators\";\r\nimport {ObjectUtils} from \"@stemy/ngx-utils\";\r\nimport {\r\n DynamicFormControlLayout,\r\n DynamicFormOption as BaseOption,\r\n DynamicFormOptionConfig as BaseOptionConfig,\r\n DynamicSelectModel as Base,\r\n DynamicSelectModelConfig as BaseConfig,\r\n} from \"@ng-dynamic-forms/core\";\r\n\r\nconst ignoredKeys = [\"disabled\", \"label\", \"value\", \"classes\"];\r\n\r\nexport interface DynamicFormOptionConfig<T> extends BaseOptionConfig<T> {\r\n classes?: string;\r\n\r\n [key: string]: any;\r\n}\r\n\r\nexport class DynamicFormOption<T> extends BaseOption<T> {\r\n\r\n readonly classes: string;\r\n readonly props: any;\r\n\r\n constructor(config: DynamicFormOptionConfig<T>) {\r\n super(config);\r\n this.classes = config.classes || \"\";\r\n this.props = Object.keys(config).reduce((res, k) => {\r\n if (ignoredKeys.indexOf(k) >= 0) return res;\r\n res[k] = config[k];\r\n return res;\r\n }, {});\r\n }\r\n}\r\n\r\nexport interface DynamicFormOptionGroup<T> {\r\n group: string;\r\n options: ReadonlyArray<DynamicFormOption<T>>;\r\n}\r\n\r\nexport type OptionClassesFunc<T> = (option: DynamicFormOptionConfig<T>, model: DynamicSelectModel<T>, control: FormControl, injector: Injector) => string;\r\n\r\nexport interface DynamicSelectModelConfig<T> extends BaseConfig<T> {\r\n groupBy?: string;\r\n inline?: boolean;\r\n options?: DynamicFormOptionConfig<T>[] | Observable<DynamicFormOptionConfig<T>[]>;\r\n getClasses?: OptionClassesFunc<T>;\r\n allowEmpty?: boolean;\r\n}\r\n\r\nexport class DynamicSelectModel<T> extends Base<T> {\r\n\r\n readonly groupBy: string;\r\n readonly inline: boolean;\r\n readonly getClasses: OptionClassesFunc<T>;\r\n readonly allowEmpty: boolean;\r\n\r\n options$: Observable<DynamicFormOption<T>[]> = null;\r\n\r\n protected mOptions: DynamicFormOption<T>[] = [];\r\n\r\n constructor(config: DynamicSelectModelConfig<T>, layout?: DynamicFormControlLayout) {\r\n super(config, layout);\r\n this.groupBy = config.groupBy || null;\r\n this.inline = config.inline || false;\r\n this.getClasses = ObjectUtils.isFunction(config.getClasses) ? config.getClasses : (() => \"\");\r\n this.allowEmpty = config.allowEmpty || false;\r\n this.options = config.options;\r\n }\r\n\r\n set options(options: any) {\r\n if (Array.isArray(options)) {\r\n this.mOptions = (options as DynamicFormOptionConfig<T>[]).map(optionConfig => new DynamicFormOption<T>(optionConfig));\r\n this.updateOptions();\r\n } else if (isObservable(options)) {\r\n this.options$ = (options as Observable<DynamicFormOptionConfig<T>[]>).pipe(\r\n map(optionsConfig => {\r\n this.mOptions = optionsConfig.map(optionConfig => new DynamicFormOption<T>(optionConfig));\r\n return this.mOptions;\r\n }));\r\n } else {\r\n this.updateOptions();\r\n }\r\n }\r\n\r\n get options(): ReadonlyArray<DynamicFormOption<T>> {\r\n return this.mOptions;\r\n }\r\n\r\n insert(index: number, optionConfig: DynamicFormOptionConfig<T>): DynamicFormOption<T> {\r\n const option = new DynamicFormOption(optionConfig);\r\n this.mOptions.splice(index, 0, option);\r\n this.updateOptions();\r\n return option;\r\n }\r\n\r\n remove(...indices: number[]): void {\r\n indices.forEach(index => this.mOptions.splice(index, 1));\r\n this.updateOptions();\r\n }\r\n\r\n protected updateOptions(): void {\r\n this.options$ = of(this.mOptions);\r\n }\r\n}\r\n","import {\r\n DynamicCheckboxModel,\r\n DynamicCheckboxModelConfig,\r\n DynamicDatePickerModel,\r\n DynamicFileUploadModel,\r\n DynamicFileUploadModelConfig,\r\n DynamicFormControlLayout,\r\n DynamicFormValueControlModelConfig,\r\n DynamicInputModel,\r\n DynamicInputModelConfig,\r\n DynamicTextAreaModel,\r\n DynamicTextAreaModelConfig\r\n} from \"@ng-dynamic-forms/core\";\r\nimport {ObjectUtils} from \"@stemy/ngx-utils\";\r\nimport {DynamicEditorModel, DynamicEditorModelConfig} from \"./dynamic-editor.model\";\r\nimport {DynamicFormArrayModel, DynamicFormArrayModelConfig} from \"./dynamic-form-array.model\";\r\nimport {DynamicFormGroupModel, DynamicFormGroupModelConfig} from \"./dynamic-form-group.model\";\r\nimport {DynamicSelectModel, DynamicSelectModelConfig} from \"./dynamic-select.model\";\r\n\r\nexport type ValueModelConfig = DynamicFormValueControlModelConfig<any>;\r\n\r\nexport type OmitId<T extends ValueModelConfig> = Omit<T, \"id\">;\r\n\r\nexport type AddId<T extends OmitId<ValueModelConfig>> = T extends OmitId<(infer U)> ? U : never;\r\n\r\nexport function createFormConfig<T extends ValueModelConfig, U extends OmitId<T>>(id: string, config?: U): AddId<U> {\r\n const res = (config || {id}) as AddId<U>;\r\n res.id = id;\r\n res.label = ObjectUtils.isNullOrUndefined(config.label) ? id : config.label;\r\n res.disabled = config.disabled || false;\r\n res.hidden = config.hidden || false;\r\n res.additional = Object.assign({\r\n // For material components\r\n appearance: \"fill\",\r\n }, res.additional || {});\r\n return res;\r\n}\r\n\r\nexport function createFormCheckbox(id: string, config: OmitId<DynamicCheckboxModelConfig>, layout?: DynamicFormControlLayout): DynamicCheckboxModel {\r\n const res = createFormConfig(id, config);\r\n res.indeterminate = config.indeterminate || false;\r\n return new DynamicCheckboxModel(res, layout);\r\n}\r\n\r\nexport function createFormDate(id: string, config: OmitId<DynamicDatePickerModel>, layout?: DynamicFormControlLayout): DynamicDatePickerModel {\r\n const res = createFormConfig(id, config);\r\n res.autoFocus = config.autoFocus || false;\r\n res.focusedDate = config.focusedDate || new Date();\r\n res.inline = config.inline || false;\r\n return new DynamicDatePickerModel(res, layout);\r\n}\r\n\r\nexport function createFormEditor(id: string, config: OmitId<DynamicEditorModelConfig>, layout?: DynamicFormControlLayout): DynamicEditorModel {\r\n const res = createFormConfig(id, config);\r\n return new DynamicEditorModel(res, layout);\r\n}\r\n\r\nexport function createFormArray(id: string, config: OmitId<DynamicFormArrayModelConfig>, layout?: DynamicFormControlLayout): DynamicFormArrayModel {\r\n const res = createFormConfig(id, config);\r\n return new DynamicFormArrayModel(res, layout);\r\n}\r\n\r\nexport function createFormGroup(id: string, config: OmitId<DynamicFormGroupModelConfig>, layout?: DynamicFormControlLayout): DynamicFormGroupModel {\r\n const res = createFormConfig(id, config);\r\n res.name = config.name || \"\";\r\n return new DynamicFormGroupModel(res, layout);\r\n}\r\n\r\nexport function createFormInput(id: string, config: OmitId<DynamicInputModelConfig>, type: string = \"text\", layout?: DynamicFormControlLayout): DynamicInputModel {\r\n const res = createFormConfig(id, config);\r\n res.inputType = config.inputType || type;\r\n res.placeholder = config.placeholder || (config.inputType == \"mask\" ? \"_\" : \"\");\r\n res.step = config.step || 1;\r\n res.mask = config.mask || null;\r\n return new DynamicInputModel(res, layout);\r\n}\r\n\r\nexport function createFormSelect<T = any>(id: string, config: OmitId<DynamicSelectModelConfig<T>>, layout?: DynamicFormControlLayout): DynamicSelectModel<T> {\r\n const res = createFormConfig(id, config);\r\n res.options = config.options || [];\r\n return new DynamicSelectModel(res, layout);\r\n}\r\n\r\nexport function createFormTextarea(id: string, config: OmitId<DynamicTextAreaModelConfig>, layout?: DynamicFormControlLayout): DynamicTextAreaModel {\r\n const res = createFormConfig(id, config);\r\n res.cols = config.cols || 10;\r\n res.rows = config.rows || 3;\r\n res.wrap = config.wrap || \"soft\";\r\n return new DynamicTextAreaModel(res, layout);\r\n}\r\n\r\nexport function createFormFile(id: string, config: OmitId<DynamicFileUploadModelConfig>, layout?: DynamicFormControlLayout): DynamicFileUploadModel {\r\n const res = createFormConfig(id, config);\r\n res.accept = config.accept || [\"jpg\", \"jpeg\", \"png\"];\r\n res.multiple = config.multiple || false;\r\n res.url = ObjectUtils.isString(config.url) ? config.url : \"assets\";\r\n return new DynamicFileUploadModel(res, layout);\r\n}\r\n","import {Type} from \"@angular/core\";\r\nimport {\r\n DynamicFormControlComponent,\r\n DynamicFormControlModel,\r\n DynamicFormControlModelConfig\r\n} from \"@ng-dynamic-forms/core\";\r\nimport {CachedProvider, cachedFactory, IOpenApiSchema, IOpenApiSchemaProperty} from \"@stemy/ngx-utils\";\r\n\r\nimport {FormModelCustomizer, GetFormControlComponentType, PromiseOrNot} from \"../common-types\";\r\n\r\nexport interface IFormComponentCustomizer {\r\n acceptModel(model: DynamicFormControlModel): boolean;\r\n getFormComponent(model: DynamicFormControlModel): Type<DynamicFormControlComponent>;\r\n}\r\n\r\nexport function getFormComponent(...providers: CachedProvider<IFormComponentCustomizer>[]): GetFormControlComponentType {\r\n const factory = cachedFactory(providers);\r\n return (model, injector) => {\r\n const customizers = factory(injector);\r\n for (const customizer of customizers) {\r\n const component = customizer.acceptModel(model) ? customizer.getFormComponent(model) : null;\r\n if (component) {\r\n return component;\r\n }\r\n }\r\n return null;\r\n }\r\n}\r\n\r\nexport interface IFormModelCustomizer {\r\n acceptModel(model: DynamicFormControlModel): boolean;\r\n customizeModel(\r\n model: DynamicFormControlModel,\r\n config: DynamicFormControlModelConfig,\r\n property: IOpenApiSchemaProperty,\r\n schema: IOpenApiSchema\r\n ): PromiseOrNot<DynamicFormControlModel | DynamicFormControlModel[]>;\r\n}\r\n\r\nexport function customizeFormModel(...providers: CachedProvider<IFormModelCustomizer>[]): FormModelCustomizer {\r\n const factory = cachedFactory(providers);\r\n return async (property, schema, model, config, injector) => {\r\n const customizers = factory(injector);\r\n for (const customizer of customizers) {\r\n const accept = customizer.acceptModel(model);\r\n if (accept) {\r\n return customizer.customizeModel(model, config, property, schema);\r\n }\r\n }\r\n return model;\r\n }\r\n}\r\n","import {DynamicFormModel, DynamicPathable} from \"@ng-dynamic-forms/core\";\r\nimport {IOpenApiSchemaProperty} from \"@stemy/ngx-utils\";\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 findRefs(property: IOpenApiSchemaProperty): string[] {\r\n const refs = Array.isArray(property.allOf)\r\n ? property.allOf.map(o => o.$ref).filter(isStringWithVal)\r\n : [property.items?.$ref, property.$ref].filter(isStringWithVal);\r\n return refs.map(t => t.split(\"/\").pop());\r\n}\r\n\r\nexport function replaceSpecialChars(str: string, to: string = \"-\"): string {\r\n return `${str}`.replace(/[&\\/\\\\#, +()$~%.@'\":*?<>{}]/g, to);\r\n}\r\n\r\nexport function mergeFormModels(formModels: DynamicFormModel[]): DynamicFormModel {\r\n const res: DynamicFormModel = [];\r\n for (const formModel of formModels) {\r\n for (const subModel of formModel) {\r\n const index = res.findIndex(t => t.id == subModel.id);\r\n if (index >= 0) {\r\n res[index] = subModel;\r\n continue;\r\n }\r\n res.push(subModel);\r\n }\r\n }\r\n return res;\r\n}\r\n\r\nexport function collectPathAble<T extends DynamicPathable>(start: T, getter: (cur: T & DynamicPathable) => 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\r\nexport function getDynamicPath(start: DynamicPathable): string {\r\n return collectPathAble(start, t => t.id).join(\".\");\r\n}\r\n\r\nexport const MIN_INPUT_NUM = -999999999;\r\n\r\nexport const MAX_INPUT_NUM = 999999999;\r\n\r\nexport const EDITOR_FORMATS = [\"php\", \"json\", \"html\", \"css\", \"scss\"];\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 {FormControl} from \"@angular/forms\";\r\nimport {DynamicFormControlModel, DynamicFormModel, DynamicPathable} from \"@ng-dynamic-forms/core\";\r\n\r\nconst indexLabels = [\"$ix\", \"$pix\"];\r\n\r\nexport type NotifyCallback<M extends DynamicFormControlModel> = (controlModel: M, control: FormControl, root: DynamicFormModel, indexes: any) => any | Promise<any>;\r\n\r\nexport class FormSubject<M extends DynamicFormControlModel, T> extends Subject<T> {\r\n\r\n private readonly notifyCallback: NotifyCallback<M>;\r\n\r\n constructor(notifyCallback: NotifyCallback<M>) {\r\n super();\r\n this.notifyCallback = notifyCallback;\r\n }\r\n\r\n protected handleNotifiedValue(controlModel: M, control: FormControl, val: Promise<T>) {\r\n val.then(v => this.next(v));\r\n }\r\n\r\n notify(controlModel: M, control: FormControl, root: DynamicFormModel): void {\r\n const indexes = {};\r\n let path = controlModel as DynamicPathable;\r\n let ix = 0;\r\n while (path) {\r\n if (!isNaN(path.index)) {\r\n const key = indexLabels[ix++] || `$pix${ix}`;\r\n indexes[key] = path.index;\r\n }\r\n path = path.parent;\r\n }\r\n let value = this.notifyCallback(controlModel, control, root, indexes);\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 \"./dynamic-select.model\";\r\nimport {FormSubject} from \"./form-subject\";\r\n\r\nexport class FormSelectSubject<T extends DynamicFormOptionConfig<any>[]> extends FormSubject<DynamicSelectModel<any>, T> {\r\n\r\n protected handleNotifiedValue(controlModel: DynamicSelectModel<any>, control: AbstractControl, val: Promise<T>) {\r\n val.then(options => {\r\n if (options.length == 0) {\r\n this.next(options);\r\n return;\r\n }\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 } else {\r\n const option = options.find(t => t.value == currentVal);\r\n if (!option) {\r\n control.setValue(\r\n controlModel.allowEmpty ? null : options[0]?.value ?? null,\r\n {onlySelf: true, emitEvent: false}\r\n );\r\n }\r\n }\r\n this.next(options);\r\n });\r\n }\r\n}\r\n","import {AbstractControl, FormArray, FormGroup} from \"@angular/forms\";\r\n\r\nexport interface AllValidationErrors {\r\n control: AbstractControl;\r\n path: string;\r\n errorKey: string;\r\n errorValue: any;\r\n}\r\n\r\nexport interface FormGroupControls {\r\n [key: string]: AbstractControl;\r\n}\r\n\r\nexport function getFormValidationErrors(controls: FormGroupControls, parentPath: string = \"\"): AllValidationErrors[] {\r\n const errors: AllValidationErrors[] = [];\r\n Object.entries(controls).forEach(([name, control], ix) => {\r\n const path = !parentPath ? name : `${parentPath}.${name}`;\r\n if (control instanceof FormGroup) {\r\n getFormValidationErrors(control.controls, path).forEach(error => errors.push(error));\r\n return;\r\n }\r\n if (control instanceof FormArray) {\r\n control.controls.forEach((control: FormGroup, ix) => {\r\n getFormValidationErrors(control.controls, `${path}.${ix}`).forEach(error => errors.push(error));\r\n });\r\n return;\r\n }\r\n Object.entries(control.errors || {}).forEach(([errorKey, errorValue]) => {\r\n errors.push({control, path, errorKey, errorValue});\r\n });\r\n });\r\n return errors;\r\n}\r\n","import {Inject, Injectable, Injector} from \"@angular/core\";\r\nimport {AbstractControl, FormArray, FormControl, FormGroup} from \"@angular/forms\";\r\nimport {firstValueFrom, Subject} from \"rxjs\";\r\nimport {\r\n DynamicCheckboxModel,\r\n DynamicCheckboxModelConfig,\r\n DynamicDatePickerModel,\r\n DynamicDatePickerModelConfig,\r\n DynamicFileUploadModel,\r\n DynamicFileUploadModelConfig,\r\n DynamicFormComponentService,\r\n DynamicFormControlModel,\r\n DynamicFormControlModelConfig,\r\n DynamicFormModel,\r\n DynamicFormService as Base,\r\n DynamicFormValidationService,\r\n DynamicFormValueControlModel,\r\n DynamicFormValueControlModelConfig,\r\n DynamicInputModel,\r\n DynamicInputModelConfig,\r\n DynamicPathable,\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 {\r\n FormControlSerializer,\r\n FormModelCustomizer,\r\n FormModelCustomizerWrap,\r\n IDynamicForm,\r\n ModelType\r\n} from \"../common-types\";\r\n\r\nimport {EDITOR_FORMATS, findRefs, isStringWithVal, MAX_INPUT_NUM, mergeFormModels, MIN_INPUT_NUM} from \"../utils/misc\";\r\nimport {FormSelectSubject} from \"../utils/form-select-subject\";\r\nimport {FormSubject} from \"../utils/form-subject\";\r\nimport {DynamicEditorModel, DynamicEditorModelConfig} from \"../utils/dynamic-editor.model\";\r\nimport {\r\n DynamicFormArrayGroupModel,\r\n DynamicFormArrayModel,\r\n DynamicFormArrayModelConfig\r\n} from \"../utils/dynamic-form-array.model\";\r\nimport {\r\n DynamicFormFieldSet,\r\n DynamicFormGroupModel,\r\n DynamicFormGroupModelConfig\r\n} from \"../utils/dynamic-form-group.model\";\r\nimport {DynamicFormOptionConfig, DynamicSelectModel, DynamicSelectModelConfig} from \"../utils/dynamic-select.model\";\r\nimport {DynamicBaseFormComponent} from \"../components/base/dynamic-base-form.component\";\r\nimport {createFormInput} from \"../utils/creators\";\r\nimport {AllValidationErrors, getFormValidationErrors} from \"../utils/validation-errors\";\r\nimport {first} from \"rxjs/operators\";\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 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 }\r\n\r\n patchGroup(value: any, formModel: DynamicFormModel, formGroup: FormGroup): void {\r\n value = ObjectUtils.copy(value);\r\n this.patchValueRecursive(value, formModel, formGroup);\r\n formGroup.patchValue(value);\r\n this.detectChanges();\r\n }\r\n\r\n patchForm(value: any, component: DynamicBaseFormComponent): void {\r\n value = ObjectUtils.copy(value);\r\n this.patchValueRecursive(value, component.model, component.group);\r\n component.group.patchValue(value);\r\n this.detectChanges(component);\r\n }\r\n\r\n validateForm(form: IDynamicForm, showErrors: boolean = true): Promise<any> {\r\n if (!form.group) return Promise.resolve();\r\n return new Promise<any>((resolve, reject) => {\r\n form.group.statusChanges.pipe(first(status => status == \"VALID\" || status == \"INVALID\")).subscribe(status => {\r\n if (showErrors) {\r\n this.showErrors(form);\r\n }\r\n if (status == \"VALID\") {\r\n resolve(null);\r\n return;\r\n }\r\n console.log(`Form errors:`, getFormValidationErrors(form.group.controls));\r\n reject(null);\r\n });\r\n form.group.updateValueAndValidity();\r\n });\r\n }\r\n\r\n async serializeForm(form: IDynamicForm, validate?: boolean): Promise<any> {\r\n if (!form.group) return null;\r\n if (validate) {\r\n await this.validateForm(form);\r\n }\r\n return this.serialize(form.model, form.group);\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, formModel);\r\n }\r\n\r\n showErrors(form: IDynamicForm): void {\r\n this.showErrorsForGroup(form.group);\r\n this.detectChanges(form);\r\n }\r\n\r\n getErrors(form: DynamicBaseFormComponent): Promise<AllValidationErrors[]> {\r\n this.showErrors(form);\r\n return new Promise(resolve => {\r\n setTimeout(() => {\r\n resolve(getFormValidationErrors(form.group.controls, \"\"));\r\n }, 500);\r\n });\r\n }\r\n\r\n protected patchValueRecursive(value: any, formModel: DynamicFormModel, formGroup: FormGroup): void {\r\n if (!value) return;\r\n formModel?.forEach(subModel => {\r\n const key = subModel.id;\r\n const subValue = value[key];\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 DynamicDatePickerModel) {\r\n value[key] = this.convertToDate(subValue);\r\n return;\r\n }\r\n if (subModel instanceof DynamicFormArrayModel) {\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 as DynamicFormArrayModel);\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.hidden && !subModel.additional?.serialize) continue;\r\n if (subModel instanceof DynamicFormArrayModel) {\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 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 if (subModel instanceof DynamicFormGroupModel) {\r\n result[subModel.id] = await this.serializeRecursive(subModel.group, subControl as FormGroup);\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, root: DynamicFormModel): 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 DynamicFormArrayModel) {\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, root);\r\n }\r\n continue;\r\n }\r\n if (subModel instanceof DynamicFormGroupModel) {\r\n this.notifyChangesRecursive(subModel.group, subControl as FormGroup, root);\r\n continue;\r\n }\r\n this.updateSelectOptions(subModel, subControl as FormControl, root);\r\n }\r\n }\r\n\r\n protected updateSelectOptions(formControlModel: DynamicFormControlModel, formControl: FormControl, root: DynamicFormModel): 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, root);\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, root);\r\n }\r\n }\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 protected convertToDate(value: any): Date {\r\n if (ObjectUtils.isNullOrUndefined(value)) return null;\r\n const date = ObjectUtils.isDate(value)\r\n ? value\r\n : new Date(value);\r\n return isNaN(date as any) ? new Date() : date;\r\n }\r\n\r\n async getFormModelForSchema(name: string, customizeModel?: FormModelCustomizer): Promise<DynamicFormModel> {\r\n return (await this.getFormGroupModelForSchema(name, customizeModel)).group;\r\n }\r\n\r\n async getFormGroupModelForSchema(name: string, customizeModel?: FormModelCustomizer): Promise<DynamicFormGroupModel> {\r\n this.api.cache = {};\r\n this.schemas = await this.openApi.getSchemas();\r\n const fieldSets: DynamicFormFieldSet<string>[] = [];\r\n const customizeModels: FormModelCustomizerWrap = async (\r\n property: IOpenApiSchemaProperty, schema: IOpenApiSchema,\r\n modelType: ModelType, config: DynamicFormControlModelConfig) => {\r\n const model = new modelType(config);\r\n if (model instanceof DynamicFormValueControlModel) {\r\n model.value = (model instanceof DynamicDatePickerModel)\r\n ? this.convertToDate(property.default) : property.default;\r\n }\r\n if (!ObjectUtils.isFunction(customizeModel)) return [model];\r\n let res = customizeModel(property, schema, model, config, this.injector);\r\n if (!res) return [model];\r\n if (res instanceof Promise) {\r\n res = await res;\r\n }\r\n return Array.isArray(res) ? res : [res];\r\n };\r\n const schema = this.schemas[name];\r\n const controls = await this.getFormModelForSchemaDef(schema, fieldSets, customizeModels);\r\n const idFields = [\r\n createFormInput(\"id\", {hidden: true}),\r\n createFormInput(\"_id\", {hidden: true})\r\n ].filter(t => !controls.some(c => c.id == t.id));\r\n const config = {\r\n id: \"root\",\r\n group: [\r\n // -- Hidden id fields --\r\n ...idFields,\r\n // -- Main form controls --\r\n ...controls\r\n ],\r\n fieldSets\r\n } as DynamicFormGroupModelConfig;\r\n const root = await customizeModels({\r\n id: \"root\",\r\n type: \"object\",\r\n properties: schema.properties\r\n }, schema, DynamicFormGroupModel, config);\r\n // Check if the customized root wrapper returned an array\r\n controls.length = 0;\r\n for (const model of root) {\r\n if (model instanceof DynamicFormGroupModel && model.id === \"root\") {\r\n return model;\r\n } else {\r\n controls.push(model);\r\n }\r\n }\r\n return new DynamicFormGroupModel({\r\n ...config,\r\n group: controls\r\n });\r\n }\r\n\r\n protected async getFormModelForSchemaDef(schema: IOpenApiSchema, fieldSets: DynamicFormFieldSet<string>[], customizeModels: FormModelCustomizerWrap): Promise<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 const fsName = property.hidden ? null : String(property.fieldSet || \"\");\r\n if (fsName) {\r\n const fs = fieldSets.find(t => t.id === fsName);\r\n if (fs) {\r\n fs.fields.push(p);\r\n } else {\r\n fieldSets.push({id: fsName, legend: `legend.${fsName}`, fields: [p]});\r\n }\r\n }\r\n const models = await this.getFormControlModels(property, schema, customizeModels);\r\n controls.push(...models);\r\n }\r\n return controls.filter(t => null !== t);\r\n }\r\n\r\n protected checkIsEditorProperty(property: IOpenApiSchemaProperty): boolean {\r\n if (!property.format) return false;\r\n return EDITOR_FORMATS.indexOf(property.format) >= 0 || property.format.endsWith(\"script\");\r\n }\r\n\r\n protected async getFormControlModels(property: IOpenApiSchemaProperty, schema: IOpenApiSchema, customizeModels: FormModelCustomizerWrap): Promise<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 case \"textarea\":\r\n if (this.checkIsEditorProperty(property)) {\r\n return customizeModels(property, schema, DynamicEditorModel, this.getFormEditorConfig(property, schema));\r\n }\r\n if (property.format == \"textarea\") {\r\n return customizeModels(property, schema, DynamicTextAreaModel, this.getFormTextareaConfig(property, schema));\r\n }\r\n if (property.format == \"date\") {\r\n return customizeModels(property, schema, DynamicDatePickerModel, this.getFormDatepickerConfig(property, schema));\r\n }\r\n return customizeModels(property, schema, DynamicInputModel, this.getFormInputConfig(property, schema));\r\n case \"object\":\r\n return customizeModels(property, schema, DynamicEditorModel, this.getFormEditorConfig(property, schema));\r\n case \"boolean\":\r\n return customizeModels(property, schema, DynamicCheckboxModel, this.getFormCheckboxConfig(property, schema));\r\n case \"array\":\r\n if (findRefs(property).length > 0) {\r\n return customizeModels(property, schema, DynamicFormArrayModel, await 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 (findRefs(property).length > 0) {\r\n return customizeModels(property, schema, DynamicFormGroupModel, await this.getFormGroupConfig(property, schema, customizeModels));\r\n }\r\n return [];\r\n }\r\n\r\n findModelByPath(parent: DynamicPathable | DynamicFormModel, path: string[]): DynamicPathable {\r\n if (path.length == 0) return parent as DynamicPathable;\r\n const next = path.shift() as any;\r\n if (Array.isArray(parent)) {\r\n return this.findModelByPath(parent.find(t => t.id == next), path);\r\n }\r\n if (parent instanceof DynamicFormGroupModel || parent instanceof DynamicFormArrayGroupModel) {\r\n return this.findModelByPath(parent.group.find(t => t.id == next), path);\r\n }\r\n if (parent instanceof DynamicFormArrayModel) {\r\n return this.findModelByPath(parent.groups.find(t => t.index == next), path);\r\n }\r\n return parent;\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({\r\n // For material components\r\n appearance: \"fill\"\r\n }, property)\r\n };\r\n }\r\n\r\n async getFormArrayConfig(property: IOpenApiSchemaProperty, schema: IOpenApiSchema, customizeModels: FormModelCustomizerWrap): Promise<DynamicFormArrayModelConfig> {\r\n const fieldSets: DynamicFormFieldSet<string>[] = [];\r\n const subSchemas = findRefs(property).map(ref => this.schemas[ref]);\r\n const subModels = await Promise.all(\r\n subSchemas.map(s => this.getFormModelForSchemaDef(s, fieldSets, customizeModels))\r\n );\r\n return Object.assign(\r\n this.getFormControlConfig(property, schema),\r\n {\r\n groupFactory: () => mergeFormModels(ObjectUtils.copy(subModels)),\r\n initialCount: property.initialCount || 0,\r\n sortable: property.sortable || false,\r\n useTabs: property.useTabs || false,\r\n addItem: property.addItem !== false,\r\n insertItem: property.insertItem !== false,\r\n cloneItem: property.cloneItem !== false,\r\n moveItem: property.moveItem !== false,\r\n removeItem: property.removeItem !== false,\r\n clearItems: property.clearItems !== false\r\n }\r\n );\r\n }\r\n\r\n async getFormGroupConfig(property: IOpenApiSchemaProperty, schema: IOpenApiSchema, customizeModels: FormModelCustomizerWrap): Promise<DynamicFormGroupModelConfig> {\r\n const fieldSets: DynamicFormFieldSet<string>[] = [];\r\n const subSchemas = findRefs(property).map(ref => this.schemas[ref]);\r\n const subModels = await Promise.all(\r\n subSchemas.map(s => this.getFormModelForSchemaDef(s, fieldSets, customizeModels))\r\n );\r\n return Object.assign(\r\n this.getFormControlConfig(property, schema),\r\n {\r\n fieldSets,\r\n group: mergeFormModels(subModels)\r\n }\r\n );\r\n }\r\n\r\n getFormInputConfig(property: IOpenApiSchemaProperty, schema: IOpenApiSchema): DynamicInputModelConfig {\r\n let inputType = StringUtils.has(property.id, \"password\", \"Password\") ? \"password\" : (property.format || property.items?.type || property.type);\r\n switch (inputType) {\r\n case \"string\":\r\n inputType = \"text\";\r\n break;\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) ? MIN_INPUT_NUM : sub.minimum,\r\n max: isNaN(sub.maximum) ? MAX_INPUT_NUM : sub.maximum,\r\n minLength: isNaN(sub.minLength) ? 0 : sub.minLength,\r\n maxLength: isNaN(sub.maxLength) ? MAX_INPUT_NUM : sub.maxLength,\r\n placeholder: property.placeholder || \"\"\r\n }\r\n );\r\n }\r\n\r\n getFormEditorConfig(property: IOpenApiSchemaProperty, schema: IOpenApiSchema): DynamicEditorModelConfig {\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: property.format || \"json\",\r\n convertObject: property.type !== \"string\",\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 minLength: isNaN(sub.minLength) ? 0 : sub.minLength,\r\n maxLength: isNaN(sub.maxLength) ? MAX_INPUT_NUM : sub.maxLength,\r\n placeholder: property.placeholder || \"\"\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 minLength: isNaN(property.minLength) ? 0 : property.minLength,\r\n maxLength: isNaN(property.maxLength) ? MAX_INPUT_NUM : property.maxLength,\r\n placeholder: property.placeholder || \"\"\r\n }\r\n );\r\n }\r\n\r\n getFormDatepickerConfig(property: IOpenApiSchemaProperty, schema: IOpenApiSchema): DynamicDatePickerModelConfig {\r\n return Object.assign(\r\n this.getFormControlConfig(property, schema),\r\n {\r\n format: property.dateFormat || \"dd.MM.yyyy\",\r\n min: this.convertToDate(property.min),\r\n max: this.convertToDate(property.max),\r\n }\r\n );\r\n }\r\n\r\n 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((selectModel, formControl) => {\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.fixSelectOptions(selectModel, formControl, options);\r\n });\r\n }\r\n if (isStringWithVal(property.optionsPath)) {\r\n return new FormSelectSubject(async (selectModel, control, root, indexes) => {\r\n let path = property.optionsPath as string;\r\n let target = control as AbstractControl;\r\n let model: DynamicPathable | DynamicFormModel = selectModel;\r\n if (path.startsWith(\"$root\")) {\r\n path = path.substring(5);\r\n while (target.parent) {\r\n target = target.parent;\r\n }\r\n model = root;\r\n }\r\n while (path.startsWith(\".\")) {\r\n path = path.substring(1);\r\n if (target.parent) {\r\n target = target.parent;\r\n }\r\n model = (model as DynamicPathable).parent || root;\r\n }\r\n Object.keys(indexes).forEach(key => {\r\n path = path.replace(key, indexes[key]);\r\n });\r\n model = this.findModelByPath(model, path.split(\".\"));\r\n const modelOptions = model instanceof DynamicSelectModel\r\n ? await firstValueFrom(model.options$) :\r\n [];\r\n const value = ObjectUtils.getValue(target.value, path);\r\n const options = (!ObjectUtils.isArray(value) ? [] : value).map(value => {\r\n const modelOption = modelOptions.find(t => t.value == value);\r\n return {value, label: modelOption?.label || value};\r\n });\r\n return this.fixSelectOptions(selectModel, control, options);\r\n });\r\n }\r\n return new FormSelectSubject(async (selectModel, control) => {\r\n const entries = Object.entries((control.root as FormGroup)?.controls || {});\r\n const endpoint = entries.reduce((res, [key, control]) => {\r\n return res.replace(new RegExp(`\\\\$${key}`, \"gi\"), `${control?.value ?? \"\"}`);\r\n }, `${property.endpoint}`);\r\n this.api.cache[endpoint] = this.api.cache[endpoint] || this.api.list(endpoint, this.api.makeListParams(1, -1)).then(result => {\r\n const items = ObjectUtils.isArray(result)\r\n ? result\r\n : (ObjectUtils.isArray(result.items) ? result.items : []);\r\n return items.map(i => {\r\n const item = ObjectUtils.isObject(i) ? i : {id: i};\r\n return {\r\n ...item,\r\n value: item.id || item._id,\r\n label: item[property.labelField] || item.label || item.id || item._id\r\n };\r\n });\r\n });\r\n const options = (await this.api.cache[endpoint]).map(t => Object.assign({}, t));\r\n return this.fixSelectOptions(selectModel, control, options);\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 groupBy: property.groupBy,\r\n inline: property.inline,\r\n allowEmpty: property.allowEmpty,\r\n }\r\n );\r\n }\r\n\r\n 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 getFormCheckboxConfig(property: IOpenApiSchemaProperty, schema: IOpenApiSchema): DynamicCheckboxModelConfig {\r\n return Object.assign(\r\n this.getFormControlConfig(property, schema),\r\n {\r\n indeterminate: property.indeterminate || false\r\n }\r\n );\r\n }\r\n\r\n cloneFormArrayGroup(index: number, formArray: FormArray, formArrayModel: DynamicFormArrayModel) {\r\n this.insertFormArrayGroup(index, formArray, formArrayModel);\r\n this.patchGroup(formArray.at(index + 1).value, formArrayModel.groups[index].group, formArray.at(index) as FormGroup);\r\n formArrayModel.filterGroups();\r\n }\r\n\r\n protected async fixSelectOptions(model: DynamicSelectModel<any>, control: FormControl, options: DynamicFormOptionConfig<any>[]): Promise<DynamicFormOptionConfig<any>[]> {\r\n if (!options) return [];\r\n for (const option of options) {\r\n option.classes = [option.classes, model.getClasses(option, model, control, this.injector)].filter(isStringWithVal).join(\" \");\r\n option.label = await this.language.getTranslation(option.label);\r\n }\r\n return options;\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 {debounceTime} from \"rxjs/operators\";\r\nimport {IAsyncMessage, IToasterService, TOASTER_SERVICE} from \"@stemy/ngx-utils\";\r\nimport {AsyncSubmitMethod, IDynamicForm} from \"../common-types\";\r\n\r\n@Directive({\r\n standalone: false,\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: IDynamicForm;\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.group?.status !== \"VALID\";\r\n this.cdr.detectChanges();\r\n this.onStatusChange = this.form.group?.statusChanges.subscribe(() => {\r\n const status = this.form.group?.status;\r\n this.isDisabled = status !== \"VALID\";\r\n this.cdr.detectChanges();\r\n if (!this.callback || 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?.pipe(debounceTime(200)).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 const status = this.form.group?.status;\r\n if (status !== \"VALID\" && 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 ViewChildren\r\n} from \"@angular/core\";\r\nimport {FormArray, FormGroup} from \"@angular/forms\";\r\nimport {Subscription} from \"rxjs\";\r\nimport {debounceTime, groupBy, mergeMap} from \"rxjs/operators\";\r\nimport {first} from \"rxjs/operators\";\r\nimport {\r\n DynamicFormComponent,\r\n DynamicFormComponentService,\r\n DynamicFormControlEvent,\r\n DynamicFormControlModel,\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, GetFormControlComponentType, IDynamicForm, IDynamicFormEvent} from \"../../common-types\";\r\nimport {collectPathAble} from \"../../utils/misc\";\r\nimport {DynamicFormGroupModel} from \"../../utils/dynamic-form-group.model\";\r\nimport {DynamicFormArrayModel} from \"../../utils/dynamic-form-array.model\";\r\nimport {DynamicFormService} from \"../../services/dynamic-form.service\";\r\n\r\n@Component({\r\n standalone: false,\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 = null;\r\n @Input() groupModel: DynamicFormGroupModel = null;\r\n @Input() model: DynamicFormModel = null;\r\n @Input() layout: DynamicFormLayout = null;\r\n @Input() labelPrefix: string = \"label\";\r\n @Input() getComponentType: GetFormControlComponentType = null;\r\n\r\n @Output() blur: EventEmitter<DynamicFormControlEvent> = new EventEmitter();\r\n @Output() change: EventEmitter<DynamicFormControlEvent> = new EventEmitter();\r\n @Output() focus: EventEmitter<DynamicFormControlEvent> = new EventEmitter();\r\n\r\n @ContentChildren(DynamicTemplateDirective) contentTemplates: QueryList<DynamicTemplateDirective> = null;\r\n @ViewChildren(DynamicTemplateDirective) viewTemplates: QueryList<DynamicTemplateDirective> = null;\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 onValueChange: EventEmitter<IDynamicFormEvent> = new EventEmitter();\r\n @Output() readonly onStatusChange: EventEmitter<IDynamicForm> = new EventEmitter();\r\n @Output() readonly onSubmit: EventEmitter<IDynamicForm> = new EventEmitter();\r\n @Output() readonly onDetectChanges: EventEmitter<IDynamicForm> = new EventEmitter();\r\n\r\n protected subscription: Subscription = new Subscription();\r\n protected groupSubscription: Subscription = new 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.templates = new QueryList<DynamicTemplateDirective>();\r\n this.getComponentType = () => null;\r\n }\r\n\r\n submit(): void {\r\n this.onSubmit.emit(this);\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.pipe(debounceTime(500)).subscribe(() => {\r\n this.formService.notifyChanges(this.model, this.group);\r\n }),\r\n this.change.pipe(groupBy(ev => ev.model))\r\n .pipe(mergeMap(t => t.pipe(debounceTime(500))))\r\n .subscribe(ev => {\r\n this.onValueChange.emit({...ev, form: this});\r\n })\r\n );\r\n }\r\n if (changes.groupModel) {\r\n this.model = this.groupModel?.group;\r\n }\r\n if (changes.model) {\r\n this.groupModel = new DynamicFormGroupModel({id: \"root\", group: this.model});\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.notifyChanges(this.model, this.group);\r\n this.formService.detectChanges(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 detectChanges(): void {\r\n super.detectChanges();\r\n this.onDetectChanges.emit(this);\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.detectChanges();\r\n }\r\n\r\n cloneFormArrayGroup(index: number, formArray: FormArray, formArrayModel: DynamicFormArrayModel): void {\r\n this.formService.cloneFormArrayGroup(index, formArray, formArrayModel);\r\n this.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.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.detectChanges();\r\n }\r\n\r\n clearFormArray(formArray: FormArray, formArrayModel: DynamicFormArrayModel): void {\r\n this.formService.clearFormArray(formArray, formArrayModel);\r\n this.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","import {\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n ComponentFactoryResolver,\r\n ContentChildren,\r\n EventEmitter,\r\n HostBinding,\r\n Injector,\r\n Input,\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 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 {DynamicFormInitControl} from \"../../common-types\";\r\nimport {collectPathAble} from \"../../utils/misc\";\r\nimport {DynamicFormArrayGroupModel} from \"../../utils/dynamic-form-array.model\";\r\nimport {DynamicFormService} from \"../../services/dynamic-form.service\";\r\nimport {DynamicBaseFormComponent} from \"./dynamic-base-form.component\";\r\n\r\n@Component({\r\n standalone: false,\r\n selector: \"dynamic-base-form-control\",\r\n template: \"\",\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [\r\n {provide: DynamicFormControlContainerComponent, useExisting: DynamicBaseFormControlContainerComponent}\r\n ]\r\n})\r\nexport class DynamicBaseFormControlContainerComponent extends DynamicFormControlContainerComponent {\r\n\r\n @ContentChildren(DynamicTemplateDirective) contentTemplateList: QueryList<DynamicTemplateDirective> = null;\r\n\r\n @HostBinding(\"class\") klass = null;\r\n\r\n @Input() context: DynamicFormArrayGroupModel | null = null;\r\n @Input() group: FormGroup = null;\r\n @Input() hostClass: string[] = null;\r\n @Input(\"templates\") inputTemplateList: QueryList<DynamicTemplateDirective> = null;\r\n @Input() layout: DynamicFormLayout = null;\r\n @Input() model: DynamicFormControlModel = null;\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\", {\r\n read: ViewContainerRef,\r\n static: true\r\n }) componentViewContainerRef: ViewContainerRef = null;\r\n\r\n get componentType(): Type<DynamicFormControl> | null {\r\n return this.form.getComponentType?.(this.model, this.injector)\r\n ?? this.componentService.getCustomComponentType(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 protected onDetectChanges: Subscription;\r\n\r\n constructor(readonly form: DynamicBaseFormComponent,\r\n readonly cdr: ChangeDetectorRef,\r\n readonly injector: Injector,\r\n cfr: ComponentFactoryResolver,\r\n layoutService: DynamicFormLayoutService,\r\n validationService: DynamicFormValidationService,\r\n componentService: DynamicFormComponentService,\r\n relationService: DynamicFormRelationService) {\r\n super(cdr, cfr, layoutService, validationService, componentService, relationService);\r\n }\r\n\r\n ngOnInit(): void {\r\n super.ngOnInit();\r\n this.onDetectChanges = this.form.onDetectChanges.subscribe(() => {\r\n this.changeDetectorRef.detectChanges();\r\n });\r\n }\r\n\r\n ngOnDestroy(): void {\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 getLabelIcon(): string {\r\n if (this.context instanceof DynamicFormArrayGroupModel) {\r\n const arrayModel = this.context.context;\r\n if (arrayModel && arrayModel.sortBy == this.model.id) {\r\n return arrayModel.sortOrder;\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n clickLabel(): void {\r\n if (this.context instanceof DynamicFormArrayGroupModel) {\r\n const arrayModel = this.context.context;\r\n if (arrayModel) {\r\n arrayModel.sortBy = this.model.id;\r\n }\r\n }\r\n }\r\n\r\n protected createFormControlComponent() {\r\n super.createFormControlComponent();\r\n const component = this.componentRef?.instance as DynamicFormInitControl;\r\n if (!component || !ObjectUtils.isFunction(component.initialize)) return;\r\n component.initialize(this.changeDetectorRef);\r\n }\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n EventEmitter,\r\n forwardRef,\r\n Injector,\r\n Input,\r\n OnDestroy,\r\n Output,\r\n QueryList,\r\n ViewChildren\r\n} from \"@angular/core\";\r\nimport {FormGroup} from \"@angular/forms\";\r\nimport {Subscription} from \"rxjs\";\r\nimport {\r\n DynamicFormArrayComponent,\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 DynamicFormValueControlModel,\r\n DynamicTemplateDirective\r\n} from \"@ng-dynamic-forms/core\";\r\nimport {DynamicFormArrayGroupModel, DynamicFormArrayModel} from \"../../utils/dynamic-form-array.model\";\r\nimport {collectPathAble} from \"../../utils/misc\";\r\nimport {DynamicFormInitControl} from \"../../common-types\";\r\nimport {DynamicBaseFormComponent} from \"./dynamic-base-form.component\";\r\nimport {DynamicBaseFormControlContainerComponent} from \"./dynamic-base-form-control-container.component\";\r\n\r\n@Component({\r\n standalone: false,\r\n selector: \"dynamic-base-form-array\",\r\n template: \"\",\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class DynamicBaseFormArrayComponent extends DynamicFormArrayComponent implements DynamicFormInitControl, OnDestroy {\r\n\r\n @Input() formLayout: DynamicFormLayout = null;\r\n @Input() group: FormGroup = null;\r\n @Input() layout: DynamicFormControlLayout = null;\r\n @Input() model: DynamicFormArrayModel = null;\r\n @Input() templates: QueryList<DynamicTemplateDirective> | undefined = null;\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(() => DynamicBaseFormControlContainerComponent))\r\n components: QueryList<DynamicBaseFormControlContainerComponent> = null;\r\n\r\n get useTabs(): boolean {\r\n return this.model?.useTabs;\r\n }\r\n\r\n protected subscription: Subscription;\r\n\r\n constructor(layoutService: DynamicFormLayoutService, validationService: DynamicFormValidationService,\r\n readonly form: DynamicBaseFormComponent, readonly injector: Injector, readonly cdr: ChangeDetectorRef) {\r\n super(layoutService, validationService);\r\n }\r\n\r\n initialize(cdr: ChangeDetectorRef): void {\r\n this.subscription = this.model.filteredGroups.subscribe(filteredGroups => {\r\n this.updateGroups(filteredGroups);\r\n });\r\n this.model.initialize(this.array);\r\n }\r\n\r\n ngOnDestroy(): void {\r\n if (this.subscription)\r\n this.subscription.unsubscribe();\r\n }\r\n\r\n saveTab(index: number): void {\r\n this.model.saveTab(index, this.model.getFiltered(index), this.model, this.injector);\r\n }\r\n\r\n restoreTab(): number {\r\n return this.model.restoreTab(this.model, this.injector);\r\n }\r\n\r\n getTabLabel(index: number, model: DynamicFormArrayGroupModel): string {\r\n return this.model.getTabLabel(index, model, this.model, this.array, this.injector);\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 context == \"element\" ? this.getAdditionalClass(model) : null,\r\n super.getClass(context, place, model),\r\n model instanceof DynamicFormValueControlModel ? model.additional?.classes : null\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 protected getAdditionalClass(model?: DynamicFormControlModel): string {\r\n if (model instanceof DynamicFormArrayModel) {\r\n return model.additional?.classes;\r\n }\r\n if (model instanceof DynamicFormValueControlModel) {\r\n return model.additional?.classes;\r\n }\r\n return null;\r\n }\r\n\r\n protected updateGroups(filteredGroups: ReadonlyArray<DynamicFormArrayGroupModel>): void {\r\n this.cdr.detectChanges();\r\n this.components.forEach(t => t.cdr.detectChanges());\r\n }\r\n}\r\n","import {\r\n AfterViewInit,\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n EventEmitter,\r\n Injector,\r\n Input,\r\n OnDestroy, Optional,\r\n Output\r\n} from \"@angular/core\";\r\nimport {FormGroup} from \"@angular/forms\";\r\nimport {Subscription} from \"rxjs\";\r\nimport {debounceTime} from \"rxjs/operators\";\r\nimport {\r\n DynamicFormControlComponent,\r\n DynamicFormControlLayout,\r\n DynamicFormControlModel,\r\n DynamicFormLayout,\r\n DynamicFormLayoutService,\r\n DynamicFormValidationService\r\n} from \"@ng-dynamic-forms/core\";\r\nimport {DynamicBaseFormComponent} from \"./dynamic-base-form.component\";\r\n\r\n@Component({\r\n standalone: false,\r\n selector: \"dynamic-base-form-control\",\r\n template: \"\",\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class DynamicBaseFormControlComponent<T extends DynamicFormControlModel> extends DynamicFormControlComponent implements AfterViewInit, OnDestroy {\r\n\r\n @Input() formLayout: DynamicFormLayout = null;\r\n @Input() group: FormGroup = null;\r\n @Input() layout: DynamicFormControlLayout = null;\r\n @Input() model: T = null;\r\n\r\n @Output() blur: EventEmitter<any> = new EventEmitter<any>();\r\n @Output() change: EventEmitter<any> = new EventEmitter<any>();\r\n @Output() focus: EventEmitter<any> = new EventEmitter<any>();\r\n\r\n protected subscription: Subscription;\r\n\r\n constructor(layoutService: DynamicFormLayoutService, validationService: DynamicFormValidationService,\r\n @Optional() readonly form: DynamicBaseFormComponent,\r\n readonly injector: Injector,\r\n readonly cdr: ChangeDetectorRef) {\r\n super(layoutService, validationService);\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n this.subscription = this.control.valueChanges.pipe(debounceTime(500)).subscribe(value => {\r\n this.onValueChanged(value);\r\n });\r\n }\r\n\r\n ngOnDestroy(): void {\r\n if (!this.subscription) return;\r\n this.subscription.unsubscribe();\r\n }\r\n\r\n submit(): void {\r\n this.form?.submit();\r\n }\r\n\r\n protected onValueChanged(value: any): void {\r\n\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 DynamicFormLayout,\r\n DynamicFormLayoutService,\r\n DynamicFormValidationService,\r\n DynamicFormValueControlModel,\r\n DynamicTemplateDirective\r\n} from \"@ng-dynamic-forms/core\";\r\nimport {collectPathAble} from \"../../utils/misc\";\r\nimport {DynamicFormArrayModel} from \"../../utils/dynamic-form-array.model\";\r\nimport {DynamicFormGroupModel} from \"../../utils/dynamic-form-group.model\";\r\n\r\n@Component({\r\n standalone: false,\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 = null;\r\n @Input() group: FormGroup = null;\r\n @Input() layout: DynamicFormControlLayout = null;\r\n @Input() model: DynamicFormGroupModel = null;\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> = null;\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 context == \"element\" ? this.getAdditionalClass(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 protected getAdditionalClass(model?: DynamicFormControlModel): string {\r\n if (model instanceof DynamicFormArrayModel) {\r\n return model.additional?.classes;\r\n }\r\n if (model instanceof DynamicFormValueControlModel) {\r\n return model.additional?.classes;\r\n }\r\n return null;\r\n }\r\n}\r\n","import {ChangeDetectionStrategy, Component, OnDestroy, OnInit} from \"@angular/core\";\nimport {BehaviorSubject, Subscription} from \"rxjs\";\nimport {DynamicBaseFormControlComponent} from \"./dynamic-base-form-control.component\";\nimport {DynamicFormOption, DynamicFormOptionGroup, DynamicSelectModel} from \"../../utils/dynamic-select.model\";\nimport {replaceSpecialChars} from \"../../utils/misc\";\n\n@Component({\n standalone: false,\n selector: \"dynamic-base-select\",\n template: \"\",\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class DynamicBaseSelectComponent extends DynamicBaseFormControlComponent<DynamicSelectModel<any>> implements OnInit, OnDestroy {\n\n groups$: BehaviorSubject<DynamicFormOptionGroup<any>[]>;\n hasOptions: boolean;\n\n ngOnInit(): void {\n this.groups$ = new BehaviorSubject<DynamicFormOptionGroup<any>[]>([]);\n this.subscription = this.model.options$.subscribe(options => {\n const groupBy = this.model.inline || !this.model.multiple ? this.model.groupBy : null;\n const grouped = options.reduce((res, option) => {\n const key = replaceSpecialChars(groupBy ? option.props[this.model.groupBy] || \"default\" : \"default\", \"-\");\n res[key] = res[key] || [];\n res[key].push(option);\n return res;\n }, {});\n const groups = Object.keys(grouped).map(group => {\n return {\n group,\n options: grouped[group]\n };\n });\n this.hasOptions = groups.length > 0;\n this.groups$.next(groups);\n this.cdr.detectChanges();\n });\n }\n\n ngOnDestroy(): void {\n if (this.subscription)\n this.subscription.unsubscribe();\n }\n\n isSelected(option: DynamicFormOption<any>): boolean {\n if (this.model.multiple) {\n return this.control.value?.indexOf(option.value) >= 0;\n }\n return this.control.value == option.value;\n }\n\n selectToggle(option: DynamicFormOption<any>, state: boolean): void {\n if (this.model.multiple) {\n const value = Array.from(this.control.value || []);\n const index = value.indexOf(option.value);\n if (index >= 0) {\n value.splice(index, 1);\n }\n if (state) {\n value.push(option.value);\n }\n this.control.setValue(value);\n this.onChange(value);\n return;\n }\n this.control.setValue(option.value);\n this.onChange(option.value);\n }\n}\n","import {DynamicFormControlMapFn} from \"@ng-dynamic-forms/core\";\r\n\r\nimport {AsyncSubmitDirective} from \"./directives/async-submit.directive\";\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 {DynamicBaseFormControlComponent} from \"./components/base/dynamic-base-form-control.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\nimport {DynamicBaseSelectComponent} from \"./components/base/dynamic-base-select.component\";\r\n\r\n// --- Components ---\r\nexport const components = [\r\n DynamicBaseFormComponent,\r\n DynamicBaseFormArrayComponent,\r\n DynamicBaseFormControlComponent,\r\n DynamicBaseFormControlContainerComponent,\r\n DynamicBaseFormGroupComponent,\r\n DynamicBaseSelectComponent\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\nexport function defaultFormControlProvider(): DynamicFormControlMapFn {\r\n return () => null;\r\n}\r\n","import {Injector, 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_FORM_CONTROL_MAP_FN,\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 {\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\nimport {DynamicFormService} from \"./services/dynamic-form.service\";\r\nimport {components, defaultFormControlProvider, directives, pipes} from \"./ngx-dynamic-form.imports\";\r\nimport {IDynamicFormModuleConfig} from \"./common-types\";\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 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(config?: IDynamicFormModuleConfig): 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 provide: DYNAMIC_FORM_CONTROL_MAP_FN,\r\n useFactory: (config?.controlProvider || defaultFormControlProvider),\r\n deps: [Injector]\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"],"names":["GroupBase","Base","BaseOption","i1.DynamicBaseFormComponent","i2","DynamicFormGroupModel","i2.DynamicBaseFormComponent","BaseDynamicFormService"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"stemy-ngx-dynamic-form.mjs","sources":["../../src/ngx-dynamic-form/utils/dynamic-editor.model.ts","../../src/ngx-dynamic-form/utils/dynamic-form-array.model.ts","../../src/ngx-dynamic-form/utils/dynamic-form-group.model.ts","../../src/ngx-dynamic-form/utils/dynamic-select.model.ts","../../src/ngx-dynamic-form/utils/creators.ts","../../src/ngx-dynamic-form/utils/customizer.ts","../../src/ngx-dynamic-form/utils/misc.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/validation-errors.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-control-container.component.ts","../../src/ngx-dynamic-form/components/base/dynamic-base-form-array.component.ts","../../src/ngx-dynamic-form/components/base/dynamic-base-form-control.component.ts","../../src/ngx-dynamic-form/components/base/dynamic-base-form-group.component.ts","../../src/ngx-dynamic-form/components/base/dynamic-base-select.component.ts","../../src/ngx-dynamic-form/ngx-dynamic-form.imports.ts","../../src/ngx-dynamic-form/ngx-dynamic-form.module.ts","../../src/stemy-ngx-dynamic-form.ts"],"sourcesContent":["import {\r\n DYNAMIC_FORM_CONTROL_TYPE_EDITOR,\r\n DynamicFormControlLayout,\r\n DynamicInputControlModel,\r\n DynamicInputControlModelConfig,\r\n serializable\r\n} from \"@ng-dynamic-forms/core\";\r\n\r\nexport interface DynamicEditorModelConfig extends DynamicInputControlModelConfig<string | Object> {\r\n inputType: string;\r\n convertObject?: boolean;\r\n}\r\n\r\nexport class DynamicEditorModel extends DynamicInputControlModel<string | Object> {\r\n\r\n @serializable() readonly type: string = DYNAMIC_FORM_CONTROL_TYPE_EDITOR;\r\n\r\n readonly inputType: string;\r\n readonly convertObject: boolean;\r\n\r\n constructor(config: DynamicEditorModelConfig, layout?: DynamicFormControlLayout) {\r\n super(config, layout);\r\n this.inputType = config.inputType || \"javascript\";\r\n this.convertObject = config.convertObject !== false;\r\n }\r\n}\r\n","import {ChangeDetectorRef, Injector} from \"@angular/core\";\r\nimport {FormArray} from \"@angular/forms\";\r\nimport {BehaviorSubject} from \"rxjs\";\r\nimport {\r\n DynamicFormArrayGroupModel as GroupBase,\r\n DynamicFormArrayModel as Base,\r\n DynamicFormArrayModelConfig as ConfigBase,\r\n DynamicFormControlLayout,\r\n DynamicFormModel\r\n} from \"@ng-dynamic-forms/core\";\r\nimport {ITimer, ObjectUtils, TimerUtils} from \"@stemy/ngx-utils\";\r\n\r\nexport type SaveTabFunc = (index: number, model: DynamicFormArrayGroupModel, arrayModel: DynamicFormArrayModel, injector: Injector) => void;\r\nexport type RestoreTabFunc = (arrayModel: DynamicFormArrayModel, injector: Injector) => number;\r\nexport type TabLabelFunc = (index: number, model: DynamicFormArrayGroupModel, arrayModel: DynamicFormArrayModel, array: FormArray, injector: Injector) => string;\r\n\r\nexport class DynamicFormArrayGroupModel extends GroupBase {\r\n\r\n get hidden(): boolean {\r\n return this.isHidden;\r\n }\r\n\r\n set hidden(value: boolean) {\r\n if (this.isHidden == value) return;\r\n this.isHidden = value || false;\r\n this.context?.filterGroups();\r\n }\r\n\r\n protected isHidden: boolean;\r\n\r\n constructor(readonly context: DynamicFormArrayModel, group: DynamicFormModel, index: number = -1) {\r\n super(context, group, index);\r\n this.isHidden = false;\r\n }\r\n}\r\n\r\nexport interface DynamicFormArrayModelConfig extends ConfigBase {\r\n\r\n groups?: DynamicFormArrayGroupModel[] | null;\r\n sortable?: boolean;\r\n useTabs?: boolean;\r\n saveTab?: SaveTabFunc;\r\n restoreTab?: RestoreTabFunc;\r\n getTabLabel?: TabLabelFunc;\r\n additional?: { [key: string]: any };\r\n\r\n addItem?: boolean;\r\n insertItem?: boolean;\r\n cloneItem?: boolean;\r\n moveItem?: boolean;\r\n removeItem?: boolean;\r\n clearItems?: boolean;\r\n}\r\n\r\nexport class DynamicFormArrayModel extends Base {\r\n\r\n readonly filteredGroups: BehaviorSubject<ReadonlyArray<DynamicFormArrayGroupModel>>;\r\n readonly sortable: boolean;\r\n readonly useTabs: boolean;\r\n readonly saveTab: SaveTabFunc;\r\n readonly restoreTab: RestoreTabFunc;\r\n readonly getTabLabel: TabLabelFunc;\r\n readonly additional: { [key: string]: any };\r\n\r\n groups: DynamicFormArrayGroupModel[] = [];\r\n tabIndex: number = 0;\r\n\r\n protected _sortBy: string;\r\n protected _sortDescending: boolean;\r\n protected _formArray: FormArray;\r\n protected _filteredGroups: ReadonlyArray<DynamicFormArrayGroupModel>;\r\n protected _filterTimer: ITimer;\r\n\r\n get addItem(): boolean {\r\n return this.config.addItem !== false;\r\n }\r\n\r\n get insertItem(): boolean {\r\n return !this._sortBy && this.config.insertItem !== false;\r\n }\r\n\r\n get cloneItem(): boolean {\r\n return this.config.cloneItem !== false;\r\n }\r\n\r\n get moveItem(): boolean {\r\n return !this._sortBy && this.config.moveItem !== false;\r\n }\r\n\r\n get removeItem(): boolean {\r\n return this.config.removeItem !== false;\r\n }\r\n\r\n get clearItems(): boolean {\r\n return this.config.clearItems !== false;\r\n }\r\n\r\n get sortBy(): string {\r\n return this._sortBy;\r\n }\r\n\r\n set sortBy(value: string) {\r\n if (!this.sortable) return;\r\n value = value || null;\r\n if (this._sortBy !== value) {\r\n this._sortBy = value;\r\n this._sortDescending = false;\r\n } else if (this._sortDescending) {\r\n this._sortBy = null;\r\n this._sortDescending = false;\r\n } else {\r\n this._sortDescending = true;\r\n }\r\n this.filterGroups();\r\n }\r\n\r\n get sortDescending(): boolean {\r\n return this._sortDescending;\r\n }\r\n\r\n get sortOrder(): string {\r\n return this.sortDescending ? \"desc\" : \"asc\";\r\n }\r\n\r\n constructor(protected config: DynamicFormArrayModelConfig, layout?: DynamicFormControlLayout) {\r\n super(config, layout);\r\n this.filteredGroups = new BehaviorSubject<ReadonlyArray<DynamicFormArrayGroupModel>>([]);\r\n this.sortable = config.sortable || false;\r\n this.useTabs = config.useTabs || false;\r\n this.saveTab = ObjectUtils.isFunction(config.saveTab) ? config.saveTab : ((index, model, arrayModel) => {\r\n arrayModel.tabIndex = index;\r\n });\r\n this.restoreTab = ObjectUtils.isFunction(config.restoreTab) ? config.restoreTab : ((model) => {\r\n return model.tabIndex;\r\n });\r\n this.getTabLabel = ObjectUtils.isFunction(config.getTabLabel) ? config.getTabLabel : ((index) => {\r\n return `${index + 1}`;\r\n });\r\n this.additional = config.additional || {};\r\n this.tabIndex = 0;\r\n this._sortBy = null;\r\n this._sortDescending = false;\r\n this._formArray = null;\r\n }\r\n\r\n initialize(array?: FormArray): void {\r\n this._formArray = array || this._formArray;\r\n this.filterGroups();\r\n }\r\n\r\n filterGroups(): void {\r\n this._filterTimer = this._filterTimer || TimerUtils.createTimeout();\r\n this._filterTimer.set(() => {\r\n const filtered = this.groups.filter(g => !g.hidden);\r\n if (this._sortBy && this._formArray) {\r\n const compare: (a: any, b: any) => number = this._sortDescending\r\n ? (a, b) => this.compareModels(b, a)\r\n : (a, b) => this.compareModels(a, b);\r\n filtered.sort(compare);\r\n }\r\n this._filteredGroups = filtered;\r\n this.filteredGroups.next(filtered);\r\n }, 100);\r\n }\r\n\r\n getFiltered(index: number): DynamicFormArrayGroupModel {\r\n return !this._filteredGroups ? null : this._filteredGroups[index];\r\n }\r\n\r\n insertGroup(index: number): DynamicFormArrayGroupModel {\r\n const group = new DynamicFormArrayGroupModel(this, this.groupFactory());\r\n this.groups.splice(index, 0, group);\r\n this.groups.forEach((g, index) => g.index = index);\r\n this.filterGroups();\r\n return group;\r\n }\r\n\r\n moveGroup(index: number, step: number): void {\r\n super.moveGroup(index, step);\r\n this.filterGroups();\r\n }\r\n\r\n removeGroup(index: number): void {\r\n super.removeGroup(index);\r\n this.filterGroups();\r\n }\r\n\r\n protected compareModels(a: DynamicFormArrayGroupModel, b: DynamicFormArrayGroupModel): number {\r\n const aGroup = this._formArray.at(a.index).get(this._sortBy)?.value || null;\r\n const bGroup = this._formArray.at(b.index).get(this._sortBy)?.value || null;\r\n return ObjectUtils.compare(aGroup, bGroup);\r\n }\r\n}\r\n","import {\r\n DynamicFormControlLayout,\r\n DynamicFormControlModel,\r\n DynamicFormGroupModel as Base,\r\n DynamicFormGroupModelConfig as BaseConfig,\r\n} from \"@ng-dynamic-forms/core\";\r\n\r\nexport interface DynamicFormFieldSet<T> {\r\n id: string;\r\n legend: string;\r\n fields: T[];\r\n}\r\n\r\nexport type DynamicFormFieldSets<T> = ReadonlyArray<DynamicFormFieldSet<T>>;\r\n\r\nexport interface DynamicFormGroupModelConfig extends BaseConfig {\r\n fieldSets?: DynamicFormFieldSets<string>;\r\n}\r\n\r\nexport class DynamicFormGroupModel extends Base {\r\n\r\n readonly groups: DynamicFormFieldSets<DynamicFormControlModel>;\r\n\r\n constructor(config: DynamicFormGroupModelConfig, layout?: DynamicFormControlLayout) {\r\n super(config, layout);\r\n const controls = [...config.group];\r\n const groups: DynamicFormFieldSet<DynamicFormControlModel>[] = [];\r\n const sets = config.fieldSets || [];\r\n for (const fs of sets) {\r\n const fields: DynamicFormControlModel[] = [];\r\n for (const f of fs.fields) {\r\n const ix = controls.findIndex(c => c.id === f);\r\n if (ix < 0) continue;\r\n fields.push(controls.splice(ix, 1)[0]);\r\n }\r\n if (fields.length === 0) continue;\r\n groups.push({id: fs.id, legend: fs.legend, fields});\r\n }\r\n if (controls.length > 0) {\r\n groups.unshift({id: \"root-controls\", legend: config.legend, fields: controls});\r\n }\r\n this.groups = groups;\r\n }\r\n}\r\n","import {Injector} from \"@angular/core\";\r\nimport {FormControl} from \"@angular/forms\";\r\nimport {isObservable, Observable, of} from \"rxjs\";\r\nimport {map} from \"rxjs/operators\";\r\nimport {ObjectUtils} from \"@stemy/ngx-utils\";\r\nimport {\r\n DynamicFormControlLayout,\r\n DynamicFormOption as BaseOption,\r\n DynamicFormOptionConfig as BaseOptionConfig,\r\n DynamicSelectModel as Base,\r\n DynamicSelectModelConfig as BaseConfig,\r\n} from \"@ng-dynamic-forms/core\";\r\n\r\nconst ignoredKeys = [\"disabled\", \"label\", \"value\", \"classes\"];\r\n\r\nexport interface DynamicFormOptionConfig<T> extends BaseOptionConfig<T> {\r\n classes?: string;\r\n\r\n [key: string]: any;\r\n}\r\n\r\nexport class DynamicFormOption<T> extends BaseOption<T> {\r\n\r\n readonly classes: string;\r\n readonly props: any;\r\n\r\n constructor(config: DynamicFormOptionConfig<T>) {\r\n super(config);\r\n this.classes = config.classes || \"\";\r\n this.props = Object.keys(config).reduce((res, k) => {\r\n if (ignoredKeys.indexOf(k) >= 0) return res;\r\n res[k] = config[k];\r\n return res;\r\n }, {});\r\n }\r\n}\r\n\r\nexport interface DynamicFormOptionGroup<T> {\r\n group: string;\r\n options: ReadonlyArray<DynamicFormOption<T>>;\r\n}\r\n\r\nexport type OptionClassesFunc<T> = (option: DynamicFormOptionConfig<T>, model: DynamicSelectModel<T>, control: FormControl, injector: Injector) => string;\r\n\r\nexport interface DynamicSelectModelConfig<T> extends BaseConfig<T> {\r\n groupBy?: string;\r\n inline?: boolean;\r\n options?: DynamicFormOptionConfig<T>[] | Observable<DynamicFormOptionConfig<T>[]>;\r\n getClasses?: OptionClassesFunc<T>;\r\n allowEmpty?: boolean;\r\n}\r\n\r\nexport class DynamicSelectModel<T> extends Base<T> {\r\n\r\n readonly groupBy: string;\r\n readonly inline: boolean;\r\n readonly getClasses: OptionClassesFunc<T>;\r\n readonly allowEmpty: boolean;\r\n\r\n options$: Observable<DynamicFormOption<T>[]> = null;\r\n\r\n protected mOptions: DynamicFormOption<T>[] = [];\r\n\r\n constructor(config: DynamicSelectModelConfig<T>, layout?: DynamicFormControlLayout) {\r\n super(config, layout);\r\n this.groupBy = config.groupBy || null;\r\n this.inline = config.inline || false;\r\n this.getClasses = ObjectUtils.isFunction(config.getClasses) ? config.getClasses : (() => \"\");\r\n this.allowEmpty = config.allowEmpty || false;\r\n this.options = config.options;\r\n }\r\n\r\n set options(options: any) {\r\n if (Array.isArray(options)) {\r\n this.mOptions = (options as DynamicFormOptionConfig<T>[]).map(optionConfig => new DynamicFormOption<T>(optionConfig));\r\n this.updateOptions();\r\n } else if (isObservable(options)) {\r\n this.options$ = (options as Observable<DynamicFormOptionConfig<T>[]>).pipe(\r\n map(optionsConfig => {\r\n this.mOptions = optionsConfig.map(optionConfig => new DynamicFormOption<T>(optionConfig));\r\n return this.mOptions;\r\n }));\r\n } else {\r\n this.updateOptions();\r\n }\r\n }\r\n\r\n get options(): ReadonlyArray<DynamicFormOption<T>> {\r\n return this.mOptions;\r\n }\r\n\r\n insert(index: number, optionConfig: DynamicFormOptionConfig<T>): DynamicFormOption<T> {\r\n const option = new DynamicFormOption(optionConfig);\r\n this.mOptions.splice(index, 0, option);\r\n this.updateOptions();\r\n return option;\r\n }\r\n\r\n remove(...indices: number[]): void {\r\n indices.forEach(index => this.mOptions.splice(index, 1));\r\n this.updateOptions();\r\n }\r\n\r\n protected updateOptions(): void {\r\n this.options$ = of(this.mOptions);\r\n }\r\n}\r\n","import {\r\n DynamicCheckboxModel,\r\n DynamicCheckboxModelConfig,\r\n DynamicDatePickerModel,\r\n DynamicFileUploadModel,\r\n DynamicFileUploadModelConfig,\r\n DynamicFormControlLayout,\r\n DynamicFormValueControlModelConfig,\r\n DynamicInputModel,\r\n DynamicInputModelConfig,\r\n DynamicTextAreaModel,\r\n DynamicTextAreaModelConfig\r\n} from \"@ng-dynamic-forms/core\";\r\nimport {ObjectUtils} from \"@stemy/ngx-utils\";\r\nimport {DynamicEditorModel, DynamicEditorModelConfig} from \"./dynamic-editor.model\";\r\nimport {DynamicFormArrayModel, DynamicFormArrayModelConfig} from \"./dynamic-form-array.model\";\r\nimport {DynamicFormGroupModel, DynamicFormGroupModelConfig} from \"./dynamic-form-group.model\";\r\nimport {DynamicSelectModel, DynamicSelectModelConfig} from \"./dynamic-select.model\";\r\n\r\nexport type ValueModelConfig = DynamicFormValueControlModelConfig<any>;\r\n\r\nexport type OmitId<T extends ValueModelConfig> = Omit<T, \"id\">;\r\n\r\nexport type AddId<T extends OmitId<ValueModelConfig>> = T extends OmitId<(infer U)> ? U : never;\r\n\r\nexport function createFormConfig<T extends ValueModelConfig, U extends OmitId<T>>(id: string, config?: U): AddId<U> {\r\n const res = (config || {id}) as AddId<U>;\r\n res.id = id;\r\n res.label = ObjectUtils.isNullOrUndefined(config.label) ? id : config.label;\r\n res.disabled = config.disabled || false;\r\n res.hidden = config.hidden || false;\r\n res.additional = Object.assign({\r\n // For material components\r\n appearance: \"fill\",\r\n }, res.additional || {});\r\n return res;\r\n}\r\n\r\nexport function createFormCheckbox(id: string, config: OmitId<DynamicCheckboxModelConfig>, layout?: DynamicFormControlLayout): DynamicCheckboxModel {\r\n const res = createFormConfig(id, config);\r\n res.indeterminate = config.indeterminate || false;\r\n return new DynamicCheckboxModel(res, layout);\r\n}\r\n\r\nexport function createFormDate(id: string, config: OmitId<DynamicDatePickerModel>, layout?: DynamicFormControlLayout): DynamicDatePickerModel {\r\n const res = createFormConfig(id, config);\r\n res.autoFocus = config.autoFocus || false;\r\n res.focusedDate = config.focusedDate || new Date();\r\n res.inline = config.inline || false;\r\n return new DynamicDatePickerModel(res, layout);\r\n}\r\n\r\nexport function createFormEditor(id: string, config: OmitId<DynamicEditorModelConfig>, layout?: DynamicFormControlLayout): DynamicEditorModel {\r\n const res = createFormConfig(id, config);\r\n return new DynamicEditorModel(res, layout);\r\n}\r\n\r\nexport function createFormArray(id: string, config: OmitId<DynamicFormArrayModelConfig>, layout?: DynamicFormControlLayout): DynamicFormArrayModel {\r\n const res = createFormConfig(id, config);\r\n return new DynamicFormArrayModel(res, layout);\r\n}\r\n\r\nexport function createFormGroup(id: string, config: OmitId<DynamicFormGroupModelConfig>, layout?: DynamicFormControlLayout): DynamicFormGroupModel {\r\n const res = createFormConfig(id, config);\r\n res.name = config.name || \"\";\r\n return new DynamicFormGroupModel(res, layout);\r\n}\r\n\r\nexport function createFormInput(id: string, config: OmitId<DynamicInputModelConfig>, type: string = \"text\", layout?: DynamicFormControlLayout): DynamicInputModel {\r\n const res = createFormConfig(id, config);\r\n res.inputType = config.inputType || type;\r\n res.placeholder = config.placeholder || (config.inputType == \"mask\" ? \"_\" : \"\");\r\n res.step = config.step || 1;\r\n res.mask = config.mask || null;\r\n return new DynamicInputModel(res, layout);\r\n}\r\n\r\nexport function createFormSelect<T = any>(id: string, config: OmitId<DynamicSelectModelConfig<T>>, layout?: DynamicFormControlLayout): DynamicSelectModel<T> {\r\n const res = createFormConfig(id, config);\r\n res.options = config.options || [];\r\n return new DynamicSelectModel(res, layout);\r\n}\r\n\r\nexport function createFormTextarea(id: string, config: OmitId<DynamicTextAreaModelConfig>, layout?: DynamicFormControlLayout): DynamicTextAreaModel {\r\n const res = createFormConfig(id, config);\r\n res.cols = config.cols || 10;\r\n res.rows = config.rows || 3;\r\n res.wrap = config.wrap || \"soft\";\r\n return new DynamicTextAreaModel(res, layout);\r\n}\r\n\r\nexport function createFormFile(id: string, config: OmitId<DynamicFileUploadModelConfig>, layout?: DynamicFormControlLayout): DynamicFileUploadModel {\r\n const res = createFormConfig(id, config);\r\n res.accept = config.accept || [\"jpg\", \"jpeg\", \"png\"];\r\n res.multiple = config.multiple || false;\r\n res.url = ObjectUtils.isString(config.url) ? config.url : \"assets\";\r\n return new DynamicFileUploadModel(res, layout);\r\n}\r\n","import {Type} from \"@angular/core\";\r\nimport {\r\n DynamicFormControlComponent,\r\n DynamicFormControlModel,\r\n DynamicFormControlModelConfig\r\n} from \"@ng-dynamic-forms/core\";\r\nimport {CachedProvider, cachedFactory, IOpenApiSchema, IOpenApiSchemaProperty} from \"@stemy/ngx-utils\";\r\n\r\nimport {FormModelCustomizer, GetFormControlComponentType, PromiseOrNot} from \"../common-types\";\r\n\r\nexport interface IFormComponentCustomizer {\r\n acceptModel(model: DynamicFormControlModel): boolean;\r\n getFormComponent(model: DynamicFormControlModel): Type<DynamicFormControlComponent>;\r\n}\r\n\r\nexport function getFormComponent(...providers: CachedProvider<IFormComponentCustomizer>[]): GetFormControlComponentType {\r\n const factory = cachedFactory(providers);\r\n return (model, injector) => {\r\n const customizers = factory(injector);\r\n for (const customizer of customizers) {\r\n const component = customizer.acceptModel(model) ? customizer.getFormComponent(model) : null;\r\n if (component) {\r\n return component;\r\n }\r\n }\r\n return null;\r\n }\r\n}\r\n\r\nexport interface IFormModelCustomizer {\r\n acceptModel(model: DynamicFormControlModel): boolean;\r\n customizeModel(\r\n model: DynamicFormControlModel,\r\n config: DynamicFormControlModelConfig,\r\n property: IOpenApiSchemaProperty,\r\n schema: IOpenApiSchema\r\n ): PromiseOrNot<DynamicFormControlModel | DynamicFormControlModel[]>;\r\n}\r\n\r\nexport function customizeFormModel(...providers: CachedProvider<IFormModelCustomizer>[]): FormModelCustomizer {\r\n const factory = cachedFactory(providers);\r\n return async (property, schema, model, config, injector) => {\r\n const customizers = factory(injector);\r\n for (const customizer of customizers) {\r\n const accept = customizer.acceptModel(model);\r\n if (accept) {\r\n return customizer.customizeModel(model, config, property, schema);\r\n }\r\n }\r\n return model;\r\n }\r\n}\r\n","import {DynamicFormModel, DynamicPathable} from \"@ng-dynamic-forms/core\";\r\nimport {IOpenApiSchemaProperty} from \"@stemy/ngx-utils\";\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 findRefs(property: IOpenApiSchemaProperty): string[] {\r\n const refs = Array.isArray(property.allOf)\r\n ? property.allOf.map(o => o.$ref).filter(isStringWithVal)\r\n : [property.items?.$ref, property.$ref].filter(isStringWithVal);\r\n return refs.map(t => t.split(\"/\").pop());\r\n}\r\n\r\nexport function replaceSpecialChars(str: string, to: string = \"-\"): string {\r\n return `${str}`.replace(/[&\\/\\\\#, +()$~%.@'\":*?<>{}]/g, to);\r\n}\r\n\r\nexport function mergeFormModels(formModels: DynamicFormModel[]): DynamicFormModel {\r\n const res: DynamicFormModel = [];\r\n for (const formModel of formModels) {\r\n for (const subModel of formModel) {\r\n const index = res.findIndex(t => t.id == subModel.id);\r\n if (index >= 0) {\r\n res[index] = subModel;\r\n continue;\r\n }\r\n res.push(subModel);\r\n }\r\n }\r\n return res;\r\n}\r\n\r\nexport function collectPathAble<T extends DynamicPathable>(start: T, getter: (cur: T & DynamicPathable) => 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\r\nexport function getDynamicPath(start: DynamicPathable): string {\r\n return collectPathAble(start, t => t.id).join(\".\");\r\n}\r\n\r\nexport const MIN_INPUT_NUM = -999999999;\r\n\r\nexport const MAX_INPUT_NUM = 999999999;\r\n\r\nexport const EDITOR_FORMATS = [\"php\", \"json\", \"html\", \"css\", \"scss\"];\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 {FormControl} from \"@angular/forms\";\r\nimport {DynamicFormControlModel, DynamicFormModel, DynamicPathable} from \"@ng-dynamic-forms/core\";\r\n\r\nconst indexLabels = [\"$ix\", \"$pix\"];\r\n\r\nexport type NotifyCallback<M extends DynamicFormControlModel> = (controlModel: M, control: FormControl, root: DynamicFormModel, indexes: any) => any | Promise<any>;\r\n\r\nexport class FormSubject<M extends DynamicFormControlModel, T> extends Subject<T> {\r\n\r\n private readonly notifyCallback: NotifyCallback<M>;\r\n\r\n constructor(notifyCallback: NotifyCallback<M>) {\r\n super();\r\n this.notifyCallback = notifyCallback;\r\n }\r\n\r\n protected handleNotifiedValue(controlModel: M, control: FormControl, val: Promise<T>) {\r\n val.then(v => this.next(v));\r\n }\r\n\r\n notify(controlModel: M, control: FormControl, root: DynamicFormModel): void {\r\n const indexes = {};\r\n let path = controlModel as DynamicPathable;\r\n let ix = 0;\r\n while (path) {\r\n if (!isNaN(path.index)) {\r\n const key = indexLabels[ix++] || `$pix${ix}`;\r\n indexes[key] = path.index;\r\n }\r\n path = path.parent;\r\n }\r\n let value = this.notifyCallback(controlModel, control, root, indexes);\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 \"./dynamic-select.model\";\r\nimport {FormSubject} from \"./form-subject\";\r\n\r\nexport class FormSelectSubject<T extends DynamicFormOptionConfig<any>[]> extends FormSubject<DynamicSelectModel<any>, T> {\r\n\r\n protected handleNotifiedValue(controlModel: DynamicSelectModel<any>, control: AbstractControl, val: Promise<T>) {\r\n val.then(options => {\r\n if (options.length == 0) {\r\n this.next(options);\r\n return;\r\n }\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 } else {\r\n const option = options.find(t => t.value == currentVal);\r\n if (!option) {\r\n control.setValue(\r\n controlModel.allowEmpty ? null : options[0]?.value ?? null,\r\n {onlySelf: true, emitEvent: false}\r\n );\r\n }\r\n }\r\n this.next(options);\r\n });\r\n }\r\n}\r\n","import {AbstractControl, FormArray, FormGroup} from \"@angular/forms\";\r\n\r\nexport interface AllValidationErrors {\r\n control: AbstractControl;\r\n path: string;\r\n errorKey: string;\r\n errorValue: any;\r\n}\r\n\r\nexport interface FormGroupControls {\r\n [key: string]: AbstractControl;\r\n}\r\n\r\nexport function getFormValidationErrors(controls: FormGroupControls, parentPath: string = \"\"): AllValidationErrors[] {\r\n const errors: AllValidationErrors[] = [];\r\n Object.entries(controls).forEach(([name, control], ix) => {\r\n const path = !parentPath ? name : `${parentPath}.${name}`;\r\n if (control instanceof FormGroup) {\r\n getFormValidationErrors(control.controls, path).forEach(error => errors.push(error));\r\n return;\r\n }\r\n if (control instanceof FormArray) {\r\n control.controls.forEach((control: FormGroup, ix) => {\r\n getFormValidationErrors(control.controls, `${path}.${ix}`).forEach(error => errors.push(error));\r\n });\r\n return;\r\n }\r\n Object.entries(control.errors || {}).forEach(([errorKey, errorValue]) => {\r\n errors.push({control, path, errorKey, errorValue});\r\n });\r\n });\r\n return errors;\r\n}\r\n","import {Inject, Injectable, Injector} from \"@angular/core\";\r\nimport {AbstractControl, AbstractControlOptions, FormArray, FormControl, FormGroup} from \"@angular/forms\";\r\nimport {firstValueFrom, Subject} from \"rxjs\";\r\nimport {debounceTime, first} from \"rxjs/operators\";\r\nimport {\r\n DynamicCheckboxModel,\r\n DynamicCheckboxModelConfig,\r\n DynamicDatePickerModel,\r\n DynamicDatePickerModelConfig,\r\n DynamicFileUploadModel,\r\n DynamicFileUploadModelConfig,\r\n DynamicFormComponentService,\r\n DynamicFormControlModel,\r\n DynamicFormControlModelConfig,\r\n DynamicFormModel,\r\n DynamicFormService as Base,\r\n DynamicFormValidationService,\r\n DynamicFormValueControlModel,\r\n DynamicFormValueControlModelConfig,\r\n DynamicInputModel,\r\n DynamicInputModelConfig,\r\n DynamicPathable,\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 {\r\n FormControlSerializer,\r\n FormModelCustomizer,\r\n FormModelCustomizerWrap,\r\n IDynamicForm,\r\n ModelType\r\n} from \"../common-types\";\r\n\r\nimport {EDITOR_FORMATS, findRefs, isStringWithVal, MAX_INPUT_NUM, mergeFormModels, MIN_INPUT_NUM} from \"../utils/misc\";\r\nimport {FormSelectSubject} from \"../utils/form-select-subject\";\r\nimport {FormSubject} from \"../utils/form-subject\";\r\nimport {DynamicEditorModel, DynamicEditorModelConfig} from \"../utils/dynamic-editor.model\";\r\nimport {\r\n DynamicFormArrayGroupModel,\r\n DynamicFormArrayModel,\r\n DynamicFormArrayModelConfig\r\n} from \"../utils/dynamic-form-array.model\";\r\nimport {\r\n DynamicFormFieldSet,\r\n DynamicFormGroupModel,\r\n DynamicFormGroupModelConfig\r\n} from \"../utils/dynamic-form-group.model\";\r\nimport {DynamicFormOptionConfig, DynamicSelectModel, DynamicSelectModelConfig} from \"../utils/dynamic-select.model\";\r\nimport {DynamicBaseFormComponent} from \"../components/base/dynamic-base-form.component\";\r\nimport {createFormInput} from \"../utils/creators\";\r\nimport {AllValidationErrors, getFormValidationErrors} from \"../utils/validation-errors\";\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 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 }\r\n\r\n createFormGroup(formModel: DynamicFormModel, options?: AbstractControlOptions | null, parent?: DynamicPathable | null) {\r\n const group = super.createFormGroup(formModel, options, parent);\r\n if (!parent) {\r\n group.valueChanges.pipe(debounceTime(500)).subscribe(() => {\r\n this.notifyChanges(formModel, group);\r\n });\r\n }\r\n return group;\r\n }\r\n\r\n patchGroup(value: any, formModel: DynamicFormModel, formGroup: FormGroup): void {\r\n value = ObjectUtils.copy(value);\r\n this.patchValueRecursive(value, formModel, formGroup);\r\n formGroup.patchValue(value);\r\n this.detectChanges();\r\n }\r\n\r\n patchForm(value: any, component: DynamicBaseFormComponent): void {\r\n value = ObjectUtils.copy(value);\r\n this.patchValueRecursive(value, component.model, component.group);\r\n component.group.patchValue(value);\r\n this.detectChanges(component);\r\n }\r\n\r\n validateForm(form: IDynamicForm, showErrors: boolean = true): Promise<any> {\r\n if (!form.group) return Promise.resolve();\r\n return new Promise<any>((resolve, reject) => {\r\n form.group.statusChanges.pipe(first(status => status == \"VALID\" || status == \"INVALID\")).subscribe(status => {\r\n if (showErrors) {\r\n this.showErrors(form);\r\n }\r\n if (status == \"VALID\") {\r\n resolve(null);\r\n return;\r\n }\r\n console.log(`Form errors:`, getFormValidationErrors(form.group.controls));\r\n reject(null);\r\n });\r\n form.group.updateValueAndValidity();\r\n });\r\n }\r\n\r\n async serializeForm(form: IDynamicForm, validate?: boolean): Promise<any> {\r\n if (!form.group) return null;\r\n if (validate) {\r\n await this.validateForm(form);\r\n }\r\n return this.serialize(form.model, form.group);\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, formModel);\r\n }\r\n\r\n showErrors(form: IDynamicForm): void {\r\n this.showErrorsForGroup(form.group);\r\n this.detectChanges(form);\r\n }\r\n\r\n getErrors(form: DynamicBaseFormComponent): Promise<AllValidationErrors[]> {\r\n this.showErrors(form);\r\n return new Promise(resolve => {\r\n setTimeout(() => {\r\n resolve(getFormValidationErrors(form.group.controls, \"\"));\r\n }, 500);\r\n });\r\n }\r\n\r\n protected patchValueRecursive(value: any, formModel: DynamicFormModel, formGroup: FormGroup): void {\r\n if (!value) return;\r\n formModel?.forEach(subModel => {\r\n const key = subModel.id;\r\n const subValue = value[key];\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 DynamicDatePickerModel) {\r\n value[key] = this.convertToDate(subValue);\r\n return;\r\n }\r\n if (subModel instanceof DynamicFormArrayModel) {\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 as DynamicFormArrayModel);\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.hidden && !subModel.additional?.serialize) continue;\r\n if (subModel instanceof DynamicFormArrayModel) {\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 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 if (subModel instanceof DynamicFormGroupModel) {\r\n result[subModel.id] = await this.serializeRecursive(subModel.group, subControl as FormGroup);\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, root: DynamicFormModel): 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 DynamicFormArrayModel) {\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, root);\r\n }\r\n continue;\r\n }\r\n if (subModel instanceof DynamicFormGroupModel) {\r\n this.notifyChangesRecursive(subModel.group, subControl as FormGroup, root);\r\n continue;\r\n }\r\n this.updateSelectOptions(subModel, subControl as FormControl, root);\r\n }\r\n }\r\n\r\n protected updateSelectOptions(formControlModel: DynamicFormControlModel, formControl: FormControl, root: DynamicFormModel): 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, root);\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, root);\r\n }\r\n }\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 protected convertToDate(value: any): Date {\r\n if (ObjectUtils.isNullOrUndefined(value)) return null;\r\n const date = ObjectUtils.isDate(value)\r\n ? value\r\n : new Date(value);\r\n return isNaN(date as any) ? new Date() : date;\r\n }\r\n\r\n async getFormModelForSchema(name: string, customizeModel?: FormModelCustomizer): Promise<DynamicFormModel> {\r\n return (await this.getFormGroupModelForSchema(name, customizeModel)).group;\r\n }\r\n\r\n async getFormGroupModelForSchema(name: string, customizeModel?: FormModelCustomizer): Promise<DynamicFormGroupModel> {\r\n this.api.cache = {};\r\n this.schemas = await this.openApi.getSchemas();\r\n const fieldSets: DynamicFormFieldSet<string>[] = [];\r\n const customizeModels: FormModelCustomizerWrap = async (\r\n property: IOpenApiSchemaProperty, schema: IOpenApiSchema,\r\n modelType: ModelType, config: DynamicFormControlModelConfig) => {\r\n const model = new modelType(config);\r\n if (model instanceof DynamicFormValueControlModel) {\r\n model.value = (model instanceof DynamicDatePickerModel)\r\n ? this.convertToDate(property.default) : property.default;\r\n }\r\n if (!ObjectUtils.isFunction(customizeModel)) return [model];\r\n let res = customizeModel(property, schema, model, config, this.injector);\r\n if (!res) return [model];\r\n if (res instanceof Promise) {\r\n res = await res;\r\n }\r\n return Array.isArray(res) ? res : [res];\r\n };\r\n const schema = this.schemas[name];\r\n const controls = await this.getFormModelForSchemaDef(schema, fieldSets, customizeModels);\r\n const idFields = [\r\n createFormInput(\"id\", {hidden: true}),\r\n createFormInput(\"_id\", {hidden: true})\r\n ].filter(t => !controls.some(c => c.id == t.id));\r\n const config = {\r\n id: \"root\",\r\n group: [\r\n // -- Hidden id fields --\r\n ...idFields,\r\n // -- Main form controls --\r\n ...controls\r\n ],\r\n fieldSets\r\n } as DynamicFormGroupModelConfig;\r\n const root = await customizeModels({\r\n id: \"root\",\r\n type: \"object\",\r\n properties: schema.properties\r\n }, schema, DynamicFormGroupModel, config);\r\n // Check if the customized root wrapper returned an array\r\n controls.length = 0;\r\n for (const model of root) {\r\n if (model instanceof DynamicFormGroupModel && model.id === \"root\") {\r\n return model;\r\n } else {\r\n controls.push(model);\r\n }\r\n }\r\n return new DynamicFormGroupModel({\r\n ...config,\r\n group: controls\r\n });\r\n }\r\n\r\n protected async getFormModelForSchemaDef(schema: IOpenApiSchema, fieldSets: DynamicFormFieldSet<string>[], customizeModels: FormModelCustomizerWrap): Promise<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 const fsName = property.hidden ? null : String(property.fieldSet || \"\");\r\n if (fsName) {\r\n const fs = fieldSets.find(t => t.id === fsName);\r\n if (fs) {\r\n fs.fields.push(p);\r\n } else {\r\n fieldSets.push({id: fsName, legend: `legend.${fsName}`, fields: [p]});\r\n }\r\n }\r\n const models = await this.getFormControlModels(property, schema, customizeModels);\r\n controls.push(...models);\r\n }\r\n return controls.filter(t => null !== t);\r\n }\r\n\r\n protected checkIsEditorProperty(property: IOpenApiSchemaProperty): boolean {\r\n if (!property.format) return false;\r\n return EDITOR_FORMATS.indexOf(property.format) >= 0 || property.format.endsWith(\"script\");\r\n }\r\n\r\n protected async getFormControlModels(property: IOpenApiSchemaProperty, schema: IOpenApiSchema, customizeModels: FormModelCustomizerWrap): Promise<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 case \"textarea\":\r\n if (this.checkIsEditorProperty(property)) {\r\n return customizeModels(property, schema, DynamicEditorModel, this.getFormEditorConfig(property, schema));\r\n }\r\n if (property.format == \"textarea\") {\r\n return customizeModels(property, schema, DynamicTextAreaModel, this.getFormTextareaConfig(property, schema));\r\n }\r\n if (property.format == \"date\") {\r\n return customizeModels(property, schema, DynamicDatePickerModel, this.getFormDatepickerConfig(property, schema));\r\n }\r\n return customizeModels(property, schema, DynamicInputModel, this.getFormInputConfig(property, schema));\r\n case \"object\":\r\n return customizeModels(property, schema, DynamicEditorModel, this.getFormEditorConfig(property, schema));\r\n case \"boolean\":\r\n return customizeModels(property, schema, DynamicCheckboxModel, this.getFormCheckboxConfig(property, schema));\r\n case \"array\":\r\n if (findRefs(property).length > 0) {\r\n return customizeModels(property, schema, DynamicFormArrayModel, await 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 (findRefs(property).length > 0) {\r\n return customizeModels(property, schema, DynamicFormGroupModel, await this.getFormGroupConfig(property, schema, customizeModels));\r\n }\r\n return [];\r\n }\r\n\r\n findModelByPath(parent: DynamicPathable | DynamicFormModel, path: string[]): DynamicPathable {\r\n if (path.length == 0) return parent as DynamicPathable;\r\n const next = path.shift() as any;\r\n if (Array.isArray(parent)) {\r\n return this.findModelByPath(parent.find(t => t.id == next), path);\r\n }\r\n if (parent instanceof DynamicFormGroupModel || parent instanceof DynamicFormArrayGroupModel) {\r\n return this.findModelByPath(parent.group.find(t => t.id == next), path);\r\n }\r\n if (parent instanceof DynamicFormArrayModel) {\r\n return this.findModelByPath(parent.groups.find(t => t.index == next), path);\r\n }\r\n return parent;\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({\r\n // For material components\r\n appearance: \"fill\"\r\n }, property)\r\n };\r\n }\r\n\r\n async getFormArrayConfig(property: IOpenApiSchemaProperty, schema: IOpenApiSchema, customizeModels: FormModelCustomizerWrap): Promise<DynamicFormArrayModelConfig> {\r\n const fieldSets: DynamicFormFieldSet<string>[] = [];\r\n const subSchemas = findRefs(property).map(ref => this.schemas[ref]);\r\n const subModels = await Promise.all(\r\n subSchemas.map(s => this.getFormModelForSchemaDef(s, fieldSets, customizeModels))\r\n );\r\n return Object.assign(\r\n this.getFormControlConfig(property, schema),\r\n {\r\n groupFactory: () => mergeFormModels(ObjectUtils.copy(subModels)),\r\n initialCount: property.initialCount || 0,\r\n sortable: property.sortable || false,\r\n useTabs: property.useTabs || false,\r\n addItem: property.addItem !== false,\r\n insertItem: property.insertItem !== false,\r\n cloneItem: property.cloneItem !== false,\r\n moveItem: property.moveItem !== false,\r\n removeItem: property.removeItem !== false,\r\n clearItems: property.clearItems !== false\r\n }\r\n );\r\n }\r\n\r\n async getFormGroupConfig(property: IOpenApiSchemaProperty, schema: IOpenApiSchema, customizeModels: FormModelCustomizerWrap): Promise<DynamicFormGroupModelConfig> {\r\n const fieldSets: DynamicFormFieldSet<string>[] = [];\r\n const subSchemas = findRefs(property).map(ref => this.schemas[ref]);\r\n const subModels = await Promise.all(\r\n subSchemas.map(s => this.getFormModelForSchemaDef(s, fieldSets, customizeModels))\r\n );\r\n return Object.assign(\r\n this.getFormControlConfig(property, schema),\r\n {\r\n fieldSets,\r\n group: mergeFormModels(subModels)\r\n }\r\n );\r\n }\r\n\r\n getFormInputConfig(property: IOpenApiSchemaProperty, schema: IOpenApiSchema): DynamicInputModelConfig {\r\n let inputType = StringUtils.has(property.id, \"password\", \"Password\") ? \"password\" : (property.format || property.items?.type || property.type);\r\n switch (inputType) {\r\n case \"string\":\r\n inputType = \"text\";\r\n break;\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) ? MIN_INPUT_NUM : sub.minimum,\r\n max: isNaN(sub.maximum) ? MAX_INPUT_NUM : sub.maximum,\r\n minLength: isNaN(sub.minLength) ? 0 : sub.minLength,\r\n maxLength: isNaN(sub.maxLength) ? MAX_INPUT_NUM : sub.maxLength,\r\n placeholder: property.placeholder || \"\"\r\n }\r\n );\r\n }\r\n\r\n getFormEditorConfig(property: IOpenApiSchemaProperty, schema: IOpenApiSchema): DynamicEditorModelConfig {\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: property.format || \"json\",\r\n convertObject: property.type !== \"string\",\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 minLength: isNaN(sub.minLength) ? 0 : sub.minLength,\r\n maxLength: isNaN(sub.maxLength) ? MAX_INPUT_NUM : sub.maxLength,\r\n placeholder: property.placeholder || \"\"\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 minLength: isNaN(property.minLength) ? 0 : property.minLength,\r\n maxLength: isNaN(property.maxLength) ? MAX_INPUT_NUM : property.maxLength,\r\n placeholder: property.placeholder || \"\"\r\n }\r\n );\r\n }\r\n\r\n getFormDatepickerConfig(property: IOpenApiSchemaProperty, schema: IOpenApiSchema): DynamicDatePickerModelConfig {\r\n return Object.assign(\r\n this.getFormControlConfig(property, schema),\r\n {\r\n format: property.dateFormat || \"dd.MM.yyyy\",\r\n min: this.convertToDate(property.min),\r\n max: this.convertToDate(property.max),\r\n }\r\n );\r\n }\r\n\r\n getFormSelectOptions(property: IOpenApiSchemaProperty, schema: IOpenApiSchema) {\r\n const $enum = property.items?.enum || property.enum;\r\n console.log(\r\n property,\r\n schema,\r\n Array.isArray($enum),\r\n isStringWithVal(property.optionsPath)\r\n )\r\n if (Array.isArray($enum)) {\r\n return new FormSelectSubject((selectModel, formControl) => {\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.fixSelectOptions(selectModel, formControl, options);\r\n });\r\n }\r\n if (isStringWithVal(property.optionsPath)) {\r\n return new FormSelectSubject(async (selectModel, control, root, indexes) => {\r\n let path = property.optionsPath as string;\r\n let target = control as AbstractControl;\r\n let model: DynamicPathable | DynamicFormModel = selectModel;\r\n if (path.startsWith(\"$root\")) {\r\n path = path.substring(5);\r\n while (target.parent) {\r\n target = target.parent;\r\n }\r\n model = root;\r\n }\r\n while (path.startsWith(\".\")) {\r\n path = path.substring(1);\r\n if (target.parent) {\r\n target = target.parent;\r\n }\r\n model = (model as DynamicPathable).parent || root;\r\n }\r\n Object.keys(indexes).forEach(key => {\r\n path = path.replace(key, indexes[key]);\r\n });\r\n model = this.findModelByPath(model, path.split(\".\"));\r\n const modelOptions = model instanceof DynamicSelectModel\r\n ? await firstValueFrom(model.options$) :\r\n [];\r\n const value = ObjectUtils.getValue(target.value, path);\r\n const options = (!ObjectUtils.isArray(value) ? [] : value).map(value => {\r\n const modelOption = modelOptions.find(t => t.value == value);\r\n return {value, label: modelOption?.label || value};\r\n });\r\n return this.fixSelectOptions(selectModel, control, options);\r\n });\r\n }\r\n console.log(property.id, \"helo\");\r\n return new FormSelectSubject(async (selectModel, control) => {\r\n console.log(property.id, \"helo2\");\r\n const entries = Object.entries((control.root as FormGroup)?.controls || {});\r\n const endpoint = entries.reduce((res, [key, control]) => {\r\n return res.replace(new RegExp(`\\\\$${key}`, \"gi\"), `${control?.value ?? \"\"}`);\r\n }, `${property.endpoint}`);\r\n this.api.cache[endpoint] = this.api.cache[endpoint] || this.api.list(endpoint, this.api.makeListParams(1, -1)).then(result => {\r\n const items = ObjectUtils.isArray(result)\r\n ? result\r\n : (ObjectUtils.isArray(result.items) ? result.items : []);\r\n return items.map(i => {\r\n const item = ObjectUtils.isObject(i) ? i : {id: i};\r\n return {\r\n ...item,\r\n value: item.id || item._id,\r\n label: item[property.labelField] || item.label || item.id || item._id\r\n };\r\n });\r\n });\r\n const options = (await this.api.cache[endpoint]).map(t => Object.assign({}, t));\r\n return this.fixSelectOptions(selectModel, control, options);\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 groupBy: property.groupBy,\r\n inline: property.inline,\r\n allowEmpty: property.allowEmpty,\r\n }\r\n );\r\n }\r\n\r\n 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 getFormCheckboxConfig(property: IOpenApiSchemaProperty, schema: IOpenApiSchema): DynamicCheckboxModelConfig {\r\n return Object.assign(\r\n this.getFormControlConfig(property, schema),\r\n {\r\n indeterminate: property.indeterminate || false\r\n }\r\n );\r\n }\r\n\r\n cloneFormArrayGroup(index: number, formArray: FormArray, formArrayModel: DynamicFormArrayModel) {\r\n this.insertFormArrayGroup(index, formArray, formArrayModel);\r\n this.patchGroup(formArray.at(index + 1).value, formArrayModel.groups[index].group, formArray.at(index) as FormGroup);\r\n formArrayModel.filterGroups();\r\n }\r\n\r\n protected async fixSelectOptions(model: DynamicSelectModel<any>, control: FormControl, options: DynamicFormOptionConfig<any>[]): Promise<DynamicFormOptionConfig<any>[]> {\r\n if (!options) return [];\r\n for (const option of options) {\r\n option.classes = [option.classes, model.getClasses(option, model, control, this.injector)].filter(isStringWithVal).join(\" \");\r\n option.label = await this.language.getTranslation(option.label);\r\n }\r\n return options;\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 {debounceTime} from \"rxjs/operators\";\r\nimport {IAsyncMessage, IToasterService, TOASTER_SERVICE} from \"@stemy/ngx-utils\";\r\nimport {AsyncSubmitMethod, IDynamicForm} from \"../common-types\";\r\n\r\n@Directive({\r\n standalone: false,\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: IDynamicForm;\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.group?.status !== \"VALID\";\r\n this.cdr.detectChanges();\r\n this.onStatusChange = this.form.group?.statusChanges.subscribe(() => {\r\n const status = this.form.group?.status;\r\n this.isDisabled = status !== \"VALID\";\r\n this.cdr.detectChanges();\r\n if (!this.callback || 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?.pipe(debounceTime(200)).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 const status = this.form.group?.status;\r\n if (status !== \"VALID\" && 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 ViewChildren\r\n} from \"@angular/core\";\r\nimport {FormArray, FormGroup} from \"@angular/forms\";\r\nimport {Subscription} from \"rxjs\";\r\nimport {debounceTime, groupBy, mergeMap} from \"rxjs/operators\";\r\nimport {first} from \"rxjs/operators\";\r\nimport {\r\n DynamicFormComponent,\r\n DynamicFormComponentService,\r\n DynamicFormControlEvent,\r\n DynamicFormControlModel,\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, GetFormControlComponentType, IDynamicForm, IDynamicFormEvent} from \"../../common-types\";\r\nimport {collectPathAble} from \"../../utils/misc\";\r\nimport {DynamicFormGroupModel} from \"../../utils/dynamic-form-group.model\";\r\nimport {DynamicFormArrayModel} from \"../../utils/dynamic-form-array.model\";\r\nimport {DynamicFormService} from \"../../services/dynamic-form.service\";\r\n\r\n@Component({\r\n standalone: false,\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 = null;\r\n @Input() groupModel: DynamicFormGroupModel = null;\r\n @Input() model: DynamicFormModel = null;\r\n @Input() layout: DynamicFormLayout = null;\r\n @Input() labelPrefix: string = \"label\";\r\n @Input() getComponentType: GetFormControlComponentType = null;\r\n\r\n @Output() blur: EventEmitter<DynamicFormControlEvent> = new EventEmitter();\r\n @Output() change: EventEmitter<DynamicFormControlEvent> = new EventEmitter();\r\n @Output() focus: EventEmitter<DynamicFormControlEvent> = new EventEmitter();\r\n\r\n @ContentChildren(DynamicTemplateDirective) contentTemplates: QueryList<DynamicTemplateDirective> = null;\r\n @ViewChildren(DynamicTemplateDirective) viewTemplates: QueryList<DynamicTemplateDirective> = null;\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 onValueChange: EventEmitter<IDynamicFormEvent> = new EventEmitter();\r\n @Output() readonly onStatusChange: EventEmitter<IDynamicForm> = new EventEmitter();\r\n @Output() readonly onSubmit: EventEmitter<IDynamicForm> = new EventEmitter();\r\n @Output() readonly onDetectChanges: EventEmitter<IDynamicForm> = new EventEmitter();\r\n\r\n protected subscription: Subscription = new Subscription();\r\n protected groupSubscription: Subscription = new 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.templates = new QueryList<DynamicTemplateDirective>();\r\n this.getComponentType = () => null;\r\n }\r\n\r\n submit(): void {\r\n this.onSubmit.emit(this);\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.change.pipe(groupBy(ev => ev.model))\r\n .pipe(mergeMap(t => t.pipe(debounceTime(500))))\r\n .subscribe(ev => {\r\n this.onValueChange.emit({...ev, form: this});\r\n })\r\n );\r\n }\r\n if (changes.groupModel) {\r\n this.model = this.groupModel?.group;\r\n }\r\n if (changes.model) {\r\n this.groupModel = new DynamicFormGroupModel({id: \"root\", group: this.model});\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.notifyChanges(this.model, this.group);\r\n this.formService.detectChanges(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 detectChanges(): void {\r\n super.detectChanges();\r\n this.onDetectChanges.emit(this);\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.detectChanges();\r\n }\r\n\r\n cloneFormArrayGroup(index: number, formArray: FormArray, formArrayModel: DynamicFormArrayModel): void {\r\n this.formService.cloneFormArrayGroup(index, formArray, formArrayModel);\r\n this.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.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.detectChanges();\r\n }\r\n\r\n clearFormArray(formArray: FormArray, formArrayModel: DynamicFormArrayModel): void {\r\n this.formService.clearFormArray(formArray, formArrayModel);\r\n this.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","import {\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n ComponentFactoryResolver,\r\n ContentChildren,\r\n EventEmitter,\r\n HostBinding,\r\n Injector,\r\n Input,\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 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 {DynamicFormInitControl} from \"../../common-types\";\r\nimport {collectPathAble} from \"../../utils/misc\";\r\nimport {DynamicFormArrayGroupModel} from \"../../utils/dynamic-form-array.model\";\r\nimport {DynamicFormService} from \"../../services/dynamic-form.service\";\r\nimport {DynamicBaseFormComponent} from \"./dynamic-base-form.component\";\r\n\r\n@Component({\r\n standalone: false,\r\n selector: \"dynamic-base-form-control\",\r\n template: \"\",\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [\r\n {provide: DynamicFormControlContainerComponent, useExisting: DynamicBaseFormControlContainerComponent}\r\n ]\r\n})\r\nexport class DynamicBaseFormControlContainerComponent extends DynamicFormControlContainerComponent {\r\n\r\n @ContentChildren(DynamicTemplateDirective) contentTemplateList: QueryList<DynamicTemplateDirective> = null;\r\n\r\n @HostBinding(\"class\") klass = null;\r\n\r\n @Input() context: DynamicFormArrayGroupModel | null = null;\r\n @Input() group: FormGroup = null;\r\n @Input() hostClass: string[] = null;\r\n @Input(\"templates\") inputTemplateList: QueryList<DynamicTemplateDirective> = null;\r\n @Input() layout: DynamicFormLayout = null;\r\n @Input() model: DynamicFormControlModel = null;\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\", {\r\n read: ViewContainerRef,\r\n static: true\r\n }) componentViewContainerRef: ViewContainerRef = null;\r\n\r\n get componentType(): Type<DynamicFormControl> | null {\r\n return this.form.getComponentType?.(this.model, this.injector)\r\n ?? this.componentService.getCustomComponentType(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 protected onDetectChanges: Subscription;\r\n\r\n constructor(readonly form: DynamicBaseFormComponent,\r\n readonly cdr: ChangeDetectorRef,\r\n readonly injector: Injector,\r\n cfr: ComponentFactoryResolver,\r\n layoutService: DynamicFormLayoutService,\r\n validationService: DynamicFormValidationService,\r\n componentService: DynamicFormComponentService,\r\n relationService: DynamicFormRelationService) {\r\n super(cdr, cfr, layoutService, validationService, componentService, relationService);\r\n }\r\n\r\n ngOnInit(): void {\r\n super.ngOnInit();\r\n this.onDetectChanges = this.form.onDetectChanges.subscribe(() => {\r\n this.changeDetectorRef.detectChanges();\r\n });\r\n }\r\n\r\n ngOnDestroy(): void {\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 getLabelIcon(): string {\r\n if (this.context instanceof DynamicFormArrayGroupModel) {\r\n const arrayModel = this.context.context;\r\n if (arrayModel && arrayModel.sortBy == this.model.id) {\r\n return arrayModel.sortOrder;\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n clickLabel(): void {\r\n if (this.context instanceof DynamicFormArrayGroupModel) {\r\n const arrayModel = this.context.context;\r\n if (arrayModel) {\r\n arrayModel.sortBy = this.model.id;\r\n }\r\n }\r\n }\r\n\r\n protected createFormControlComponent() {\r\n super.createFormControlComponent();\r\n const component = this.componentRef?.instance as DynamicFormInitControl;\r\n if (!component || !ObjectUtils.isFunction(component.initialize)) return;\r\n component.initialize(this.changeDetectorRef);\r\n }\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n EventEmitter,\r\n forwardRef,\r\n Injector,\r\n Input,\r\n OnDestroy,\r\n Output,\r\n QueryList,\r\n ViewChildren\r\n} from \"@angular/core\";\r\nimport {FormGroup} from \"@angular/forms\";\r\nimport {Subscription} from \"rxjs\";\r\nimport {\r\n DynamicFormArrayComponent,\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 DynamicFormValueControlModel,\r\n DynamicTemplateDirective\r\n} from \"@ng-dynamic-forms/core\";\r\nimport {DynamicFormArrayGroupModel, DynamicFormArrayModel} from \"../../utils/dynamic-form-array.model\";\r\nimport {collectPathAble} from \"../../utils/misc\";\r\nimport {DynamicFormInitControl} from \"../../common-types\";\r\nimport {DynamicBaseFormComponent} from \"./dynamic-base-form.component\";\r\nimport {DynamicBaseFormControlContainerComponent} from \"./dynamic-base-form-control-container.component\";\r\n\r\n@Component({\r\n standalone: false,\r\n selector: \"dynamic-base-form-array\",\r\n template: \"\",\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class DynamicBaseFormArrayComponent extends DynamicFormArrayComponent implements DynamicFormInitControl, OnDestroy {\r\n\r\n @Input() formLayout: DynamicFormLayout = null;\r\n @Input() group: FormGroup = null;\r\n @Input() layout: DynamicFormControlLayout = null;\r\n @Input() model: DynamicFormArrayModel = null;\r\n @Input() templates: QueryList<DynamicTemplateDirective> | undefined = null;\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(() => DynamicBaseFormControlContainerComponent))\r\n components: QueryList<DynamicBaseFormControlContainerComponent> = null;\r\n\r\n get useTabs(): boolean {\r\n return this.model?.useTabs;\r\n }\r\n\r\n protected subscription: Subscription;\r\n\r\n constructor(layoutService: DynamicFormLayoutService, validationService: DynamicFormValidationService,\r\n readonly form: DynamicBaseFormComponent, readonly injector: Injector, readonly cdr: ChangeDetectorRef) {\r\n super(layoutService, validationService);\r\n }\r\n\r\n initialize(cdr: ChangeDetectorRef): void {\r\n this.subscription = this.model.filteredGroups.subscribe(filteredGroups => {\r\n this.updateGroups(filteredGroups);\r\n });\r\n this.model.initialize(this.array);\r\n }\r\n\r\n ngOnDestroy(): void {\r\n if (this.subscription)\r\n this.subscription.unsubscribe();\r\n }\r\n\r\n saveTab(index: number): void {\r\n this.model.saveTab(index, this.model.getFiltered(index), this.model, this.injector);\r\n }\r\n\r\n restoreTab(): number {\r\n return this.model.restoreTab(this.model, this.injector);\r\n }\r\n\r\n getTabLabel(index: number, model: DynamicFormArrayGroupModel): string {\r\n return this.model.getTabLabel(index, model, this.model, this.array, this.injector);\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 context == \"element\" ? this.getAdditionalClass(model) : null,\r\n super.getClass(context, place, model),\r\n model instanceof DynamicFormValueControlModel ? model.additional?.classes : null\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 protected getAdditionalClass(model?: DynamicFormControlModel): string {\r\n if (model instanceof DynamicFormArrayModel) {\r\n return model.additional?.classes;\r\n }\r\n if (model instanceof DynamicFormValueControlModel) {\r\n return model.additional?.classes;\r\n }\r\n return null;\r\n }\r\n\r\n protected updateGroups(filteredGroups: ReadonlyArray<DynamicFormArrayGroupModel>): void {\r\n this.cdr.detectChanges();\r\n this.components.forEach(t => t.cdr.detectChanges());\r\n }\r\n}\r\n","import {\r\n AfterViewInit,\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n EventEmitter,\r\n Injector,\r\n Input,\r\n OnDestroy, Optional,\r\n Output\r\n} from \"@angular/core\";\r\nimport {FormGroup} from \"@angular/forms\";\r\nimport {Subscription} from \"rxjs\";\r\nimport {debounceTime} from \"rxjs/operators\";\r\nimport {\r\n DynamicFormControlComponent,\r\n DynamicFormControlLayout,\r\n DynamicFormControlModel,\r\n DynamicFormLayout,\r\n DynamicFormLayoutService,\r\n DynamicFormValidationService\r\n} from \"@ng-dynamic-forms/core\";\r\nimport {DynamicBaseFormComponent} from \"./dynamic-base-form.component\";\r\n\r\n@Component({\r\n standalone: false,\r\n selector: \"dynamic-base-form-control\",\r\n template: \"\",\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class DynamicBaseFormControlComponent<T extends DynamicFormControlModel> extends DynamicFormControlComponent implements AfterViewInit, OnDestroy {\r\n\r\n @Input() formLayout: DynamicFormLayout = null;\r\n @Input() group: FormGroup = null;\r\n @Input() layout: DynamicFormControlLayout = null;\r\n @Input() model: T = null;\r\n\r\n @Output() blur: EventEmitter<any> = new EventEmitter<any>();\r\n @Output() change: EventEmitter<any> = new EventEmitter<any>();\r\n @Output() focus: EventEmitter<any> = new EventEmitter<any>();\r\n\r\n protected subscription: Subscription;\r\n\r\n constructor(layoutService: DynamicFormLayoutService, validationService: DynamicFormValidationService,\r\n @Optional() readonly form: DynamicBaseFormComponent,\r\n readonly injector: Injector,\r\n readonly cdr: ChangeDetectorRef) {\r\n super(layoutService, validationService);\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n this.subscription = this.control.valueChanges.pipe(debounceTime(500)).subscribe(value => {\r\n this.onValueChanged(value);\r\n });\r\n }\r\n\r\n ngOnDestroy(): void {\r\n if (!this.subscription) return;\r\n this.subscription.unsubscribe();\r\n }\r\n\r\n submit(): void {\r\n this.form?.submit();\r\n }\r\n\r\n protected onValueChanged(value: any): void {\r\n\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 DynamicFormLayout,\r\n DynamicFormLayoutService,\r\n DynamicFormValidationService,\r\n DynamicFormValueControlModel,\r\n DynamicTemplateDirective\r\n} from \"@ng-dynamic-forms/core\";\r\nimport {collectPathAble} from \"../../utils/misc\";\r\nimport {DynamicFormArrayModel} from \"../../utils/dynamic-form-array.model\";\r\nimport {DynamicFormGroupModel} from \"../../utils/dynamic-form-group.model\";\r\n\r\n@Component({\r\n standalone: false,\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 = null;\r\n @Input() group: FormGroup = null;\r\n @Input() layout: DynamicFormControlLayout = null;\r\n @Input() model: DynamicFormGroupModel = null;\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> = null;\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 context == \"element\" ? this.getAdditionalClass(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 protected getAdditionalClass(model?: DynamicFormControlModel): string {\r\n if (model instanceof DynamicFormArrayModel) {\r\n return model.additional?.classes;\r\n }\r\n if (model instanceof DynamicFormValueControlModel) {\r\n return model.additional?.classes;\r\n }\r\n return null;\r\n }\r\n}\r\n","import {ChangeDetectionStrategy, Component, OnDestroy, OnInit} from \"@angular/core\";\nimport {BehaviorSubject, Subscription} from \"rxjs\";\nimport {DynamicBaseFormControlComponent} from \"./dynamic-base-form-control.component\";\nimport {DynamicFormOption, DynamicFormOptionGroup, DynamicSelectModel} from \"../../utils/dynamic-select.model\";\nimport {replaceSpecialChars} from \"../../utils/misc\";\n\n@Component({\n standalone: false,\n selector: \"dynamic-base-select\",\n template: \"\",\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class DynamicBaseSelectComponent extends DynamicBaseFormControlComponent<DynamicSelectModel<any>> implements OnInit, OnDestroy {\n\n groups$: BehaviorSubject<DynamicFormOptionGroup<any>[]>;\n hasOptions: boolean;\n\n ngOnInit(): void {\n this.groups$ = new BehaviorSubject<DynamicFormOptionGroup<any>[]>([]);\n this.subscription = this.model.options$.subscribe(options => {\n const groupBy = this.model.inline || !this.model.multiple ? this.model.groupBy : null;\n const grouped = options.reduce((res, option) => {\n const key = replaceSpecialChars(groupBy ? option.props[this.model.groupBy] || \"default\" : \"default\", \"-\");\n res[key] = res[key] || [];\n res[key].push(option);\n return res;\n }, {});\n const groups = Object.keys(grouped).map(group => {\n return {\n group,\n options: grouped[group]\n };\n });\n this.hasOptions = groups.length > 0;\n this.groups$.next(groups);\n this.cdr.detectChanges();\n });\n }\n\n ngOnDestroy(): void {\n if (this.subscription)\n this.subscription.unsubscribe();\n }\n\n isSelected(option: DynamicFormOption<any>): boolean {\n if (this.model.multiple) {\n return this.control.value?.indexOf(option.value) >= 0;\n }\n return this.control.value == option.value;\n }\n\n selectToggle(option: DynamicFormOption<any>, state: boolean): void {\n if (this.model.multiple) {\n const value = Array.from(this.control.value || []);\n const index = value.indexOf(option.value);\n if (index >= 0) {\n value.splice(index, 1);\n }\n if (state) {\n value.push(option.value);\n }\n this.control.setValue(value);\n this.onChange(value);\n return;\n }\n this.control.setValue(option.value);\n this.onChange(option.value);\n }\n}\n","import {DynamicFormControlMapFn} from \"@ng-dynamic-forms/core\";\r\n\r\nimport {AsyncSubmitDirective} from \"./directives/async-submit.directive\";\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 {DynamicBaseFormControlComponent} from \"./components/base/dynamic-base-form-control.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\nimport {DynamicBaseSelectComponent} from \"./components/base/dynamic-base-select.component\";\r\n\r\n// --- Components ---\r\nexport const components = [\r\n DynamicBaseFormComponent,\r\n DynamicBaseFormArrayComponent,\r\n DynamicBaseFormControlComponent,\r\n DynamicBaseFormControlContainerComponent,\r\n DynamicBaseFormGroupComponent,\r\n DynamicBaseSelectComponent\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\nexport function defaultFormControlProvider(): DynamicFormControlMapFn {\r\n return () => null;\r\n}\r\n","import {Injector, 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_FORM_CONTROL_MAP_FN,\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 {\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\nimport {DynamicFormService} from \"./services/dynamic-form.service\";\r\nimport {components, defaultFormControlProvider, directives, pipes} from \"./ngx-dynamic-form.imports\";\r\nimport {IDynamicFormModuleConfig} from \"./common-types\";\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 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(config?: IDynamicFormModuleConfig): 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 provide: DYNAMIC_FORM_CONTROL_MAP_FN,\r\n useFactory: (config?.controlProvider || defaultFormControlProvider),\r\n deps: [Injector]\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"],"names":["GroupBase","Base","BaseOption","i1.DynamicBaseFormComponent","i2","DynamicFormGroupModel","i2.DynamicBaseFormComponent","BaseDynamicFormService"],"mappings":"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"}
|
|
@@ -6,7 +6,7 @@ import { DynamicBaseFormControlComponent } from "./components/base/dynamic-base-
|
|
|
6
6
|
import { DynamicBaseFormControlContainerComponent } from "./components/base/dynamic-base-form-control-container.component";
|
|
7
7
|
import { DynamicBaseFormGroupComponent } from "./components/base/dynamic-base-form-group.component";
|
|
8
8
|
import { DynamicBaseSelectComponent } from "./components/base/dynamic-base-select.component";
|
|
9
|
-
export declare const components: (typeof DynamicBaseFormComponent | typeof
|
|
9
|
+
export declare const components: (typeof DynamicBaseFormComponent | typeof DynamicBaseFormControlContainerComponent | typeof DynamicBaseFormArrayComponent | typeof DynamicBaseFormControlComponent | typeof DynamicBaseFormGroupComponent | typeof DynamicBaseSelectComponent)[];
|
|
10
10
|
export declare const directives: (typeof AsyncSubmitDirective)[];
|
|
11
11
|
export declare const pipes: any[];
|
|
12
12
|
export declare function defaultFormControlProvider(): DynamicFormControlMapFn;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Injector } from "@angular/core";
|
|
2
|
-
import { AbstractControl, FormArray, FormControl, FormGroup } from "@angular/forms";
|
|
2
|
+
import { AbstractControl, AbstractControlOptions, FormArray, FormControl, FormGroup } from "@angular/forms";
|
|
3
3
|
import { DynamicCheckboxModelConfig, DynamicDatePickerModelConfig, DynamicFileUploadModelConfig, DynamicFormComponentService, DynamicFormControlModel, DynamicFormModel, DynamicFormService as Base, DynamicFormValidationService, DynamicFormValueControlModelConfig, DynamicInputModelConfig, DynamicPathable, DynamicTextAreaModelConfig, DynamicValidatorsConfig } from "@ng-dynamic-forms/core";
|
|
4
4
|
import { IApiService, ILanguageService, IOpenApiSchema, IOpenApiSchemaProperty, IOpenApiSchemas, OpenApiService } from "@stemy/ngx-utils";
|
|
5
5
|
import { FormModelCustomizer, FormModelCustomizerWrap, IDynamicForm } from "../common-types";
|
|
@@ -18,6 +18,7 @@ export declare class DynamicFormService extends Base {
|
|
|
18
18
|
get language(): ILanguageService;
|
|
19
19
|
protected schemas: IOpenApiSchemas;
|
|
20
20
|
constructor(cs: DynamicFormComponentService, vs: DynamicFormValidationService, openApi: OpenApiService, injector: Injector);
|
|
21
|
+
createFormGroup(formModel: DynamicFormModel, options?: AbstractControlOptions | null, parent?: DynamicPathable | null): import("@angular/forms").UntypedFormGroup;
|
|
21
22
|
patchGroup(value: any, formModel: DynamicFormModel, formGroup: FormGroup): void;
|
|
22
23
|
patchForm(value: any, component: DynamicBaseFormComponent): void;
|
|
23
24
|
validateForm(form: IDynamicForm, showErrors?: boolean): Promise<any>;
|