diff options
Diffstat (limited to 'src/client/views/nodes/DataVizBox/DocCreatorMenu/Template.ts')
-rw-r--r-- | src/client/views/nodes/DataVizBox/DocCreatorMenu/Template.ts | 26 |
1 files changed, 21 insertions, 5 deletions
diff --git a/src/client/views/nodes/DataVizBox/DocCreatorMenu/Template.ts b/src/client/views/nodes/DataVizBox/DocCreatorMenu/Template.ts index fae0d06e4..1889e4984 100644 --- a/src/client/views/nodes/DataVizBox/DocCreatorMenu/Template.ts +++ b/src/client/views/nodes/DataVizBox/DocCreatorMenu/Template.ts @@ -6,10 +6,13 @@ import { FieldSettings, TemplateField, ViewType } from './TemplateFieldTypes/Tem import { Conditional } from './Backend/TemplateManager'; import { ImageField } from '../../../../../fields/URLField'; import { Doc } from '../../../../../fields/Doc'; +import { TemplateDataField } from './TemplateFieldTypes/DataField'; export class Template { _mainField: DynamicField; + private dataFields: TemplateDataField[] = []; + /** * 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 @@ -55,13 +58,17 @@ export class Template { //dispose each subfields disposers, etc. }; - clone = (withContent: boolean = false) => new Template(this._mainField?.makeClone(undefined, withContent) ?? TemplateLayouts.BasicSettings); + clone = (withContent: boolean = false) => { + const clone = new Template(this._mainField?.makeClone(undefined, withContent) ?? TemplateLayouts.BasicSettings); + this.dataFields.forEach(field => clone.addDataField(field.title)); + return clone; + }; getRenderedDoc = () => this.doc; getFieldByID = (id: number): TemplateField => this.allFields.filter(field => field.getID === id)[0]; - getFieldByTitle = (title: string) => this.allFields.filter(field => field.getTitle() === title)[0]; + getFieldByTitle = (title: string) => [...this.allFields, ...this.dataFields].filter(field => field.getTitle() === title)[0]; setupMainField = (templateInfo: FieldSettings) => TemplateField.CreateField(templateInfo, 1, undefined) as DynamicField; @@ -77,12 +84,20 @@ export class Template { field.setTitle(col.title); } + addDataField = (title: string, content?: string) => { + this.dataFields.push(new TemplateDataField(title, content)); + } + + removeDataField = (title: string) => { + this.dataFields = this.dataFields.filter(field => !(field.title === title)); + } + isValidTemplate = (cols: Col[]) => { const maxMatches = this.maxMatches(this.getMatches(cols)); return maxMatches === this.contentFields.length && this.title !== 'template_framework'; }; - applyConditionalLogicToField = (field: TemplateField, logic: Record<string, Conditional[]>) => { + applyConditionalLogicToField = (field: TemplateField | TemplateDataField, logic: Record<string, Conditional[]>) => { if (field instanceof DynamicField) return; const fieldStatements: Conditional[] = logic[field.getTitle()]; const content = field.getContent() @@ -91,7 +106,8 @@ export class Template { if (statement.target === 'template') { this._mainField.renderedDoc![statement.attribute] = statement.value; } else { - field.renderedDoc![statement.attribute] = statement.value; + const targetField: TemplateField = this.getFieldByTitle(statement.target) as TemplateField; + targetField && (targetField.renderedDoc![statement.attribute] = statement.value); } } }) @@ -99,7 +115,7 @@ export class Template { applyConditionalLogic = (logic: Record<string, Conditional[]>) => { console.log('applying logic: ', logic) - const fields: TemplateField[] = [...this.allFields]; + const fields: (TemplateField | TemplateDataField)[] = [...this.allFields, ...this.dataFields]; fields.forEach(field => this.applyConditionalLogicToField(field, logic)); } |