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.ts40
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;