{"version":3,"file":"ngx-forms-helpers-base-forms-models.mjs","sources":["../../../projects/ngx-forms-helpers/base-forms-models/src/models/abstract-form-model.ts","../../../projects/ngx-forms-helpers/base-forms-models/src/models/base-form-array.model.ts","../../../projects/ngx-forms-helpers/base-forms-models/src/models/base-form-control.model.ts","../../../projects/ngx-forms-helpers/base-forms-models/src/models/base-form-group.model.ts","../../../projects/ngx-forms-helpers/base-forms-models/src/ngx-forms-helpers-base-forms-models.ts"],"sourcesContent":["import {AbstractControl} from '@angular/forms';\n\nexport abstract class AbstractFormModel<Value = unknown> {\n    public abstract readonly control: AbstractControl<Value>;\n\n    protected handleInitialDisable(disabled: boolean = false): void {\n        if (disabled) this.control.disable();\n    }\n}\n","import {\n    AbstractControlOptions,\n    FormArray,\n} from '@angular/forms';\n\nimport {AbstractFormModel} from \"./abstract-form-model\";\nimport {BaseFormModels} from \"../types/types\";\n\nexport interface BaseFormArrayModelParams<Models extends BaseFormModels[] = any> {\n    models: Models\n    disabled?: boolean\n    controlOptions?: AbstractControlOptions\n}\n\nexport class BaseFormArrayModel<Models extends BaseFormModels[] = any> extends AbstractFormModel {\n    public readonly control: FormArray<Models[number]['control']>;\n    public readonly models: Models;\n\n    constructor({\n        models,\n        disabled,\n        controlOptions,\n    }: BaseFormArrayModelParams<Models>) {\n        super();\n\n        this.models = models;\n        this.control = new FormArray(this.models.map(item => item.control), controlOptions);\n        this.handleInitialDisable(disabled);\n    }\n\n    public push(model: Models[number], emitEvent?: boolean): void {\n        this.models.push(model);\n        this.control.push(model.control, {emitEvent});\n    }\n\n    public removeAt(index: number, emitEvent?: boolean): void {\n        this.models.splice(index, 1);\n        this.control.removeAt(index, {emitEvent});\n    }\n\n    public setControl(index: number, model: Models[number], emitEvent?: boolean): void {\n        this.models.splice(index, 1, model);\n        this.control.setControl(index, model.control, {emitEvent});\n    }\n\n    public insert(index: number, model: Models[number], emitEvent?: boolean): void {\n        this.models.splice(index, 0, model);\n        this.control.insert(index, model.control, {emitEvent});\n    }\n}\n","import {\n    FormControl,\n    FormControlOptions,\n} from '@angular/forms';\n\nimport {AbstractFormModel} from './abstract-form-model';\n\nexport interface BaseFormControlModelParams<Value = unknown> {\n    value: Value\n    disabled?: boolean\n    controlOptions?: FormControlOptions\n}\n\nexport class BaseFormControlModel<Value = unknown> extends AbstractFormModel<Value> {\n    public readonly control: FormControl<Value>;\n\n    constructor({\n        value,\n        disabled,\n        controlOptions,\n    }: BaseFormControlModelParams<Value>) {\n        super();\n\n        this.control = new FormControl(value, {...controlOptions, nonNullable: true});\n        this.handleInitialDisable(disabled);\n    }\n}\n","import {\n    AbstractControlOptions,\n    FormGroup,\n} from '@angular/forms';\n\nimport {\n  BaseFormModels,\n  Indexing\n} from \"../types/types\";\nimport {AbstractFormModel} from \"./abstract-form-model\";\n\nexport type ModelsRecord<Models extends BaseFormModels = any> = Indexing<Models>;\n\nexport type FormGroupControls<Controls extends ModelsRecord = any> = {\n    [key in keyof Controls]: Controls[key]['control']\n};\n\nexport type FormGroupControl<Controls extends ModelsRecord = any> = FormGroup<FormGroupControls<Controls>>;\n\nexport interface BaseFormGroupModelParams<Models extends ModelsRecord = any> {\n    models: Models\n    disabled?: boolean\n    controlOptions?: AbstractControlOptions\n}\n\nexport class BaseFormGroupModel<Models extends ModelsRecord = any> extends AbstractFormModel {\n    public readonly control: FormGroupControl<Models>;\n    public readonly models: {[key in keyof Models]: Models[key]};\n\n    constructor({\n        models,\n        disabled,\n        controlOptions,\n    }: BaseFormGroupModelParams<Models>) {\n        super();\n\n        this.models = models;\n        this.control = new FormGroup(this.initializeControls(), controlOptions);\n        this.handleInitialDisable(disabled);\n    }\n\n    public setControl<K extends string & keyof Models>(name: K, model: Models[K], emitEvent?: boolean): void {\n        this.models[name] = model;\n        this.control.setControl(name, model.control, {emitEvent});\n    }\n\n    public removeControl(name: keyof Models, emitEvent?: boolean): void {\n        delete this.models[name];\n        this.control.removeControl(name as any, {emitEvent});\n    }\n\n    public addControl<K extends string & keyof Models>(name: K, model: Models[K], emitEvent?: boolean): void {\n        this.registerModel(name, model);\n        this.control.addControl(name, model.control, {emitEvent});\n    }\n\n    public registerControl<K extends string & keyof Models>(name: K, model: Models[K]): Models[K] {\n        const registeredModel = this.registerModel(name, model);\n        this.control.registerControl(name, model.control);\n        return registeredModel;\n    }\n\n    private registerModel<K extends string & keyof Models>(name: K, model: Models[K]): Models[K] {\n        if (name in this.models) {\n            return this.models[name];\n        }\n\n        return this.models[name] = model;\n    }\n\n    private initializeControls(): FormGroupControls<Models> {\n        const entries: [keyof Models, Models[keyof Models]][] = Object\n            .keys(this.models)\n            .map((item: keyof Models) => [item, this.models[item]!.control]);\n\n        return Object.fromEntries(entries) as FormGroupControls<Models>;\n    }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}