Press n or j to go to the next uncovered block, b, p or k for the previous block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 | 536x 536x 536x 536x 536x 536x 536x 536x 536x 535x 535x 535x 535x 7x 59x 161x 40x 244x 199x 199x 199x 47x 199x 199x 9x 201x 535x 535x 3x 4x 2x 3x 1x 535x 172x 641x 352x 289x 184x 105x | import { Subject } from 'rxjs'; import { DynamicFormClassType } from '../dynamic-form-config/dynamic-form-class-type'; import { DynamicFormExpressionChange } from '../dynamic-form-expression/dynamic-form-expression-change'; import { assignExpressions, assignExpressionData } from '../dynamic-form-expression/dynamic-form-expression-helpers'; import { DynamicFormField } from '../dynamic-form-field/dynamic-form-field'; import { DynamicForm } from '../dynamic-form/dynamic-form'; import { DynamicFormBuilder } from '../dynamic-form/dynamic-form.builder'; import { DynamicFormElementDefinition } from './dynamic-form-element-definition'; import { DynamicFormElementExpressionData } from './dynamic-form-element-expression-data'; import { DynamicFormElementExpressions } from './dynamic-form-element-expressions'; import { DynamicFormElementTemplate } from './dynamic-form-element-template'; import { DynamicFormElementType } from './dynamic-form-element-type'; export class DynamicFormElement< Template extends DynamicFormElementTemplate = DynamicFormElementTemplate, Definition extends DynamicFormElementDefinition<Template> = DynamicFormElementDefinition<Template>, Child extends DynamicFormElement<DynamicFormElementTemplate, DynamicFormElementDefinition, any> = DynamicFormElement<DynamicFormElementTemplate, DynamicFormElementDefinition, any>, ExpressionData extends DynamicFormElementExpressionData = DynamicFormElementExpressionData, Expressions extends DynamicFormElementExpressions<ExpressionData> = DynamicFormElementExpressions<ExpressionData>, Type extends DynamicFormElementType = DynamicFormElementType > { protected readonly _builder: DynamicFormBuilder; protected _expressions: Expressions; protected _children: Child[] = []; readonly root: DynamicForm; readonly parent: DynamicFormElement; readonly parentField: DynamicFormField; readonly definition: Definition; readonly template: Template; readonly type: Type; readonly expressionChangesSubject = new Subject<DynamicFormExpressionChange>(); readonly expressionChanges = this.expressionChangesSubject.asObservable(); readonly expressionData: ExpressionData; constructor( builder: DynamicFormBuilder, root: DynamicForm, parent: DynamicFormElement, definition: Definition, type: Type, ) { this._builder = builder; this.root = root || (this as unknown as DynamicForm); this.parent = parent; this.parentField = DynamicFormElement.getParentField(root, parent); this.definition = definition; this.definition.template = definition.template || {} as Template; this.template = definition.template as Template; this.type = type; this.expressionData = this.createExpressionData(); this._expressions = {} as Expressions; } get classType(): DynamicFormClassType { return 'element'; } get id(): string { return this.definition.id; } get hidden(): boolean { return this.template.hidden || this.parentField.hidden || false; } get expressions(): Expressions { return this._expressions; } get children(): Child[] { return this._children; } init(): void { this.initId(); this.initExpressions(); this.initChildren(); } protected initId(): void {} protected getExpressions(): Expressions { return this._builder.createElementExpressions(this) as Expressions; } protected initExpressions(): void { this._expressions = this.getExpressions() || {} as Expressions; assignExpressions(this.template, this._expressions); } protected getChildren(): Child[] { return this._builder.createFormElements(this.root, this, this.definition.children) as Child[]; } protected initChildren(): void { this._children = this.getChildren() || []; } protected createExpressionData(): ExpressionData { const expressionData = {} as ExpressionData; assignExpressionData(expressionData, { root: () => this.root.expressionData, parent: () => this.parent ? this.parent.expressionData : undefined, parentField: () => this.parentField.expressionData, id: () => this.id, hidden: () => this.hidden, }); return expressionData; } protected extendExpressionData(expressions: { [key: string]: () => any }): void { assignExpressionData(this.expressionData, expressions); } private static getParentField(root: DynamicForm, parent: DynamicFormElement): DynamicFormField { if (!parent) { return root; } switch (parent.classType) { case 'field': return parent as DynamicFormField; default: return DynamicFormElement.getParentField(root, parent.parent); } } } |