UNPKG

61.9 kBSource Map (JSON)View Raw
1{"version":3,"file":"eclat-form.js","sources":["ng://@eclat/form/lib/contracts/form-config.ts","ng://@eclat/form/lib/form-utility.ts","ng://@eclat/form/lib/abstract-control.ts","ng://@eclat/form/lib/form-models.ts","ng://@eclat/form/lib/directives/eclat-form.directive.ts","ng://@eclat/form/lib/directives/eclat-form-container.directive.ts","ng://@eclat/form/lib/directives/eclat-form-error.directive.ts","ng://@eclat/form/lib/directives/group/eclat-form-group.directive.ts","ng://@eclat/form/lib/directives/group/eclat-form-group-name.directive.ts","ng://@eclat/form/lib/directives/array/eclat-form-array-name.directive.ts","ng://@eclat/form/lib/directives/array/eclat-form-array.directive.ts","ng://@eclat/form/lib/directives/array/eclat-form-array-children.directive.ts","ng://@eclat/form/lib/directives/eclat-form-submit.directive.ts","ng://@eclat/form/lib/directives/array/eclat-form-array-add.directive.ts","ng://@eclat/form/lib/directives/eclat-form-value.directive.ts","ng://@eclat/form/lib/directives/binder/eclat-form-group-binder.directive.ts","ng://@eclat/form/lib/directives/binder/eclat-form-group-name-binder.directive.ts","ng://@eclat/form/lib/directives/binder/eclat-form-array-name-binder.directive.ts","ng://@eclat/form/lib/directives/array/eclat-form-array-remove.directive.ts","ng://@eclat/form/lib/form-module.ts"],"sourcesContent":["import { EclatFormRule } from '../abstract-control';\r\n\r\nexport type ControlRuleConfig<T> =\r\n EclatFormControlConfig<T>\r\n | (T extends any[] ? EclatFormArrayConfig<T> : EclatFormGroupConfig<T>)\r\n\r\nexport type EclatFormControlConfig<T> = EclatFormRule<T>[];\r\n\r\nexport interface EclatFormGroupConfig<T> {\r\n controlsRules: { [P in keyof T]: ControlRuleConfig<T[P]> };\r\n rules?: EclatFormControlConfig<T>;\r\n}\r\n\r\nexport interface EclatFormArrayConfig<T extends any[]> {\r\n controlConfig: ControlRuleConfig<T[0]>;\r\n rules?: EclatFormControlConfig<T>;\r\n}\r\n\r\nexport class EclatRecursiveConfig {\r\n}\r\n\r\nexport type RecursiveControlRuleConfig<T> =\r\n EclatFormControlConfig<T>\r\n | (T extends any[] ? EclatRecursiveFormArrayConfig<T> : EclatRecursiveFormGroupConfig<T>)\r\n\r\nexport interface EclatRecursiveFormGroupConfig<T> {\r\n controlsRules: { [P in keyof T]: RecursiveControlRuleConfig<T[P]> };\r\n rules?: EclatFormControlConfig<T>;\r\n}\r\n\r\nexport interface EclatRecursiveFormArrayConfig<T extends any[]> {\r\n controlConfig: RecursiveControlRuleConfig<T[0]> | EclatRecursiveConfig;\r\n rules?: EclatFormControlConfig<T>;\r\n}\r\n","import {\r\n EclatFormArrayConfig,\r\n EclatFormControlConfig,\r\n EclatFormGroupConfig,\r\n EclatRecursiveConfig,\r\n EclatRecursiveFormGroupConfig,\r\n} from './contracts/form-config';\r\n\r\nexport namespace EclatFormUtility {\r\n export function isEclatFormControlConfig<T>(\r\n eclatForm: EclatFormControlConfig<T> | EclatFormGroupConfig<any> | EclatFormArrayConfig<any>,\r\n ): eclatForm is EclatFormControlConfig<T> {\r\n if (Array.isArray(eclatForm)) {\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n export function isEclatFormGroupConfig<T>(\r\n eclatForm: EclatFormGroupConfig<T> | EclatFormControlConfig<any> | EclatFormArrayConfig<any>,\r\n ): eclatForm is EclatFormGroupConfig<T> {\r\n if ((<EclatFormGroupConfig<T>>eclatForm).controlsRules) {\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n export function isEclatFormArrayConfig<T extends any[]>(\r\n eclatForm: EclatFormGroupConfig<any> | EclatFormControlConfig<any> | EclatFormArrayConfig<T>,\r\n ): eclatForm is EclatFormArrayConfig<T> {\r\n if ((<EclatFormArrayConfig<T>>eclatForm).controlConfig) {\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n export function eclatRecursiveTransformer<T>(data: EclatRecursiveFormGroupConfig<T>): EclatFormGroupConfig<T> {\r\n const path = recursivePathFinder(data);\r\n if (!path) {\r\n throw Error();\r\n }\r\n const paths: string[] = path.split('.');\r\n const latestPath = <any>paths.pop();\r\n\r\n paths.reduce(\r\n (acc, cur) => {\r\n return acc[cur];\r\n },\r\n data as any,\r\n )[latestPath] = data;\r\n\r\n return <any>data;\r\n }\r\n}\r\n\r\nfunction recursivePathFinder(data: any, path: string | null = null): string | null {\r\n if (data instanceof EclatRecursiveConfig) {\r\n return '';\r\n }\r\n if (Array.isArray(data)) {\r\n let found: string | null = null;\r\n\r\n data.some(\r\n (value, key) => {\r\n const temp = recursivePathFinder(value, path);\r\n if (temp !== null) {\r\n if (temp) {\r\n found = key + '.' + temp;\r\n } else {\r\n found = key.toString();\r\n }\r\n }\r\n return !!found;\r\n },\r\n );\r\n\r\n return found;\r\n }\r\n if (data === Object(data)) {\r\n let found: string | null = null;\r\n\r\n Object.entries(data).some(\r\n ([key, value]) => {\r\n const temp = recursivePathFinder(value, path);\r\n if (temp !== null) {\r\n if (temp) {\r\n found = key + '.' + temp;\r\n } else {\r\n found = key;\r\n }\r\n }\r\n return !!found;\r\n },\r\n );\r\n return found;\r\n }\r\n\r\n return null;\r\n}\r\n","import { AbstractControl, AsyncValidatorFn, ValidatorFn } from '@angular/forms';\r\nimport { Observable } from 'rxjs';\r\n\r\nexport interface EclatErrorMapping<T> {\r\n [key: string]: string | string[] | ((control: AbstractEclatFormControl<T>) => string | string[]);\r\n}\r\n\r\nexport interface EclatFormRule<T> {\r\n key: string;\r\n message: string | string[] | ((control: AbstractEclatFormControl<T>) => string | string[]);\r\n validator?: ValidatorFn;\r\n asyncValidator?: AsyncValidatorFn;\r\n}\r\n\r\nexport abstract class AbstractEclatFormControl<T, C extends AbstractControl = AbstractControl> {\r\n public control: C;\r\n protected asyncValidators: AsyncValidatorFn[];\r\n protected validators: ValidatorFn[];\r\n private readonly rules: EclatErrorMapping<T>;\r\n\r\n constructor(rules?: EclatFormRule<T>[]) {\r\n const validators: ValidatorFn[] = [];\r\n const asyncValidators: AsyncValidatorFn[] = [];\r\n const errorMapping: EclatErrorMapping<T> = {};\r\n\r\n if (rules) {\r\n rules.forEach(({ validator, asyncValidator, key, message }) => {\r\n errorMapping[key] = message;\r\n if (validator) {\r\n validators.push(validator);\r\n }\r\n if (asyncValidator) {\r\n asyncValidators.push(asyncValidator);\r\n }\r\n });\r\n }\r\n\r\n this.rules = errorMapping;\r\n this.validators = validators;\r\n this.asyncValidators = asyncValidators;\r\n }\r\n\r\n get errorMessages(): string[] {\r\n if (!this.control.errors) {\r\n return [];\r\n }\r\n\r\n return Object.entries(this.control.errors).reduce(\r\n (acc, [key, value]) => {\r\n if (value) {\r\n const temp = this.rules[key];\r\n const errors = typeof temp === 'function' ? temp(this) : temp;\r\n\r\n if (Array.isArray(errors)) {\r\n acc.push(...errors);\r\n }\r\n else {\r\n acc.push(errors);\r\n }\r\n }\r\n\r\n return acc;\r\n },\r\n <string[]>[],\r\n );\r\n }\r\n\r\n get value(): T {\r\n return this.control.value;\r\n }\r\n\r\n get valid(): boolean {\r\n return this.control.valid;\r\n }\r\n\r\n get valueChanges(): Observable<T> {\r\n return this.control.valueChanges;\r\n }\r\n\r\n public disable(isDisabled: boolean = true, opts?: {\r\n onlySelf?: boolean;\r\n emitEvent?: boolean;\r\n }): void {\r\n if (isDisabled) {\r\n this.control.disable(opts);\r\n } else {\r\n this.control.enable(opts);\r\n }\r\n }\r\n\r\n public abstract patchState(data: T, emitEvent?: boolean): void;\r\n\r\n public abstract resetState(data: T, emitEvent?: boolean): void;\r\n}\r\n","import { AbstractControl, FormArray, FormControl, FormGroup } from '@angular/forms';\r\nimport {\r\n ControlRuleConfig,\r\n EclatFormArrayConfig,\r\n EclatFormControlConfig,\r\n EclatFormGroupConfig,\r\n} from './contracts/form-config';\r\nimport { EclatFormUtility } from './form-utility';\r\nimport { AbstractEclatFormControl } from './abstract-control';\r\n\r\nexport type EclatFormChild<T> = T extends any[]\r\n ? EclatFormArray<T>\r\n : T extends Date | String | RegExp ? EclatFormControl<T>\r\n : T extends object ? EclatFormGroup<T> : EclatFormControl<T>;\r\n\r\nexport function getEclatControl(config: any, data?: any): AbstractEclatFormControl<any> | null {\r\n if (EclatFormUtility.isEclatFormControlConfig(config)) {\r\n return new EclatFormControl(config, data);\r\n }\r\n if (EclatFormUtility.isEclatFormGroupConfig(config)) {\r\n return new EclatFormGroup(config, data);\r\n }\r\n if (EclatFormUtility.isEclatFormArrayConfig(config)) {\r\n return new EclatFormArray(config, data);\r\n }\r\n\r\n return null;\r\n}\r\n\r\nexport class EclatFormControl<T> extends AbstractEclatFormControl<T,\r\n FormControl> {\r\n constructor(config: EclatFormControlConfig<T>, initialData?: T) {\r\n super(config);\r\n this.control = new FormControl(null, this.validators, this.asyncValidators);\r\n\r\n if (initialData) {\r\n this.resetState(initialData, false);\r\n }\r\n }\r\n\r\n public patchState(data: T, emitEvent: boolean = true): void {\r\n this.control.patchValue(data, { emitEvent });\r\n }\r\n\r\n public resetState(data: T, emitEvent: boolean = true): void {\r\n this.control.reset(data, { emitEvent });\r\n }\r\n}\r\n\r\nexport class EclatFormGroup<T> extends AbstractEclatFormControl<T, FormGroup> {\r\n public children: { [P in keyof T]: EclatFormChild<T[P]> };\r\n\r\n constructor(dfg: EclatFormGroupConfig<T>, initialData?: T) {\r\n super(dfg.rules);\r\n const children: any = {};\r\n const controls: any = {};\r\n\r\n Object.keys(dfg.controlsRules).forEach((key: string) => {\r\n const value: ControlRuleConfig<any> = dfg.controlsRules[<keyof T>key];\r\n const eclatControl = getEclatControl(value);\r\n\r\n if (eclatControl) {\r\n children[key] = eclatControl;\r\n controls[key] = eclatControl.control;\r\n }\r\n });\r\n\r\n this.control = new FormGroup(controls, this.validators, this.asyncValidators);\r\n this.children = children;\r\n\r\n if (initialData) {\r\n this.resetState(initialData, false);\r\n }\r\n }\r\n\r\n public patchState(data: T, emitEvent: boolean = true): void {\r\n if (!data) {\r\n console.warn(`Expect an object, but ${data} is given`);\r\n return;\r\n }\r\n\r\n Object.entries(data).forEach(([key, value]) => {\r\n if (this.children[key as keyof T]) {\r\n this.children[key as keyof T].patchState(value, false);\r\n }\r\n });\r\n this.control.updateValueAndValidity({ emitEvent });\r\n }\r\n\r\n public resetState(data: T, emitEvent: boolean = true): void {\r\n if (!data) {\r\n console.warn(`Expect an object, but ${data} is given`);\r\n return;\r\n }\r\n\r\n Object.entries(data).forEach(([key, value]) => {\r\n if (this.children[key as keyof T]) {\r\n this.children[key as keyof T].resetState(value, false);\r\n }\r\n });\r\n this.control.updateValueAndValidity({ emitEvent });\r\n }\r\n\r\n public getChild<P extends keyof T>(key: P): EclatFormChild<T[P]> {\r\n return this.children[key];\r\n }\r\n\r\n private addChild(\r\n key: keyof T & string,\r\n config: ControlRuleConfig<T>,\r\n data: T,\r\n ): void {\r\n const eclatControl = getEclatControl(config);\r\n\r\n if (eclatControl) {\r\n eclatControl.resetState(data);\r\n\r\n this.children[key] = eclatControl as EclatFormChild<T[typeof key]>;\r\n this.control.addControl(key, this.children[key].control);\r\n }\r\n }\r\n\r\n private removeChild(key: keyof T & string): void {\r\n delete this.children[key];\r\n this.control.removeControl(key);\r\n }\r\n}\r\n\r\nexport class EclatFormArray<T extends any[]> extends AbstractEclatFormControl<T,\r\n FormArray> {\r\n public children: EclatFormChild<T[0]>[];\r\n private childConfig: ControlRuleConfig<T[0]>;\r\n\r\n constructor(dfa: EclatFormArrayConfig<T>, initialData?: T) {\r\n super(dfa.rules);\r\n\r\n this.control = new FormArray([], this.validators, this.asyncValidators);\r\n this.childConfig = dfa.controlConfig;\r\n this.children = [];\r\n\r\n if (initialData) {\r\n this.resetState(initialData, false);\r\n }\r\n }\r\n\r\n public addChild(data?: Partial<T[0]>): void {\r\n const eclatControl = getEclatControl(this.childConfig);\r\n if (eclatControl) {\r\n eclatControl.resetState(data);\r\n\r\n this.children.push(eclatControl as EclatFormChild<T[0]>);\r\n this.control.push(eclatControl.control);\r\n }\r\n }\r\n\r\n public removeChild(index: number): void {\r\n this.children.splice(index, 1);\r\n this.control.removeAt(index);\r\n }\r\n\r\n public patchState(data: T, emitEvent: boolean = true): void {\r\n if (!data) {\r\n console.warn(`Expect an array, but ${data} is given`);\r\n return;\r\n }\r\n\r\n const controls: AbstractControl[] = [];\r\n this.children = [];\r\n\r\n data.forEach(d => {\r\n const eclatControl = getEclatControl(this.childConfig, d);\r\n if (eclatControl) {\r\n this.children.push(eclatControl as EclatFormChild<T[0]>);\r\n controls.push(eclatControl.control);\r\n }\r\n });\r\n this.control.controls = controls;\r\n this.control.updateValueAndValidity({ emitEvent: true }); // used by eclat form array children\r\n }\r\n\r\n public resetState(data: T, emitEvent: boolean = true): void {\r\n if (!data) {\r\n console.warn(`Expect an array, but ${data} is given`);\r\n return;\r\n }\r\n\r\n const controls: AbstractControl[] = [];\r\n this.children = [];\r\n\r\n data.forEach(d => {\r\n const eclatControl = getEclatControl(this.childConfig, d);\r\n if (eclatControl) {\r\n this.children.push(eclatControl as EclatFormChild<T[0]>);\r\n controls.push(eclatControl.control);\r\n }\r\n });\r\n this.control.controls = controls;\r\n this.control.updateValueAndValidity({ emitEvent: true }); // used by eclat form array children\r\n }\r\n\r\n public getChild(index: number): EclatFormChild<T[0]> {\r\n return this.children[index];\r\n }\r\n}\r\n","import { Directive, Input, TemplateRef, ViewContainerRef } from '@angular/core';\r\nimport { EclatFormState } from '../contracts/form-state';\r\nimport { AbstractEclatFormControl } from '../abstract-control';\r\nimport { getEclatControl } from '../form-models';\r\n\r\nexport class EclatFormContext<T> {\r\n constructor(public $implicit: AbstractEclatFormControl<T>) {\r\n }\r\n}\r\n\r\n@Directive({ selector: '[eclatForm][eclatFormOf]' })\r\nexport class EclatFormOfDirective<T> {\r\n private context?: EclatFormContext<T>;\r\n private latestState?: EclatFormState<T>;\r\n\r\n constructor(\r\n private templateRef: TemplateRef<EclatFormContext<T>>,\r\n private viewContainer: ViewContainerRef) {\r\n }\r\n\r\n @Input() set eclatFormOf(state: EclatFormState<T>) {\r\n if (!this.context || !this.latestState || this.latestState.config !== state.config) {\r\n this.setContext(getEclatControl(state.config, state.data));\r\n }\r\n else if (this.latestState.data !== state.data) {\r\n this.context.$implicit.resetState(state.data);\r\n }\r\n\r\n this.latestState = state;\r\n }\r\n\r\n private setContext(control?: AbstractEclatFormControl<T> | null) {\r\n if (!control) {\r\n throw new Error('control not found');\r\n }\r\n\r\n if (!this.context) {\r\n this.context = new EclatFormContext<T>(control);\r\n this.viewContainer.createEmbeddedView(this.templateRef, this.context);\r\n }\r\n else {\r\n this.context.$implicit = control;\r\n }\r\n }\r\n}\r\n","import { BehaviorSubject, Observable } from 'rxjs';\r\nimport { AbstractEclatFormControl } from '../abstract-control';\r\nimport { EventEmitter, Output } from '@angular/core';\r\n\r\nexport abstract class EclatFormContainerDirective<T extends AbstractEclatFormControl<any>> {\r\n @Output()\r\n private onSubmit: EventEmitter<any>;\r\n\r\n protected constructor() {\r\n this._formControl = new BehaviorSubject<T | undefined>(undefined);\r\n this.onSubmit = new EventEmitter();\r\n }\r\n\r\n protected _formControl: BehaviorSubject<T | undefined>;\r\n\r\n get formControl(): T | undefined {\r\n return this._formControl.getValue();\r\n }\r\n\r\n get formControl$(): Observable<T | undefined> {\r\n return this._formControl.asObservable();\r\n }\r\n\r\n submit(): void {\r\n if (this.formControl) {\r\n this.onSubmit.emit(this.formControl.value);\r\n }\r\n }\r\n\r\n abstract getChild(key: any): AbstractEclatFormControl<any> | undefined;\r\n}\r\n","import { Directive, Input, OnDestroy, OnInit, TemplateRef, ViewContainerRef } from '@angular/core';\r\nimport { AbstractEclatFormControl } from '../abstract-control';\r\nimport { Subject, Subscription } from 'rxjs';\r\nimport { takeUntil } from 'rxjs/operators';\r\nimport { EclatFormContainerDirective } from './eclat-form-container.directive';\r\n\r\nclass EclatFormErrorContext<T> {\r\n constructor(public control: AbstractEclatFormControl<T>) {\r\n }\r\n\r\n get $implicit(): string[] {\r\n return this.control.errorMessages;\r\n }\r\n}\r\n\r\n\r\n@Directive({ selector: '[eclatFormError]' })\r\nexport class EclatFormErrorDirective<T> implements OnInit, OnDestroy {\r\n @Input()\r\n errorMatcher: (control: AbstractEclatFormControl<T>) => boolean;\r\n private context?: EclatFormErrorContext<T>;\r\n private latestControlName: string;\r\n private onDestroy$: Subject<void>;\r\n private valueChangesSub?: Subscription;\r\n\r\n constructor(\r\n private templateRef: TemplateRef<EclatFormErrorContext<T>>,\r\n private viewContainer: ViewContainerRef,\r\n private parent: EclatFormContainerDirective<any>,\r\n ) {\r\n this.onDestroy$ = new Subject();\r\n this.errorMatcher = () => true;\r\n }\r\n\r\n @Input()\r\n set eclatControl(control: AbstractEclatFormControl<T>) {\r\n this.setContext(control);\r\n }\r\n\r\n @Input()\r\n set eclatControlName(controlName: keyof Record<any, T> | undefined) {\r\n if (!this.parent.formControl) {\r\n throw new Error('parent formControl not exist');\r\n }\r\n\r\n const instance = !controlName ? this.parent.formControl : this.parent.formControl.getChild(controlName);\r\n\r\n if (!instance) {\r\n throw new Error('control not found');\r\n return;\r\n }\r\n\r\n this.latestControlName = controlName;\r\n this.setContext(instance);\r\n }\r\n\r\n @Input() set eclatFormError(control: AbstractEclatFormControl<T> | keyof Record<any, T>) {\r\n if (control instanceof AbstractEclatFormControl) {\r\n this.setContext(control);\r\n }\r\n else {\r\n this.eclatControlName = control;\r\n }\r\n }\r\n\r\n ngOnInit(): void {\r\n this.parent.formControl$.pipe(takeUntil(this.onDestroy$)).subscribe(\r\n (formControl) => {\r\n if (formControl && this.latestControlName) {\r\n this.eclatFormError = formControl.getChild(this.latestControlName);\r\n }\r\n },\r\n );\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.onDestroy$.next();\r\n }\r\n\r\n private setContext(control: AbstractEclatFormControl<T>) {\r\n if (!this.context) {\r\n this.context = new EclatFormErrorContext<T>(control);\r\n this.viewContainer.createEmbeddedView(this.templateRef, this.context);\r\n }\r\n else if (this.context.control !== control) {\r\n this.context.control = control;\r\n }\r\n if (this.valueChangesSub) {\r\n this.valueChangesSub.unsubscribe();\r\n }\r\n\r\n this.checkValidity(control);\r\n this.valueChangesSub = control.valueChanges.pipe(takeUntil(this.onDestroy$)).subscribe(\r\n () => {\r\n this.checkValidity(control);\r\n },\r\n );\r\n }\r\n\r\n private checkValidity(control: AbstractEclatFormControl<T>): void {\r\n const isAttached = !!this.viewContainer.length;\r\n\r\n if (!control.valid && this.errorMatcher(control)) {\r\n if (!isAttached) {\r\n this.viewContainer.createEmbeddedView(this.templateRef, this.context);\r\n }\r\n }\r\n else {\r\n if (isAttached) {\r\n this.viewContainer.remove();\r\n }\r\n }\r\n }\r\n}\r\n","import { Directive, forwardRef, Input } from '@angular/core';\r\nimport { EclatFormChild, EclatFormGroup } from '../../form-models';\r\nimport { EclatFormContainerDirective } from '../eclat-form-container.directive';\r\n\r\n@Directive({\r\n selector: '[eclatFormGroup]',\r\n providers: [{\r\n provide: EclatFormContainerDirective,\r\n useExisting: forwardRef(() => EclatFormGroupDirective),\r\n }],\r\n})\r\nexport class EclatFormGroupDirective<T> extends EclatFormContainerDirective<EclatFormGroup<T>> {\r\n constructor() {\r\n super();\r\n }\r\n\r\n @Input()\r\n set eclatFormGroup(formGroup: EclatFormGroup<T>) {\r\n this._formControl.next(formGroup);\r\n }\r\n\r\n getChild(key: keyof T): EclatFormChild<T[any]> | undefined {\r\n if (this.formControl) {\r\n return this.formControl.getChild(key);\r\n }\r\n\r\n return undefined;\r\n }\r\n}\r\n\r\n","import { Directive, forwardRef, Input, OnDestroy, OnInit, SkipSelf } from '@angular/core';\r\nimport { EclatFormChild, EclatFormGroup } from '../../form-models';\r\nimport { EclatFormContainerDirective } from '../eclat-form-container.directive';\r\nimport { Subject } from 'rxjs';\r\nimport { takeUntil } from 'rxjs/operators';\r\n\r\n@Directive({\r\n selector: '[eclatFormGroupName]',\r\n providers: [{\r\n provide: EclatFormContainerDirective,\r\n useExisting: forwardRef(() => EclatFormGroupNameDirective),\r\n }],\r\n})\r\nexport class EclatFormGroupNameDirective<T extends any[]> extends EclatFormContainerDirective<EclatFormGroup<T>> implements OnInit, OnDestroy {\r\n private onDestroy$: Subject<void>;\r\n private latestName: string;\r\n\r\n constructor(@SkipSelf() private parent: EclatFormContainerDirective<any>) {\r\n super();\r\n this.onDestroy$ = new Subject();\r\n }\r\n\r\n @Input()\r\n set eclatFormGroupName(name: string) {\r\n this.latestName = name;\r\n this._formControl.next(<EclatFormGroup<any>>this.parent.getChild(name));\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.onDestroy$.next();\r\n }\r\n\r\n ngOnInit(): void {\r\n this.parent.formControl$.pipe(takeUntil(this.onDestroy$)).subscribe(\r\n () => {\r\n this.eclatFormGroupName = this.latestName;\r\n },\r\n );\r\n }\r\n\r\n getChild(key: number): EclatFormChild<T[any]> | undefined {\r\n if (this.formControl) {\r\n return this.formControl.getChild(key);\r\n }\r\n\r\n return undefined;\r\n }\r\n}\r\n\r\n","import { Directive, forwardRef, Input, OnDestroy, OnInit, SkipSelf } from '@angular/core';\r\nimport { EclatFormArray, EclatFormChild } from '../../form-models';\r\nimport { EclatFormContainerDirective } from '../eclat-form-container.directive';\r\nimport { Subject } from 'rxjs';\r\nimport { takeUntil } from 'rxjs/operators';\r\n\r\n@Directive({\r\n selector: '[eclatFormArrayName]',\r\n providers: [{\r\n provide: EclatFormContainerDirective,\r\n useExisting: forwardRef(() => EclatFormArrayNameDirective),\r\n }],\r\n})\r\nexport class EclatFormArrayNameDirective<T extends any[]> extends EclatFormContainerDirective<EclatFormArray<T>> implements OnInit, OnDestroy {\r\n private onDestroy$: Subject<void>;\r\n private latestName: string;\r\n\r\n constructor(@SkipSelf() private parent: EclatFormContainerDirective<any>) {\r\n super();\r\n this.onDestroy$ = new Subject();\r\n }\r\n\r\n @Input()\r\n set eclatFormArrayName(name: string) {\r\n this.latestName = name;\r\n this._formControl.next(<EclatFormArray<any>>this.parent.getChild(name));\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.onDestroy$.next();\r\n }\r\n\r\n ngOnInit(): void {\r\n this.parent.formControl$.pipe(takeUntil(this.onDestroy$)).subscribe(\r\n () => {\r\n this.eclatFormArrayName = this.latestName;\r\n },\r\n );\r\n }\r\n\r\n getChild(key: number): EclatFormChild<T[any]> | undefined {\r\n if (this.formControl) {\r\n return this.formControl.getChild(key);\r\n }\r\n\r\n return undefined;\r\n }\r\n}\r\n\r\n","import { Directive, forwardRef, Input } from '@angular/core';\r\nimport { EclatFormArray, EclatFormChild } from '../../form-models';\r\nimport { EclatFormContainerDirective } from '../eclat-form-container.directive';\r\n\r\n@Directive({\r\n selector: '[eclatFormArray]',\r\n providers: [{\r\n provide: EclatFormContainerDirective,\r\n useExisting: forwardRef(() => EclatFormArrayDirective),\r\n }],\r\n})\r\nexport class EclatFormArrayDirective<T extends any[]> extends EclatFormContainerDirective<EclatFormArray<T>> {\r\n constructor() {\r\n super();\r\n }\r\n\r\n @Input()\r\n set eclatFormArray(formArray: EclatFormArray<T>) {\r\n this._formControl.next(formArray);\r\n }\r\n\r\n getChild(key: number): EclatFormChild<T[any]> | undefined {\r\n if (this.formControl) {\r\n return this.formControl.getChild(key);\r\n }\r\n\r\n return undefined;\r\n }\r\n}\r\n\r\n","import { Directive, EmbeddedViewRef, OnDestroy, OnInit, TemplateRef, ViewContainerRef } from '@angular/core';\r\nimport { EclatFormContainerDirective } from '../eclat-form-container.directive';\r\nimport { EclatFormArray, EclatFormChild } from '../../form-models';\r\nimport { Subject, Subscription } from 'rxjs';\r\nimport { takeUntil } from 'rxjs/operators';\r\n\r\n@Directive({\r\n selector: '[eclatFormArrayChildren]',\r\n})\r\nexport class EclatFormArrayChildrenDirective<T> implements OnInit, OnDestroy {\r\n private onDestroy$: Subject<void>;\r\n private latestChildren: EclatFormChild<any>[];\r\n private valueChangeSubs: Subscription | null;\r\n\r\n constructor(\r\n private templateRef: TemplateRef<any>,\r\n private viewContainer: ViewContainerRef,\r\n private parent: EclatFormContainerDirective<EclatFormArray<any>>,\r\n ) {\r\n this.onDestroy$ = new Subject();\r\n this.latestChildren = [];\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.onDestroy$.next();\r\n }\r\n\r\n ngOnInit(): void {\r\n this.parent.formControl$.pipe(takeUntil(this.onDestroy$)).subscribe(\r\n (formControl) => {\r\n if (formControl) {\r\n if (this.valueChangeSubs) {\r\n this.valueChangeSubs.unsubscribe();\r\n }\r\n\r\n this.onChange(formControl);\r\n this.valueChangeSubs = formControl.valueChanges.pipe(takeUntil(this.onDestroy$)).subscribe(\r\n () => {\r\n this.onChange(formControl);\r\n },\r\n );\r\n }\r\n },\r\n );\r\n }\r\n\r\n private onChange(control: EclatFormArray<any>): void {\r\n const children: EclatFormChild<any>[] = [];\r\n const controlChildrenLength: number = control.children.length;\r\n\r\n control.children.forEach(\r\n (c, index) => {\r\n const lastIndex = this.latestChildren.findIndex(o => o === c);\r\n const first: boolean = index === 0;\r\n const last: boolean = index === (controlChildrenLength - 1);\r\n\r\n if (lastIndex < 0) {\r\n this.viewContainer.createEmbeddedView(this.templateRef, { $implicit: index, last, first }, index);\r\n } else if (lastIndex !== index) {\r\n const embeddedView: EmbeddedViewRef<any> = <EmbeddedViewRef<any>>this.viewContainer.get(lastIndex)!;\r\n embeddedView.context.$implicit = index;\r\n embeddedView.context.last = last;\r\n embeddedView.context.first = first;\r\n\r\n this.viewContainer.move(embeddedView, index);\r\n }\r\n\r\n children.push(c);\r\n },\r\n );\r\n while (this.viewContainer.length > controlChildrenLength) {\r\n this.viewContainer.remove();\r\n }\r\n\r\n this.latestChildren = children;\r\n }\r\n}\r\n\r\n","import { Directive, HostListener } from '@angular/core';\r\nimport { EclatFormContainerDirective } from './eclat-form-container.directive';\r\n\r\n@Directive({ selector: '[eclatFormSubmit]' })\r\nexport class EclatFormSubmitDirective {\r\n constructor(private parent: EclatFormContainerDirective<any>) {\r\n }\r\n\r\n @HostListener('click', ['$event'])\r\n @HostListener('tap', ['$event'])\r\n onClick(): void {\r\n this.parent.submit();\r\n }\r\n}\r\n","import { Directive, HostListener, Input } from '@angular/core';\r\nimport { EclatFormContainerDirective } from '../eclat-form-container.directive';\r\nimport { EclatFormArray } from '../../form-models';\r\n\r\n@Directive({\r\n selector: '[eclatFormAddChildren]',\r\n})\r\nexport class EclatFormArrayAddDirective<T> {\r\n @Input('eclatFormAddChildren')\r\n value: T;\r\n\r\n constructor(\r\n private parent: EclatFormContainerDirective<EclatFormArray<any>>,\r\n ) {\r\n }\r\n\r\n @HostListener('click', ['$event'])\r\n onClick(): void {\r\n const control = this.parent.formControl;\r\n\r\n if (control) {\r\n control.addChild(this.value);\r\n }\r\n }\r\n}\r\n\r\n","import { Directive, Input, OnDestroy, OnInit, TemplateRef, ViewContainerRef } from '@angular/core';\r\nimport { AbstractEclatFormControl } from '../abstract-control';\r\nimport { Subject } from 'rxjs';\r\nimport { takeUntil } from 'rxjs/operators';\r\nimport { EclatFormContainerDirective } from './eclat-form-container.directive';\r\n\r\nclass EclatFormValueContext<T> {\r\n constructor(public control: AbstractEclatFormControl<T>) {\r\n }\r\n\r\n get $implicit(): T {\r\n return this.control.value;\r\n }\r\n}\r\n\r\n\r\n@Directive({ selector: '[eclatFormValue]' })\r\nexport class EclatFormValueDirective<T> implements OnInit, OnDestroy {\r\n private context?: EclatFormValueContext<T>;\r\n private latestControlName: string;\r\n private onDestroy$: Subject<void>;\r\n\r\n constructor(\r\n private templateRef: TemplateRef<EclatFormValueContext<T>>,\r\n private viewContainer: ViewContainerRef,\r\n private parent: EclatFormContainerDirective<any>,\r\n ) {\r\n this.onDestroy$ = new Subject();\r\n }\r\n\r\n @Input()\r\n set eclatControl(control: AbstractEclatFormControl<T>) {\r\n this.setContext(control);\r\n }\r\n\r\n @Input()\r\n set eclatControlName(controlName: keyof Record<any, T>) {\r\n if (!this.parent.formControl) {\r\n throw new Error('parent formControl not exist');\r\n }\r\n\r\n const instance = this.parent.formControl.getChild(controlName);\r\n\r\n if (!instance) {\r\n throw new Error('control not found');\r\n return;\r\n }\r\n\r\n this.latestControlName = controlName;\r\n this.setContext(instance);\r\n }\r\n\r\n @Input() set eclatFormValue(control: AbstractEclatFormControl<T> | keyof Record<any, T>) {\r\n if (control instanceof AbstractEclatFormControl) {\r\n this.setContext(control);\r\n }\r\n else if (control || control === 0) {\r\n this.eclatControlName = control;\r\n }\r\n }\r\n\r\n ngOnInit(): void {\r\n this.parent.formControl$.pipe(takeUntil(this.onDestroy$)).subscribe(\r\n (formControl) => {\r\n if (formControl && this.latestControlName) {\r\n this.eclatFormValue = formControl.getChild(this.latestControlName);\r\n }\r\n },\r\n );\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.onDestroy$.next();\r\n }\r\n\r\n private setContext(control: AbstractEclatFormControl<T>) {\r\n if (!this.context) {\r\n this.context = new EclatFormValueContext<T>(control);\r\n this.viewContainer.createEmbeddedView(this.templateRef, this.context);\r\n }\r\n else if (this.context.control !== control) {\r\n this.context.control = control;\r\n }\r\n }\r\n}\r\n","import { ControlContainer, FormGroupDirective } from '@angular/forms';\r\nimport { Directive, forwardRef, Input, OnChanges, SimpleChange, SimpleChanges } from '@angular/core';\r\nimport { EclatFormGroup } from '../../form-models';\r\n\r\n@Directive({\r\n selector: '[eclatFormGroup]',\r\n providers: [{\r\n provide: ControlContainer,\r\n useExisting: forwardRef(() => EclatFormGroupBinderDirective),\r\n }],\r\n})\r\nexport class EclatFormGroupBinderDirective<T> extends FormGroupDirective implements OnChanges {\r\n @Input()\r\n set eclatFormGroup(formGroup: EclatFormGroup<T>) {\r\n this.form = formGroup.control;\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n const eclatFormGroupChanges = changes.eclatFormGroup;\r\n\r\n if (eclatFormGroupChanges) {\r\n const prevValue = eclatFormGroupChanges.previousValue ? eclatFormGroupChanges.previousValue.control : undefined;\r\n const currentValue = eclatFormGroupChanges.currentValue.control;\r\n const firstChange = eclatFormGroupChanges.firstChange;\r\n super.ngOnChanges({ form: new SimpleChange(prevValue, currentValue, firstChange) });\r\n }\r\n }\r\n}\r\n","import { ControlContainer, FormGroupName } from '@angular/forms';\r\nimport { Directive, forwardRef, Input } from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[eclatFormGroupName]',\r\n providers: [{\r\n provide: ControlContainer,\r\n useExisting: forwardRef(() => EclatFormGroupNameBinderDirective),\r\n }],\r\n})\r\nexport class EclatFormGroupNameBinderDirective<T> extends FormGroupName {\r\n @Input()\r\n set eclatFormGroupName(name: string) {\r\n this.name = name;\r\n }\r\n}\r\n","import { ControlContainer, FormArrayName } from '@angular/forms';\r\nimport { Directive, forwardRef, Input } from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[eclatFormArrayName]',\r\n providers: [{\r\n provide: ControlContainer,\r\n useExisting: forwardRef(() => EclatFormArrayNameBinderDirective),\r\n }],\r\n})\r\nexport class EclatFormArrayNameBinderDirective<T> extends FormArrayName {\r\n @Input()\r\n set eclatFormArrayName(name: string) {\r\n this.name = name;\r\n }\r\n}\r\n","import { Directive, HostListener, Input } from '@angular/core';\r\nimport { EclatFormContainerDirective } from '../eclat-form-container.directive';\r\nimport { EclatFormArray } from '../../form-models';\r\n\r\n@Directive({\r\n selector: '[eclatFormRemoveChildren]',\r\n})\r\nexport class EclatFormArrayRemoveDirective<T> {\r\n @Input('eclatFormRemoveChildren')\r\n index: number;\r\n\r\n constructor(\r\n private parent: EclatFormContainerDirective<EclatFormArray<any>>,\r\n ) {\r\n }\r\n\r\n @HostListener('click', ['$event'])\r\n onClick(): void {\r\n const control = this.parent.formControl;\r\n\r\n if (control) {\r\n control.removeChild(this.index);\r\n }\r\n }\r\n}\r\n\r\n","import { NgModule } from '@angular/core';\r\nimport { ReactiveFormsModule } from '@angular/forms';\r\nimport { CommonModule } from '@angular/common';\r\nimport { EclatFormOfDirective } from './directives/eclat-form.directive';\r\nimport { EclatFormErrorDirective } from './directives/eclat-form-error.directive';\r\nimport { EclatFormGroupDirective } from './directives/group/eclat-form-group.directive';\r\nimport { EclatFormGroupNameDirective } from './directives/group/eclat-form-group-name.directive';\r\nimport { EclatFormArrayNameDirective } from './directives/array/eclat-form-array-name.directive';\r\nimport { EclatFormArrayDirective } from './directives/array/eclat-form-array.directive';\r\nimport { EclatFormArrayChildrenDirective } from './directives/array/eclat-form-array-children.directive';\r\nimport { EclatFormSubmitDirective } from './directives/eclat-form-submit.directive';\r\nimport { EclatFormArrayAddDirective } from './directives/array/eclat-form-array-add.directive';\r\nimport { EclatFormValueDirective } from './directives/eclat-form-value.directive';\r\nimport { EclatFormGroupBinderDirective } from './directives/binder/eclat-form-group-binder.directive';\r\nimport { EclatFormGroupNameBinderDirective } from './directives/binder/eclat-form-group-name-binder.directive';\r\nimport { EclatFormArrayNameBinderDirective } from './directives/binder/eclat-form-array-name-binder.directive';\r\nimport { EclatFormArrayRemoveDirective } from './directives/array/eclat-form-array-remove.directive';\r\n\r\n@NgModule({\r\n imports: [CommonModule, ReactiveFormsModule],\r\n declarations: [EclatFormOfDirective, EclatFormErrorDirective, EclatFormGroupDirective, EclatFormGroupNameDirective, EclatFormArrayDirective, EclatFormArrayNameDirective, EclatFormArrayChildrenDirective, EclatFormSubmitDirective, EclatFormArrayAddDirective, EclatFormValueDirective, EclatFormGroupBinderDirective, EclatFormGroupNameBinderDirective, EclatFormArrayNameBinderDirective, EclatFormArrayRemoveDirective],\r\n exports: [CommonModule, ReactiveFormsModule, EclatFormOfDirective, EclatFormErrorDirective, EclatFormGroupDirective, EclatFormGroupNameDirective, EclatFormArrayDirective, EclatFormArrayNameDirective, EclatFormArrayChildrenDirective, EclatFormSubmitDirective, EclatFormArrayAddDirective, EclatFormValueDirective, EclatFormGroupBinderDirective, EclatFormGroupNameBinderDirective, EclatFormArrayNameBinderDirective, EclatFormArrayRemoveDirective],\r\n})\r\nexport class EclatFormModule {\r\n}\r\n"],"names":[],"mappings":"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"}
\No newline at end of file