From a83dfdf011d7f5c7d8874c1f6cd776b4909d0a79 Mon Sep 17 00:00:00 2001 From: Nathan-SR <144961007+Nathan-SR@users.noreply.github.com> Date: Fri, 25 Apr 2025 12:03:05 -0400 Subject: c --- .../DataVizBox/DocCreatorMenu/DocCreatorMenu.tsx | 434 ++------------------- 1 file changed, 34 insertions(+), 400 deletions(-) (limited to 'src/client/views/nodes/DataVizBox/DocCreatorMenu/DocCreatorMenu.tsx') diff --git a/src/client/views/nodes/DataVizBox/DocCreatorMenu/DocCreatorMenu.tsx b/src/client/views/nodes/DataVizBox/DocCreatorMenu/DocCreatorMenu.tsx index de345a335..ed2e20843 100644 --- a/src/client/views/nodes/DataVizBox/DocCreatorMenu/DocCreatorMenu.tsx +++ b/src/client/views/nodes/DataVizBox/DocCreatorMenu/DocCreatorMenu.tsx @@ -30,10 +30,12 @@ import './DocCreatorMenu.scss'; import { TemplateField, ViewType } from './TemplateFieldTypes/TemplateField'; import { Template } from './Template'; import { TemplateFieldSize, TemplateFieldType, TemplateLayouts } from './TemplateBackend'; -import { TemplateManager } from './TemplateManager'; +import { TemplateManager } from './Backend/TemplateManager'; import { DrawingFillHandler } from '../../../smartdraw/DrawingFillHandler'; import { CgPathIntersect } from 'react-icons/cg'; import { StaticContentField } from './TemplateFieldTypes/StaticContentField'; +import { SuggestedTemplatesWindow } from './Menu/SuggestedTemplatesWindow'; +import { TemplateMenuGPTManager } from './Backend/TemplateMenuGPTManager'; export enum LayoutType { FREEFORM = 'Freeform', @@ -64,6 +66,7 @@ export type Col = { title: string; type: TemplateFieldType; defaultContent?: string; + AIGenerated?: boolean; }; export type Conditional = { @@ -84,10 +87,11 @@ export class DocCreatorMenu extends ObservableReactComponent // eslint-disable-next-line no-use-before-define static Instance: DocCreatorMenu; - private DEBUG_MODE: boolean = false; + private DEBUG_MODE: boolean = true; private _disposers: { [name: string]: IDisposer } = {}; private _ref: HTMLDivElement | null = null; private templateManager: TemplateManager; + private GPTManager: TemplateMenuGPTManager; @observable _fullyRenderedDocs: Doc[] = []; // collection of templates filled in with content @observable _renderedDocCollection: Doc | undefined = undefined; // fullyRenderedDocs in a parent collection @@ -148,6 +152,7 @@ export class DocCreatorMenu extends ObservableReactComponent makeObservable(this); DocCreatorMenu.Instance = this; this.templateManager = new TemplateManager(TemplateLayouts.allTemplates); + this.GPTManager = new TemplateMenuGPTManager(); } setContainerRef: React.LegacyRef = (node) => { @@ -162,12 +167,6 @@ export class DocCreatorMenu extends ObservableReactComponent this._suggestedTemplates = []; this._userCreatedFields = []; }; - @action addUserTemplate = (template: Template) => { - this._userTemplates.push(template); - }; - @action removeUserTemplate = (template: Template) => { - this._userTemplates.splice(this._userTemplates.indexOf(template), 1); - }; @action setSuggestedTemplates = (templates: Template[]) => { this._suggestedTemplates = templates; //prettier-ignore }; @@ -238,7 +237,7 @@ export class DocCreatorMenu extends ObservableReactComponent return bounds; } - setUpButtonClick = (e: React.PointerEvent, func: () => void) => { + setUpButtonClick = (e: React.PointerEvent, func: (...args: any) => void) => { setupMoveUpEvents( this, e, @@ -518,6 +517,31 @@ export class DocCreatorMenu extends ObservableReactComponent this.forceUpdate(); }; + generatePresetTemplates = async (debug: boolean) => { + const templates: Template[] = []; + + if (debug) { + templates.push(...this.templateManager.templates); + } else { + this._dataViz?.updateColDefaults(); + + templates.push(...this.templateManager.getValidTemplates(this.fieldsInfos)); + + const assignments = await this.GPTManager.assignColsToFields(templates, this.fieldsInfos); + + const renderedTemplatePromises = assignments.map(([template, assgns]) => this.GPTManager.applyGPTContentToTemplate(template, assgns)); + + await Promise.all(renderedTemplatePromises); + } + + setTimeout( + action(() => { + this.setSuggestedTemplates(templates); + this._GPTLoading = false; + }) + ); + }; + @action setVariationTab = (open: boolean) => { this._variationsTab = open; if (this._previewWindow && open) { @@ -554,292 +578,6 @@ export class DocCreatorMenu extends ObservableReactComponent doc.y = 10000; } - generateGPTImage = async (prompt: string): Promise => { - try { - const res = await gptImageCall(prompt); - - if (res) { - const result = (await Networking.PostToServer('/uploadRemoteImage', { sources: res })) as Upload.FileInformation[]; - const source = ClientUtils.prepend(result[0].accessPaths.agnostic.client); - return source; - } - } catch (e) { - console.log(e); - } - }; - - /** - * Populates a preset template framework with content from a datavizbox or any AI-generated content. - * @param template the preloaded template framework being filled in - * @param assignments a list of template field numbers (from top to bottom) and their assigned columns from the linked dataviz - * @returns a doc containing the fully rendered template - */ - applyGPTContentToTemplate = async (template: Template, assignments: { [field: string]: Col }): Promise