diff options
Diffstat (limited to 'src/client/views/nodes/DataVizBox/DocCreatorMenu/Template.ts')
| -rw-r--r-- | src/client/views/nodes/DataVizBox/DocCreatorMenu/Template.ts | 62 |
1 files changed, 32 insertions, 30 deletions
diff --git a/src/client/views/nodes/DataVizBox/DocCreatorMenu/Template.ts b/src/client/views/nodes/DataVizBox/DocCreatorMenu/Template.ts index b13ec46f0..cf6e145cb 100644 --- a/src/client/views/nodes/DataVizBox/DocCreatorMenu/Template.ts +++ b/src/client/views/nodes/DataVizBox/DocCreatorMenu/Template.ts @@ -5,52 +5,33 @@ import { DynamicField } from './TemplateFieldTypes/DynamicField'; import { FieldSettings, TemplateField } from './TemplateFieldTypes/TemplateField'; export class Template { - mainField: DynamicField; - private settings: FieldSettings; + _mainField: DynamicField | undefined; - constructor(templateInfo: FieldSettings, mainField?: DynamicField) { + /** + * 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) { makeAutoObservable(this); - this.settings = templateInfo; - this.mainField = mainField ?? this.setupMainField(templateInfo); + this._mainField = definition instanceof DynamicField ? definition : this.setupMainField(definition); } get childFields(): TemplateField[] { - return this.mainField.getSubfields; + return this._mainField?.getSubfields ?? []; } get allFields(): TemplateField[] { - return this.mainField.getAllSubfields; + return this._mainField?.getAllSubfields ?? []; } get contentFields(): TemplateField[] { return this.allFields.filter(field => field.isContentField); } get doc() { - return this.mainField.renderedDoc; + return this._mainField?.renderedDoc; } get title() { - return this.mainField.getTitle(); + return this._mainField?.getTitle(); } - cleanup = () => { - //dispose each subfields disposers, etc. - }; - - cloneBase = () => new Template(TemplateLayouts.BasicSettings, this.mainField.makeClone(undefined)); - - printFieldInfo = () => { - this.allFields.forEach(field => { - const doc = field.renderedDoc; - console.log('title: ', field.getTitle(), ' width: ', doc?.width); - }); - }; - - 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]; - - setupMainField = (templateInfo: FieldSettings) => DynamicField.Create(templateInfo, 1); - get descriptionSummary(): string { let summary: string = ''; this.contentFields.forEach(field => { @@ -67,6 +48,27 @@ export class Template { return summary; } + cleanup = () => { + //dispose each subfields disposers, etc. + }; + + cloneBase = () => new Template(this._mainField?.makeClone(undefined) ?? TemplateLayouts.BasicSettings); + + 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]; + + setupMainField = (templateInfo: FieldSettings) => TemplateField.CreateField(templateInfo, 1, undefined) as DynamicField; + + printFieldInfo = () => { + this.allFields.forEach(field => { + const doc = field.renderedDoc; + console.log('title: ', field.getTitle(), ' width: ', doc?.width); + }); + }; + isValidTemplate = (cols: Col[]) => { const maxMatches = this.maxMatches(this.getMatches(cols)); return maxMatches === this.contentFields.length; |
