From 4219c751c0f984fac6e5995c1ab955a8d63a28cd Mon Sep 17 00:00:00 2001 From: Nathan-SR <144961007+Nathan-SR@users.noreply.github.com> Date: Sun, 11 May 2025 21:18:55 -0400 Subject: many changes to firefly UI (options added) and starting work on finalizing conditionals --- .../DocCreatorMenu/Menu/TemplateEditingWindow.tsx | 160 ++++++++++++++------- 1 file changed, 110 insertions(+), 50 deletions(-) (limited to 'src/client/views/nodes/DataVizBox/DocCreatorMenu/Menu/TemplateEditingWindow.tsx') diff --git a/src/client/views/nodes/DataVizBox/DocCreatorMenu/Menu/TemplateEditingWindow.tsx b/src/client/views/nodes/DataVizBox/DocCreatorMenu/Menu/TemplateEditingWindow.tsx index 0434d0ccb..4ff509d73 100644 --- a/src/client/views/nodes/DataVizBox/DocCreatorMenu/Menu/TemplateEditingWindow.tsx +++ b/src/client/views/nodes/DataVizBox/DocCreatorMenu/Menu/TemplateEditingWindow.tsx @@ -1,5 +1,5 @@ import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; -import { action, observable, reaction, runInAction } from "mobx"; +import { action, makeAutoObservable, makeObservable, observable, reaction, runInAction } from "mobx"; import React from "react"; import { returnFalse, returnEmptyFilter, returnTrue } from "../../../../../../ClientUtils"; import { emptyFunction } from "../../../../../../Utils"; @@ -16,93 +16,77 @@ import { ObservableReactComponent } from "../../../../ObservableReactComponent"; import { IDisposer } from "mobx-utils"; import { ImageField } from "../../../../../../fields/URLField"; import { DocCreatorMenuButton } from "./DocCreatorMenuButton"; +import { TbHistory } from "react-icons/tb"; -interface TemplateEditingWindowProps { +export type FireflyStructureOptions = { + numVariations: number; + temperature: number; + useStyleRef: boolean; +} + +interface FireflyVariationsTabProps { menu: DocCreatorMenu; template: Template; } @observer -export class TemplateEditingWindow extends ObservableReactComponent { +export class FireflyVariationsTab extends ObservableReactComponent { - private fireflyPrompt: string = 'Use this template to generate an empty baseball card template.'; - private previewWindow: HTMLDivElement | null = null; - private disposers: { [name: string]: IDisposer } = {}; - private promptInput: HTMLTextAreaElement | null = null; + private prompt: string = 'Use this template to generate an empty baseball card template.'; + + @observable private promptInput: HTMLTextAreaElement | null = null; @observable _loading: boolean = false; @observable _variationsTabOpen: boolean = false; @observable _variationURLs: string[] = []; - @observable _variations: Template[] = []; - - componentDidMount(): void { - this.disposers.windowDimensions = reaction(() => - this._props.menu._resizing, - () => { this.forceUpdate() }, - { fireImmediately: true } - ); - } - - componentWillUnmount() { - Object.values(this.disposers).forEach(disposer => disposer?.()); - } - - setPromptInputRef: React.LegacyRef = (node) => { - this.promptInput = node; - this.forceUpdate(); - } - setContainerRef: React.LegacyRef = (node) => { - this.previewWindow = node; - this.forceUpdate(); - } + @observable private fireflyOptions: FireflyStructureOptions = {numVariations: 3, temperature: 0, useStyleRef: false}; - @action setVariationTab = (open: boolean) => { - this._variationsTabOpen = open; - if (this.previewWindow && open) { - this.previewWindow.style.height = String(Number(this.previewWindow.clientHeight) * .6); - } else if (this.previewWindow && !open) { - this.previewWindow.style.height = String(Number(this.previewWindow.clientHeight) * 5/3); - } - this.forceUpdate(); + constructor(props: FireflyVariationsTabProps) { + super(props); + makeObservable(this); } generateVariations = async () => { this._props.menu._variations = []; this._loading = true; - this._variationURLs = await this._props.menu.generateVariations(this._props.template.clone(false).getRenderedDoc()!, this.fireflyPrompt); + const doc: Doc = this._props.template.clone(false).getRenderedDoc()!; + this._variationURLs = await this._props.menu.generateVariations(doc, this.prompt, this.fireflyOptions); this._variationURLs.forEach(url => { const newTemplate: Template = this._props.template.clone(true); this._props.menu._variations.push(newTemplate); }); - this._loading = false; setTimeout(() => { this._variationURLs.forEach((url, i) => { this._props.menu._variations[i].setImageAsBackground(url, true); }); - this.forceUpdate(); + this._loading = false; }); } - get fireflyVariationsTab() { + setPromptInputRef: React.LegacyRef = (node) => { + this.promptInput = node; + } + render() { return ( - <> +
{}]} previewBoxRightButtonOpts={['gear', (template: Template) => {this.forceUpdate();}]} /> -
-
+
+