diff options
Diffstat (limited to 'src/client/views/nodes/DataVizBox/DocCreatorMenu/Template.ts')
| -rw-r--r-- | src/client/views/nodes/DataVizBox/DocCreatorMenu/Template.ts | 40 |
1 files changed, 35 insertions, 5 deletions
diff --git a/src/client/views/nodes/DataVizBox/DocCreatorMenu/Template.ts b/src/client/views/nodes/DataVizBox/DocCreatorMenu/Template.ts index 2fe146b1c..1a4384bc1 100644 --- a/src/client/views/nodes/DataVizBox/DocCreatorMenu/Template.ts +++ b/src/client/views/nodes/DataVizBox/DocCreatorMenu/Template.ts @@ -1,19 +1,23 @@ import { makeAutoObservable } from 'mobx'; import { Col } from './DocCreatorMenu'; -import { TemplateLayouts } from './TemplateBackend'; +import { TemplateFieldType, TemplateLayouts } from './TemplateBackend'; import { DynamicField } from './TemplateFieldTypes/DynamicField'; -import { FieldSettings, TemplateField } from './TemplateFieldTypes/TemplateField'; +import { FieldSettings, TemplateField, ViewType } from './TemplateFieldTypes/TemplateField'; +import { Conditional } from './Backend/TemplateManager'; export class Template { - _mainField: DynamicField | undefined; + _mainField: DynamicField; + + private conditionalLogic: Record<string, Conditional[]>; /** * A Template can be created from a description of its fields (FieldSettings) or from a DynamicField * @param definition definition of template as settings or DynamicField */ - constructor(definition: FieldSettings | DynamicField) { + constructor(definition: FieldSettings | DynamicField, conditionalLogic: Record<string, Conditional[]>) { makeAutoObservable(this); this._mainField = definition instanceof DynamicField ? definition : this.setupMainField(definition); + this.conditionalLogic = conditionalLogic; } get childFields(): TemplateField[] { @@ -52,7 +56,7 @@ export class Template { //dispose each subfields disposers, etc. }; - cloneBase = () => new Template(this._mainField?.makeClone(undefined) ?? TemplateLayouts.BasicSettings); + cloneBase = () => new Template(this._mainField?.makeClone(undefined) ?? TemplateLayouts.BasicSettings, this.conditionalLogic); getRenderedDoc = () => this.doc; @@ -68,11 +72,37 @@ export class Template { }); }; + assignColToField = (fieldID: number, col: Col) => { + const field = this.getFieldByID(fieldID); + field.setContent(col.defaultContent ?? '', col.type === TemplateFieldType.VISUAL ? ViewType.IMG : ViewType.TEXT); + field.setTitle(col.title); + } + isValidTemplate = (cols: Col[]) => { const maxMatches = this.maxMatches(this.getMatches(cols)); return maxMatches === this.contentFields.length; }; + applyConditionalLogicToField = (field: TemplateField) => { + if (field instanceof DynamicField) return; + const logic: Conditional[] = this.conditionalLogic[field.getTitle()]; + const content = field.getContent() + logic && logic.forEach(statement => { + if (content === statement.condition) { + if (statement.target === 'template') { + this._mainField.renderedDoc![statement.attribute] = statement.value; + } else { + field.renderedDoc![statement.attribute] = statement.value; + } + } + }) + } + + applyConditionalLogic = () => { + const fields: TemplateField[] = [this._mainField, ...this.allFields]; + fields.forEach(this.applyConditionalLogicToField); + } + getMatches = (cols: Col[]): number[][] => { const numFields = this.contentFields.length; |
