aboutsummaryrefslogtreecommitdiff
path: root/src/client/views/nodes/DataVizBox/DocCreatorMenu/Template.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/client/views/nodes/DataVizBox/DocCreatorMenu/Template.ts')
-rw-r--r--src/client/views/nodes/DataVizBox/DocCreatorMenu/Template.ts26
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));
}