@stemy/ngx-dynamic-form 10.1.3 → 10.1.4
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.
- package/README.md +27 -27
- package/bundles/stemy-ngx-dynamic-form.umd.js +2247 -2247
- package/bundles/stemy-ngx-dynamic-form.umd.js.map +1 -1
- package/bundles/stemy-ngx-dynamic-form.umd.min.js +2 -2
- package/bundles/stemy-ngx-dynamic-form.umd.min.js.map +1 -1
- package/esm2015/ngx-dynamic-form/common-types.js +591 -591
- package/esm2015/ngx-dynamic-form/components/base/dynamic-form-base.component.js +87 -87
- package/esm2015/ngx-dynamic-form/components/dynamic-form/dynamic-form.component.js +91 -91
- package/esm2015/ngx-dynamic-form/components/dynamic-form-file/dynamic-form-file.component.js +112 -112
- package/esm2015/ngx-dynamic-form/components/dynamic-form-group/dynamic-form-group.component.js +19 -19
- package/esm2015/ngx-dynamic-form/components/dynamic-form-input/dynamic-form-input.component.js +73 -73
- package/esm2015/ngx-dynamic-form/components/dynamic-form-model/dynamic-form-model.component.js +23 -23
- package/esm2015/ngx-dynamic-form/components/dynamic-form-select/dynamic-form-select.component.js +73 -73
- package/esm2015/ngx-dynamic-form/components/dynamic-form-static/dynamic-form-static.component.js +20 -20
- package/esm2015/ngx-dynamic-form/components/dynamic-forms/dynamic-forms.component.js +134 -134
- package/esm2015/ngx-dynamic-form/directives/async-submit.directive.js +89 -89
- package/esm2015/ngx-dynamic-form/directives/dynamic-form-control.directive.js +32 -32
- package/esm2015/ngx-dynamic-form/directives/dynamic-form-group.directive.js +40 -40
- package/esm2015/ngx-dynamic-form/directives/dynamic-form-template.directive.js +38 -38
- package/esm2015/ngx-dynamic-form/ngx-dynamic-form.module.js +85 -85
- package/esm2015/ngx-dynamic-form/services/dynamic-form.service.js +48 -48
- package/esm2015/ngx-dynamic-form/services/form-utilities.js +108 -108
- package/esm2015/ngx-dynamic-form/services/open-api.service.js +130 -130
- package/esm2015/public_api.js +18 -18
- package/esm2015/stemy-ngx-dynamic-form.js +8 -8
- package/fesm2015/stemy-ngx-dynamic-form.js +1690 -1690
- package/fesm2015/stemy-ngx-dynamic-form.js.map +1 -1
- package/ngx-dynamic-form/common-types.d.ts +307 -307
- package/ngx-dynamic-form/components/base/dynamic-form-base.component.d.ts +44 -44
- package/ngx-dynamic-form/components/dynamic-form/dynamic-form.component.d.ts +21 -21
- package/ngx-dynamic-form/components/dynamic-form-file/dynamic-form-file.component.d.ts +16 -16
- package/ngx-dynamic-form/components/dynamic-form-group/dynamic-form-group.component.d.ts +6 -6
- package/ngx-dynamic-form/components/dynamic-form-input/dynamic-form-input.component.d.ts +13 -13
- package/ngx-dynamic-form/components/dynamic-form-model/dynamic-form-model.component.d.ts +6 -6
- package/ngx-dynamic-form/components/dynamic-form-select/dynamic-form-select.component.d.ts +9 -9
- package/ngx-dynamic-form/components/dynamic-form-static/dynamic-form-static.component.d.ts +5 -5
- package/ngx-dynamic-form/components/dynamic-forms/dynamic-forms.component.d.ts +26 -26
- package/ngx-dynamic-form/directives/async-submit.directive.d.ts +23 -23
- package/ngx-dynamic-form/directives/dynamic-form-control.directive.d.ts +12 -12
- package/ngx-dynamic-form/directives/dynamic-form-group.directive.d.ts +14 -14
- package/ngx-dynamic-form/directives/dynamic-form-template.directive.d.ts +16 -16
- package/ngx-dynamic-form/ngx-dynamic-form.module.d.ts +20 -20
- package/ngx-dynamic-form/services/dynamic-form.service.d.ts +12 -12
- package/ngx-dynamic-form/services/form-utilities.d.ts +19 -19
- package/ngx-dynamic-form/services/open-api.service.d.ts +37 -37
- package/package.json +11 -11
- package/public_api.d.ts +17 -17
- package/stemy-ngx-dynamic-form.d.ts +7 -7
- package/stemy-ngx-dynamic-form.metadata.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stemy-ngx-dynamic-form.js","sources":["../../src/ngx-dynamic-form/common-types.ts","../../src/ngx-dynamic-form/services/dynamic-form.service.ts","../../src/ngx-dynamic-form/services/form-utilities.ts","../../src/ngx-dynamic-form/services/open-api.service.ts","../../src/ngx-dynamic-form/directives/async-submit.directive.ts","../../src/ngx-dynamic-form/directives/dynamic-form-control.directive.ts","../../src/ngx-dynamic-form/directives/dynamic-form-template.directive.ts","../../src/ngx-dynamic-form/components/base/dynamic-form-base.component.ts","../../src/ngx-dynamic-form/components/dynamic-form/dynamic-form.component.ts","../../src/ngx-dynamic-form/components/dynamic-forms/dynamic-forms.component.ts","../../src/ngx-dynamic-form/components/dynamic-form-group/dynamic-form-group.component.ts","../../src/ngx-dynamic-form/components/dynamic-form-file/dynamic-form-file.component.ts","../../src/ngx-dynamic-form/components/dynamic-form-input/dynamic-form-input.component.ts","../../src/ngx-dynamic-form/components/dynamic-form-select/dynamic-form-select.component.ts","../../src/ngx-dynamic-form/components/dynamic-form-static/dynamic-form-static.component.ts","../../src/ngx-dynamic-form/components/dynamic-form-model/dynamic-form-model.component.ts","../../src/ngx-dynamic-form/directives/dynamic-form-group.directive.ts","../../src/ngx-dynamic-form/ngx-dynamic-form.module.ts","../../src/stemy-ngx-dynamic-form.ts"],"sourcesContent":["import { ChangeDetectorRef, EventEmitter, HostBinding, InjectionToken, Injector, TemplateRef, Type, ValueProvider, Directive } from \"@angular/core\";\nimport {AbstractControl, FormControl, FormGroup, ValidationErrors} from \"@angular/forms\";\nimport {\n IResolveFactory,\n ITimer,\n IAsyncMessage,\n ObjectUtils,\n ReflectUtils,\n TimerUtils,\n UniqueUtils,\n IRequestOptions\n} from \"@stemy/ngx-utils\";\n\nexport const FORM_GROUP_TYPE: InjectionToken<Type<IFormControlComponent>> = new InjectionToken<Type<IFormControlComponent>>(\"form-group-provider\");\nexport const FORM_CONTROL_PROVIDER: InjectionToken<IFormControlProvider> = new InjectionToken<IFormControlProvider>(\"form-control-provider\");\n\n// --- Basic form control interfaces ---\nexport interface IFormControlComponent {\n control: IDynamicFormControl;\n}\n\nexport interface IFormGroupComponent {\n form: IDynamicForm;\n control: IDynamicFormControl;\n}\n\n@Directive()\nexport abstract class FormControlComponent<T extends IFormControlData> implements IFormControlComponent {\n\n control: IDynamicFormControl;\n\n get form(): IDynamicFormBase {\n return !this.control ? null: this.control.form;\n }\n\n get data(): T {\n return <T>(!this.control ? {} : this.control.data);\n }\n\n get value(): any {\n return !this.control ? null : this.control.value;\n }\n\n get meta(): any {\n return !this.control ? null : this.control.meta;\n }\n\n @HostBinding(\"class.form-input\")\n get inputClass(): boolean {\n return true;\n }\n}\n\nexport type IFormControlProviderAcceptor = (control: IDynamicFormControl) => boolean;\nexport type IFormControlProviderLoader = (control: IDynamicFormControl) => Promise<any>;\nexport type IFormControlOptions = (control: IDynamicFormControl) => Promise<IFormControlOption[]>;\nexport type IFormControlSerializer = (id: string, parent: IDynamicFormControl) => Promise<any>;\nexport type IFormInputMask = string | RegExp;\nexport type IFormInputMaskFunction = (raw: string) => IFormInputMask[];\nexport type IFormInputUnMaskFunction = (value: string) => any;\n\nexport interface IFormControlProvider {\n component: Type<IFormControlComponent>;\n priority: number;\n acceptor: IFormControlProviderAcceptor;\n loader: IFormControlProviderLoader;\n}\n\nexport interface IFormSerializer {\n id: string;\n func: IFormControlSerializer;\n}\n\nexport interface IFormSerializers {\n [id: string]: IFormControlSerializer | IResolveFactory | null\n}\n\nexport type DynamicFormState = \"VALID\" | \"INVALID\" | \"PENDING\" | \"DISABLED\" | \"LOADING\";\nexport type DynamicFormUpdateOn = \"change\" | \"blur\" | \"submit\";\n\nexport interface IDynamicFormControl {\n id: string;\n type: string;\n data: IFormControlData;\n visible: boolean;\n meta: any;\n form: IDynamicFormBase;\n injector: Injector;\n label: string;\n provider: IFormControlProvider;\n model: any;\n formId: string;\n\n errors: ValidationErrors;\n value: any;\n touched: boolean;\n disabled: boolean;\n updateOn: DynamicFormUpdateOn;\n\n setValue(value: any): void;\n\n getData<T extends IFormControlData>(): T;\n getControl(id: string): IDynamicFormControl;\n load(): Promise<any>;\n check(): Promise<any>;\n shouldSerialize(): Promise<boolean>;\n shouldValidate(): Promise<boolean>;\n serialize(): Promise<any>;\n onFocus(): void;\n onBlur(): void;\n showErrors(): void;\n}\n\nfunction createValidator(control: IDynamicFormControl): (control: AbstractControl) => Promise<ValidationErrors> {\n const data = control.data || {};\n const validators = [data.validator].concat(data.validators || []).filter(ObjectUtils.isDefined).map(v => {\n return ReflectUtils.resolve<FormControlValidator>(v, control.injector);\n });\n return (ctrl: any) => new Promise<ValidationErrors>((resolve) => {\n const control = <IDynamicFormControl>ctrl;\n control.shouldValidate().then(should => {\n if (!should) {\n resolve(null);\n return;\n }\n const validate = validators.map(v => v(control));\n const metaValidator = control.meta.validator;\n if (ObjectUtils.isFunction(metaValidator)) {\n validate.push(metaValidator(control));\n }\n Promise.all(validate).then(results => {\n results = results.filter(error => ObjectUtils.isObject(error) || ObjectUtils.isString(error));\n let result: ValidationErrors = null;\n if (results.length > 0) {\n result = {};\n results.forEach(error => {\n if (ObjectUtils.isString(error)) {\n result[error] = {};\n return;\n }\n result = Object.assign(result, error);\n });\n }\n resolve(result);\n });\n });\n });\n}\n\nclass DynamicFormControlHelper {\n\n get id(): string {\n return !this.control ? null : this.control.id;\n }\n\n get type(): string {\n return !this.control ? \"\" : this.control.type;\n }\n\n get data(): IFormControlData {\n return !this.control ? this.dummyData : this.control.data || this.dummyData;\n }\n\n get visible(): boolean {\n return !this.hidden;\n }\n\n get provider(): IFormControlProvider {\n return this.ctrlProvider;\n }\n\n public readonly formId: string;\n public readonly meta: any;\n\n private hidden: boolean;\n private ctrlProvider: IFormControlProvider;\n private readonly dummyData: IFormControlData;\n private readonly readonlyTester: (control: IDynamicFormControl) => Promise<boolean>;\n private readonly hideTester: (control: IDynamicFormControl) => Promise<boolean>;\n private readonly serializeTester: (control: IDynamicFormControl) => Promise<boolean>;\n private readonly validateTester: (control: IDynamicFormControl) => Promise<boolean>;\n\n constructor(private form: IDynamicFormBase, private control: IFormControl = null) {\n this.formId = UniqueUtils.uuid();\n this.meta = {};\n this.hidden = false;\n this.dummyData = {};\n this.readonlyTester = this.createTester(\"readonly\");\n this.hideTester = this.createTester(\"hidden\");\n this.serializeTester = this.createTester(\"shouldSerialize\", (control: IDynamicFormControl) => {\n return Promise.resolve(control.visible);\n });\n this.validateTester = this.createTester(\"shouldValidate\", (control: IDynamicFormControl) => {\n return Promise.resolve(control.visible);\n });\n }\n\n load(control: IDynamicFormControl): Promise<any> {\n return !this.ctrlProvider ? Promise.resolve() : this.ctrlProvider.loader(control);\n }\n\n check(control: IDynamicFormControl): Promise<boolean> {\n return new Promise<any>(resolve => {\n this.hideTester(control).then(hide => {\n this.hidden = hide;\n this.readonlyTester(control).then(readonly => {\n resolve(control.form.readonly || readonly);\n });\n });\n });\n }\n\n shouldSerialize(control: IDynamicFormControl): Promise<boolean> {\n return this.serializeTester(control);\n }\n\n shouldValidate(control: IDynamicFormControl): Promise<boolean> {\n return this.validateTester(control);\n }\n\n findProvider(control: IDynamicFormControl): void {\n this.ctrlProvider = !this.control || !this.control.type ? null : this.form.findProvider(control);\n }\n\n private createTester(test: string, defaultFunc: FormControlTester = null): (control: IDynamicFormControl) => Promise<boolean> {\n const tester: FormControlTester = this.data[test]\n ? ReflectUtils.resolve<FormControlTester>(this.data[test], this.form.injector)\n : (defaultFunc || (() => Promise.resolve(false)));\n return (control: IDynamicFormControl): Promise<boolean> => tester(control);\n }\n}\n\nexport class DynamicFormGroup extends FormGroup implements IDynamicFormControl {\n\n get id(): string {\n return this.helper.id;\n }\n\n get type(): string {\n return this.helper.type;\n }\n\n get data(): IFormControlData {\n return this.helper.data;\n }\n\n get visible(): boolean {\n return this.helper.visible;\n }\n\n get meta(): any {\n return this.helper.meta;\n }\n\n get injector(): Injector {\n return this.form.injector;\n }\n\n get label(): string {\n return this.data.label !== \"\" ? `${this.prefix}${this.data.label}` : \"\";\n }\n\n get provider(): IFormControlProvider {\n return this.helper.provider;\n }\n\n get model(): any {\n return this.mModel;\n }\n\n get formId(): string {\n return this.helper.formId;\n }\n\n get formControls(): IDynamicFormControl[] {\n return this.mControls || [];\n }\n\n get formFields(): IDynamicFormFieldSets {\n return this.mFieldSets || {};\n }\n\n get prefix(): string {\n return !this.name ? \"\" : `${this.name}.`;\n }\n\n get name(): string {\n return this.mName;\n }\n\n get state(): DynamicFormState {\n return <DynamicFormState>(this.loading ? \"LOADING\" : this.status);\n }\n\n private helper: DynamicFormControlHelper;\n private mName: string;\n private mModel: any;\n private mControls: IDynamicFormControl[];\n private mSerializers: IFormSerializer[];\n private mFieldSets: IDynamicFormFieldSets;\n private initialized: boolean;\n private loading: boolean;\n private changeTimer: ITimer;\n\n private static createFormControls(group: DynamicFormGroup, controls: IFormControl[]): IDynamicFormControl[] {\n if (!controls && ObjectUtils.isObject(group.model)) {\n const props = Object.keys(group.model);\n controls = props.map(id => {\n return getFormControl(group.model, id);\n }).filter(ObjectUtils.isDefined);\n }\n if (!controls) return [];\n return controls.map(ctrl => {\n if (ctrl.type == \"model\") {\n const subGroup = new DynamicFormGroup(group.form, ctrl);\n const model = group.model[ctrl.id] || {};\n const data = subGroup.getData<IFormModelData>();\n data.name = data.name || group.name;\n subGroup.setup(model, data);\n group.model[ctrl.id] = model;\n group.addControl(subGroup.id, subGroup);\n return subGroup;\n }\n return new DynamicFormControl(ctrl, group);\n });\n }\n\n private static createFormSerializers(group: DynamicFormGroup, serializers: IFormSerializers): IFormSerializer[] {\n if (!serializers && ObjectUtils.isObject(group.model)) {\n const props = Object.keys(group.model);\n serializers = props.reduce((result, id) => {\n const serializer = getFormSerializer(group.model, id);\n if (!serializer) return result;\n result[id] = serializer;\n return result;\n }, {});\n }\n if (!serializers) return [];\n return Object.keys(serializers).map(id => {\n const serializer = serializers[id] || defaultSerializer;\n return !serializer ? null : {\n id: id,\n func: ReflectUtils.resolve<IFormControlSerializer>(serializer, group.injector)\n };\n });\n }\n\n constructor(public readonly form: IDynamicFormBase, control: IFormControl = null) {\n super({}, {updateOn: ((!control || !control.data) ? null : control.data.updateOn) || form.updateOn || \"blur\"});\n this.mName = \"\";\n this.mModel = {};\n this.mControls = [];\n this.mSerializers = [];\n this.mFieldSets = {};\n this.helper = new DynamicFormControlHelper(form, control);\n this.helper.findProvider(this);\n this.initialized = false;\n this.loading = false;\n this.changeTimer = TimerUtils.createTimeout();\n this.statusChanges.subscribe(() => {\n const root = this.form.root;\n root.onStatusChange.emit(root);\n });\n this.setAsyncValidators(createValidator(this));\n }\n\n getData<T extends IFormControlData>(): T {\n return <T>this.data;\n }\n\n getControl(id: string): IDynamicFormControl {\n return <any>this.get(id);\n }\n\n load(): Promise<any> {\n const promises = this.mControls.map(c => c.load());\n promises.push(this.helper.load(this));\n return Promise.all(promises);\n }\n\n check(): Promise<any> {\n return new Promise<any>(resolve => {\n this.helper.check(this).then(readonly => {\n if (readonly) this.disable({emitEvent: false}); else this.enable({emitEvent: false});\n const promises = this.mControls.map(c => c.check());\n Promise.all(promises).then(resolve);\n })\n });\n }\n\n shouldSerialize(): Promise<boolean> {\n return this.helper.shouldSerialize(this);\n }\n\n shouldValidate(): Promise<boolean> {\n return this.helper.shouldValidate(this);\n }\n\n serialize(): Promise<any> {\n return new Promise<any>((resolve) => {\n const result = {};\n const serializers = this.mSerializers.map(s => {\n return new Promise<any>(resolve => {\n s.func(s.id, this).then(res => {\n const ctrl = this.getControl(s.id);\n const promise = !ctrl ? Promise.resolve(true) : ctrl.shouldSerialize();\n promise.then(should => {\n if (should) result[s.id] = res;\n resolve();\n });\n });\n });\n });\n Promise.all(serializers).then(() => resolve(result));\n });\n }\n\n onFocus(): void {\n this.markAsUntouched({onlySelf: true});\n }\n\n onBlur(): void {\n this.markAsTouched({onlySelf: true});\n }\n\n showErrors(): void {\n this.markAsTouched({onlySelf: true});\n this.mControls.forEach(ctrl => ctrl.showErrors());\n }\n\n reloadControls(): Promise<any> {\n let callback = () => {};\n if (this.initialized === false) {\n this.initialized = true;\n this.loading = true;\n callback = () => {\n this.loading = false;\n // this.cdr.detectChanges();\n const root = this.form.root;\n root.onInit.emit(root);\n root.onStatusChange.emit(root);\n // https://github.com/angular/angular/issues/14542\n const statusTimer = TimerUtils.createInterval();\n statusTimer.set(() => {\n if (this.status == \"PENDING\") return;\n statusTimer.clear();\n root.onStatusChange.emit(root);\n }, 50);\n setTimeout(statusTimer.clear, 5000);\n };\n }\n const promise = new Promise<any>(resolve => {\n this.load().then(() => this.check().then(resolve));\n });\n promise.then(callback, callback);\n return promise;\n }\n\n setup(model: any, info: IDynamicFormInfo): void {\n this.mName = info.name || \"\";\n this.mModel = model;\n this.mControls.forEach(ctrl => this.removeControl(ctrl.id));\n this.mControls = DynamicFormGroup.createFormControls(this, info.controls);\n this.mControls.forEach((ctrl: any) => this.addControl(ctrl.id, ctrl));\n this.mSerializers = DynamicFormGroup.createFormSerializers(this, info.serializers);\n this.mFieldSets = info.fieldSets ? info.fieldSets.reduce((result, fs) => {\n result[fs.id] = fs;\n return result;\n }, {}) : getFormFieldSets(Object.getPrototypeOf(model).constructor);\n }\n\n updateModel(control: IDynamicFormControl): void {\n this.model[control.id] = control.value;\n this.changeTimer.clear();\n this.changeTimer.set(() => {\n this.check().then(() => this.reloadControlsFrom(control, new Set<IDynamicFormControl>()).then(() => {\n this.form.root.onChange.emit(control);\n }));\n }, 250);\n }\n\n private reloadControlsFrom(control: IDynamicFormControl, controls?: Set<IDynamicFormControl>): Promise<any> {\n const data = control.data;\n if (!data || !data.reload) return Promise.resolve();\n const reload = ObjectUtils.isArray(data.reload) ? data.reload : [data.reload];\n return Promise.all(reload.map(id => {\n const nextControl = this.getControl(id);\n if (!nextControl || controls.has(nextControl)) return Promise.resolve();\n controls.add(nextControl);\n return new Promise<any>(resolve => {\n nextControl.load().then(() => {\n this.reloadControlsFrom(nextControl, controls).then(resolve);\n });\n })\n }))\n }\n}\n\nexport class DynamicFormControl extends FormControl implements IDynamicFormControl {\n\n get id(): string {\n return this.helper.id;\n }\n\n get type(): string {\n return this.helper.type;\n }\n\n get data(): IFormControlData {\n return this.helper.data;\n }\n\n get visible(): boolean {\n return this.helper.visible;\n }\n\n get meta(): any {\n return this.helper.meta;\n }\n\n get form(): IDynamicFormBase {\n return this.group.form;\n }\n\n get injector(): Injector {\n return this.form.injector;\n }\n\n get label(): string {\n return this.data.label !== \"\" ? `${this.group.prefix}${this.data.label}` : \"\";\n }\n\n get provider(): IFormControlProvider {\n return this.helper.provider;\n }\n\n get model(): any {\n return this.group.model;\n }\n\n get formId(): string {\n return this.helper.formId;\n }\n\n private helper: DynamicFormControlHelper;\n\n constructor(private control: IFormControl, public readonly group: DynamicFormGroup) {\n super(group.model[control.id], {updateOn: control.data.updateOn || group.updateOn});\n this.group.addControl(control.id, this);\n this.helper = new DynamicFormControlHelper(this.form, control);\n this.helper.findProvider(this);\n this.valueChanges.subscribe(() => this.group.updateModel(this));\n this.setAsyncValidators(createValidator(this));\n }\n\n getData<T extends IFormControlData>(): T {\n return <T>this.data;\n }\n\n getControl(id: string): IDynamicFormControl {\n return null;\n }\n\n load(): Promise<any> {\n return this.helper.load(this);\n }\n\n check(): Promise<any> {\n const check = this.helper.check(this);\n check.then(readonly => {\n if (readonly || this.group.disabled) this.disable({emitEvent: false}); else this.enable({emitEvent: false});\n });\n return check;\n }\n\n shouldSerialize(): Promise<boolean> {\n return this.helper.shouldSerialize(this);\n }\n\n shouldValidate(): Promise<boolean> {\n return this.helper.shouldValidate(this);\n }\n\n serialize(): Promise<any> {\n return Promise.resolve(this.value);\n }\n\n onFocus(): void {\n this.markAsUntouched({onlySelf: true});\n }\n\n onBlur(): void {\n this.markAsTouched({onlySelf: true});\n }\n\n showErrors(): void {\n this.markAsTouched({onlySelf: true});\n }\n}\n\nexport interface IFormControl {\n id: string;\n type: string;\n visible?: boolean;\n data?: IFormControlData;\n}\n\nexport interface IFormControlData {\n label?: string;\n labelAlign?: string;\n fieldSet?: string;\n classes?: string;\n readonly?: FormControlTesterFactory;\n hidden?: FormControlTesterFactory;\n shouldSerialize?: FormControlTesterFactory;\n shouldValidate?: FormControlTesterFactory;\n validator?: FormControlValidatorFactory;\n validators?: FormControlValidatorFactory[];\n updateOn?: DynamicFormUpdateOn;\n reload?: string | string[];\n}\n\nexport interface IFormInputData extends IFormControlData {\n type?: string;\n autocomplete?: string;\n placeholder?: string;\n useLanguage?: boolean;\n mask?: IFormInputMaskFunction | IFormInputMask[];\n unmask?: IFormInputUnMaskFunction;\n step?: number;\n min?: number;\n max?: number;\n}\n\nexport interface IFormSelectData extends IFormControlData {\n options?: IFormControlOptions | IResolveFactory;\n emptyOption?: boolean;\n type?: string;\n multi?: boolean;\n}\n\nexport interface IFormStaticData extends IFormControlData {\n properties?: string[];\n style?: string;\n}\n\nexport interface IFormFileData extends IFormControlData {\n accept?: string;\n multi?: boolean;\n baseUrl?: string;\n asFile?: boolean;\n asDataUrl?: boolean;\n uploadUrl?: string;\n uploadOptions?: IRequestOptions;\n createUploadData?: (file: File) => any;\n}\n\nexport interface IFormModelData extends IFormControlData, IDynamicFormInfo {\n\n}\n\nexport interface IFormFieldSet {\n id: string;\n classes?: string;\n title?: string;\n titleClasses?: string;\n setClasses?: string;\n controlClasses?: string;\n}\n\nexport interface IFormControlOption {\n id: any;\n label: string;\n selectable?: boolean;\n}\n\n// --- Basic form interfaces ---\n\nexport interface IDynamicFormTemplates {\n [id: string]: TemplateRef<any>;\n}\n\nexport interface IDynamicFormConfig {\n path?: string | number | Array<string | number>;\n name?: string;\n classes?: string;\n formClasses?: string;\n innerFormClasses?: string;\n id: string;\n}\n\nexport interface IDynamicSingleFormConfig extends IDynamicFormConfig, IDynamicFormInfo {\n data: any;\n controlData?: IFormControlData;\n multi?: false;\n}\n\nexport interface IDynamicMultiFormConfig extends IDynamicFormConfig {\n data: IDynamicFormsConfigs;\n multi: true;\n}\n\nexport type IDynamicFormsConfigs = Array<IDynamicSingleFormConfig | IDynamicMultiFormConfig>;\n\nexport interface IDynamicFormBase {\n\n name?: string;\n readonly?: boolean;\n updateOn?: \"change\" | \"blur\" | \"submit\";\n classes: string;\n parent: IDynamicFormBase;\n\n wrapperTemplate: TemplateRef<any>;\n fieldSetTemplate: TemplateRef<any>;\n controlTemplate: TemplateRef<any>;\n\n controlTemplates: IDynamicFormTemplates;\n labelTemplates: IDynamicFormTemplates;\n inputTemplates: IDynamicFormTemplates;\n prefixTemplates: IDynamicFormTemplates;\n suffixTemplates: IDynamicFormTemplates;\n setPrefixTemplates: IDynamicFormTemplates;\n setSuffixTemplates: IDynamicFormTemplates;\n\n onChange: EventEmitter<IDynamicFormControl>;\n onStatusChange: EventEmitter<IDynamicFormBase>;\n onInit: EventEmitter<IDynamicFormBase>;\n onSubmit: EventEmitter<IDynamicFormBase>;\n\n root?: IDynamicFormBase;\n status: DynamicFormState;\n injector?: Injector;\n cdr?: ChangeDetectorRef;\n\n validate(showErrors?: boolean): Promise<any>;\n\n serialize(validate?: boolean): Promise<any>;\n\n check(): Promise<any>;\n\n getControl(id: string): IDynamicFormControl;\n\n findProvider(control: IDynamicFormControl): IFormControlProvider;\n}\n\nexport declare type AsyncSubmitMethod = (form: IDynamicFormBase) => Promise<IAsyncMessage>;\n\nexport interface IDynamicFormInfo {\n group?: DynamicFormGroup;\n name?: string;\n controls?: IFormControl[];\n serializers?: IFormSerializers;\n fieldSets?: IFormFieldSet[];\n}\n\nexport interface IDynamicForm extends IDynamicFormBase, IDynamicFormInfo {\n data: any;\n}\n\nexport interface IDynamicFormFieldSets {\n [id: string]: IFormFieldSet\n}\n\n// --- Basic form types ---\nexport type FormControlTester = (control: IDynamicFormControl) => Promise<boolean>;\nexport type FormControlTesterFactory = FormControlTester | IResolveFactory;\nexport type FormControlValidator = (control: IDynamicFormControl) => Promise<string | ValidationErrors>;\nexport type FormControlValidatorFactory = FormControlValidator | IResolveFactory;\n\n// --- Decorator functions ---\nconst emptyArray: any = [];\nconst emptyTester: FormControlTester = () => {\n return Promise.resolve(false);\n};\n\nexport function defaultSerializer(id: string, parent: IDynamicFormControl): Promise<any> {\n const control = parent.getControl(id);\n return !control ? Promise.resolve(parent.model[id]) : control.serialize();\n}\n\nexport function FormSerializable(serializer?: IFormControlSerializer | IResolveFactory): PropertyDecorator {\n return (target: any, propertyKey: string): void => {\n ReflectUtils.defineMetadata(\"dynamicFormSerializer\", serializer || defaultSerializer, target, propertyKey);\n };\n}\n\nexport function FormInput(data?: IFormInputData): PropertyDecorator {\n return (target: any, propertyKey: string): void => {\n const meta = ReflectUtils.getOwnMetadata(\"design:type\", target, propertyKey);\n const type = meta ? meta.name : \"\";\n let inputType = propertyKey.indexOf(\"password\") < 0 ? \"text\" : \"password\";\n switch (type) {\n case \"Number\":\n inputType = \"number\";\n break;\n case \"Boolean\":\n inputType = \"checkbox\";\n break;\n }\n defineFormControl(target, propertyKey, createFormInput(propertyKey, data, inputType));\n };\n}\n\nexport function FormSelect(data?: IFormSelectData): PropertyDecorator {\n return (target: any, propertyKey: string): void => {\n defineFormControl(target, propertyKey, createFormSelect(propertyKey, data));\n };\n}\n\nexport function FormStatic(data?: IFormStaticData): PropertyDecorator {\n return (target: any, propertyKey: string): void => {\n defineFormControl(target, propertyKey, createFormStatic(propertyKey, data));\n };\n}\n\nexport function FormModel(data?: IFormModelData): PropertyDecorator {\n return (target: any, propertyKey: string): void => {\n defineFormControl(target, propertyKey, createFormModel(propertyKey, data));\n };\n}\n\nexport function FormFile(data?: IFormFileData): PropertyDecorator {\n return (target: any, propertyKey: string): void => {\n defineFormControl(target, propertyKey, createFormFile(propertyKey, data));\n };\n}\n\nexport function FormFieldSet(data: IFormFieldSet): ClassDecorator {\n return (target: any): void => {\n const sets = getFormFieldSets(target);\n data.classes = data.classes || \"\";\n sets[data.id] = data;\n ReflectUtils.defineMetadata(\"dynamicFormFieldSets\", sets, target);\n };\n}\n\nexport interface FormGroupProvider extends ValueProvider {\n provide: InjectionToken<Type<IFormGroupComponent>>;\n multi?: boolean;\n useValue: Type<IFormGroupComponent>;\n}\n\nexport function provideFormGroup(component: Type<IFormGroupComponent>): FormGroupProvider {\n return {\n provide: FORM_GROUP_TYPE,\n useValue: component\n };\n}\n\nexport interface FormControlProvider {\n provide: InjectionToken<IFormControlProvider>;\n multi?: boolean;\n useValue: IFormControlProvider;\n}\n\nexport function provideFormControl(component: Type<IFormControlComponent>, acceptor: IFormControlProviderAcceptor, loader: IFormControlProviderLoader, priority: number = 0): FormControlProvider {\n return {\n provide: FORM_CONTROL_PROVIDER,\n multi: true,\n useValue: {\n component: component,\n priority: priority,\n acceptor: acceptor,\n loader: loader\n }\n };\n}\n\nexport function defineFormControl(target: any, propertyKey: string, control: IFormControl): void {\n ReflectUtils.defineMetadata(\"dynamicFormControl\", control, target, propertyKey);\n}\n\nexport function getFormFieldSets(target: any): IDynamicFormFieldSets {\n return ReflectUtils.getMetadata(\"dynamicFormFieldSets\", target) || {};\n}\n\nexport function getFormControl(target: any, propertyKey: string): IFormControl {\n return ReflectUtils.getMetadata(\"dynamicFormControl\", target, propertyKey);\n}\n\nexport function getFormSerializer(target: any, propertyKey: string): IFormControlSerializer | IResolveFactory {\n return ReflectUtils.getMetadata(\"dynamicFormSerializer\", target, propertyKey);\n}\n\nexport function createFormControl(id: string, type: string, data?: IFormControlData): IFormControl {\n data = data || {};\n data.label = ObjectUtils.isNullOrUndefined(data.label) ? id : data.label;\n data.labelAlign = data.labelAlign || \"left\";\n data.fieldSet = data.fieldSet || UniqueUtils.uuid();\n data.classes = data.classes || \"\";\n data.readonly = data.readonly || emptyTester;\n data.hidden = data.hidden || emptyTester;\n data.validators = data.validators || emptyArray;\n return {\n id: id,\n type: type,\n data: data\n };\n}\n\nexport function createFormInput(id: string, data: IFormInputData, type: string = \"text\"): IFormControl {\n const control = createFormControl(id, \"input\", data);\n data = control.data;\n data.type = data.type || type;\n data.classes = !data.classes ? `form-group-${data.type}` : `${data.classes} form-group-${data.type}`;\n data.placeholder = data.placeholder || (data.type == \"mask\" ? \"_\" : \"\");\n data.step = data.step || 1;\n data.mask = data.mask || [/\\w*/gi];\n return control;\n}\n\nexport function createFormSelect(id: string, data: IFormSelectData): IFormControl {\n const control = createFormControl(id, \"select\", data);\n data = control.data;\n data.options = data.options || (() => Promise.resolve([]));\n data.type = data.type || \"select\";\n const classType = data.type == \"select\" ? \"select\" : `select-${data.type}`;\n data.classes = !data.classes ? `form-group-${classType}` : `${data.classes} form-group-${classType}`;\n return control;\n}\n\nexport function createFormStatic(id: string, data: IFormStaticData): IFormControl {\n const control = createFormControl(id, \"static\", data);\n data = control.data;\n data.style = data.style || \"table\";\n return control;\n}\n\nexport function createFormModel(id: string, data: IFormModelData): IFormControl {\n const control = createFormControl(id, \"model\", data);\n data = control.data;\n data.name = data.name || \"\";\n return control;\n}\n\nexport function createFormFile(id: string, data: IFormFileData): IFormControl {\n const control = createFormControl(id, \"file\", data);\n data = control.data;\n data.accept = data.accept || \".jpg,.jpeg,.png\";\n data.multi = data.multi || false;\n data.baseUrl = ObjectUtils.isString(data.baseUrl) ? data.baseUrl : \"assets/\";\n data.uploadUrl = ObjectUtils.isString(data.uploadUrl) ? data.uploadUrl : \"assets\";\n data.createUploadData = data.createUploadData || ((file: File) => {\n const form = new FormData();\n form.append(\"file\", file);\n return form;\n });\n return control;\n}\n","import {ComponentFactoryResolver, Inject, Injectable, Injector, Type, ViewContainerRef} from \"@angular/core\";\nimport {\n FORM_CONTROL_PROVIDER, FORM_GROUP_TYPE,\n IDynamicFormControl,\n IFormControlComponent,\n IFormControlProvider,\n IFormGroupComponent\n} from \"../common-types\";\nimport {ObjectUtils} from \"@stemy/ngx-utils\";\n\n@Injectable()\nexport class DynamicFormService {\n\n constructor(@Inject(FORM_CONTROL_PROVIDER) private components: IFormControlProvider[],\n @Inject(FORM_GROUP_TYPE) private groupType: Type<IFormGroupComponent>,\n private resolver: ComponentFactoryResolver,\n public readonly injector: Injector) {\n }\n\n findProvider(control: IDynamicFormControl): IFormControlProvider {\n if (!control) return null;\n const providers = this.components.filter(p => p.acceptor(control));\n if (providers.length == 0) {\n throw new Error(`No component provider for control: ${JSON.stringify({\n id: control.id,\n type: control.type,\n data: control.data\n })}`);\n }\n // Sort providers\n providers.sort((a, b) => ObjectUtils.compare(a.priority, b.priority))\n return providers[0];\n }\n\n createComponent(vcr: ViewContainerRef, provider: IFormControlProvider): IFormControlComponent {\n vcr.clear();\n if (!provider) return null;\n const factory = this.resolver.resolveComponentFactory(provider.component);\n return vcr.createComponent(factory).instance;\n }\n\n createGroup(vcr: ViewContainerRef): IFormGroupComponent {\n vcr.clear();\n const factory = this.resolver.resolveComponentFactory(this.groupType);\n return vcr.createComponent(factory).instance;\n }\n}\n","import {DatePipe} from \"@angular/common\";\nimport {FactoryDependencies, FileUtils, ObjectUtils} from \"@stemy/ngx-utils\";\nimport {FormControlTester, FormControlValidator, IDynamicFormControl, IFormControlSerializer} from \"../common-types\";\n\nexport class FormUtilities {\n\n static checkField(expression: string = `true`): FormControlTester {\n // @dynamic\n const lambda = (control: IDynamicFormControl): Promise<boolean> => {\n return Promise.resolve(ObjectUtils.evaluate(expression, {control: control}));\n };\n return lambda;\n }\n\n static checkReadonly(control: IDynamicFormControl): Promise<boolean> {\n return Promise.resolve(control.visible && !control.disabled);\n }\n\n static readonly(): Promise<boolean> {\n return Promise.resolve(true);\n }\n\n static validateJSON(control: IDynamicFormControl): Promise<string> {\n const value = control.value;\n if (!value) return Promise.resolve(null);\n try {\n JSON.parse(value);\n return Promise.resolve(null);\n } catch (e) {\n return Promise.resolve(\"error.not-valid-json\")\n }\n }\n\n static validateRequired(control: IDynamicFormControl): Promise<string> {\n const value = control.value;\n return Promise.resolve(!ObjectUtils.isNumber(value) && !value ? \"error.required\" : null);\n }\n\n static validateMinLength(length: number): FormControlValidator {\n // @dynamic\n const lambda = (control: IDynamicFormControl) => {\n const value = control.value;\n if (!ObjectUtils.isString(value) || value.length < length) {\n return Promise.resolve({\"error.min-length\": {length: length}});\n }\n return Promise.resolve(null);\n };\n return lambda;\n }\n\n static validateMaxLength(length: number): FormControlValidator {\n // @dynamic\n const lambda = (control: IDynamicFormControl) => {\n const value = control.value;\n if (!ObjectUtils.isString(value) || value.length > length) {\n return Promise.resolve({\"error.max-length\": {length: length}});\n }\n return Promise.resolve(null);\n };\n return lambda;\n }\n\n static validateRequiredTranslation(control: IDynamicFormControl): Promise<string> {\n const value: any[] = control.value;\n if (!value || value.length == 0) return Promise.resolve(\"error.required\");\n return Promise.resolve(value.findIndex(t => (t.lang == \"de\" || t.lang == \"en\") && !t.translation) < 0 ? null : \"error.required\");\n }\n\n static validateEmail(control: IDynamicFormControl): Promise<string> {\n const value = control.value;\n if (!value) return Promise.resolve(null);\n const emailRegexp = /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\n return Promise.resolve(emailRegexp.test(value) ? null : \"error.invalid-email\");\n }\n\n static validatePhone(control: IDynamicFormControl): Promise<string> {\n const value = control.value;\n if (!value) return Promise.resolve(null);\n const phoneRegexp = /^(?:\\d){10,12}$/;\n return Promise.resolve(phoneRegexp.test(value) ? null : \"error.invalid-phone\");\n }\n\n static serializeLogo(id: string, parent: IDynamicFormControl): Promise<any> {\n const value: string = parent.model[id];\n return Promise.resolve(!value || value.length == 0 ? null : value);\n }\n\n static serializeFile(id: string, parent: IDynamicFormControl): Promise<any> {\n const value: any = parent.model[id];\n if (ObjectUtils.isBlob(value)) return Promise.resolve(value);\n return Promise.resolve(!ObjectUtils.isString(value) || !value.startsWith(\"data:\") ? null : FileUtils.dataToBlob(value));\n }\n\n static serializeNumber(id: string, parent: IDynamicFormControl): Promise<any> {\n const value: string = parent.model[id];\n return Promise.resolve(!value || value.length == 0 ? 0 : parseFloat(value));\n }\n\n static serializeJSON(id: string, parent: IDynamicFormControl): Promise<any> {\n const value: string = parent.model[id];\n return Promise.resolve(!value ? {} : JSON.parse(value));\n }\n\n @FactoryDependencies(DatePipe)\n static serializeDate(date: DatePipe, format: string = \"yyyy-MM-dd\", defaultValue: string = \"\"): IFormControlSerializer {\n // @dynamic\n const lambda = (id: string, parent: IDynamicFormControl): Promise<any> => {\n const value: any = parent.model[id];\n if (!ObjectUtils.isDate(value)) return Promise.resolve(value || defaultValue);\n return Promise.resolve(!format ? value : date.transform(value, format));\n };\n return lambda;\n }\n}\n","import {Injectable} from \"@angular/core\";\nimport {ApiService, StringUtils} from \"@stemy/ngx-utils\";\n\nimport {FormUtilities} from \"./form-utilities\";\n\nimport {\n createFormFile,\n createFormInput,\n createFormSelect,\n FormControlValidatorFactory,\n IDynamicFormControl,\n IFormControl,\n IFormControlData,\n IFormFileData,\n IFormInputData,\n IFormSelectData,\n IFormSerializers\n} from \"../common-types\";\n\nexport interface IOpenApiSchemaProperty {\n id: string;\n type: string;\n format: string;\n column: boolean;\n additionalProperties: any;\n $ref: string;\n enum: string[];\n [key: string]: any;\n}\n\nexport interface IOpenApiSchema {\n properties: { [name: string]: IOpenApiSchemaProperty };\n required: string[];\n}\n\nexport interface IDynamicFormInputs {\n controls?: IFormControl[];\n serializers?: IFormSerializers;\n schema?: IOpenApiSchema;\n}\n\n@Injectable()\nexport class OpenApiService {\n\n private schemasPromise: Promise<any>;\n private schemas: any;\n\n constructor(private api: ApiService) {\n const baseUrl = this.api.url(\"\").replace(\"api/\", \"api-docs\");\n this.schemas = {};\n this.schemasPromise = new Promise<any>((resolve => {\n this.api.client.get(baseUrl).subscribe((res: any) => {\n this.schemas = res.definitions || {};\n resolve(this.schemas);\n }, () => {\n resolve({});\n });\n }));\n }\n\n getFormInputsForSchema(name: string): Promise<IDynamicFormInputs> {\n this.api.cache = {};\n return this.schemasPromise.then(schemas => {\n const schema: IOpenApiSchema = schemas[name];\n const inputs = this.getFormInputsForSchemaDef(schema);\n return inputs;\n });\n }\n\n private getFormInputsForSchemaDef(schema: IOpenApiSchema): IDynamicFormInputs {\n const inputs: IDynamicFormInputs = {};\n if (!schema) return inputs;\n inputs.schema = schema;\n inputs.serializers = {};\n inputs.controls = Object.keys(schema.properties || {}).map(p => {\n const property = schema.properties[p];\n property.id = p;\n inputs.serializers[p] = (id: string, parent: IDynamicFormControl) => {\n return Promise.resolve(parent.model[id]);\n };\n return this.getFormControlForProperty(property, schema);\n }).filter(t => null !== t);\n return inputs;\n }\n\n private getFormControlForProperty(property: IOpenApiSchemaProperty, schema: IOpenApiSchema): IFormControl {\n if (Array.isArray(property.enum)) {\n return createFormSelect(property.id, this.getFormSelectData(property, schema));\n }\n switch (property.type) {\n case \"string\":\n case \"number\":\n case \"boolean\":\n case \"textarea\":\n return createFormInput(property.id, this.getFormInputData(property, schema));\n case \"list\":\n return createFormSelect(property.id, this.getFormSelectData(property, schema));\n case \"file\":\n return createFormFile(property.id, this.getFormFileData(property, schema));\n }\n return null;\n }\n\n private getBaseFormData(property: IOpenApiSchemaProperty, schema: IOpenApiSchema): IFormControlData {\n return {\n readonly: property.readonly ? FormUtilities.readonly : null,\n shouldSerialize: FormUtilities.checkReadonly,\n validators: this.getValidators(property, schema)\n }\n }\n\n private getFormInputData(property: IOpenApiSchemaProperty, schema: IOpenApiSchema): IFormInputData {\n let type = StringUtils.has(property.id, \"password\", \"Password\") ? \"password\" : property.type;\n switch (property.type) {\n case \"boolean\":\n type = \"checkbox\";\n break;\n case \"textarea\":\n type = \"textarea\";\n break;\n }\n return {\n ...this.getBaseFormData(property, schema),\n type\n };\n }\n\n private getFormSelectData(property: IOpenApiSchemaProperty, schema: IOpenApiSchema): IFormSelectData {\n const options = Array.isArray(property.enum)\n ? () => {\n return Promise.resolve(property.enum.map(id => ({ id, label: `${property.id}.${id}` })));\n }\n : () => {\n this.api.cache[property.endpoint] = this.api.cache[property.endpoint] || this.api.list(property.endpoint, this.api.makeListParams(1, -1)).then(result => {\n return result.items.map(i => {\n return { id: i._id, label: i.name };\n });\n });\n return this.api.cache[property.endpoint];\n };\n return {\n ...this.getBaseFormData(property, schema),\n options,\n };\n }\n\n private getFormFileData(property: IOpenApiSchemaProperty, schema: IOpenApiSchema): IFormFileData {\n return {\n ...this.getBaseFormData(property, schema),\n multi: property.multi\n };\n }\n\n private getValidators(property: IOpenApiSchemaProperty, schema: IOpenApiSchema): FormControlValidatorFactory[] {\n const validators: FormControlValidatorFactory[] = [];\n if (schema.required.indexOf(property.id) >= 0) {\n validators.push(FormUtilities.validateRequired);\n }\n if (property.minLength) {\n validators.push({\n type: FormUtilities,\n func: FormUtilities.validateMinLength,\n params: [property.minLength]\n });\n }\n if (property.maxLength) {\n validators.push({\n type: FormUtilities,\n func: FormUtilities.validateMaxLength,\n params: [property.maxLength]\n });\n }\n switch (property.format) {\n case \"email\":\n validators.push(FormUtilities.validateEmail);\n break;\n }\n return validators;\n }\n}\n","import {\n ChangeDetectorRef,\n Directive,\n ElementRef,\n EventEmitter,\n HostBinding,\n HostListener,\n Inject,\n Input,\n OnDestroy,\n OnInit,\n Output,\n Renderer2\n} from \"@angular/core\";\nimport {Subscription} from \"rxjs\";\nimport {IAsyncMessage, IToasterService, TOASTER_SERVICE} from \"@stemy/ngx-utils\";\nimport {AsyncSubmitMethod, IDynamicFormBase} from \"../common-types\";\n\n@Directive({\n selector: \"[async-submit]\",\n exportAs: \"async-submit\"\n})\nexport class AsyncSubmitDirective implements OnInit, OnDestroy {\n\n @Input(\"async-submit\") method: AsyncSubmitMethod;\n @Input() form: IDynamicFormBase;\n\n @Output() onSuccess: EventEmitter<IAsyncMessage>;\n @Output() onError: EventEmitter<IAsyncMessage>;\n\n private loading: boolean;\n private disabled: boolean;\n private callback: Function;\n private onStatusChange: Subscription;\n private onSubmit: Subscription;\n\n @HostBinding(\"class.disabled\")\n get isDisabled(): boolean {\n return this.disabled;\n }\n\n @HostBinding(\"class.loading\")\n get isLoading(): boolean {\n return this.loading;\n }\n\n constructor(@Inject(TOASTER_SERVICE) private toaster: IToasterService, private cdr: ChangeDetectorRef, elem: ElementRef, renderer: Renderer2) {\n this.onSuccess = new EventEmitter<IAsyncMessage>();\n this.onError = new EventEmitter<IAsyncMessage>();\n if (elem.nativeElement.tagName !== \"BUTTON\") return;\n renderer.setAttribute(elem.nativeElement, \"type\", \"button\");\n }\n\n ngOnInit(): void {\n if (!this.form) return;\n this.disabled = this.form.status !== \"VALID\";\n this.cdr.detectChanges();\n this.onStatusChange = this.form.onStatusChange.subscribe(form => {\n this.disabled = form.status !== \"VALID\";\n this.cdr.detectChanges();\n if (!this.callback || form.status == \"PENDING\") return;\n if (!this.disabled) {\n this.callback();\n }\n this.callback = null;\n });\n this.onSubmit = this.form.onSubmit.subscribe(() => this.callMethod());\n }\n\n ngOnDestroy(): void {\n if (this.onStatusChange) this.onStatusChange.unsubscribe();\n if (this.onSubmit) this.onSubmit.unsubscribe();\n }\n\n @HostListener(\"click\")\n click(): void {\n this.callback = () => this.callMethod();\n if (this.form.status !== \"VALID\" && this.form.status !== \"INVALID\") return;\n this.callback();\n this.callback = null;\n }\n\n callMethod(): void {\n if (this.loading) return;\n this.loading = true;\n this.method(this.form).then(result => {\n this.loading = false;\n if (result) {\n this.onSuccess.emit(result);\n this.toaster.success(result.message, result.context);\n }\n }, reason => {\n if (!reason || !reason.message)\n throw new Error(\"Reason must implement IAsyncMessage interface\");\n this.loading = false;\n this.onError.emit(reason);\n this.toaster.error(reason.message, reason.context);\n });\n }\n}\n","import {Directive, Input, OnChanges, SimpleChanges, ViewContainerRef} from \"@angular/core\";\nimport {IDynamicFormControl, IFormControlComponent} from \"../common-types\";\nimport {DynamicFormService} from \"../services/dynamic-form.service\";\n\n@Directive({\n selector: \"[form-control]\",\n})\nexport class DynamicFormControlDirective implements OnChanges {\n\n @Input(\"form-control\") control: IDynamicFormControl;\n\n get component(): IFormControlComponent {\n return this.comp;\n }\n\n private comp: IFormControlComponent;\n\n constructor(private vcr: ViewContainerRef, private forms: DynamicFormService) {\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.control) {\n this.comp = this.forms.createComponent(this.vcr, this.control.provider);\n }\n if (!this.comp) return;\n this.comp.control = this.control;\n }\n}\n","import {Directive, Input, TemplateRef} from \"@angular/core\";\n\n@Directive({\n selector: `ng-template[control],\n ng-template[label],\n ng-template[input],\n ng-template[prefix],\n ng-template[suffix],\n ng-template[setPrefix],\n ng-template[setSuffix],\n ng-template[formPrefix],\n ng-template[formSuffix],\n ng-template[innerFormPrefix],\n ng-template[innerFormSuffix]`\n})\nexport class DynamicFormTemplateDirective {\n\n @Input() control: string;\n @Input() label: string;\n @Input() input: string;\n @Input() prefix: string;\n @Input() suffix: string;\n @Input() setPrefix: string;\n @Input() setSuffix: string;\n @Input() formPrefix: string;\n @Input() formSuffix: string;\n @Input() innerFormPrefix: string;\n @Input() innerFormSuffix: string;\n\n constructor(public template: TemplateRef<any>) {\n }\n}\n","import { AfterContentInit, ChangeDetectorRef, ContentChild, ContentChildren, EventEmitter, Injector, Input, Output, QueryList, TemplateRef, Directive } from \"@angular/core\";\nimport {ObjectUtils} from \"@stemy/ngx-utils\";\nimport {\n DynamicFormControl, DynamicFormState, IDynamicFormBase, IDynamicFormControl, IDynamicFormTemplates,\n IFormControlProvider\n} from \"../../common-types\";\nimport {DynamicFormTemplateDirective} from \"../../directives/dynamic-form-template.directive\";\nimport {DynamicFormService} from \"../../services/dynamic-form.service\";\n\n@Directive()\nexport abstract class DynamicFormBaseComponent implements IDynamicFormBase, AfterContentInit {\n\n @Input() name: string;\n @Input() readonly: boolean;\n @Input() updateOn: \"change\" | \"blur\" | \"submit\";\n @Input() classes: any;\n @Input() parent: IDynamicFormBase;\n\n @Input() wrapperTemplate: TemplateRef<any>;\n @Input() fieldSetTemplate: TemplateRef<any>;\n @Input() controlTemplate: TemplateRef<any>;\n\n @Input() controlTemplates: IDynamicFormTemplates;\n @Input() labelTemplates: IDynamicFormTemplates;\n @Input() inputTemplates: IDynamicFormTemplates;\n @Input() prefixTemplates: IDynamicFormTemplates;\n @Input() suffixTemplates: IDynamicFormTemplates;\n @Input() setPrefixTemplates: IDynamicFormTemplates;\n @Input() setSuffixTemplates: IDynamicFormTemplates;\n\n @Output() onChange: EventEmitter<IDynamicFormControl>;\n @Output() onStatusChange: EventEmitter<IDynamicFormBase>;\n @Output() onInit: EventEmitter<IDynamicFormBase>;\n @Output() onSubmit: EventEmitter<IDynamicFormBase>;\n\n @ContentChild(\"prefixTemplate\")\n prefixTemplate: TemplateRef<any>;\n\n @ContentChild(\"suffixTemplate\")\n suffixTemplate: TemplateRef<any>;\n\n get root(): IDynamicFormBase {\n let form: IDynamicFormBase = this;\n while (ObjectUtils.isDefined(form.parent)) {\n form = form.parent;\n }\n return form;\n }\n\n abstract status: DynamicFormState;\n readonly injector: Injector;\n readonly cdr: ChangeDetectorRef;\n\n @ContentChildren(DynamicFormTemplateDirective)\n protected templates: QueryList<DynamicFormTemplateDirective>;\n\n @ContentChild(\"wrapperTemplate\")\n protected cWrapperTemplate: TemplateRef<any>;\n\n @ContentChild(\"fieldSetTemplate\")\n protected cFieldSetTemplate: TemplateRef<any>;\n\n @ContentChild(\"controlTemplate\")\n protected cControlTemplate: TemplateRef<any>;\n\n protected constructor(cdr: ChangeDetectorRef, private formService: DynamicFormService) {\n this.name = \"\";\n\n this.controlTemplates = {};\n this.labelTemplates = {};\n this.inputTemplates = {};\n this.prefixTemplates = {};\n this.suffixTemplates = {};\n\n this.onChange = new EventEmitter<DynamicFormControl>();\n this.onStatusChange = new EventEmitter<IDynamicFormBase>();\n this.onInit = new EventEmitter<IDynamicFormBase>();\n this.onSubmit = new EventEmitter<IDynamicFormBase>();\n this.injector = formService.injector;\n this.cdr = cdr;\n }\n\n // --- IDynamicFormBase\n\n abstract validate(showErrors?: boolean): Promise<any>;\n abstract serialize(validate?: boolean): Promise<any>;\n abstract check(): Promise<any>;\n abstract getControl(id: string): IDynamicFormControl;\n\n findProvider(control: IDynamicFormControl): IFormControlProvider {\n return this.formService.findProvider(control);\n }\n\n // --- Lifecycle hooks\n\n ngAfterContentInit(): void {\n this.wrapperTemplate = this.wrapperTemplate || this.cWrapperTemplate;\n this.fieldSetTemplate = this.fieldSetTemplate || this.cFieldSetTemplate;\n this.controlTemplate = this.controlTemplate || this.cControlTemplate;\n this.controlTemplates = this.filterTemplates(this.controlTemplates, \"control\");\n this.labelTemplates = this.filterTemplates(this.labelTemplates, \"label\");\n this.inputTemplates = this.filterTemplates(this.inputTemplates , \"input\");\n this.prefixTemplates = this.filterTemplates(this.prefixTemplates, \"prefix\");\n this.suffixTemplates = this.filterTemplates(this.suffixTemplates, \"suffix\");\n this.setPrefixTemplates = this.filterTemplates(this.setPrefixTemplates, \"setPrefix\");\n this.setSuffixTemplates = this.filterTemplates(this.setSuffixTemplates, \"setSuffix\");\n }\n\n protected filterTemplates(templates: IDynamicFormTemplates, type: string): IDynamicFormTemplates {\n if (ObjectUtils.isObject(templates) && Object.keys(templates).length > 0) return templates;\n return this.templates.filter(t => !!t[type]).reduce((result, directive) => {\n result[directive[type]] = directive.template;\n return result;\n }, {});\n }\n}\n","import {AfterContentInit, ChangeDetectorRef, Component, Input, OnChanges, SimpleChanges} from \"@angular/core\";\nimport {first} from \"rxjs/operators\";\nimport {\n DynamicFormGroup,\n DynamicFormState,\n IDynamicForm,\n IDynamicFormControl,\n IFormControl,\n IFormFieldSet,\n IFormSerializers\n} from \"../../common-types\";\nimport {DynamicFormService} from \"../../services/dynamic-form.service\";\nimport {DynamicFormBaseComponent} from \"../base/dynamic-form-base.component\";\n\n@Component({\n moduleId: module.id,\n selector: \"dynamic-form, [dynamic-form]\",\n templateUrl: \"./dynamic-form.component.html\",\n providers: [{provide: DynamicFormBaseComponent, useExisting: DynamicFormComponent}]\n})\nexport class DynamicFormComponent extends DynamicFormBaseComponent implements IDynamicForm, AfterContentInit, OnChanges {\n\n @Input() group: DynamicFormGroup;\n @Input() controls: IFormControl[];\n @Input() serializers: IFormSerializers;\n @Input() fieldSets: IFormFieldSet[];\n @Input() data: any;\n\n defaultFieldSet: IFormFieldSet;\n\n get status(): DynamicFormState {\n return this.group.state;\n }\n\n get formControls(): IDynamicFormControl[] {\n return this.group.formControls;\n }\n\n constructor(cdr: ChangeDetectorRef, forms: DynamicFormService) {\n super(cdr, forms);\n this.group = new DynamicFormGroup(this);\n this.defaultFieldSet = {\n id: \"\",\n title: \"\",\n classes: \"\"\n };\n }\n\n // --- Lifecycle hooks\n\n ngOnChanges(changes: SimpleChanges): void {\n if (!this.data) return;\n if (changes.data || changes.controls || changes.serializers || changes.formGroup) {\n if (this.group.id) return;\n this.group.setup(this.data, this);\n this.group.reloadControls();\n }\n }\n\n // --- Custom ---\n\n onFormSubmit(): void {\n const root = this.root;\n root.validate().then(() => root.onSubmit.emit(this), () => {});\n }\n\n // --- IDynamicForm ---\n\n validate(showErrors: boolean = true): Promise<any> {\n return new Promise<any>((resolve, reject) => {\n this.group.statusChanges.pipe(first(status => status == \"VALID\" || status == \"INVALID\")).subscribe(status => {\n if (showErrors) this.group.showErrors();\n if (status == \"VALID\") {\n resolve(null);\n return;\n }\n reject(null);\n });\n this.group.updateValueAndValidity();\n });\n }\n\n serialize(validate?: boolean): Promise<any> {\n return new Promise<any>((resolve, reject) => {\n const serialize = () => {\n this.group.serialize().then(resolve);\n };\n if (validate) {\n this.validate().then(serialize, reject);\n return;\n }\n serialize();\n });\n }\n\n check(): Promise<any> {\n return this.group.check();\n }\n\n getControl(id: string): IDynamicFormControl {\n return this.group.getControl(id);\n }\n}\n","import {\n AfterContentInit, ChangeDetectorRef, Component, ContentChild, Input, OnChanges, QueryList, SimpleChanges,\n TemplateRef, ViewChildren\n} from \"@angular/core\";\nimport {ObjectUtils, UniqueUtils} from \"@stemy/ngx-utils\";\nimport {\n DynamicFormGroup, DynamicFormState, IDynamicFormBase, IDynamicFormControl, IDynamicFormsConfigs,\n IDynamicFormTemplates, IDynamicSingleFormConfig\n} from \"../../common-types\";\nimport {DynamicFormBaseComponent} from \"../base/dynamic-form-base.component\";\nimport {DynamicFormService} from \"../../services/dynamic-form.service\";\n\nconst statusPriority: DynamicFormState[] = [\"LOADING\", \"PENDING\", \"DISABLED\", \"INVALID\"];\n\n@Component({\n moduleId: module.id,\n selector: \"dynamic-forms, [dynamic-forms]\",\n templateUrl: \"./dynamic-forms.component.html\",\n providers: [{provide: DynamicFormBaseComponent, useExisting: DynamicFormsComponent}]\n})\nexport class DynamicFormsComponent extends DynamicFormBaseComponent implements IDynamicFormBase, AfterContentInit, OnChanges {\n\n @Input() data: IDynamicFormsConfigs;\n\n @Input() containerTemplate: TemplateRef<any>;\n\n @Input() formPrefixTemplates: IDynamicFormTemplates;\n @Input() formSuffixTemplates: IDynamicFormTemplates;\n @Input() innerFormPrefixTemplates: IDynamicFormTemplates;\n @Input() innerFormSuffixTemplates: IDynamicFormTemplates;\n\n get status(): DynamicFormState {\n for (let i = 0; i < statusPriority.length; i++) {\n const status = statusPriority[i];\n if (this.checkForms(f => f.status == status)) return status;\n }\n return \"VALID\";\n }\n\n public configs: IDynamicFormsConfigs;\n\n @ContentChild(\"containerTemplate\")\n protected cContainerTemplate: TemplateRef<any>;\n\n @ViewChildren(DynamicFormBaseComponent)\n private forms: QueryList<IDynamicFormBase>;\n\n constructor(cdr: ChangeDetectorRef, formService: DynamicFormService) {\n super(cdr, formService);\n this.formPrefixTemplates = {};\n this.formSuffixTemplates = {};\n this.innerFormPrefixTemplates = {};\n this.innerFormSuffixTemplates = {};\n }\n\n // --- Lifecycle hooks\n\n ngAfterContentInit(): void {\n super.ngAfterContentInit();\n this.containerTemplate = this.containerTemplate || this.cContainerTemplate;\n this.formPrefixTemplates = this.filterTemplates(this.formPrefixTemplates, \"formPrefix\");\n this.formSuffixTemplates = this.filterTemplates(this.formSuffixTemplates, \"formSuffix\");\n this.innerFormPrefixTemplates = this.filterTemplates(this.innerFormPrefixTemplates, \"innerFormPrefix\");\n this.innerFormSuffixTemplates = this.filterTemplates(this.innerFormSuffixTemplates, \"innerFormSuffix\");\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n this.configs = this.createFormGroups(this.data);\n }\n\n // --- IDynamicFormBase ---\n\n validate(showErrors: boolean = true): Promise<any> {\n if (!this.forms) return Promise.reject(null);\n return Promise.all(this.forms.map(f => f.validate(showErrors)));\n }\n\n serialize(validate?: boolean): Promise<any> {\n if (!this.forms) return validate ? Promise.reject(null) : Promise.resolve({});\n return new Promise<any>((resolve, reject) => {\n const promises = this.forms.map(f => f.serialize(validate));\n Promise.all(promises).then(results => {\n let result = {};\n results.forEach((data, ix) => {\n const config = this.data[ix];\n let path: Array<string | number> = null;\n if (ObjectUtils.isArray(config.path) && config.path.length > 0) {\n path = config.path;\n } else if (ObjectUtils.isString(config.path) && config.path.length > 0) {\n path = config.path.split(\".\");\n } else if (ObjectUtils.isNumber(config.path)) {\n path = [config.path];\n }\n if (!path) {\n result = ObjectUtils.assign(result, data);\n return;\n }\n result = ObjectUtils.mapToPath(result, data, path.map(p => `${p}`));\n });\n resolve(result);\n }, reject);\n });\n }\n\n check(): Promise<any> {\n if (!this.forms) return Promise.resolve(null);\n return Promise.all(this.forms.map(t => t.check()));\n }\n\n getControl(id: string): IDynamicFormControl {\n return this.getFromValue(f => f.getControl(id));\n }\n\n private checkForms(check: (form: IDynamicFormBase) => boolean): boolean {\n this.cdr.detectChanges();\n if (!this.forms) return false;\n return ObjectUtils.isDefined(this.forms.find(check));\n }\n\n private getFromValue<T>(check: (form: IDynamicFormBase) => T): T {\n if (!this.forms) return null;\n let value: T = null;\n this.forms.find(f => {\n value = check(f);\n return ObjectUtils.isDefined(value);\n });\n return value;\n }\n\n private createFormGroups(configs: IDynamicFormsConfigs): IDynamicFormsConfigs {\n return (configs || []).map((c: any) => {\n if (c.multi) return c;\n const config = <IDynamicSingleFormConfig>c;\n const group = new DynamicFormGroup(this, {\n id: config.id || UniqueUtils.uuid(),\n type: \"model\",\n data: config.controlData\n });\n config.group = group;\n config.name = config.name || this.name;\n group.setup(config.data, config);\n group.reloadControls();\n return config;\n });\n }\n}\n","import {Component, HostBinding} from \"@angular/core\";\nimport {IDynamicForm, IDynamicFormControl, IFormGroupComponent} from \"../../common-types\";\n\n@Component({\n moduleId: module.id,\n selector: \"div[dynamic-form-group]\",\n templateUrl: \"./dynamic-form-group.component.html\"\n})\nexport class DynamicFormGroupComponent implements IFormGroupComponent {\n form: IDynamicForm;\n control: IDynamicFormControl;\n\n @HostBinding(\"class\")\n get classes(): string {\n if (!this.control) return \"form-group\";\n return [\"form-group\", \"form-group-\" + this.control.id, this.control.data.classes, this.control.errors && this.control.touched ? \"form-group-invalid\" : \"\"].join(\" \");\n }\n}\n","import {Component, Inject} from \"@angular/core\";\nimport {FormControlComponent, IDynamicFormControl, IFormFileData} from \"../../common-types\";\nimport {ApiService, ArrayUtils, FileUtils, IToasterService, ObjectUtils, TOASTER_SERVICE} from \"@stemy/ngx-utils\";\n\n@Component({\n selector: \"dynamic-form-file\",\n styleUrls: [\"./dynamic-form-file.component.scss\"],\n templateUrl: \"./dynamic-form-file.component.html\"\n})\nexport class DynamicFormFileComponent extends FormControlComponent<IFormFileData> {\n\n private fileImageCache: any[];\n\n // Acceptor for provider\n static acceptor(control: IDynamicFormControl): boolean {\n return control.type == \"file\";\n }\n\n // Loader for provider\n static loader(): Promise<any> {\n return Promise.resolve();\n }\n\n constructor(readonly api: ApiService, @Inject(TOASTER_SERVICE) readonly toaster: IToasterService) {\n super();\n this.fileImageCache = [];\n }\n\n onSelect(input: HTMLInputElement): void {\n this.processFiles(input.files);\n input.value = \"\";\n }\n\n protected processFiles(fileList: FileList): void {\n const files: File[] = [];\n const accept = this.data.accept;\n const types: string[] = ObjectUtils.isString(accept) && accept.length > 0 ? accept.toLowerCase().split(\",\") : null;\n if (fileList.length == 0) return;\n for (let i = 0; i < fileList.length; i++) {\n const file = fileList.item(i);\n const type = file.type.toLowerCase();\n const ext = FileUtils.getExtension(file);\n if (types && !ArrayUtils.has(types, type, ext)) continue;\n files.push(file);\n }\n if (files.length == 0) {\n this.toaster.error(\"message.error.wrong-files\");\n return;\n }\n this.upload(files);\n }\n\n protected upload(files: File[]): void {\n const single = !this.data.multi;\n if (single) files.length = Math.min(files.length , 1);\n const promises = [];\n files.forEach((file, ix) => {\n if (this.data.asDataUrl) {\n promises.push(FileUtils.readFileAsDataURL(file));\n return;\n }\n if (this.data.asFile) {\n promises.push(Promise.resolve(file));\n return;\n }\n promises.push(\n this.api.upload(\n this.data.uploadUrl,\n this.data.createUploadData(file),\n console.log,\n this.data.uploadOptions\n ).then(asset => asset._id || asset, () => null)\n );\n });\n Promise.all(promises).then(assets => {\n if (single) {\n this.control.setValue(assets[0]);\n return;\n }\n const current = this.value || [];\n this.control.setValue(current.concat(assets.filter(t => !!t)));\n });\n }\n\n delete(index?: number): void {\n if (this.data.multi) {\n const current = Array.from(this.value || []);\n current.splice(index, 1);\n this.control.setValue(current);\n return;\n }\n this.control.setValue(null);\n }\n\n getUrl(image: any): string {\n return `url('${this.getImgUrl(image)}')`;\n }\n\n private getImgUrl(image: any): string {\n if (ObjectUtils.isBlob(image)) {\n let cache = this.fileImageCache.find(t => t.file == image);\n if (!cache) {\n cache = {file: image, url: URL.createObjectURL(image)};\n this.fileImageCache.push(cache);\n }\n return cache.url;\n }\n const url = !image ? null : image.imageUrl || image;\n if (!ObjectUtils.isString(url)) return null;\n if (url.startsWith(\"data:\")) return url;\n if (!this.data.baseUrl) {\n const subUrl = url.startsWith(\"/\") ? url.substr(1) : url;\n return this.api.url(subUrl);\n }\n return this.api.url(`${this.data.baseUrl}${url}`);\n }\n}\n","import {Component, HostBinding, Inject} from \"@angular/core\";\nimport {ILanguageService, ITranslation, LANGUAGE_SERVICE, ObjectUtils} from \"@stemy/ngx-utils\";\nimport {DynamicFormControl, FormControlComponent, IFormInputData} from \"../../common-types\";\n\n@Component({\n moduleId: module.id,\n selector: \"dynamic-form-input\",\n templateUrl: \"./dynamic-form-input.component.html\"\n})\nexport class DynamicFormInputComponent extends FormControlComponent<IFormInputData> {\n\n // Acceptor for provider\n static acceptor(control: DynamicFormControl): boolean {\n return control.type == \"input\";\n }\n\n // Loader for provider\n static loader(): Promise<any> {\n return Promise.resolve();\n }\n\n @HostBinding(\"class.checked\")\n get isChecked(): boolean {\n return this.data.type == \"checkbox\" && this.value;\n }\n\n constructor(@Inject(LANGUAGE_SERVICE) private language: ILanguageService) {\n super();\n }\n\n onDateChange(value: string): void {\n const date = new Date(value);\n const dateValue = <number>date.valueOf();\n if (isNaN(dateValue) || dateValue < -30610224000000) return;\n this.control.setValue(date)\n }\n\n onMaskChange(value: string): void {\n value = ObjectUtils.isFunction(this.data.unmask) ? this.data.unmask(value) : value;\n this.control.setValue(value)\n }\n\n onTextChange(value: string): void {\n if (!this.data.useLanguage) {\n this.control.setValue(value);\n return;\n }\n const translations: ITranslation[] = ObjectUtils.isArray(this.value) ? Array.from(this.value) : [];\n const translation = translations.find(t => t.lang == this.language.editLanguage);\n if (translation) {\n translation.translation = value;\n } else {\n translations.push({\n lang: this.language.editLanguage,\n translation: value\n });\n }\n this.control.setValue(translations);\n }\n\n onNumberBlur(): void {\n const value = this.value;\n if (ObjectUtils.isNumber(this.data.max) && this.data.max < value) {\n this.control.setValue(this.data.max);\n } else if (ObjectUtils.isNumber(this.data.min) && this.data.min > value) {\n this.control.setValue(this.data.min);\n }\n this.control.onBlur();\n }\n}\n","import {Component} from \"@angular/core\";\nimport {ObjectUtils, ReflectUtils} from \"@stemy/ngx-utils\";\nimport {\n DynamicFormControl,\n FormControlComponent,\n IDynamicForm, IDynamicFormControl,\n IFormControl, IFormControlOption,\n IFormControlOptions,\n IFormSelectData\n} from \"../../common-types\";\n\n@Component({\n moduleId: module.id,\n selector: \"dynamic-form-select\",\n templateUrl: \"./dynamic-form-select.component.html\"\n})\nexport class DynamicFormSelectComponent extends FormControlComponent<IFormSelectData> {\n\n // Acceptor for provider\n static acceptor(control: DynamicFormControl): boolean {\n return control.type == \"select\";\n }\n\n // Loader for provider\n static loader(control: IDynamicFormControl): Promise<any> {\n const data = control.getData<IFormSelectData>();\n if (data.type == \"radio\" && data.multi) {\n return Promise.reject(\"Radio group doesn't support multi select!\");\n }\n return new Promise<any>(resolve => {\n const getOptions = ReflectUtils.resolve<IFormControlOptions>(data.options, control.form.injector);\n getOptions(control).then(options => {\n if (data.emptyOption) options.unshift({id: null, label: \"\"});\n control.meta.options = options;\n DynamicFormSelectComponent.fillOptions(control, options);\n resolve(options);\n });\n });\n }\n\n static fillOptions(control: IDynamicFormControl, options: IFormControlOption[]): void {\n const data = control.getData<IFormSelectData>();\n const selected = control.value;\n if (data.multi || options.length == 0 || options.findIndex(t => t.id == selected) >= 0) return;\n control.setValue(options[0].id);\n }\n\n onSelectChange(value: any): void {\n const isArray = ObjectUtils.isArray(value);\n const current = this.value;\n if (this.data.multi) {\n if (isArray) {\n this.control.setValue(value);\n return;\n }\n if (ObjectUtils.isArray(current)) {\n this.control.setValue(\n current.indexOf(value) < 0\n ? current.concat([value])\n : current.filter(c => c !== value)\n );\n return;\n }\n this.control.setValue([value]);\n return;\n }\n if (isArray) value = value[0];\n if (current == value) {\n const option = this.meta.options.find(o => o.id !== value);\n value = option ? option.id : null;\n }\n this.control.setValue(value);\n }\n\n checkValue(option: IFormControlOption): boolean {\n const value = this.value;\n return ObjectUtils.isArray(value) ? value.indexOf(option.id) >= 0 : option.id == value;\n }\n\n findOption(option: IFormControlOption, index: number, id: string): boolean {\n return option.id == id;\n }\n}\n","import {Component} from \"@angular/core\";\nimport {\n DynamicFormControl,\n FormControlComponent,\n IDynamicForm,\n IFormControl,\n IFormStaticData\n} from \"../../common-types\";\n\n@Component({\n moduleId: module.id,\n selector: \"dynamic-form-static\",\n templateUrl: \"./dynamic-form-static.component.html\"\n})\nexport class DynamicFormStaticComponent extends FormControlComponent<IFormStaticData> {\n\n // Acceptor for provider\n static acceptor(control: DynamicFormControl): boolean {\n return control.type == \"static\";\n }\n\n // Loader for provider\n static loader(): Promise<any> {\n return Promise.resolve();\n }\n}\n","import {Component, ViewChild} from \"@angular/core\";\nimport {DynamicFormControl, FormControlComponent, IDynamicForm, IFormModelData} from \"../../common-types\";\n\n@Component({\n moduleId: module.id,\n selector: \"dynamic-form-model\",\n templateUrl: \"./dynamic-form-model.component.html\"\n})\nexport class DynamicFormModelComponent extends FormControlComponent<IFormModelData> {\n\n @ViewChild(\"subForm\")\n private subForm: IDynamicForm;\n\n // Acceptor for provider\n static acceptor(control: DynamicFormControl): boolean {\n return control.type == \"model\";\n }\n\n // Loader for provider\n static loader(): Promise<any> {\n return Promise.resolve();\n }\n}\n","import {Directive, Input, OnChanges, SimpleChanges, ViewContainerRef} from \"@angular/core\";\nimport {IDynamicForm, IDynamicFormControl, IFormControlComponent, IFormGroupComponent} from \"../common-types\";\nimport {DynamicFormService} from \"../services/dynamic-form.service\";\n\n@Directive({\n selector: \"[form-group]\",\n})\nexport class DynamicFormGroupDirective implements OnChanges {\n\n @Input(\"form-group\") control: IDynamicFormControl;\n @Input() form: IDynamicForm;\n @Input() visible: boolean;\n\n get component(): IFormControlComponent {\n return this.comp;\n }\n\n private comp: IFormGroupComponent;\n\n constructor(private vcr: ViewContainerRef, private forms: DynamicFormService) {\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.control || changes.form || changes.visible) {\n if (!this.visible) {\n this.vcr.clear();\n this.comp = null;\n return;\n }\n this.comp = this.forms.createGroup(this.vcr);\n }\n if (!this.comp) return;\n this.comp.form = this.form;\n this.comp.control = this.control;\n }\n}\n","import {ModuleWithProviders, NgModule} from \"@angular/core\";\nimport {CommonModule} from \"@angular/common\";\nimport {FormsModule, ReactiveFormsModule} from \"@angular/forms\";\nimport {TextMaskModule} from \"angular2-text-mask\";\nimport {NgxUtilsModule} from \"@stemy/ngx-utils\";\nimport {FormControlProvider, FormGroupProvider, provideFormControl, provideFormGroup} from \"./common-types\";\n\nimport {DynamicFormService} from \"./services/dynamic-form.service\";\nimport {OpenApiService} from \"./services/open-api.service\";\n\nimport {AsyncSubmitDirective} from \"./directives/async-submit.directive\";\nimport {DynamicFormControlDirective} from \"./directives/dynamic-form-control.directive\";\nimport {DynamicFormGroupDirective} from \"./directives/dynamic-form-group.directive\";\nimport {DynamicFormTemplateDirective} from \"./directives/dynamic-form-template.directive\";\nimport {DynamicFormsComponent} from \"./components/dynamic-forms/dynamic-forms.component\";\nimport {DynamicFormComponent} from \"./components/dynamic-form/dynamic-form.component\";\n\nimport {DynamicFormGroupComponent} from \"./components/dynamic-form-group/dynamic-form-group.component\";\nimport {DynamicFormFileComponent} from \"./components/dynamic-form-file/dynamic-form-file.component\";\nimport {DynamicFormInputComponent} from \"./components/dynamic-form-input/dynamic-form-input.component\";\nimport {DynamicFormSelectComponent} from \"./components/dynamic-form-select/dynamic-form-select.component\";\nimport {DynamicFormStaticComponent} from \"./components/dynamic-form-static/dynamic-form-static.component\";\nimport {DynamicFormModelComponent} from \"./components/dynamic-form-model/dynamic-form-model.component\";\n\n// --- Components ---\nexport const components = [\n DynamicFormsComponent,\n DynamicFormComponent,\n DynamicFormGroupComponent,\n DynamicFormFileComponent,\n DynamicFormInputComponent,\n DynamicFormSelectComponent,\n DynamicFormStaticComponent,\n DynamicFormModelComponent\n];\n\n// --- Directives ---\nexport const directives = [\n AsyncSubmitDirective,\n DynamicFormControlDirective,\n DynamicFormGroupDirective,\n DynamicFormTemplateDirective\n];\n\n// --- Pipes ---\nexport const pipes = [];\n\n@NgModule({\n declarations: [\n ...components,\n ...directives,\n ...pipes\n ],\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n TextMaskModule,\n NgxUtilsModule\n ],\n exports: [\n ...components,\n ...directives,\n ...pipes,\n FormsModule,\n ReactiveFormsModule,\n NgxUtilsModule\n ],\n entryComponents: components,\n providers: pipes\n})\nexport class NgxDynamicFormModule {\n\n static forRoot(controlProviders?: Array<FormControlProvider>, groupProvider?: FormGroupProvider): ModuleWithProviders<NgxDynamicFormModule> {\n return {\n ngModule: NgxDynamicFormModule,\n providers: [\n DynamicFormService,\n OpenApiService,\n provideFormControl(DynamicFormFileComponent, DynamicFormFileComponent.acceptor, DynamicFormFileComponent.loader),\n provideFormControl(DynamicFormInputComponent, DynamicFormInputComponent.acceptor, DynamicFormInputComponent.loader),\n provideFormControl(DynamicFormSelectComponent, DynamicFormSelectComponent.acceptor, DynamicFormSelectComponent.loader),\n provideFormControl(DynamicFormStaticComponent, DynamicFormStaticComponent.acceptor, DynamicFormStaticComponent.loader),\n provideFormControl(DynamicFormModelComponent, DynamicFormModelComponent.acceptor, DynamicFormModelComponent.loader),\n ...(controlProviders || []),\n groupProvider || provideFormGroup(DynamicFormGroupComponent)\n ]\n }\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n\nexport {FORM_GROUP_TYPE as ɵa} from './ngx-dynamic-form/common-types';\nexport {DynamicFormGroupDirective as ɵe} from './ngx-dynamic-form/directives/dynamic-form-group.directive';\nexport {components as ɵb,directives as ɵc,pipes as ɵd} from './ngx-dynamic-form/ngx-dynamic-form.module';"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"stemy-ngx-dynamic-form.js","sources":["../../src/ngx-dynamic-form/common-types.ts","../../src/ngx-dynamic-form/services/dynamic-form.service.ts","../../src/ngx-dynamic-form/services/form-utilities.ts","../../src/ngx-dynamic-form/services/open-api.service.ts","../../src/ngx-dynamic-form/directives/async-submit.directive.ts","../../src/ngx-dynamic-form/directives/dynamic-form-control.directive.ts","../../src/ngx-dynamic-form/directives/dynamic-form-template.directive.ts","../../src/ngx-dynamic-form/components/base/dynamic-form-base.component.ts","../../src/ngx-dynamic-form/components/dynamic-form/dynamic-form.component.ts","../../src/ngx-dynamic-form/components/dynamic-forms/dynamic-forms.component.ts","../../src/ngx-dynamic-form/components/dynamic-form-group/dynamic-form-group.component.ts","../../src/ngx-dynamic-form/components/dynamic-form-file/dynamic-form-file.component.ts","../../src/ngx-dynamic-form/components/dynamic-form-input/dynamic-form-input.component.ts","../../src/ngx-dynamic-form/components/dynamic-form-select/dynamic-form-select.component.ts","../../src/ngx-dynamic-form/components/dynamic-form-static/dynamic-form-static.component.ts","../../src/ngx-dynamic-form/components/dynamic-form-model/dynamic-form-model.component.ts","../../src/ngx-dynamic-form/directives/dynamic-form-group.directive.ts","../../src/ngx-dynamic-form/ngx-dynamic-form.module.ts","../../src/stemy-ngx-dynamic-form.ts"],"sourcesContent":["import { ChangeDetectorRef, EventEmitter, HostBinding, InjectionToken, Injector, TemplateRef, Type, ValueProvider, Directive } from \"@angular/core\";\r\nimport {AbstractControl, FormControl, FormGroup, ValidationErrors} from \"@angular/forms\";\r\nimport {\r\n IResolveFactory,\r\n ITimer,\r\n IAsyncMessage,\r\n ObjectUtils,\r\n ReflectUtils,\r\n TimerUtils,\r\n UniqueUtils,\r\n IRequestOptions\r\n} from \"@stemy/ngx-utils\";\r\n\r\nexport const FORM_GROUP_TYPE: InjectionToken<Type<IFormControlComponent>> = new InjectionToken<Type<IFormControlComponent>>(\"form-group-provider\");\r\nexport const FORM_CONTROL_PROVIDER: InjectionToken<IFormControlProvider> = new InjectionToken<IFormControlProvider>(\"form-control-provider\");\r\n\r\n// --- Basic form control interfaces ---\r\nexport interface IFormControlComponent {\r\n control: IDynamicFormControl;\r\n}\r\n\r\nexport interface IFormGroupComponent {\r\n form: IDynamicForm;\r\n control: IDynamicFormControl;\r\n}\r\n\r\n@Directive()\r\nexport abstract class FormControlComponent<T extends IFormControlData> implements IFormControlComponent {\r\n\r\n control: IDynamicFormControl;\r\n\r\n get form(): IDynamicFormBase {\r\n return !this.control ? null: this.control.form;\r\n }\r\n\r\n get data(): T {\r\n return <T>(!this.control ? {} : this.control.data);\r\n }\r\n\r\n get value(): any {\r\n return !this.control ? null : this.control.value;\r\n }\r\n\r\n get meta(): any {\r\n return !this.control ? null : this.control.meta;\r\n }\r\n\r\n @HostBinding(\"class.form-input\")\r\n get inputClass(): boolean {\r\n return true;\r\n }\r\n}\r\n\r\nexport type IFormControlProviderAcceptor = (control: IDynamicFormControl) => boolean;\r\nexport type IFormControlProviderLoader = (control: IDynamicFormControl) => Promise<any>;\r\nexport type IFormControlOptions = (control: IDynamicFormControl) => Promise<IFormControlOption[]>;\r\nexport type IFormControlSerializer = (id: string, parent: IDynamicFormControl) => Promise<any>;\r\nexport type IFormInputMask = string | RegExp;\r\nexport type IFormInputMaskFunction = (raw: string) => IFormInputMask[];\r\nexport type IFormInputUnMaskFunction = (value: string) => any;\r\n\r\nexport interface IFormControlProvider {\r\n component: Type<IFormControlComponent>;\r\n priority: number;\r\n acceptor: IFormControlProviderAcceptor;\r\n loader: IFormControlProviderLoader;\r\n}\r\n\r\nexport interface IFormSerializer {\r\n id: string;\r\n func: IFormControlSerializer;\r\n}\r\n\r\nexport interface IFormSerializers {\r\n [id: string]: IFormControlSerializer | IResolveFactory | null\r\n}\r\n\r\nexport type DynamicFormState = \"VALID\" | \"INVALID\" | \"PENDING\" | \"DISABLED\" | \"LOADING\";\r\nexport type DynamicFormUpdateOn = \"change\" | \"blur\" | \"submit\";\r\n\r\nexport interface IDynamicFormControl {\r\n id: string;\r\n type: string;\r\n data: IFormControlData;\r\n visible: boolean;\r\n meta: any;\r\n form: IDynamicFormBase;\r\n injector: Injector;\r\n label: string;\r\n provider: IFormControlProvider;\r\n model: any;\r\n formId: string;\r\n\r\n errors: ValidationErrors;\r\n value: any;\r\n touched: boolean;\r\n disabled: boolean;\r\n updateOn: DynamicFormUpdateOn;\r\n\r\n setValue(value: any): void;\r\n\r\n getData<T extends IFormControlData>(): T;\r\n getControl(id: string): IDynamicFormControl;\r\n load(): Promise<any>;\r\n check(): Promise<any>;\r\n shouldSerialize(): Promise<boolean>;\r\n shouldValidate(): Promise<boolean>;\r\n serialize(): Promise<any>;\r\n onFocus(): void;\r\n onBlur(): void;\r\n showErrors(): void;\r\n}\r\n\r\nfunction createValidator(control: IDynamicFormControl): (control: AbstractControl) => Promise<ValidationErrors> {\r\n const data = control.data || {};\r\n const validators = [data.validator].concat(data.validators || []).filter(ObjectUtils.isDefined).map(v => {\r\n return ReflectUtils.resolve<FormControlValidator>(v, control.injector);\r\n });\r\n return (ctrl: any) => new Promise<ValidationErrors>((resolve) => {\r\n const control = <IDynamicFormControl>ctrl;\r\n control.shouldValidate().then(should => {\r\n if (!should) {\r\n resolve(null);\r\n return;\r\n }\r\n const validate = validators.map(v => v(control));\r\n const metaValidator = control.meta.validator;\r\n if (ObjectUtils.isFunction(metaValidator)) {\r\n validate.push(metaValidator(control));\r\n }\r\n Promise.all(validate).then(results => {\r\n results = results.filter(error => ObjectUtils.isObject(error) || ObjectUtils.isString(error));\r\n let result: ValidationErrors = null;\r\n if (results.length > 0) {\r\n result = {};\r\n results.forEach(error => {\r\n if (ObjectUtils.isString(error)) {\r\n result[error] = {};\r\n return;\r\n }\r\n result = Object.assign(result, error);\r\n });\r\n }\r\n resolve(result);\r\n });\r\n });\r\n });\r\n}\r\n\r\nclass DynamicFormControlHelper {\r\n\r\n get id(): string {\r\n return !this.control ? null : this.control.id;\r\n }\r\n\r\n get type(): string {\r\n return !this.control ? \"\" : this.control.type;\r\n }\r\n\r\n get data(): IFormControlData {\r\n return !this.control ? this.dummyData : this.control.data || this.dummyData;\r\n }\r\n\r\n get visible(): boolean {\r\n return !this.hidden;\r\n }\r\n\r\n get provider(): IFormControlProvider {\r\n return this.ctrlProvider;\r\n }\r\n\r\n public readonly formId: string;\r\n public readonly meta: any;\r\n\r\n private hidden: boolean;\r\n private ctrlProvider: IFormControlProvider;\r\n private readonly dummyData: IFormControlData;\r\n private readonly readonlyTester: (control: IDynamicFormControl) => Promise<boolean>;\r\n private readonly hideTester: (control: IDynamicFormControl) => Promise<boolean>;\r\n private readonly serializeTester: (control: IDynamicFormControl) => Promise<boolean>;\r\n private readonly validateTester: (control: IDynamicFormControl) => Promise<boolean>;\r\n\r\n constructor(private form: IDynamicFormBase, private control: IFormControl = null) {\r\n this.formId = UniqueUtils.uuid();\r\n this.meta = {};\r\n this.hidden = false;\r\n this.dummyData = {};\r\n this.readonlyTester = this.createTester(\"readonly\");\r\n this.hideTester = this.createTester(\"hidden\");\r\n this.serializeTester = this.createTester(\"shouldSerialize\", (control: IDynamicFormControl) => {\r\n return Promise.resolve(control.visible);\r\n });\r\n this.validateTester = this.createTester(\"shouldValidate\", (control: IDynamicFormControl) => {\r\n return Promise.resolve(control.visible);\r\n });\r\n }\r\n\r\n load(control: IDynamicFormControl): Promise<any> {\r\n return !this.ctrlProvider ? Promise.resolve() : this.ctrlProvider.loader(control);\r\n }\r\n\r\n check(control: IDynamicFormControl): Promise<boolean> {\r\n return new Promise<any>(resolve => {\r\n this.hideTester(control).then(hide => {\r\n this.hidden = hide;\r\n this.readonlyTester(control).then(readonly => {\r\n resolve(control.form.readonly || readonly);\r\n });\r\n });\r\n });\r\n }\r\n\r\n shouldSerialize(control: IDynamicFormControl): Promise<boolean> {\r\n return this.serializeTester(control);\r\n }\r\n\r\n shouldValidate(control: IDynamicFormControl): Promise<boolean> {\r\n return this.validateTester(control);\r\n }\r\n\r\n findProvider(control: IDynamicFormControl): void {\r\n this.ctrlProvider = !this.control || !this.control.type ? null : this.form.findProvider(control);\r\n }\r\n\r\n private createTester(test: string, defaultFunc: FormControlTester = null): (control: IDynamicFormControl) => Promise<boolean> {\r\n const tester: FormControlTester = this.data[test]\r\n ? ReflectUtils.resolve<FormControlTester>(this.data[test], this.form.injector)\r\n : (defaultFunc || (() => Promise.resolve(false)));\r\n return (control: IDynamicFormControl): Promise<boolean> => tester(control);\r\n }\r\n}\r\n\r\nexport class DynamicFormGroup extends FormGroup implements IDynamicFormControl {\r\n\r\n get id(): string {\r\n return this.helper.id;\r\n }\r\n\r\n get type(): string {\r\n return this.helper.type;\r\n }\r\n\r\n get data(): IFormControlData {\r\n return this.helper.data;\r\n }\r\n\r\n get visible(): boolean {\r\n return this.helper.visible;\r\n }\r\n\r\n get meta(): any {\r\n return this.helper.meta;\r\n }\r\n\r\n get injector(): Injector {\r\n return this.form.injector;\r\n }\r\n\r\n get label(): string {\r\n return this.data.label !== \"\" ? `${this.prefix}${this.data.label}` : \"\";\r\n }\r\n\r\n get provider(): IFormControlProvider {\r\n return this.helper.provider;\r\n }\r\n\r\n get model(): any {\r\n return this.mModel;\r\n }\r\n\r\n get formId(): string {\r\n return this.helper.formId;\r\n }\r\n\r\n get formControls(): IDynamicFormControl[] {\r\n return this.mControls || [];\r\n }\r\n\r\n get formFields(): IDynamicFormFieldSets {\r\n return this.mFieldSets || {};\r\n }\r\n\r\n get prefix(): string {\r\n return !this.name ? \"\" : `${this.name}.`;\r\n }\r\n\r\n get name(): string {\r\n return this.mName;\r\n }\r\n\r\n get state(): DynamicFormState {\r\n return <DynamicFormState>(this.loading ? \"LOADING\" : this.status);\r\n }\r\n\r\n private helper: DynamicFormControlHelper;\r\n private mName: string;\r\n private mModel: any;\r\n private mControls: IDynamicFormControl[];\r\n private mSerializers: IFormSerializer[];\r\n private mFieldSets: IDynamicFormFieldSets;\r\n private initialized: boolean;\r\n private loading: boolean;\r\n private changeTimer: ITimer;\r\n\r\n private static createFormControls(group: DynamicFormGroup, controls: IFormControl[]): IDynamicFormControl[] {\r\n if (!controls && ObjectUtils.isObject(group.model)) {\r\n const props = Object.keys(group.model);\r\n controls = props.map(id => {\r\n return getFormControl(group.model, id);\r\n }).filter(ObjectUtils.isDefined);\r\n }\r\n if (!controls) return [];\r\n return controls.map(ctrl => {\r\n if (ctrl.type == \"model\") {\r\n const subGroup = new DynamicFormGroup(group.form, ctrl);\r\n const model = group.model[ctrl.id] || {};\r\n const data = subGroup.getData<IFormModelData>();\r\n data.name = data.name || group.name;\r\n subGroup.setup(model, data);\r\n group.model[ctrl.id] = model;\r\n group.addControl(subGroup.id, subGroup);\r\n return subGroup;\r\n }\r\n return new DynamicFormControl(ctrl, group);\r\n });\r\n }\r\n\r\n private static createFormSerializers(group: DynamicFormGroup, serializers: IFormSerializers): IFormSerializer[] {\r\n if (!serializers && ObjectUtils.isObject(group.model)) {\r\n const props = Object.keys(group.model);\r\n serializers = props.reduce((result, id) => {\r\n const serializer = getFormSerializer(group.model, id);\r\n if (!serializer) return result;\r\n result[id] = serializer;\r\n return result;\r\n }, {});\r\n }\r\n if (!serializers) return [];\r\n return Object.keys(serializers).map(id => {\r\n const serializer = serializers[id] || defaultSerializer;\r\n return !serializer ? null : {\r\n id: id,\r\n func: ReflectUtils.resolve<IFormControlSerializer>(serializer, group.injector)\r\n };\r\n });\r\n }\r\n\r\n constructor(public readonly form: IDynamicFormBase, control: IFormControl = null) {\r\n super({}, {updateOn: ((!control || !control.data) ? null : control.data.updateOn) || form.updateOn || \"blur\"});\r\n this.mName = \"\";\r\n this.mModel = {};\r\n this.mControls = [];\r\n this.mSerializers = [];\r\n this.mFieldSets = {};\r\n this.helper = new DynamicFormControlHelper(form, control);\r\n this.helper.findProvider(this);\r\n this.initialized = false;\r\n this.loading = false;\r\n this.changeTimer = TimerUtils.createTimeout();\r\n this.statusChanges.subscribe(() => {\r\n const root = this.form.root;\r\n root.onStatusChange.emit(root);\r\n });\r\n this.setAsyncValidators(createValidator(this));\r\n }\r\n\r\n getData<T extends IFormControlData>(): T {\r\n return <T>this.data;\r\n }\r\n\r\n getControl(id: string): IDynamicFormControl {\r\n return <any>this.get(id);\r\n }\r\n\r\n load(): Promise<any> {\r\n const promises = this.mControls.map(c => c.load());\r\n promises.push(this.helper.load(this));\r\n return Promise.all(promises);\r\n }\r\n\r\n check(): Promise<any> {\r\n return new Promise<any>(resolve => {\r\n this.helper.check(this).then(readonly => {\r\n if (readonly) this.disable({emitEvent: false}); else this.enable({emitEvent: false});\r\n const promises = this.mControls.map(c => c.check());\r\n Promise.all(promises).then(resolve);\r\n })\r\n });\r\n }\r\n\r\n shouldSerialize(): Promise<boolean> {\r\n return this.helper.shouldSerialize(this);\r\n }\r\n\r\n shouldValidate(): Promise<boolean> {\r\n return this.helper.shouldValidate(this);\r\n }\r\n\r\n serialize(): Promise<any> {\r\n return new Promise<any>((resolve) => {\r\n const result = {};\r\n const serializers = this.mSerializers.map(s => {\r\n return new Promise<any>(resolve => {\r\n s.func(s.id, this).then(res => {\r\n const ctrl = this.getControl(s.id);\r\n const promise = !ctrl ? Promise.resolve(true) : ctrl.shouldSerialize();\r\n promise.then(should => {\r\n if (should) result[s.id] = res;\r\n resolve();\r\n });\r\n });\r\n });\r\n });\r\n Promise.all(serializers).then(() => resolve(result));\r\n });\r\n }\r\n\r\n onFocus(): void {\r\n this.markAsUntouched({onlySelf: true});\r\n }\r\n\r\n onBlur(): void {\r\n this.markAsTouched({onlySelf: true});\r\n }\r\n\r\n showErrors(): void {\r\n this.markAsTouched({onlySelf: true});\r\n this.mControls.forEach(ctrl => ctrl.showErrors());\r\n }\r\n\r\n reloadControls(): Promise<any> {\r\n let callback = () => {};\r\n if (this.initialized === false) {\r\n this.initialized = true;\r\n this.loading = true;\r\n callback = () => {\r\n this.loading = false;\r\n // this.cdr.detectChanges();\r\n const root = this.form.root;\r\n root.onInit.emit(root);\r\n root.onStatusChange.emit(root);\r\n // https://github.com/angular/angular/issues/14542\r\n const statusTimer = TimerUtils.createInterval();\r\n statusTimer.set(() => {\r\n if (this.status == \"PENDING\") return;\r\n statusTimer.clear();\r\n root.onStatusChange.emit(root);\r\n }, 50);\r\n setTimeout(statusTimer.clear, 5000);\r\n };\r\n }\r\n const promise = new Promise<any>(resolve => {\r\n this.load().then(() => this.check().then(resolve));\r\n });\r\n promise.then(callback, callback);\r\n return promise;\r\n }\r\n\r\n setup(model: any, info: IDynamicFormInfo): void {\r\n this.mName = info.name || \"\";\r\n this.mModel = model;\r\n this.mControls.forEach(ctrl => this.removeControl(ctrl.id));\r\n this.mControls = DynamicFormGroup.createFormControls(this, info.controls);\r\n this.mControls.forEach((ctrl: any) => this.addControl(ctrl.id, ctrl));\r\n this.mSerializers = DynamicFormGroup.createFormSerializers(this, info.serializers);\r\n this.mFieldSets = info.fieldSets ? info.fieldSets.reduce((result, fs) => {\r\n result[fs.id] = fs;\r\n return result;\r\n }, {}) : getFormFieldSets(Object.getPrototypeOf(model).constructor);\r\n }\r\n\r\n updateModel(control: IDynamicFormControl): void {\r\n this.model[control.id] = control.value;\r\n this.changeTimer.clear();\r\n this.changeTimer.set(() => {\r\n this.check().then(() => this.reloadControlsFrom(control, new Set<IDynamicFormControl>()).then(() => {\r\n this.form.root.onChange.emit(control);\r\n }));\r\n }, 250);\r\n }\r\n\r\n private reloadControlsFrom(control: IDynamicFormControl, controls?: Set<IDynamicFormControl>): Promise<any> {\r\n const data = control.data;\r\n if (!data || !data.reload) return Promise.resolve();\r\n const reload = ObjectUtils.isArray(data.reload) ? data.reload : [data.reload];\r\n return Promise.all(reload.map(id => {\r\n const nextControl = this.getControl(id);\r\n if (!nextControl || controls.has(nextControl)) return Promise.resolve();\r\n controls.add(nextControl);\r\n return new Promise<any>(resolve => {\r\n nextControl.load().then(() => {\r\n this.reloadControlsFrom(nextControl, controls).then(resolve);\r\n });\r\n })\r\n }))\r\n }\r\n}\r\n\r\nexport class DynamicFormControl extends FormControl implements IDynamicFormControl {\r\n\r\n get id(): string {\r\n return this.helper.id;\r\n }\r\n\r\n get type(): string {\r\n return this.helper.type;\r\n }\r\n\r\n get data(): IFormControlData {\r\n return this.helper.data;\r\n }\r\n\r\n get visible(): boolean {\r\n return this.helper.visible;\r\n }\r\n\r\n get meta(): any {\r\n return this.helper.meta;\r\n }\r\n\r\n get form(): IDynamicFormBase {\r\n return this.group.form;\r\n }\r\n\r\n get injector(): Injector {\r\n return this.form.injector;\r\n }\r\n\r\n get label(): string {\r\n return this.data.label !== \"\" ? `${this.group.prefix}${this.data.label}` : \"\";\r\n }\r\n\r\n get provider(): IFormControlProvider {\r\n return this.helper.provider;\r\n }\r\n\r\n get model(): any {\r\n return this.group.model;\r\n }\r\n\r\n get formId(): string {\r\n return this.helper.formId;\r\n }\r\n\r\n private helper: DynamicFormControlHelper;\r\n\r\n constructor(private control: IFormControl, public readonly group: DynamicFormGroup) {\r\n super(group.model[control.id], {updateOn: control.data.updateOn || group.updateOn});\r\n this.group.addControl(control.id, this);\r\n this.helper = new DynamicFormControlHelper(this.form, control);\r\n this.helper.findProvider(this);\r\n this.valueChanges.subscribe(() => this.group.updateModel(this));\r\n this.setAsyncValidators(createValidator(this));\r\n }\r\n\r\n getData<T extends IFormControlData>(): T {\r\n return <T>this.data;\r\n }\r\n\r\n getControl(id: string): IDynamicFormControl {\r\n return null;\r\n }\r\n\r\n load(): Promise<any> {\r\n return this.helper.load(this);\r\n }\r\n\r\n check(): Promise<any> {\r\n const check = this.helper.check(this);\r\n check.then(readonly => {\r\n if (readonly || this.group.disabled) this.disable({emitEvent: false}); else this.enable({emitEvent: false});\r\n });\r\n return check;\r\n }\r\n\r\n shouldSerialize(): Promise<boolean> {\r\n return this.helper.shouldSerialize(this);\r\n }\r\n\r\n shouldValidate(): Promise<boolean> {\r\n return this.helper.shouldValidate(this);\r\n }\r\n\r\n serialize(): Promise<any> {\r\n return Promise.resolve(this.value);\r\n }\r\n\r\n onFocus(): void {\r\n this.markAsUntouched({onlySelf: true});\r\n }\r\n\r\n onBlur(): void {\r\n this.markAsTouched({onlySelf: true});\r\n }\r\n\r\n showErrors(): void {\r\n this.markAsTouched({onlySelf: true});\r\n }\r\n}\r\n\r\nexport interface IFormControl {\r\n id: string;\r\n type: string;\r\n visible?: boolean;\r\n data?: IFormControlData;\r\n}\r\n\r\nexport interface IFormControlData {\r\n label?: string;\r\n labelAlign?: string;\r\n fieldSet?: string;\r\n classes?: string;\r\n readonly?: FormControlTesterFactory;\r\n hidden?: FormControlTesterFactory;\r\n shouldSerialize?: FormControlTesterFactory;\r\n shouldValidate?: FormControlTesterFactory;\r\n validator?: FormControlValidatorFactory;\r\n validators?: FormControlValidatorFactory[];\r\n updateOn?: DynamicFormUpdateOn;\r\n reload?: string | string[];\r\n}\r\n\r\nexport interface IFormInputData extends IFormControlData {\r\n type?: string;\r\n autocomplete?: string;\r\n placeholder?: string;\r\n useLanguage?: boolean;\r\n mask?: IFormInputMaskFunction | IFormInputMask[];\r\n unmask?: IFormInputUnMaskFunction;\r\n step?: number;\r\n min?: number;\r\n max?: number;\r\n}\r\n\r\nexport interface IFormSelectData extends IFormControlData {\r\n options?: IFormControlOptions | IResolveFactory;\r\n emptyOption?: boolean;\r\n type?: string;\r\n multi?: boolean;\r\n}\r\n\r\nexport interface IFormStaticData extends IFormControlData {\r\n properties?: string[];\r\n style?: string;\r\n}\r\n\r\nexport interface IFormFileData extends IFormControlData {\r\n accept?: string;\r\n multi?: boolean;\r\n baseUrl?: string;\r\n asFile?: boolean;\r\n asDataUrl?: boolean;\r\n uploadUrl?: string;\r\n uploadOptions?: IRequestOptions;\r\n createUploadData?: (file: File) => any;\r\n}\r\n\r\nexport interface IFormModelData extends IFormControlData, IDynamicFormInfo {\r\n\r\n}\r\n\r\nexport interface IFormFieldSet {\r\n id: string;\r\n classes?: string;\r\n title?: string;\r\n titleClasses?: string;\r\n setClasses?: string;\r\n controlClasses?: string;\r\n}\r\n\r\nexport interface IFormControlOption {\r\n id: any;\r\n label: string;\r\n selectable?: boolean;\r\n}\r\n\r\n// --- Basic form interfaces ---\r\n\r\nexport interface IDynamicFormTemplates {\r\n [id: string]: TemplateRef<any>;\r\n}\r\n\r\nexport interface IDynamicFormConfig {\r\n path?: string | number | Array<string | number>;\r\n name?: string;\r\n classes?: string;\r\n formClasses?: string;\r\n innerFormClasses?: string;\r\n id: string;\r\n}\r\n\r\nexport interface IDynamicSingleFormConfig extends IDynamicFormConfig, IDynamicFormInfo {\r\n data: any;\r\n controlData?: IFormControlData;\r\n multi?: false;\r\n}\r\n\r\nexport interface IDynamicMultiFormConfig extends IDynamicFormConfig {\r\n data: IDynamicFormsConfigs;\r\n multi: true;\r\n}\r\n\r\nexport type IDynamicFormsConfigs = Array<IDynamicSingleFormConfig | IDynamicMultiFormConfig>;\r\n\r\nexport interface IDynamicFormBase {\r\n\r\n name?: string;\r\n readonly?: boolean;\r\n updateOn?: \"change\" | \"blur\" | \"submit\";\r\n classes: string;\r\n parent: IDynamicFormBase;\r\n\r\n wrapperTemplate: TemplateRef<any>;\r\n fieldSetTemplate: TemplateRef<any>;\r\n controlTemplate: TemplateRef<any>;\r\n\r\n controlTemplates: IDynamicFormTemplates;\r\n labelTemplates: IDynamicFormTemplates;\r\n inputTemplates: IDynamicFormTemplates;\r\n prefixTemplates: IDynamicFormTemplates;\r\n suffixTemplates: IDynamicFormTemplates;\r\n setPrefixTemplates: IDynamicFormTemplates;\r\n setSuffixTemplates: IDynamicFormTemplates;\r\n\r\n onChange: EventEmitter<IDynamicFormControl>;\r\n onStatusChange: EventEmitter<IDynamicFormBase>;\r\n onInit: EventEmitter<IDynamicFormBase>;\r\n onSubmit: EventEmitter<IDynamicFormBase>;\r\n\r\n root?: IDynamicFormBase;\r\n status: DynamicFormState;\r\n injector?: Injector;\r\n cdr?: ChangeDetectorRef;\r\n\r\n validate(showErrors?: boolean): Promise<any>;\r\n\r\n serialize(validate?: boolean): Promise<any>;\r\n\r\n check(): Promise<any>;\r\n\r\n getControl(id: string): IDynamicFormControl;\r\n\r\n findProvider(control: IDynamicFormControl): IFormControlProvider;\r\n}\r\n\r\nexport declare type AsyncSubmitMethod = (form: IDynamicFormBase) => Promise<IAsyncMessage>;\r\n\r\nexport interface IDynamicFormInfo {\r\n group?: DynamicFormGroup;\r\n name?: string;\r\n controls?: IFormControl[];\r\n serializers?: IFormSerializers;\r\n fieldSets?: IFormFieldSet[];\r\n}\r\n\r\nexport interface IDynamicForm extends IDynamicFormBase, IDynamicFormInfo {\r\n data: any;\r\n}\r\n\r\nexport interface IDynamicFormFieldSets {\r\n [id: string]: IFormFieldSet\r\n}\r\n\r\n// --- Basic form types ---\r\nexport type FormControlTester = (control: IDynamicFormControl) => Promise<boolean>;\r\nexport type FormControlTesterFactory = FormControlTester | IResolveFactory;\r\nexport type FormControlValidator = (control: IDynamicFormControl) => Promise<string | ValidationErrors>;\r\nexport type FormControlValidatorFactory = FormControlValidator | IResolveFactory;\r\n\r\n// --- Decorator functions ---\r\nconst emptyArray: any = [];\r\nconst emptyTester: FormControlTester = () => {\r\n return Promise.resolve(false);\r\n};\r\n\r\nexport function defaultSerializer(id: string, parent: IDynamicFormControl): Promise<any> {\r\n const control = parent.getControl(id);\r\n return !control ? Promise.resolve(parent.model[id]) : control.serialize();\r\n}\r\n\r\nexport function FormSerializable(serializer?: IFormControlSerializer | IResolveFactory): PropertyDecorator {\r\n return (target: any, propertyKey: string): void => {\r\n ReflectUtils.defineMetadata(\"dynamicFormSerializer\", serializer || defaultSerializer, target, propertyKey);\r\n };\r\n}\r\n\r\nexport function FormInput(data?: IFormInputData): PropertyDecorator {\r\n return (target: any, propertyKey: string): void => {\r\n const meta = ReflectUtils.getOwnMetadata(\"design:type\", target, propertyKey);\r\n const type = meta ? meta.name : \"\";\r\n let inputType = propertyKey.indexOf(\"password\") < 0 ? \"text\" : \"password\";\r\n switch (type) {\r\n case \"Number\":\r\n inputType = \"number\";\r\n break;\r\n case \"Boolean\":\r\n inputType = \"checkbox\";\r\n break;\r\n }\r\n defineFormControl(target, propertyKey, createFormInput(propertyKey, data, inputType));\r\n };\r\n}\r\n\r\nexport function FormSelect(data?: IFormSelectData): PropertyDecorator {\r\n return (target: any, propertyKey: string): void => {\r\n defineFormControl(target, propertyKey, createFormSelect(propertyKey, data));\r\n };\r\n}\r\n\r\nexport function FormStatic(data?: IFormStaticData): PropertyDecorator {\r\n return (target: any, propertyKey: string): void => {\r\n defineFormControl(target, propertyKey, createFormStatic(propertyKey, data));\r\n };\r\n}\r\n\r\nexport function FormModel(data?: IFormModelData): PropertyDecorator {\r\n return (target: any, propertyKey: string): void => {\r\n defineFormControl(target, propertyKey, createFormModel(propertyKey, data));\r\n };\r\n}\r\n\r\nexport function FormFile(data?: IFormFileData): PropertyDecorator {\r\n return (target: any, propertyKey: string): void => {\r\n defineFormControl(target, propertyKey, createFormFile(propertyKey, data));\r\n };\r\n}\r\n\r\nexport function FormFieldSet(data: IFormFieldSet): ClassDecorator {\r\n return (target: any): void => {\r\n const sets = getFormFieldSets(target);\r\n data.classes = data.classes || \"\";\r\n sets[data.id] = data;\r\n ReflectUtils.defineMetadata(\"dynamicFormFieldSets\", sets, target);\r\n };\r\n}\r\n\r\nexport interface FormGroupProvider extends ValueProvider {\r\n provide: InjectionToken<Type<IFormGroupComponent>>;\r\n multi?: boolean;\r\n useValue: Type<IFormGroupComponent>;\r\n}\r\n\r\nexport function provideFormGroup(component: Type<IFormGroupComponent>): FormGroupProvider {\r\n return {\r\n provide: FORM_GROUP_TYPE,\r\n useValue: component\r\n };\r\n}\r\n\r\nexport interface FormControlProvider {\r\n provide: InjectionToken<IFormControlProvider>;\r\n multi?: boolean;\r\n useValue: IFormControlProvider;\r\n}\r\n\r\nexport function provideFormControl(component: Type<IFormControlComponent>, acceptor: IFormControlProviderAcceptor, loader: IFormControlProviderLoader, priority: number = 0): FormControlProvider {\r\n return {\r\n provide: FORM_CONTROL_PROVIDER,\r\n multi: true,\r\n useValue: {\r\n component: component,\r\n priority: priority,\r\n acceptor: acceptor,\r\n loader: loader\r\n }\r\n };\r\n}\r\n\r\nexport function defineFormControl(target: any, propertyKey: string, control: IFormControl): void {\r\n ReflectUtils.defineMetadata(\"dynamicFormControl\", control, target, propertyKey);\r\n}\r\n\r\nexport function getFormFieldSets(target: any): IDynamicFormFieldSets {\r\n return ReflectUtils.getMetadata(\"dynamicFormFieldSets\", target) || {};\r\n}\r\n\r\nexport function getFormControl(target: any, propertyKey: string): IFormControl {\r\n return ReflectUtils.getMetadata(\"dynamicFormControl\", target, propertyKey);\r\n}\r\n\r\nexport function getFormSerializer(target: any, propertyKey: string): IFormControlSerializer | IResolveFactory {\r\n return ReflectUtils.getMetadata(\"dynamicFormSerializer\", target, propertyKey);\r\n}\r\n\r\nexport function createFormControl(id: string, type: string, data?: IFormControlData): IFormControl {\r\n data = data || {};\r\n data.label = ObjectUtils.isNullOrUndefined(data.label) ? id : data.label;\r\n data.labelAlign = data.labelAlign || \"left\";\r\n data.fieldSet = data.fieldSet || UniqueUtils.uuid();\r\n data.classes = data.classes || \"\";\r\n data.readonly = data.readonly || emptyTester;\r\n data.hidden = data.hidden || emptyTester;\r\n data.validators = data.validators || emptyArray;\r\n return {\r\n id: id,\r\n type: type,\r\n data: data\r\n };\r\n}\r\n\r\nexport function createFormInput(id: string, data: IFormInputData, type: string = \"text\"): IFormControl {\r\n const control = createFormControl(id, \"input\", data);\r\n data = control.data;\r\n data.type = data.type || type;\r\n data.classes = !data.classes ? `form-group-${data.type}` : `${data.classes} form-group-${data.type}`;\r\n data.placeholder = data.placeholder || (data.type == \"mask\" ? \"_\" : \"\");\r\n data.step = data.step || 1;\r\n data.mask = data.mask || [/\\w*/gi];\r\n return control;\r\n}\r\n\r\nexport function createFormSelect(id: string, data: IFormSelectData): IFormControl {\r\n const control = createFormControl(id, \"select\", data);\r\n data = control.data;\r\n data.options = data.options || (() => Promise.resolve([]));\r\n data.type = data.type || \"select\";\r\n const classType = data.type == \"select\" ? \"select\" : `select-${data.type}`;\r\n data.classes = !data.classes ? `form-group-${classType}` : `${data.classes} form-group-${classType}`;\r\n return control;\r\n}\r\n\r\nexport function createFormStatic(id: string, data: IFormStaticData): IFormControl {\r\n const control = createFormControl(id, \"static\", data);\r\n data = control.data;\r\n data.style = data.style || \"table\";\r\n return control;\r\n}\r\n\r\nexport function createFormModel(id: string, data: IFormModelData): IFormControl {\r\n const control = createFormControl(id, \"model\", data);\r\n data = control.data;\r\n data.name = data.name || \"\";\r\n return control;\r\n}\r\n\r\nexport function createFormFile(id: string, data: IFormFileData): IFormControl {\r\n const control = createFormControl(id, \"file\", data);\r\n data = control.data;\r\n data.accept = data.accept || \".jpg,.jpeg,.png\";\r\n data.multi = data.multi || false;\r\n data.baseUrl = ObjectUtils.isString(data.baseUrl) ? data.baseUrl : \"assets/\";\r\n data.uploadUrl = ObjectUtils.isString(data.uploadUrl) ? data.uploadUrl : \"assets\";\r\n data.createUploadData = data.createUploadData || ((file: File) => {\r\n const form = new FormData();\r\n form.append(\"file\", file);\r\n return form;\r\n });\r\n return control;\r\n}\r\n","import {ComponentFactoryResolver, Inject, Injectable, Injector, Type, ViewContainerRef} from \"@angular/core\";\r\nimport {\r\n FORM_CONTROL_PROVIDER, FORM_GROUP_TYPE,\r\n IDynamicFormControl,\r\n IFormControlComponent,\r\n IFormControlProvider,\r\n IFormGroupComponent\r\n} from \"../common-types\";\r\nimport {ObjectUtils} from \"@stemy/ngx-utils\";\r\n\r\n@Injectable()\r\nexport class DynamicFormService {\r\n\r\n constructor(@Inject(FORM_CONTROL_PROVIDER) private components: IFormControlProvider[],\r\n @Inject(FORM_GROUP_TYPE) private groupType: Type<IFormGroupComponent>,\r\n private resolver: ComponentFactoryResolver,\r\n public readonly injector: Injector) {\r\n }\r\n\r\n findProvider(control: IDynamicFormControl): IFormControlProvider {\r\n if (!control) return null;\r\n const providers = this.components.filter(p => p.acceptor(control));\r\n if (providers.length == 0) {\r\n throw new Error(`No component provider for control: ${JSON.stringify({\r\n id: control.id,\r\n type: control.type,\r\n data: control.data\r\n })}`);\r\n }\r\n // Sort providers\r\n providers.sort((a, b) => ObjectUtils.compare(a.priority, b.priority))\r\n return providers[0];\r\n }\r\n\r\n createComponent(vcr: ViewContainerRef, provider: IFormControlProvider): IFormControlComponent {\r\n vcr.clear();\r\n if (!provider) return null;\r\n const factory = this.resolver.resolveComponentFactory(provider.component);\r\n return vcr.createComponent(factory).instance;\r\n }\r\n\r\n createGroup(vcr: ViewContainerRef): IFormGroupComponent {\r\n vcr.clear();\r\n const factory = this.resolver.resolveComponentFactory(this.groupType);\r\n return vcr.createComponent(factory).instance;\r\n }\r\n}\r\n","import {DatePipe} from \"@angular/common\";\r\nimport {FactoryDependencies, FileUtils, ObjectUtils} from \"@stemy/ngx-utils\";\r\nimport {FormControlTester, FormControlValidator, IDynamicFormControl, IFormControlSerializer} from \"../common-types\";\r\n\r\nexport class FormUtilities {\r\n\r\n static checkField(expression: string = `true`): FormControlTester {\r\n // @dynamic\r\n const lambda = (control: IDynamicFormControl): Promise<boolean> => {\r\n return Promise.resolve(ObjectUtils.evaluate(expression, {control: control}));\r\n };\r\n return lambda;\r\n }\r\n\r\n static checkReadonly(control: IDynamicFormControl): Promise<boolean> {\r\n return Promise.resolve(control.visible && !control.disabled);\r\n }\r\n\r\n static readonly(): Promise<boolean> {\r\n return Promise.resolve(true);\r\n }\r\n\r\n static validateJSON(control: IDynamicFormControl): Promise<string> {\r\n const value = control.value;\r\n if (!value) return Promise.resolve(null);\r\n try {\r\n JSON.parse(value);\r\n return Promise.resolve(null);\r\n } catch (e) {\r\n return Promise.resolve(\"error.not-valid-json\")\r\n }\r\n }\r\n\r\n static validateRequired(control: IDynamicFormControl): Promise<string> {\r\n const value = control.value;\r\n return Promise.resolve(!ObjectUtils.isNumber(value) && !value ? \"error.required\" : null);\r\n }\r\n\r\n static validateMinLength(length: number): FormControlValidator {\r\n // @dynamic\r\n const lambda = (control: IDynamicFormControl) => {\r\n const value = control.value;\r\n if (!ObjectUtils.isString(value) || value.length < length) {\r\n return Promise.resolve({\"error.min-length\": {length: length}});\r\n }\r\n return Promise.resolve(null);\r\n };\r\n return lambda;\r\n }\r\n\r\n static validateMaxLength(length: number): FormControlValidator {\r\n // @dynamic\r\n const lambda = (control: IDynamicFormControl) => {\r\n const value = control.value;\r\n if (!ObjectUtils.isString(value) || value.length > length) {\r\n return Promise.resolve({\"error.max-length\": {length: length}});\r\n }\r\n return Promise.resolve(null);\r\n };\r\n return lambda;\r\n }\r\n\r\n static validateRequiredTranslation(control: IDynamicFormControl): Promise<string> {\r\n const value: any[] = control.value;\r\n if (!value || value.length == 0) return Promise.resolve(\"error.required\");\r\n return Promise.resolve(value.findIndex(t => (t.lang == \"de\" || t.lang == \"en\") && !t.translation) < 0 ? null : \"error.required\");\r\n }\r\n\r\n static validateEmail(control: IDynamicFormControl): Promise<string> {\r\n const value = control.value;\r\n if (!value) return Promise.resolve(null);\r\n const emailRegexp = /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\r\n return Promise.resolve(emailRegexp.test(value) ? null : \"error.invalid-email\");\r\n }\r\n\r\n static validatePhone(control: IDynamicFormControl): Promise<string> {\r\n const value = control.value;\r\n if (!value) return Promise.resolve(null);\r\n const phoneRegexp = /^(?:\\d){10,12}$/;\r\n return Promise.resolve(phoneRegexp.test(value) ? null : \"error.invalid-phone\");\r\n }\r\n\r\n static serializeLogo(id: string, parent: IDynamicFormControl): Promise<any> {\r\n const value: string = parent.model[id];\r\n return Promise.resolve(!value || value.length == 0 ? null : value);\r\n }\r\n\r\n static serializeFile(id: string, parent: IDynamicFormControl): Promise<any> {\r\n const value: any = parent.model[id];\r\n if (ObjectUtils.isBlob(value)) return Promise.resolve(value);\r\n return Promise.resolve(!ObjectUtils.isString(value) || !value.startsWith(\"data:\") ? null : FileUtils.dataToBlob(value));\r\n }\r\n\r\n static serializeNumber(id: string, parent: IDynamicFormControl): Promise<any> {\r\n const value: string = parent.model[id];\r\n return Promise.resolve(!value || value.length == 0 ? 0 : parseFloat(value));\r\n }\r\n\r\n static serializeJSON(id: string, parent: IDynamicFormControl): Promise<any> {\r\n const value: string = parent.model[id];\r\n return Promise.resolve(!value ? {} : JSON.parse(value));\r\n }\r\n\r\n @FactoryDependencies(DatePipe)\r\n static serializeDate(date: DatePipe, format: string = \"yyyy-MM-dd\", defaultValue: string = \"\"): IFormControlSerializer {\r\n // @dynamic\r\n const lambda = (id: string, parent: IDynamicFormControl): Promise<any> => {\r\n const value: any = parent.model[id];\r\n if (!ObjectUtils.isDate(value)) return Promise.resolve(value || defaultValue);\r\n return Promise.resolve(!format ? value : date.transform(value, format));\r\n };\r\n return lambda;\r\n }\r\n}\r\n","import {Injectable} from \"@angular/core\";\r\nimport {ApiService, StringUtils} from \"@stemy/ngx-utils\";\r\n\r\nimport {FormUtilities} from \"./form-utilities\";\r\n\r\nimport {\r\n createFormFile,\r\n createFormInput,\r\n createFormSelect,\r\n FormControlValidatorFactory,\r\n IDynamicFormControl,\r\n IFormControl,\r\n IFormControlData,\r\n IFormFileData,\r\n IFormInputData,\r\n IFormSelectData,\r\n IFormSerializers\r\n} from \"../common-types\";\r\n\r\nexport interface IOpenApiSchemaProperty {\r\n id: string;\r\n type: string;\r\n format: string;\r\n column: boolean;\r\n additionalProperties: any;\r\n $ref: string;\r\n enum: string[];\r\n [key: string]: any;\r\n}\r\n\r\nexport interface IOpenApiSchema {\r\n properties: { [name: string]: IOpenApiSchemaProperty };\r\n required: string[];\r\n}\r\n\r\nexport interface IDynamicFormInputs {\r\n controls?: IFormControl[];\r\n serializers?: IFormSerializers;\r\n schema?: IOpenApiSchema;\r\n}\r\n\r\n@Injectable()\r\nexport class OpenApiService {\r\n\r\n private schemasPromise: Promise<any>;\r\n private schemas: any;\r\n\r\n constructor(private api: ApiService) {\r\n const baseUrl = this.api.url(\"\").replace(\"api/\", \"api-docs\");\r\n this.schemas = {};\r\n this.schemasPromise = new Promise<any>((resolve => {\r\n this.api.client.get(baseUrl).subscribe((res: any) => {\r\n this.schemas = res.definitions || {};\r\n resolve(this.schemas);\r\n }, () => {\r\n resolve({});\r\n });\r\n }));\r\n }\r\n\r\n getFormInputsForSchema(name: string): Promise<IDynamicFormInputs> {\r\n this.api.cache = {};\r\n return this.schemasPromise.then(schemas => {\r\n const schema: IOpenApiSchema = schemas[name];\r\n const inputs = this.getFormInputsForSchemaDef(schema);\r\n return inputs;\r\n });\r\n }\r\n\r\n private getFormInputsForSchemaDef(schema: IOpenApiSchema): IDynamicFormInputs {\r\n const inputs: IDynamicFormInputs = {};\r\n if (!schema) return inputs;\r\n inputs.schema = schema;\r\n inputs.serializers = {};\r\n inputs.controls = Object.keys(schema.properties || {}).map(p => {\r\n const property = schema.properties[p];\r\n property.id = p;\r\n inputs.serializers[p] = (id: string, parent: IDynamicFormControl) => {\r\n return Promise.resolve(parent.model[id]);\r\n };\r\n return this.getFormControlForProperty(property, schema);\r\n }).filter(t => null !== t);\r\n return inputs;\r\n }\r\n\r\n private getFormControlForProperty(property: IOpenApiSchemaProperty, schema: IOpenApiSchema): IFormControl {\r\n if (Array.isArray(property.enum)) {\r\n return createFormSelect(property.id, this.getFormSelectData(property, schema));\r\n }\r\n switch (property.type) {\r\n case \"string\":\r\n case \"number\":\r\n case \"boolean\":\r\n case \"textarea\":\r\n return createFormInput(property.id, this.getFormInputData(property, schema));\r\n case \"list\":\r\n return createFormSelect(property.id, this.getFormSelectData(property, schema));\r\n case \"file\":\r\n return createFormFile(property.id, this.getFormFileData(property, schema));\r\n }\r\n return null;\r\n }\r\n\r\n private getBaseFormData(property: IOpenApiSchemaProperty, schema: IOpenApiSchema): IFormControlData {\r\n return {\r\n readonly: property.readonly ? FormUtilities.readonly : null,\r\n shouldSerialize: FormUtilities.checkReadonly,\r\n validators: this.getValidators(property, schema)\r\n }\r\n }\r\n\r\n private getFormInputData(property: IOpenApiSchemaProperty, schema: IOpenApiSchema): IFormInputData {\r\n let type = StringUtils.has(property.id, \"password\", \"Password\") ? \"password\" : property.type;\r\n switch (property.type) {\r\n case \"boolean\":\r\n type = \"checkbox\";\r\n break;\r\n case \"textarea\":\r\n type = \"textarea\";\r\n break;\r\n }\r\n return {\r\n ...this.getBaseFormData(property, schema),\r\n type\r\n };\r\n }\r\n\r\n private getFormSelectData(property: IOpenApiSchemaProperty, schema: IOpenApiSchema): IFormSelectData {\r\n const options = Array.isArray(property.enum)\r\n ? () => {\r\n return Promise.resolve(property.enum.map(id => ({ id, label: `${property.id}.${id}` })));\r\n }\r\n : () => {\r\n this.api.cache[property.endpoint] = this.api.cache[property.endpoint] || this.api.list(property.endpoint, this.api.makeListParams(1, -1)).then(result => {\r\n return result.items.map(i => {\r\n return { id: i._id, label: i.name };\r\n });\r\n });\r\n return this.api.cache[property.endpoint];\r\n };\r\n return {\r\n ...this.getBaseFormData(property, schema),\r\n options,\r\n };\r\n }\r\n\r\n private getFormFileData(property: IOpenApiSchemaProperty, schema: IOpenApiSchema): IFormFileData {\r\n return {\r\n ...this.getBaseFormData(property, schema),\r\n multi: property.multi\r\n };\r\n }\r\n\r\n private getValidators(property: IOpenApiSchemaProperty, schema: IOpenApiSchema): FormControlValidatorFactory[] {\r\n const validators: FormControlValidatorFactory[] = [];\r\n if (schema.required.indexOf(property.id) >= 0) {\r\n validators.push(FormUtilities.validateRequired);\r\n }\r\n if (property.minLength) {\r\n validators.push({\r\n type: FormUtilities,\r\n func: FormUtilities.validateMinLength,\r\n params: [property.minLength]\r\n });\r\n }\r\n if (property.maxLength) {\r\n validators.push({\r\n type: FormUtilities,\r\n func: FormUtilities.validateMaxLength,\r\n params: [property.maxLength]\r\n });\r\n }\r\n switch (property.format) {\r\n case \"email\":\r\n validators.push(FormUtilities.validateEmail);\r\n break;\r\n }\r\n return validators;\r\n }\r\n}\r\n","import {\r\n ChangeDetectorRef,\r\n Directive,\r\n ElementRef,\r\n EventEmitter,\r\n HostBinding,\r\n HostListener,\r\n Inject,\r\n Input,\r\n OnDestroy,\r\n OnInit,\r\n Output,\r\n Renderer2\r\n} from \"@angular/core\";\r\nimport {Subscription} from \"rxjs\";\r\nimport {IAsyncMessage, IToasterService, TOASTER_SERVICE} from \"@stemy/ngx-utils\";\r\nimport {AsyncSubmitMethod, IDynamicFormBase} from \"../common-types\";\r\n\r\n@Directive({\r\n selector: \"[async-submit]\",\r\n exportAs: \"async-submit\"\r\n})\r\nexport class AsyncSubmitDirective implements OnInit, OnDestroy {\r\n\r\n @Input(\"async-submit\") method: AsyncSubmitMethod;\r\n @Input() form: IDynamicFormBase;\r\n\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 @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, private cdr: ChangeDetectorRef, elem: ElementRef, 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.disabled = this.form.status !== \"VALID\";\r\n this.cdr.detectChanges();\r\n this.onStatusChange = this.form.onStatusChange.subscribe(form => {\r\n this.disabled = form.status !== \"VALID\";\r\n this.cdr.detectChanges();\r\n if (!this.callback || form.status == \"PENDING\") return;\r\n if (!this.disabled) {\r\n this.callback();\r\n }\r\n this.callback = null;\r\n });\r\n this.onSubmit = this.form.onSubmit.subscribe(() => this.callMethod());\r\n }\r\n\r\n ngOnDestroy(): void {\r\n if (this.onStatusChange) this.onStatusChange.unsubscribe();\r\n if (this.onSubmit) this.onSubmit.unsubscribe();\r\n }\r\n\r\n @HostListener(\"click\")\r\n click(): void {\r\n this.callback = () => this.callMethod();\r\n if (this.form.status !== \"VALID\" && this.form.status !== \"INVALID\") return;\r\n this.callback();\r\n this.callback = null;\r\n }\r\n\r\n callMethod(): void {\r\n if (this.loading) return;\r\n this.loading = true;\r\n this.method(this.form).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 {Directive, Input, OnChanges, SimpleChanges, ViewContainerRef} from \"@angular/core\";\r\nimport {IDynamicFormControl, IFormControlComponent} from \"../common-types\";\r\nimport {DynamicFormService} from \"../services/dynamic-form.service\";\r\n\r\n@Directive({\r\n selector: \"[form-control]\",\r\n})\r\nexport class DynamicFormControlDirective implements OnChanges {\r\n\r\n @Input(\"form-control\") control: IDynamicFormControl;\r\n\r\n get component(): IFormControlComponent {\r\n return this.comp;\r\n }\r\n\r\n private comp: IFormControlComponent;\r\n\r\n constructor(private vcr: ViewContainerRef, private forms: DynamicFormService) {\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes.control) {\r\n this.comp = this.forms.createComponent(this.vcr, this.control.provider);\r\n }\r\n if (!this.comp) return;\r\n this.comp.control = this.control;\r\n }\r\n}\r\n","import {Directive, Input, TemplateRef} from \"@angular/core\";\r\n\r\n@Directive({\r\n selector: `ng-template[control],\r\n ng-template[label],\r\n ng-template[input],\r\n ng-template[prefix],\r\n ng-template[suffix],\r\n ng-template[setPrefix],\r\n ng-template[setSuffix],\r\n ng-template[formPrefix],\r\n ng-template[formSuffix],\r\n ng-template[innerFormPrefix],\r\n ng-template[innerFormSuffix]`\r\n})\r\nexport class DynamicFormTemplateDirective {\r\n\r\n @Input() control: string;\r\n @Input() label: string;\r\n @Input() input: string;\r\n @Input() prefix: string;\r\n @Input() suffix: string;\r\n @Input() setPrefix: string;\r\n @Input() setSuffix: string;\r\n @Input() formPrefix: string;\r\n @Input() formSuffix: string;\r\n @Input() innerFormPrefix: string;\r\n @Input() innerFormSuffix: string;\r\n\r\n constructor(public template: TemplateRef<any>) {\r\n }\r\n}\r\n","import { AfterContentInit, ChangeDetectorRef, ContentChild, ContentChildren, EventEmitter, Injector, Input, Output, QueryList, TemplateRef, Directive } from \"@angular/core\";\r\nimport {ObjectUtils} from \"@stemy/ngx-utils\";\r\nimport {\r\n DynamicFormControl, DynamicFormState, IDynamicFormBase, IDynamicFormControl, IDynamicFormTemplates,\r\n IFormControlProvider\r\n} from \"../../common-types\";\r\nimport {DynamicFormTemplateDirective} from \"../../directives/dynamic-form-template.directive\";\r\nimport {DynamicFormService} from \"../../services/dynamic-form.service\";\r\n\r\n@Directive()\r\nexport abstract class DynamicFormBaseComponent implements IDynamicFormBase, AfterContentInit {\r\n\r\n @Input() name: string;\r\n @Input() readonly: boolean;\r\n @Input() updateOn: \"change\" | \"blur\" | \"submit\";\r\n @Input() classes: any;\r\n @Input() parent: IDynamicFormBase;\r\n\r\n @Input() wrapperTemplate: TemplateRef<any>;\r\n @Input() fieldSetTemplate: TemplateRef<any>;\r\n @Input() controlTemplate: TemplateRef<any>;\r\n\r\n @Input() controlTemplates: IDynamicFormTemplates;\r\n @Input() labelTemplates: IDynamicFormTemplates;\r\n @Input() inputTemplates: IDynamicFormTemplates;\r\n @Input() prefixTemplates: IDynamicFormTemplates;\r\n @Input() suffixTemplates: IDynamicFormTemplates;\r\n @Input() setPrefixTemplates: IDynamicFormTemplates;\r\n @Input() setSuffixTemplates: IDynamicFormTemplates;\r\n\r\n @Output() onChange: EventEmitter<IDynamicFormControl>;\r\n @Output() onStatusChange: EventEmitter<IDynamicFormBase>;\r\n @Output() onInit: EventEmitter<IDynamicFormBase>;\r\n @Output() onSubmit: EventEmitter<IDynamicFormBase>;\r\n\r\n @ContentChild(\"prefixTemplate\")\r\n prefixTemplate: TemplateRef<any>;\r\n\r\n @ContentChild(\"suffixTemplate\")\r\n suffixTemplate: TemplateRef<any>;\r\n\r\n get root(): IDynamicFormBase {\r\n let form: IDynamicFormBase = this;\r\n while (ObjectUtils.isDefined(form.parent)) {\r\n form = form.parent;\r\n }\r\n return form;\r\n }\r\n\r\n abstract status: DynamicFormState;\r\n readonly injector: Injector;\r\n readonly cdr: ChangeDetectorRef;\r\n\r\n @ContentChildren(DynamicFormTemplateDirective)\r\n protected templates: QueryList<DynamicFormTemplateDirective>;\r\n\r\n @ContentChild(\"wrapperTemplate\")\r\n protected cWrapperTemplate: TemplateRef<any>;\r\n\r\n @ContentChild(\"fieldSetTemplate\")\r\n protected cFieldSetTemplate: TemplateRef<any>;\r\n\r\n @ContentChild(\"controlTemplate\")\r\n protected cControlTemplate: TemplateRef<any>;\r\n\r\n protected constructor(cdr: ChangeDetectorRef, private formService: DynamicFormService) {\r\n this.name = \"\";\r\n\r\n this.controlTemplates = {};\r\n this.labelTemplates = {};\r\n this.inputTemplates = {};\r\n this.prefixTemplates = {};\r\n this.suffixTemplates = {};\r\n\r\n this.onChange = new EventEmitter<DynamicFormControl>();\r\n this.onStatusChange = new EventEmitter<IDynamicFormBase>();\r\n this.onInit = new EventEmitter<IDynamicFormBase>();\r\n this.onSubmit = new EventEmitter<IDynamicFormBase>();\r\n this.injector = formService.injector;\r\n this.cdr = cdr;\r\n }\r\n\r\n // --- IDynamicFormBase\r\n\r\n abstract validate(showErrors?: boolean): Promise<any>;\r\n abstract serialize(validate?: boolean): Promise<any>;\r\n abstract check(): Promise<any>;\r\n abstract getControl(id: string): IDynamicFormControl;\r\n\r\n findProvider(control: IDynamicFormControl): IFormControlProvider {\r\n return this.formService.findProvider(control);\r\n }\r\n\r\n // --- Lifecycle hooks\r\n\r\n ngAfterContentInit(): void {\r\n this.wrapperTemplate = this.wrapperTemplate || this.cWrapperTemplate;\r\n this.fieldSetTemplate = this.fieldSetTemplate || this.cFieldSetTemplate;\r\n this.controlTemplate = this.controlTemplate || this.cControlTemplate;\r\n this.controlTemplates = this.filterTemplates(this.controlTemplates, \"control\");\r\n this.labelTemplates = this.filterTemplates(this.labelTemplates, \"label\");\r\n this.inputTemplates = this.filterTemplates(this.inputTemplates , \"input\");\r\n this.prefixTemplates = this.filterTemplates(this.prefixTemplates, \"prefix\");\r\n this.suffixTemplates = this.filterTemplates(this.suffixTemplates, \"suffix\");\r\n this.setPrefixTemplates = this.filterTemplates(this.setPrefixTemplates, \"setPrefix\");\r\n this.setSuffixTemplates = this.filterTemplates(this.setSuffixTemplates, \"setSuffix\");\r\n }\r\n\r\n protected filterTemplates(templates: IDynamicFormTemplates, type: string): IDynamicFormTemplates {\r\n if (ObjectUtils.isObject(templates) && Object.keys(templates).length > 0) return templates;\r\n return this.templates.filter(t => !!t[type]).reduce((result, directive) => {\r\n result[directive[type]] = directive.template;\r\n return result;\r\n }, {});\r\n }\r\n}\r\n","import {AfterContentInit, ChangeDetectorRef, Component, Input, OnChanges, SimpleChanges} from \"@angular/core\";\r\nimport {first} from \"rxjs/operators\";\r\nimport {\r\n DynamicFormGroup,\r\n DynamicFormState,\r\n IDynamicForm,\r\n IDynamicFormControl,\r\n IFormControl,\r\n IFormFieldSet,\r\n IFormSerializers\r\n} from \"../../common-types\";\r\nimport {DynamicFormService} from \"../../services/dynamic-form.service\";\r\nimport {DynamicFormBaseComponent} from \"../base/dynamic-form-base.component\";\r\n\r\n@Component({\r\n moduleId: module.id,\r\n selector: \"dynamic-form, [dynamic-form]\",\r\n templateUrl: \"./dynamic-form.component.html\",\r\n providers: [{provide: DynamicFormBaseComponent, useExisting: DynamicFormComponent}]\r\n})\r\nexport class DynamicFormComponent extends DynamicFormBaseComponent implements IDynamicForm, AfterContentInit, OnChanges {\r\n\r\n @Input() group: DynamicFormGroup;\r\n @Input() controls: IFormControl[];\r\n @Input() serializers: IFormSerializers;\r\n @Input() fieldSets: IFormFieldSet[];\r\n @Input() data: any;\r\n\r\n defaultFieldSet: IFormFieldSet;\r\n\r\n get status(): DynamicFormState {\r\n return this.group.state;\r\n }\r\n\r\n get formControls(): IDynamicFormControl[] {\r\n return this.group.formControls;\r\n }\r\n\r\n constructor(cdr: ChangeDetectorRef, forms: DynamicFormService) {\r\n super(cdr, forms);\r\n this.group = new DynamicFormGroup(this);\r\n this.defaultFieldSet = {\r\n id: \"\",\r\n title: \"\",\r\n classes: \"\"\r\n };\r\n }\r\n\r\n // --- Lifecycle hooks\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (!this.data) return;\r\n if (changes.data || changes.controls || changes.serializers || changes.formGroup) {\r\n if (this.group.id) return;\r\n this.group.setup(this.data, this);\r\n this.group.reloadControls();\r\n }\r\n }\r\n\r\n // --- Custom ---\r\n\r\n onFormSubmit(): void {\r\n const root = this.root;\r\n root.validate().then(() => root.onSubmit.emit(this), () => {});\r\n }\r\n\r\n // --- IDynamicForm ---\r\n\r\n validate(showErrors: boolean = true): Promise<any> {\r\n return new Promise<any>((resolve, reject) => {\r\n this.group.statusChanges.pipe(first(status => status == \"VALID\" || status == \"INVALID\")).subscribe(status => {\r\n if (showErrors) this.group.showErrors();\r\n if (status == \"VALID\") {\r\n resolve(null);\r\n return;\r\n }\r\n reject(null);\r\n });\r\n this.group.updateValueAndValidity();\r\n });\r\n }\r\n\r\n serialize(validate?: boolean): Promise<any> {\r\n return new Promise<any>((resolve, reject) => {\r\n const serialize = () => {\r\n this.group.serialize().then(resolve);\r\n };\r\n if (validate) {\r\n this.validate().then(serialize, reject);\r\n return;\r\n }\r\n serialize();\r\n });\r\n }\r\n\r\n check(): Promise<any> {\r\n return this.group.check();\r\n }\r\n\r\n getControl(id: string): IDynamicFormControl {\r\n return this.group.getControl(id);\r\n }\r\n}\r\n","import {\r\n AfterContentInit, ChangeDetectorRef, Component, ContentChild, Input, OnChanges, QueryList, SimpleChanges,\r\n TemplateRef, ViewChildren\r\n} from \"@angular/core\";\r\nimport {ObjectUtils, UniqueUtils} from \"@stemy/ngx-utils\";\r\nimport {\r\n DynamicFormGroup, DynamicFormState, IDynamicFormBase, IDynamicFormControl, IDynamicFormsConfigs,\r\n IDynamicFormTemplates, IDynamicSingleFormConfig\r\n} from \"../../common-types\";\r\nimport {DynamicFormBaseComponent} from \"../base/dynamic-form-base.component\";\r\nimport {DynamicFormService} from \"../../services/dynamic-form.service\";\r\n\r\nconst statusPriority: DynamicFormState[] = [\"LOADING\", \"PENDING\", \"DISABLED\", \"INVALID\"];\r\n\r\n@Component({\r\n moduleId: module.id,\r\n selector: \"dynamic-forms, [dynamic-forms]\",\r\n templateUrl: \"./dynamic-forms.component.html\",\r\n providers: [{provide: DynamicFormBaseComponent, useExisting: DynamicFormsComponent}]\r\n})\r\nexport class DynamicFormsComponent extends DynamicFormBaseComponent implements IDynamicFormBase, AfterContentInit, OnChanges {\r\n\r\n @Input() data: IDynamicFormsConfigs;\r\n\r\n @Input() containerTemplate: TemplateRef<any>;\r\n\r\n @Input() formPrefixTemplates: IDynamicFormTemplates;\r\n @Input() formSuffixTemplates: IDynamicFormTemplates;\r\n @Input() innerFormPrefixTemplates: IDynamicFormTemplates;\r\n @Input() innerFormSuffixTemplates: IDynamicFormTemplates;\r\n\r\n get status(): DynamicFormState {\r\n for (let i = 0; i < statusPriority.length; i++) {\r\n const status = statusPriority[i];\r\n if (this.checkForms(f => f.status == status)) return status;\r\n }\r\n return \"VALID\";\r\n }\r\n\r\n public configs: IDynamicFormsConfigs;\r\n\r\n @ContentChild(\"containerTemplate\")\r\n protected cContainerTemplate: TemplateRef<any>;\r\n\r\n @ViewChildren(DynamicFormBaseComponent)\r\n private forms: QueryList<IDynamicFormBase>;\r\n\r\n constructor(cdr: ChangeDetectorRef, formService: DynamicFormService) {\r\n super(cdr, formService);\r\n this.formPrefixTemplates = {};\r\n this.formSuffixTemplates = {};\r\n this.innerFormPrefixTemplates = {};\r\n this.innerFormSuffixTemplates = {};\r\n }\r\n\r\n // --- Lifecycle hooks\r\n\r\n ngAfterContentInit(): void {\r\n super.ngAfterContentInit();\r\n this.containerTemplate = this.containerTemplate || this.cContainerTemplate;\r\n this.formPrefixTemplates = this.filterTemplates(this.formPrefixTemplates, \"formPrefix\");\r\n this.formSuffixTemplates = this.filterTemplates(this.formSuffixTemplates, \"formSuffix\");\r\n this.innerFormPrefixTemplates = this.filterTemplates(this.innerFormPrefixTemplates, \"innerFormPrefix\");\r\n this.innerFormSuffixTemplates = this.filterTemplates(this.innerFormSuffixTemplates, \"innerFormSuffix\");\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n this.configs = this.createFormGroups(this.data);\r\n }\r\n\r\n // --- IDynamicFormBase ---\r\n\r\n validate(showErrors: boolean = true): Promise<any> {\r\n if (!this.forms) return Promise.reject(null);\r\n return Promise.all(this.forms.map(f => f.validate(showErrors)));\r\n }\r\n\r\n serialize(validate?: boolean): Promise<any> {\r\n if (!this.forms) return validate ? Promise.reject(null) : Promise.resolve({});\r\n return new Promise<any>((resolve, reject) => {\r\n const promises = this.forms.map(f => f.serialize(validate));\r\n Promise.all(promises).then(results => {\r\n let result = {};\r\n results.forEach((data, ix) => {\r\n const config = this.data[ix];\r\n let path: Array<string | number> = null;\r\n if (ObjectUtils.isArray(config.path) && config.path.length > 0) {\r\n path = config.path;\r\n } else if (ObjectUtils.isString(config.path) && config.path.length > 0) {\r\n path = config.path.split(\".\");\r\n } else if (ObjectUtils.isNumber(config.path)) {\r\n path = [config.path];\r\n }\r\n if (!path) {\r\n result = ObjectUtils.assign(result, data);\r\n return;\r\n }\r\n result = ObjectUtils.mapToPath(result, data, path.map(p => `${p}`));\r\n });\r\n resolve(result);\r\n }, reject);\r\n });\r\n }\r\n\r\n check(): Promise<any> {\r\n if (!this.forms) return Promise.resolve(null);\r\n return Promise.all(this.forms.map(t => t.check()));\r\n }\r\n\r\n getControl(id: string): IDynamicFormControl {\r\n return this.getFromValue(f => f.getControl(id));\r\n }\r\n\r\n private checkForms(check: (form: IDynamicFormBase) => boolean): boolean {\r\n this.cdr.detectChanges();\r\n if (!this.forms) return false;\r\n return ObjectUtils.isDefined(this.forms.find(check));\r\n }\r\n\r\n private getFromValue<T>(check: (form: IDynamicFormBase) => T): T {\r\n if (!this.forms) return null;\r\n let value: T = null;\r\n this.forms.find(f => {\r\n value = check(f);\r\n return ObjectUtils.isDefined(value);\r\n });\r\n return value;\r\n }\r\n\r\n private createFormGroups(configs: IDynamicFormsConfigs): IDynamicFormsConfigs {\r\n return (configs || []).map((c: any) => {\r\n if (c.multi) return c;\r\n const config = <IDynamicSingleFormConfig>c;\r\n const group = new DynamicFormGroup(this, {\r\n id: config.id || UniqueUtils.uuid(),\r\n type: \"model\",\r\n data: config.controlData\r\n });\r\n config.group = group;\r\n config.name = config.name || this.name;\r\n group.setup(config.data, config);\r\n group.reloadControls();\r\n return config;\r\n });\r\n }\r\n}\r\n","import {Component, HostBinding} from \"@angular/core\";\r\nimport {IDynamicForm, IDynamicFormControl, IFormGroupComponent} from \"../../common-types\";\r\n\r\n@Component({\r\n moduleId: module.id,\r\n selector: \"div[dynamic-form-group]\",\r\n templateUrl: \"./dynamic-form-group.component.html\"\r\n})\r\nexport class DynamicFormGroupComponent implements IFormGroupComponent {\r\n form: IDynamicForm;\r\n control: IDynamicFormControl;\r\n\r\n @HostBinding(\"class\")\r\n get classes(): string {\r\n if (!this.control) return \"form-group\";\r\n return [\"form-group\", \"form-group-\" + this.control.id, this.control.data.classes, this.control.errors && this.control.touched ? \"form-group-invalid\" : \"\"].join(\" \");\r\n }\r\n}\r\n","import {Component, Inject} from \"@angular/core\";\r\nimport {FormControlComponent, IDynamicFormControl, IFormFileData} from \"../../common-types\";\r\nimport {ApiService, ArrayUtils, FileUtils, IToasterService, ObjectUtils, TOASTER_SERVICE} from \"@stemy/ngx-utils\";\r\n\r\n@Component({\r\n selector: \"dynamic-form-file\",\r\n styleUrls: [\"./dynamic-form-file.component.scss\"],\r\n templateUrl: \"./dynamic-form-file.component.html\"\r\n})\r\nexport class DynamicFormFileComponent extends FormControlComponent<IFormFileData> {\r\n\r\n private fileImageCache: any[];\r\n\r\n // Acceptor for provider\r\n static acceptor(control: IDynamicFormControl): boolean {\r\n return control.type == \"file\";\r\n }\r\n\r\n // Loader for provider\r\n static loader(): Promise<any> {\r\n return Promise.resolve();\r\n }\r\n\r\n constructor(readonly api: ApiService, @Inject(TOASTER_SERVICE) readonly toaster: IToasterService) {\r\n super();\r\n this.fileImageCache = [];\r\n }\r\n\r\n onSelect(input: HTMLInputElement): void {\r\n this.processFiles(input.files);\r\n input.value = \"\";\r\n }\r\n\r\n protected processFiles(fileList: FileList): void {\r\n const files: File[] = [];\r\n const accept = this.data.accept;\r\n const types: string[] = ObjectUtils.isString(accept) && accept.length > 0 ? accept.toLowerCase().split(\",\") : null;\r\n if (fileList.length == 0) return;\r\n for (let i = 0; i < fileList.length; i++) {\r\n const file = fileList.item(i);\r\n const type = file.type.toLowerCase();\r\n const ext = FileUtils.getExtension(file);\r\n if (types && !ArrayUtils.has(types, type, ext)) continue;\r\n files.push(file);\r\n }\r\n if (files.length == 0) {\r\n this.toaster.error(\"message.error.wrong-files\");\r\n return;\r\n }\r\n this.upload(files);\r\n }\r\n\r\n protected upload(files: File[]): void {\r\n const single = !this.data.multi;\r\n if (single) files.length = Math.min(files.length , 1);\r\n const promises = [];\r\n files.forEach((file, ix) => {\r\n if (this.data.asDataUrl) {\r\n promises.push(FileUtils.readFileAsDataURL(file));\r\n return;\r\n }\r\n if (this.data.asFile) {\r\n promises.push(Promise.resolve(file));\r\n return;\r\n }\r\n promises.push(\r\n this.api.upload(\r\n this.data.uploadUrl,\r\n this.data.createUploadData(file),\r\n console.log,\r\n this.data.uploadOptions\r\n ).then(asset => asset._id || asset, () => null)\r\n );\r\n });\r\n Promise.all(promises).then(assets => {\r\n if (single) {\r\n this.control.setValue(assets[0]);\r\n return;\r\n }\r\n const current = this.value || [];\r\n this.control.setValue(current.concat(assets.filter(t => !!t)));\r\n });\r\n }\r\n\r\n delete(index?: number): void {\r\n if (this.data.multi) {\r\n const current = Array.from(this.value || []);\r\n current.splice(index, 1);\r\n this.control.setValue(current);\r\n return;\r\n }\r\n this.control.setValue(null);\r\n }\r\n\r\n getUrl(image: any): string {\r\n return `url('${this.getImgUrl(image)}')`;\r\n }\r\n\r\n private getImgUrl(image: any): string {\r\n if (ObjectUtils.isBlob(image)) {\r\n let cache = this.fileImageCache.find(t => t.file == image);\r\n if (!cache) {\r\n cache = {file: image, url: URL.createObjectURL(image)};\r\n this.fileImageCache.push(cache);\r\n }\r\n return cache.url;\r\n }\r\n const url = !image ? null : image.imageUrl || image;\r\n if (!ObjectUtils.isString(url)) return null;\r\n if (url.startsWith(\"data:\")) return url;\r\n if (!this.data.baseUrl) {\r\n const subUrl = url.startsWith(\"/\") ? url.substr(1) : url;\r\n return this.api.url(subUrl);\r\n }\r\n return this.api.url(`${this.data.baseUrl}${url}`);\r\n }\r\n}\r\n","import {Component, HostBinding, Inject} from \"@angular/core\";\r\nimport {ILanguageService, ITranslation, LANGUAGE_SERVICE, ObjectUtils} from \"@stemy/ngx-utils\";\r\nimport {DynamicFormControl, FormControlComponent, IFormInputData} from \"../../common-types\";\r\n\r\n@Component({\r\n moduleId: module.id,\r\n selector: \"dynamic-form-input\",\r\n templateUrl: \"./dynamic-form-input.component.html\"\r\n})\r\nexport class DynamicFormInputComponent extends FormControlComponent<IFormInputData> {\r\n\r\n // Acceptor for provider\r\n static acceptor(control: DynamicFormControl): boolean {\r\n return control.type == \"input\";\r\n }\r\n\r\n // Loader for provider\r\n static loader(): Promise<any> {\r\n return Promise.resolve();\r\n }\r\n\r\n @HostBinding(\"class.checked\")\r\n get isChecked(): boolean {\r\n return this.data.type == \"checkbox\" && this.value;\r\n }\r\n\r\n constructor(@Inject(LANGUAGE_SERVICE) private language: ILanguageService) {\r\n super();\r\n }\r\n\r\n onDateChange(value: string): void {\r\n const date = new Date(value);\r\n const dateValue = <number>date.valueOf();\r\n if (isNaN(dateValue) || dateValue < -30610224000000) return;\r\n this.control.setValue(date)\r\n }\r\n\r\n onMaskChange(value: string): void {\r\n value = ObjectUtils.isFunction(this.data.unmask) ? this.data.unmask(value) : value;\r\n this.control.setValue(value)\r\n }\r\n\r\n onTextChange(value: string): void {\r\n if (!this.data.useLanguage) {\r\n this.control.setValue(value);\r\n return;\r\n }\r\n const translations: ITranslation[] = ObjectUtils.isArray(this.value) ? Array.from(this.value) : [];\r\n const translation = translations.find(t => t.lang == this.language.editLanguage);\r\n if (translation) {\r\n translation.translation = value;\r\n } else {\r\n translations.push({\r\n lang: this.language.editLanguage,\r\n translation: value\r\n });\r\n }\r\n this.control.setValue(translations);\r\n }\r\n\r\n onNumberBlur(): void {\r\n const value = this.value;\r\n if (ObjectUtils.isNumber(this.data.max) && this.data.max < value) {\r\n this.control.setValue(this.data.max);\r\n } else if (ObjectUtils.isNumber(this.data.min) && this.data.min > value) {\r\n this.control.setValue(this.data.min);\r\n }\r\n this.control.onBlur();\r\n }\r\n}\r\n","import {Component} from \"@angular/core\";\r\nimport {ObjectUtils, ReflectUtils} from \"@stemy/ngx-utils\";\r\nimport {\r\n DynamicFormControl,\r\n FormControlComponent,\r\n IDynamicForm, IDynamicFormControl,\r\n IFormControl, IFormControlOption,\r\n IFormControlOptions,\r\n IFormSelectData\r\n} from \"../../common-types\";\r\n\r\n@Component({\r\n moduleId: module.id,\r\n selector: \"dynamic-form-select\",\r\n templateUrl: \"./dynamic-form-select.component.html\"\r\n})\r\nexport class DynamicFormSelectComponent extends FormControlComponent<IFormSelectData> {\r\n\r\n // Acceptor for provider\r\n static acceptor(control: DynamicFormControl): boolean {\r\n return control.type == \"select\";\r\n }\r\n\r\n // Loader for provider\r\n static loader(control: IDynamicFormControl): Promise<any> {\r\n const data = control.getData<IFormSelectData>();\r\n if (data.type == \"radio\" && data.multi) {\r\n return Promise.reject(\"Radio group doesn't support multi select!\");\r\n }\r\n return new Promise<any>(resolve => {\r\n const getOptions = ReflectUtils.resolve<IFormControlOptions>(data.options, control.form.injector);\r\n getOptions(control).then(options => {\r\n if (data.emptyOption) options.unshift({id: null, label: \"\"});\r\n control.meta.options = options;\r\n DynamicFormSelectComponent.fillOptions(control, options);\r\n resolve(options);\r\n });\r\n });\r\n }\r\n\r\n static fillOptions(control: IDynamicFormControl, options: IFormControlOption[]): void {\r\n const data = control.getData<IFormSelectData>();\r\n const selected = control.value;\r\n if (data.multi || options.length == 0 || options.findIndex(t => t.id == selected) >= 0) return;\r\n control.setValue(options[0].id);\r\n }\r\n\r\n onSelectChange(value: any): void {\r\n const isArray = ObjectUtils.isArray(value);\r\n const current = this.value;\r\n if (this.data.multi) {\r\n if (isArray) {\r\n this.control.setValue(value);\r\n return;\r\n }\r\n if (ObjectUtils.isArray(current)) {\r\n this.control.setValue(\r\n current.indexOf(value) < 0\r\n ? current.concat([value])\r\n : current.filter(c => c !== value)\r\n );\r\n return;\r\n }\r\n this.control.setValue([value]);\r\n return;\r\n }\r\n if (isArray) value = value[0];\r\n if (current == value) {\r\n const option = this.meta.options.find(o => o.id !== value);\r\n value = option ? option.id : null;\r\n }\r\n this.control.setValue(value);\r\n }\r\n\r\n checkValue(option: IFormControlOption): boolean {\r\n const value = this.value;\r\n return ObjectUtils.isArray(value) ? value.indexOf(option.id) >= 0 : option.id == value;\r\n }\r\n\r\n findOption(option: IFormControlOption, index: number, id: string): boolean {\r\n return option.id == id;\r\n }\r\n}\r\n","import {Component} from \"@angular/core\";\r\nimport {\r\n DynamicFormControl,\r\n FormControlComponent,\r\n IDynamicForm,\r\n IFormControl,\r\n IFormStaticData\r\n} from \"../../common-types\";\r\n\r\n@Component({\r\n moduleId: module.id,\r\n selector: \"dynamic-form-static\",\r\n templateUrl: \"./dynamic-form-static.component.html\"\r\n})\r\nexport class DynamicFormStaticComponent extends FormControlComponent<IFormStaticData> {\r\n\r\n // Acceptor for provider\r\n static acceptor(control: DynamicFormControl): boolean {\r\n return control.type == \"static\";\r\n }\r\n\r\n // Loader for provider\r\n static loader(): Promise<any> {\r\n return Promise.resolve();\r\n }\r\n}\r\n","import {Component, ViewChild} from \"@angular/core\";\r\nimport {DynamicFormControl, FormControlComponent, IDynamicForm, IFormModelData} from \"../../common-types\";\r\n\r\n@Component({\r\n moduleId: module.id,\r\n selector: \"dynamic-form-model\",\r\n templateUrl: \"./dynamic-form-model.component.html\"\r\n})\r\nexport class DynamicFormModelComponent extends FormControlComponent<IFormModelData> {\r\n\r\n @ViewChild(\"subForm\")\r\n private subForm: IDynamicForm;\r\n\r\n // Acceptor for provider\r\n static acceptor(control: DynamicFormControl): boolean {\r\n return control.type == \"model\";\r\n }\r\n\r\n // Loader for provider\r\n static loader(): Promise<any> {\r\n return Promise.resolve();\r\n }\r\n}\r\n","import {Directive, Input, OnChanges, SimpleChanges, ViewContainerRef} from \"@angular/core\";\r\nimport {IDynamicForm, IDynamicFormControl, IFormControlComponent, IFormGroupComponent} from \"../common-types\";\r\nimport {DynamicFormService} from \"../services/dynamic-form.service\";\r\n\r\n@Directive({\r\n selector: \"[form-group]\",\r\n})\r\nexport class DynamicFormGroupDirective implements OnChanges {\r\n\r\n @Input(\"form-group\") control: IDynamicFormControl;\r\n @Input() form: IDynamicForm;\r\n @Input() visible: boolean;\r\n\r\n get component(): IFormControlComponent {\r\n return this.comp;\r\n }\r\n\r\n private comp: IFormGroupComponent;\r\n\r\n constructor(private vcr: ViewContainerRef, private forms: DynamicFormService) {\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes.control || changes.form || changes.visible) {\r\n if (!this.visible) {\r\n this.vcr.clear();\r\n this.comp = null;\r\n return;\r\n }\r\n this.comp = this.forms.createGroup(this.vcr);\r\n }\r\n if (!this.comp) return;\r\n this.comp.form = this.form;\r\n this.comp.control = this.control;\r\n }\r\n}\r\n","import {ModuleWithProviders, NgModule} from \"@angular/core\";\r\nimport {CommonModule} from \"@angular/common\";\r\nimport {FormsModule, ReactiveFormsModule} from \"@angular/forms\";\r\nimport {TextMaskModule} from \"angular2-text-mask\";\r\nimport {NgxUtilsModule} from \"@stemy/ngx-utils\";\r\nimport {FormControlProvider, FormGroupProvider, provideFormControl, provideFormGroup} from \"./common-types\";\r\n\r\nimport {DynamicFormService} from \"./services/dynamic-form.service\";\r\nimport {OpenApiService} from \"./services/open-api.service\";\r\n\r\nimport {AsyncSubmitDirective} from \"./directives/async-submit.directive\";\r\nimport {DynamicFormControlDirective} from \"./directives/dynamic-form-control.directive\";\r\nimport {DynamicFormGroupDirective} from \"./directives/dynamic-form-group.directive\";\r\nimport {DynamicFormTemplateDirective} from \"./directives/dynamic-form-template.directive\";\r\nimport {DynamicFormsComponent} from \"./components/dynamic-forms/dynamic-forms.component\";\r\nimport {DynamicFormComponent} from \"./components/dynamic-form/dynamic-form.component\";\r\n\r\nimport {DynamicFormGroupComponent} from \"./components/dynamic-form-group/dynamic-form-group.component\";\r\nimport {DynamicFormFileComponent} from \"./components/dynamic-form-file/dynamic-form-file.component\";\r\nimport {DynamicFormInputComponent} from \"./components/dynamic-form-input/dynamic-form-input.component\";\r\nimport {DynamicFormSelectComponent} from \"./components/dynamic-form-select/dynamic-form-select.component\";\r\nimport {DynamicFormStaticComponent} from \"./components/dynamic-form-static/dynamic-form-static.component\";\r\nimport {DynamicFormModelComponent} from \"./components/dynamic-form-model/dynamic-form-model.component\";\r\n\r\n// --- Components ---\r\nexport const components = [\r\n DynamicFormsComponent,\r\n DynamicFormComponent,\r\n DynamicFormGroupComponent,\r\n DynamicFormFileComponent,\r\n DynamicFormInputComponent,\r\n DynamicFormSelectComponent,\r\n DynamicFormStaticComponent,\r\n DynamicFormModelComponent\r\n];\r\n\r\n// --- Directives ---\r\nexport const directives = [\r\n AsyncSubmitDirective,\r\n DynamicFormControlDirective,\r\n DynamicFormGroupDirective,\r\n DynamicFormTemplateDirective\r\n];\r\n\r\n// --- Pipes ---\r\nexport const pipes = [];\r\n\r\n@NgModule({\r\n declarations: [\r\n ...components,\r\n ...directives,\r\n ...pipes\r\n ],\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n TextMaskModule,\r\n NgxUtilsModule\r\n ],\r\n exports: [\r\n ...components,\r\n ...directives,\r\n ...pipes,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n NgxUtilsModule\r\n ],\r\n entryComponents: components,\r\n providers: pipes\r\n})\r\nexport class NgxDynamicFormModule {\r\n\r\n static forRoot(controlProviders?: Array<FormControlProvider>, groupProvider?: FormGroupProvider): ModuleWithProviders<NgxDynamicFormModule> {\r\n return {\r\n ngModule: NgxDynamicFormModule,\r\n providers: [\r\n DynamicFormService,\r\n OpenApiService,\r\n provideFormControl(DynamicFormFileComponent, DynamicFormFileComponent.acceptor, DynamicFormFileComponent.loader),\r\n provideFormControl(DynamicFormInputComponent, DynamicFormInputComponent.acceptor, DynamicFormInputComponent.loader),\r\n provideFormControl(DynamicFormSelectComponent, DynamicFormSelectComponent.acceptor, DynamicFormSelectComponent.loader),\r\n provideFormControl(DynamicFormStaticComponent, DynamicFormStaticComponent.acceptor, DynamicFormStaticComponent.loader),\r\n provideFormControl(DynamicFormModelComponent, DynamicFormModelComponent.acceptor, DynamicFormModelComponent.loader),\r\n ...(controlProviders || []),\r\n groupProvider || provideFormGroup(DynamicFormGroupComponent)\r\n ]\r\n }\r\n }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n\nexport {FORM_GROUP_TYPE as ɵa} from './ngx-dynamic-form/common-types';\nexport {DynamicFormGroupDirective as ɵe} from './ngx-dynamic-form/directives/dynamic-form-group.directive';\nexport {components as ɵb,directives as ɵc,pipes as ɵd} from './ngx-dynamic-form/ngx-dynamic-form.module';"],"names":[],"mappings":"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"}
|