aboutsummaryrefslogtreecommitdiff
path: root/src/client/views/nodes/formattedText/FormattedTextBox.tsx
diff options
context:
space:
mode:
authorSophie Zhang <sophie_zhang@brown.edu>2023-02-23 13:00:35 -0500
committerSophie Zhang <sophie_zhang@brown.edu>2023-02-23 13:00:35 -0500
commitd2be7d2bfec6978238811cc50ad3effd2a19d15d (patch)
treeead6da03b8a1829ffa51c91011eb40040f1cfa13 /src/client/views/nodes/formattedText/FormattedTextBox.tsx
parentfb4304c0e02aef4a0cedabfdc23ef39c4ca0eca8 (diff)
parentfba9b8e68e19e65e9823c5538b7b8b25baeb4670 (diff)
Merge branch 'pres-trail-sophie' of https://github.com/brown-dash/Dash-Web into pres-trail-sophie
Diffstat (limited to 'src/client/views/nodes/formattedText/FormattedTextBox.tsx')
-rw-r--r--src/client/views/nodes/formattedText/FormattedTextBox.tsx45
1 files changed, 45 insertions, 0 deletions
diff --git a/src/client/views/nodes/formattedText/FormattedTextBox.tsx b/src/client/views/nodes/formattedText/FormattedTextBox.tsx
index 619c59f0e..683ccb9c4 100644
--- a/src/client/views/nodes/formattedText/FormattedTextBox.tsx
+++ b/src/client/views/nodes/formattedText/FormattedTextBox.tsx
@@ -63,6 +63,7 @@ import { schema } from './schema_rts';
import { SummaryView } from './SummaryView';
import applyDevTools = require('prosemirror-dev-tools');
import React = require('react');
+import { Configuration, OpenAIApi } from 'openai';
const translateGoogleApi = require('translate-google-api');
export const GoogleRef = 'googleDocId';
@@ -838,12 +839,56 @@ export class FormattedTextBox extends ViewBoxAnnotatableComponent<FieldViewProps
const options = cm.findByDescription('Options...');
const optionItems = options && 'subitems' in options ? options.subitems : [];
+ optionItems.push({ description: `Generate Dall-E Image`, event: () => this.generateImage(), icon: 'star' });
optionItems.push({ description: !this.Document._singleLine ? 'Make Single Line' : 'Make Multi Line', event: () => (this.layoutDoc._singleLine = !this.layoutDoc._singleLine), icon: 'expand-arrows-alt' });
optionItems.push({ description: `${this.Document._autoHeight ? 'Lock' : 'Auto'} Height`, event: () => (this.layoutDoc._autoHeight = !this.layoutDoc._autoHeight), icon: 'plus' });
!options && cm.addItem({ description: 'Options...', subitems: optionItems, icon: 'eye' });
this._downX = this._downY = Number.NaN;
};
+ generateImage = async () => {
+ console.log("Generate image from text: ", (this.dataDoc.text as RichTextField)?.Text);
+ try {
+ const configuration = new Configuration({
+ apiKey: process.env.OPENAI_KEY,
+ });
+ const openai = new OpenAIApi(configuration);
+ const response = await openai.createImage({
+ prompt: (this.dataDoc.text as RichTextField)?.Text,
+ n: 1,
+ size: "1024x1024",
+ });
+ let image_url = response.data.data[0].url;
+ console.log(image_url);
+ if (image_url) {
+ const newDoc = Docs.Create.ImageDocument(image_url, {
+ x: NumCast(this.rootDoc.x) + NumCast(this.layoutDoc._width) + 10,
+ y: NumCast(this.rootDoc.y),
+ _height: 200,
+ _width: 200
+ })
+ if (DocListCast(Doc.MyOverlayDocs?.data).includes(this.rootDoc)) {
+ newDoc.overlayX = this.rootDoc.x;
+ newDoc.overlayY = NumCast(this.rootDoc.y) + NumCast(this.rootDoc._height);
+ Doc.AddDocToList(Doc.MyOverlayDocs, undefined, newDoc);
+ } else {
+ this.props.addDocument?.(newDoc);
+ }
+ setTimeout(() => {
+ newDoc.data = image_url;
+ newDoc._height = 200;
+ newDoc._width = 200;
+ DocUtils.MakeLink({doc: this.rootDoc}, {doc: newDoc}, "Dall-E");
+ }, 500)
+ }
+ } catch (err) {
+ console.log(err);
+ return '';
+ }
+
+ }
+
+
breakupDictation = () => {
if (this._editorView && this._recording) {
this.stopDictation(true);