diff options
Diffstat (limited to 'src/client/views/nodes/DataVizBox/DocCreatorMenu/Backend/TemplateManager.ts')
| -rw-r--r-- | src/client/views/nodes/DataVizBox/DocCreatorMenu/Backend/TemplateManager.ts | 79 |
1 files changed, 26 insertions, 53 deletions
diff --git a/src/client/views/nodes/DataVizBox/DocCreatorMenu/Backend/TemplateManager.ts b/src/client/views/nodes/DataVizBox/DocCreatorMenu/Backend/TemplateManager.ts index 78235d000..526fcf9c4 100644 --- a/src/client/views/nodes/DataVizBox/DocCreatorMenu/Backend/TemplateManager.ts +++ b/src/client/views/nodes/DataVizBox/DocCreatorMenu/Backend/TemplateManager.ts @@ -14,87 +14,64 @@ export type Conditional = { target: string; attribute: string; value: string; -} +}; export class TemplateManager { + _templates: Template[] = []; - templates: Template[] = []; - - conditionalFieldLogic: Record<string, Conditional[]> = {}; + _conditionalFieldLogic: Record<string, Conditional[]> = {}; constructor(templateSettings: FieldSettings[]) { makeAutoObservable(this); - this.templates = this.initializeTemplates(templateSettings); + this._templates = templateSettings.map(settings => new Template(settings)); } - initializeTemplates = (templateSettings: FieldSettings[]) => templateSettings.map(settings => { - return new Template(settings)}); - - getValidTemplates = (cols: Col[]) => this.templates.filter(template => template.isValidTemplate(cols)); + getValidTemplates = (cols: Col[]) => this._templates.filter(template => template.isValidTemplate(cols)); - addTemplate = (newTemplate: Template) => this.templates.push(newTemplate); + addTemplate = (newTemplate: Template) => this._templates.push(newTemplate); removeTemplate = (template: Template) => { - this.templates.splice(this.templates.indexOf(template), 1); + if (this._templates.includes(template)) { + this._templates.splice(this._templates.indexOf(template), 1); + } template.cleanup(); }; addFieldCondition = (fieldTitle: string, condition: Conditional) => { - if (this.conditionalFieldLogic[fieldTitle] === undefined) { - this.conditionalFieldLogic[fieldTitle] = [condition]; + if (this._conditionalFieldLogic[fieldTitle] === undefined) { + this._conditionalFieldLogic[fieldTitle] = [condition]; } else { - this.conditionalFieldLogic[fieldTitle].push(condition); + this._conditionalFieldLogic[fieldTitle].push(condition); } - } + }; - removeFieldCondition = (fieldTitle: string, condition: Conditional) => { - if (this.conditionalFieldLogic[fieldTitle]) { - this.conditionalFieldLogic[fieldTitle] = this.conditionalFieldLogic[fieldTitle].filter(cond => cond !== condition); - } - } + removeFieldCondition = (fieldTitle: string, condition: Conditional) => (this._conditionalFieldLogic[fieldTitle] = this._conditionalFieldLogic[fieldTitle]?.filter(cond => cond !== condition)); - addDataField = (title: string) => { - this.templates.forEach(template => template.addDataField(title)); - } + addDataField = (title: string) => this._templates.forEach(template => template.addDataField(title)); - removeDataField = (title: string) => { - this.templates.forEach(template => template.removeDataField(title)); - } + removeDataField = (title: string) => this._templates.forEach(template => template.removeDataField(title)); createDocsFromTemplate = action((dv: DataVizBox, template: Template, cols: Col[], debug: boolean = false) => { const csvFields = Array.from(Object.keys(dv.records[0])); - const processContent = async (content: { [title: string]: string }) => { + const processContent = (content: { [title: string]: string }) => { const templateCopy = template.clone(); csvFields .filter(title => title) .forEach(title => { const field = templateCopy.getFieldByTitle(title); - field && field.setContent(content[title], field.viewType); + field?.setContent(content[title], field.viewType); }); const gptFunc = (type: TemplateFieldType) => (type === TemplateFieldType.VISUAL ? TemplateMenuAIUtils.renderGPTImageCall : TemplateMenuAIUtils.renderGPTTextCall); - const applyGPTContent = async () => { - const promises = cols - .filter(field => field.AIGenerated) - .map(field => { - const templateField: TemplateField = templateCopy.getFieldByTitle(field.title) as TemplateField; - if (templateField !== undefined) { - return gptFunc(field.type)(templateCopy, field, templateField.getID); - } - return null; - }) - .filter(p => p !== null); - - await Promise.all(promises); - }; - - await applyGPTContent(); - - templateCopy.applyConditionalLogic(this.conditionalFieldLogic); - - return templateCopy.getRenderedDoc(); + + const generateGptContent = cols + .map(field => ({ field, templateField: field?.AIGenerated && templateCopy.getFieldByTitle(field.title) })) + .filter(({ templateField }) => templateField instanceof TemplateField) + .map(({ field, templateField }) => gptFunc(field.type)(templateCopy, field, (templateField as TemplateField).getID)); + + return Promise.all(generateGptContent).then(() => templateCopy.applyConditionalLogic(this._conditionalFieldLogic)); }; const rowContents = debug @@ -109,10 +86,6 @@ export class TemplateManager { ) ); - return Promise.all(rowContents.map(processContent)).then( - action(renderedDocs => { - return renderedDocs; - }) - ); + return Promise.all(rowContents.map(processContent)); }); } |
