projects/ng-dynamic-forms/core/src/lib/model/form-array/dynamic-form-array.model.ts
Properties |
|
Methods |
Accessors |
constructor(config: DynamicFormArrayModelConfig, layout?: DynamicFormControlLayout)
|
|||||||||
Parameters :
|
groupAsyncValidators |
Type : DynamicValidatorsConfig | null
|
Decorators :
@serializable()
|
groupFactory |
Type : function
|
Readonly groupPrototype |
Type : DynamicFormModel
|
Decorators :
@serializable()
|
groups |
Type : DynamicFormArrayGroupModel[]
|
Default value : []
|
Decorators :
@serializable()
|
groupValidators |
Type : DynamicValidatorsConfig | null
|
Decorators :
@serializable()
|
initialCount |
Type : number
|
Decorators :
@serializable()
|
Readonly type |
Type : string
|
Default value : DYNAMIC_FORM_CONTROL_TYPE_ARRAY
|
Decorators :
@serializable()
|
_disabled |
Type : boolean
|
Decorators :
@serializable('disabled')
|
Inherited from
DynamicFormControlModel
|
Defined in
DynamicFormControlModel:28
|
asyncValidators |
Type : DynamicValidatorsConfig | null
|
Decorators :
@serializable()
|
Inherited from
DynamicFormControlModel
|
Defined in
DynamicFormControlModel:27
|
controlTooltip |
Type : string | null
|
Decorators :
@serializable()
|
Inherited from
DynamicFormControlModel
|
Defined in
DynamicFormControlModel:34
|
Private Readonly disabled$ |
Type : BehaviorSubject<boolean>
|
Inherited from
DynamicFormControlModel
|
Defined in
DynamicFormControlModel:42
|
Readonly disabledChanges |
Type : Observable<boolean>
|
Inherited from
DynamicFormControlModel
|
Defined in
DynamicFormControlModel:44
|
errorMessages |
Type : DynamicValidatorsConfig | null
|
Decorators :
@serializable()
|
Inherited from
DynamicFormControlModel
|
Defined in
DynamicFormControlModel:29
|
hidden |
Type : boolean
|
Decorators :
@serializable()
|
Inherited from
DynamicFormControlModel
|
Defined in
DynamicFormControlModel:30
|
id |
Type : string
|
Decorators :
@serializable()
|
Inherited from
DynamicFormControlModel
|
Defined in
DynamicFormControlModel:31
|
label |
Type : string | null
|
Decorators :
@serializable()
|
Inherited from
DynamicFormControlModel
|
Defined in
DynamicFormControlModel:32
|
labelTooltip |
Type : string | null
|
Decorators :
@serializable()
|
Inherited from
DynamicFormControlModel
|
Defined in
DynamicFormControlModel:33
|
layout |
Type : DynamicFormControlLayout | null
|
Decorators :
@serializable()
|
Inherited from
DynamicFormControlModel
|
Defined in
DynamicFormControlModel:35
|
name |
Type : string
|
Decorators :
@serializable()
|
Inherited from
DynamicFormControlModel
|
Defined in
DynamicFormControlModel:36
|
parent |
Type : DynamicPathable | null
|
Default value : null
|
Inherited from
DynamicFormControlModel
|
Defined in
DynamicFormControlModel:37
|
relations |
Type : DynamicFormControlRelation[]
|
Decorators :
@serializable()
|
Inherited from
DynamicFormControlModel
|
Defined in
DynamicFormControlModel:38
|
Abstract Readonly type |
Type : string
|
Inherited from
DynamicFormControlModel
|
Defined in
DynamicFormControlModel:46
|
updateOn |
Type : DynamicFormHook | null
|
Decorators :
@serializable()
|
Inherited from
DynamicFormControlModel
|
Defined in
DynamicFormControlModel:39
|
validators |
Type : DynamicValidatorsConfig | null
|
Decorators :
@serializable()
|
Inherited from
DynamicFormControlModel
|
Defined in
DynamicFormControlModel:40
|
addGroup |
addGroup()
|
Returns :
DynamicFormArrayGroupModel
|
clear |
clear()
|
Returns :
void
|
get | ||||||
get(index: number)
|
||||||
Parameters :
Returns :
DynamicFormArrayGroupModel
|
insertGroup | ||||||
insertGroup(index: number)
|
||||||
Parameters :
Returns :
DynamicFormArrayGroupModel
|
moveGroup |
moveGroup(index: number, step: number)
|
Returns :
void
|
removeGroup | ||||||
removeGroup(index: number)
|
||||||
Parameters :
Returns :
void
|
Private updateGroupIndex |
updateGroupIndex()
|
Returns :
void
|
toJSON |
toJSON()
|
Inherited from
DynamicFormControlModel
|
Defined in
DynamicFormControlModel:80
|
Returns :
any
|
size |
getsize()
|
import { DynamicFormControlModel, DynamicFormControlModelConfig } from "../dynamic-form-control.model";
import { DynamicFormModel } from "../dynamic-form.model";
import { DynamicFormControlLayout } from "../misc/dynamic-form-control-layout.model";
import { DynamicPathable } from "../misc/dynamic-form-control-path.model";
import { DynamicValidatorsConfig } from "../misc/dynamic-form-control-validation.model";
import { serializable, serialize } from "../../decorator/serializable.decorator";
import { isFunction, isNumber } from "../../utils/core.utils";
export class DynamicFormArrayGroupModel implements DynamicPathable {
$implicit: DynamicFormArrayGroupModel;
context: DynamicFormArrayModel;
@serializable() group: DynamicFormModel;
@serializable() index: number;
constructor(context: DynamicFormArrayModel, group: DynamicFormModel = [], index: number = -1) {
this.$implicit = this;
this.context = context;
this.group = group;
this.index = index;
}
get parent(): DynamicFormArrayModel {
return this.context;
}
get(index: number): DynamicFormControlModel {
return this.group[index];
}
toJSON() {
return serialize(this);
}
}
export const DYNAMIC_FORM_CONTROL_TYPE_ARRAY = "ARRAY";
export interface DynamicFormArrayModelConfig extends DynamicFormControlModelConfig {
groupAsyncValidators?: DynamicValidatorsConfig;
groupFactory?: () => DynamicFormModel;
groupValidators?: DynamicValidatorsConfig;
groups?: DynamicFormArrayGroupModel[] | null;
initialCount?: number;
}
export class DynamicFormArrayModel extends DynamicFormControlModel {
@serializable() groupAsyncValidators: DynamicValidatorsConfig | null;
groupFactory: () => DynamicFormModel;
@serializable() groupValidators: DynamicValidatorsConfig | null;
@serializable() groups: DynamicFormArrayGroupModel[] = [];
@serializable() initialCount: number;
@serializable() readonly groupPrototype: DynamicFormModel; // only to recreate model from JSON
@serializable() readonly type: string = DYNAMIC_FORM_CONTROL_TYPE_ARRAY;
constructor(config: DynamicFormArrayModelConfig, layout?: DynamicFormControlLayout) {
super(config, layout);
if (isFunction(config.groupFactory)) {
this.groupFactory = config.groupFactory;
} else {
throw new Error("group factory function must be specified for DynamicFormArrayModel");
}
this.groupAsyncValidators = config.groupAsyncValidators || null;
this.groupPrototype = this.groupFactory();
this.groupValidators = config.groupValidators || null;
this.initialCount = isNumber(config.initialCount) ? config.initialCount : 1;
if (Array.isArray(config.groups)) {
config.groups.forEach((arrayGroup, index) => {
this.groups.push(new DynamicFormArrayGroupModel(this, arrayGroup.group, arrayGroup.index || index));
});
} else {
for (let index = 0; index < this.initialCount; index++) {
this.addGroup();
}
}
}
private updateGroupIndex(): void {
this.groups.forEach((group, index) => group.index = index);
}
get size(): number {
return this.groups.length;
}
get(index: number): DynamicFormArrayGroupModel {
return this.groups[index];
}
addGroup(): DynamicFormArrayGroupModel {
return this.insertGroup(this.groups.length);
}
insertGroup(index: number): DynamicFormArrayGroupModel {
let group = new DynamicFormArrayGroupModel(this, this.groupFactory());
this.groups.splice(index, 0, group);
this.updateGroupIndex();
return group;
}
moveGroup(index: number, step: number): void {
this.groups.splice(index + step, 0, ...this.groups.splice(index, 1));
this.updateGroupIndex();
}
removeGroup(index: number): void {
this.groups.splice(index, 1);
this.updateGroupIndex();
}
clear(): void {
this.groups.splice(0);
this.updateGroupIndex();
}
}