From e62f51bacace3d91f388202135426445721097cc Mon Sep 17 00:00:00 2001 From: Nathan-SR <144961007+Nathan-SR@users.noreply.github.com> Date: Sun, 11 May 2025 16:52:17 -0400 Subject: menubutton component --- .../DataVizBox/DocCreatorMenu/DocCreatorMenu.scss | 34 ++++---- .../DataVizBox/DocCreatorMenu/DocCreatorMenu.tsx | 32 ++------ .../DocCreatorMenu/Menu/DocCreatorMenuButton.tsx | 41 ++++++++++ .../DocCreatorMenu/Menu/TemplateEditingWindow.tsx | 90 +++++++++++----------- .../DocCreatorMenu/Menu/TemplatePreviewGrid.tsx | 8 +- .../nodes/DataVizBox/DocCreatorMenu/Template.ts | 2 +- 6 files changed, 120 insertions(+), 87 deletions(-) create mode 100644 src/client/views/nodes/DataVizBox/DocCreatorMenu/Menu/DocCreatorMenuButton.tsx (limited to 'src/client/views/nodes/DataVizBox/DocCreatorMenu') diff --git a/src/client/views/nodes/DataVizBox/DocCreatorMenu/DocCreatorMenu.scss b/src/client/views/nodes/DataVizBox/DocCreatorMenu/DocCreatorMenu.scss index 9fb973265..2a1a79029 100644 --- a/src/client/views/nodes/DataVizBox/DocCreatorMenu/DocCreatorMenu.scss +++ b/src/client/views/nodes/DataVizBox/DocCreatorMenu/DocCreatorMenu.scss @@ -27,7 +27,6 @@ background: whitesmoke; background-color: rgb(50, 50, 50); border-radius: 5px; - border: 1px solid rgb(180, 180, 180); padding: 0px; font-size: 13px; //box-shadow: 3px 3px rgb(29, 29, 31); @@ -35,6 +34,24 @@ &:hover { box-shadow: none; } + + &.no-margin { + margin: 0px; + } + + &.border { + border: 1px solid rgb(180, 180, 180); + } + + &.float-right { + float: right; + margin-left: auto; + } + + &.absolute-right { + position: absolute; + right: 0px; + } &.right{ margin-left: 0px; @@ -403,6 +420,8 @@ margin-left: 5%; background-color: rgb(50, 50, 50); border-radius: 5px; + overflow: hidden; + resize: none; } .docCreatorMenu-variations-tab { @@ -459,19 +478,6 @@ width: 100%; } -.section-reveal-options { - margin-top: 0px; - margin-bottom: 0px; - margin-right: 0px; - margin-left: auto; - border: 0px; - background: none; - - &.float-right { - float: right; - } -} - .docCreatorMenu-templates-displays { display: flex; flex-direction: column; diff --git a/src/client/views/nodes/DataVizBox/DocCreatorMenu/DocCreatorMenu.tsx b/src/client/views/nodes/DataVizBox/DocCreatorMenu/DocCreatorMenu.tsx index 8a98399b6..2e4b81253 100644 --- a/src/client/views/nodes/DataVizBox/DocCreatorMenu/DocCreatorMenu.tsx +++ b/src/client/views/nodes/DataVizBox/DocCreatorMenu/DocCreatorMenu.tsx @@ -37,6 +37,7 @@ import { StaticContentField } from './TemplateFieldTypes/StaticContentField'; import { TemplateMenuAIUtils } from './Backend/TemplateMenuAIUtils' import { TemplatePreviewGrid } from './Menu/TemplatePreviewGrid'; import { TemplateEditingWindow } from './Menu/TemplateEditingWindow'; +import { DocCreatorMenuButton } from './Menu/DocCreatorMenuButton'; export enum LayoutType { FREEFORM = 'Freeform', @@ -983,9 +984,7 @@ export class DocCreatorMenu extends ObservableReactComponent } }))}> {`${field.title} Field`} - + this.removeField(field)}/> { this._collapsedCols.includes(field.title) ? null : <> @@ -1042,26 +1041,16 @@ export class DocCreatorMenu extends ObservableReactComponent return (
- - + + runInAction(() => (this._menuContent = 'templates'))}/>
{this.fieldsInfos.map((field, i) => fieldPanel(field, i))}
); } - @computed get editingView() { - return - } - + @computed get editingView() { return } + get renderSelectedViewType() { switch (this._menuContent) { case 'templates': @@ -1073,14 +1062,11 @@ export class DocCreatorMenu extends ObservableReactComponent menu={this} loading={this._GPTLoading} optionsButtonOpts={['gear', () => (this._menuContent = 'dashboard')]} - setupButtonClick={this.setUpButtonClick} templates={this._suggestedTemplates} />
- +
@@ -1166,9 +1152,7 @@ export class DocCreatorMenu extends ObservableReactComponent {topButton('magnifying-glass', 'options', onOptionsSelected, 'middle')} {topButton('bars', 'saved', onSavedSelected, 'right')} - + {this.renderSelectedViewType} diff --git a/src/client/views/nodes/DataVizBox/DocCreatorMenu/Menu/DocCreatorMenuButton.tsx b/src/client/views/nodes/DataVizBox/DocCreatorMenu/Menu/DocCreatorMenuButton.tsx new file mode 100644 index 000000000..1d8139d40 --- /dev/null +++ b/src/client/views/nodes/DataVizBox/DocCreatorMenu/Menu/DocCreatorMenuButton.tsx @@ -0,0 +1,41 @@ +import { IconProp } from "@fortawesome/fontawesome-svg-core"; +import { ObservableReactComponent } from "../../../../ObservableReactComponent"; +import React from "react"; +import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; +import { setupMoveUpEvents, returnFalse } from "../../../../../../ClientUtils"; +import { emptyFunction } from "../../../../../../Utils"; +import { undoable } from "../../../../../util/UndoManager"; +import { observer } from "mobx-react"; + +interface DocCreatorMenuButtonProps { + icon: IconProp; + function: () => any; + styles?: string; +} + +@observer +export class DocCreatorMenuButton extends ObservableReactComponent { + + setupButtonClick = (e: React.PointerEvent, func: (...args: any) => void) => { + setupMoveUpEvents( + this, + e, + returnFalse, + emptyFunction, + undoable(clickEv => { + clickEv.stopPropagation(); + clickEv.preventDefault(); + func(); + }, 'create docs') + ); + }; + + render() { + + return ( + + ); + } +} \ No newline at end of file diff --git a/src/client/views/nodes/DataVizBox/DocCreatorMenu/Menu/TemplateEditingWindow.tsx b/src/client/views/nodes/DataVizBox/DocCreatorMenu/Menu/TemplateEditingWindow.tsx index df6b791c7..0434d0ccb 100644 --- a/src/client/views/nodes/DataVizBox/DocCreatorMenu/Menu/TemplateEditingWindow.tsx +++ b/src/client/views/nodes/DataVizBox/DocCreatorMenu/Menu/TemplateEditingWindow.tsx @@ -15,11 +15,11 @@ import { TemplateMenuAIUtils } from "../Backend/TemplateMenuAIUtils"; import { ObservableReactComponent } from "../../../../ObservableReactComponent"; import { IDisposer } from "mobx-utils"; import { ImageField } from "../../../../../../fields/URLField"; +import { DocCreatorMenuButton } from "./DocCreatorMenuButton"; interface TemplateEditingWindowProps { menu: DocCreatorMenu; template: Template; - setupButtonClick: (e: React.PointerEvent, func: () => void) => void; } @observer @@ -27,7 +27,8 @@ export class TemplateEditingWindow extends ObservableReactComponent + this.disposers.windowDimensions = reaction(() => this._props.menu._resizing, () => { this.forceUpdate() }, { fireImmediately: true } @@ -43,7 +44,12 @@ export class TemplateEditingWindow extends ObservableReactComponent disposer?.()); + Object.values(this.disposers).forEach(disposer => disposer?.()); + } + + setPromptInputRef: React.LegacyRef = (node) => { + this.promptInput = node; + this.forceUpdate(); } setContainerRef: React.LegacyRef = (node) => { @@ -58,6 +64,24 @@ export class TemplateEditingWindow extends ObservableReactComponent { + this._props.menu._variations = []; + this._loading = true; + this._variationURLs = await this._props.menu.generateVariations(this._props.template.clone(false).getRenderedDoc()!, this.fireflyPrompt); + 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(); + }); } get fireflyVariationsTab() { @@ -71,37 +95,27 @@ export class TemplateEditingWindow extends ObservableReactComponent {}]} - setupButtonClick={this._props.setupButtonClick} previewBoxRightButtonOpts={['gear', (template: Template) => {this.forceUpdate();}]} />