From c5b2912cc4f44c5e12d8b5dc123d99bf9c4d9b85 Mon Sep 17 00:00:00 2001
From: alyssaf16 <alyssa_feinberg@brown.edu>
Date: Wed, 17 Apr 2024 13:17:51 -0400
Subject: ai flashcards

---
 src/client/views/nodes/ComparisonBox.tsx | 71 ++++++++++++--------------------
 1 file changed, 26 insertions(+), 45 deletions(-)

(limited to 'src/client/views/nodes/ComparisonBox.tsx')

diff --git a/src/client/views/nodes/ComparisonBox.tsx b/src/client/views/nodes/ComparisonBox.tsx
index ce862cd22..76631f071 100644
--- a/src/client/views/nodes/ComparisonBox.tsx
+++ b/src/client/views/nodes/ComparisonBox.tsx
@@ -3,7 +3,7 @@ import { action, computed, makeObservable, observable } from 'mobx';
 import { observer } from 'mobx-react';
 import * as React from 'react';
 import { emptyFunction, returnFalse, returnNone, returnZero, setupMoveUpEvents } from '../../../Utils';
-import { Doc, Opt } from '../../../fields/Doc';
+import { Doc, Opt, DocListCast } from '../../../fields/Doc';
 import { DocCast, NumCast, RTFCast, StrCast } from '../../../fields/Types';
 import { DocUtils, Docs } from '../../documents/Documents';
 import { DragManager, dropActionType } from '../../util/DragManager';
@@ -21,6 +21,7 @@ import { FormattedTextBox } from './formattedText/FormattedTextBox';
 import { RichTextField } from '../../../fields/RichTextField';
 import { GPTCallType, gptAPICall } from '../../apis/gpt/GPT';
 import { DocData } from '../../../fields/DocSymbols';
+import { KeyValueBox } from './KeyValueBox';
 
 @observer
 export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>() implements ViewBoxInterface {
@@ -200,6 +201,7 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
                             console.log(this.layoutDoc[`_${this._props.fieldKey}_revealOp`]);
                             if (!this.layoutDoc[`_${this._props.fieldKey}_revealOp`] || this.layoutDoc[`_${this._props.fieldKey}_revealOp`] == 'flip') {
                                 this.flipFlashcard();
+                                console.log('Print context of cards: ' + DocCast(this.dataDoc[this.fieldKey + '_1']).text);
                             }
                         })
                     }
@@ -214,6 +216,18 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
         );
     }
 
+    askGPT = async (): Promise<string | undefined> => {
+        try {
+            let res = await gptAPICall(StrCast(this.dataDoc.data), GPTCallType.COMPLETION);
+            if (!res) {
+                console.error('GPT call failed');
+                return;
+            }
+        } catch (err) {
+            console.error('GPT call failed');
+        }
+    };
+
     render() {
         const clearButton = (which: string) => {
             return (
@@ -232,24 +246,7 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
             const whichDoc = DocCast(this.dataDoc[which]);
             const targetDoc = DocCast(whichDoc?.annotationOn, whichDoc);
             // if there is no Doc in the first comparison slot, but the comparison box's fieldKey slot has a RichTextField, then render a text box to show the contents of the document's field key slot
-            //const layoutTemplateString = !targetDoc && which.endsWith('1') && this.Document[this.fieldKey] instanceof RichTextField ? FormattedTextBox.LayoutString(this.fieldKey) : undefined;
-            const subjectText = RTFCast(this.Document[this.fieldKey])?.Text;
-            const layoutTemplateString = !targetDoc
-                ? which.endsWith('0') && subjectText !== undefined
-                    ? FormattedTextBox.LayoutString(this.fieldKey)
-                    : which.endsWith('1') && (this.Document[which] instanceof RichTextField || typeof this.Document[which] === 'string')
-                      ? FormattedTextBox.LayoutString(which)
-                      : undefined
-                : undefined;
-
-            if (which.endsWith('1') && !layoutTemplateString && targetDoc) {
-                const queryText = RTFCast(this.Document[this.fieldKey + '_1'])?.Text;
-                console.log('QUER' + queryText);
-                if (queryText?.includes('--TEXT--') && subjectText) {
-                    this.Document[DocData][this.fieldKey + '_1'] = '';
-                    gptAPICall(queryText?.replace('--TEXT--', subjectText), GPTCallType.COMPLETION).then(value => (this.Document[DocData][this.fieldKey + '_1'] = value.trim()));
-                }
-            }
+            const layoutTemplateString = !targetDoc && which.endsWith('1') && this.Document[this.fieldKey] instanceof RichTextField ? FormattedTextBox.LayoutString(this.fieldKey) : undefined;
 
             return targetDoc || layoutTemplateString ? (
                 <>
@@ -315,15 +312,20 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
 
         if (this.Document._layout_isFlashcard) {
             const side = this.layoutDoc[`_${this._props.fieldKey}_usePath`] === 'alternate' ? 1 : 0;
-
             // add text box when first created
+
             if (!(this.dataDoc[this.fieldKey + '_0'] || this.dataDoc[this.fieldKey + '_0'] == 'empty')) {
-                console.log('TEXT HERE' + this.dataDoc.data);
-                const newDoc = Docs.Create.TextDocument(StrCast(this.dataDoc.data));
+                const dataSplit = StrCast(this.dataDoc.data).split('Answer');
+                const newDoc = Docs.Create.TextDocument(dataSplit[1]);
+                newDoc.text = dataSplit[1];
                 this.addDoc(newDoc, this.fieldKey + '_0');
             }
-            // if (!(this.dataDoc[this.fieldKey + '_0'] || this.dataDoc[this.fieldKey + '_0'] == 'empty')) this.dataDoc[this.fieldKey + '_0'] = DocUtils.copyDragFactory(Doc.UserDoc().emptyNote as Doc);
-            if (!(this.dataDoc[this.fieldKey + '_1'] || this.dataDoc[this.fieldKey + '_1'] == 'empty')) this.dataDoc[this.fieldKey + '_1'] = DocUtils.copyDragFactory(Doc.UserDoc().emptyNote as Doc);
+            if (!(this.dataDoc[this.fieldKey + '_1'] || this.dataDoc[this.fieldKey + '_1'] == 'empty')) {
+                const dataSplit = StrCast(this.dataDoc.data).split('Answer');
+                const newDoc = Docs.Create.TextDocument(dataSplit[0]);
+                newDoc.text = 'jhkhkjh';
+                this.addDoc(newDoc, this.fieldKey + '_1');
+            }
 
             if (this.layoutDoc[`_${this._props.fieldKey}_revealOp`] == 'hide/reveal') {
                 {
@@ -333,21 +335,6 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
                             {displayBox(`${this.fieldKey}_1`, 1, this._props.PanelHeight() - 3)}
                         </div>
                     );
-                    // return (
-                    //     <div className={`comparisonBox${this._props.isContentActive() ? '-interactive' : ''}` /* change className to easily disable/enable pointer events in CSS */} style={{ display: 'flex', flexDirection: 'column' }}>
-                    //         {displayBox(`${this.fieldKey}_2`, 1, this._props.PanelHeight() - 3)}
-                    //         <div className="clip-div" style={{ height: this.clipHeight + '%', transition: this._animating, background: StrCast(this.layoutDoc._backgroundColor, 'gray') }}>
-                    //             {displayBox(`${this.fieldKey}_1`, 0, 0)}
-                    //         </div>
-                    //     </div>
-                    // );
-                    // return (
-                    //     <div className={`comparisonBox${this._props.isContentActive() ? '-interactive' : ''}` /* change className to easily disable/enable pointer events in CSS */}>
-                    //         {displayBox(`${this.fieldKey}_${side === 0 ? 1 : 0}`, side, this._props.PanelHeight() / 2)}
-                    //         {displayBox(`${this.fieldKey}_${side === 0 ? 0 : 1}`, 1, this._props.PanelHeight() / 2)}
-
-                    //     </div>
-                    // );
                 }
             } else {
                 return (
@@ -362,12 +349,6 @@ export class ComparisonBox extends ViewBoxAnnotatableComponent<FieldViewProps>()
                             this.hoverFlip(undefined);
                         }}>
                         {displayBox(`${this.fieldKey}_${side === 0 ? 1 : 0}`, side, this._props.PanelWidth() - 3)}
-                        {/* {displayBoxReveal(`${this.fieldKey}_${side}`, side, this._props.PanelWidth() - 3)}
-                        {displayBoxReveal(`${this.fieldKey}_${side === 0 ? 1 : 0}`, side === 0 ? 1 : 0, this._props.PanelWidth() - 3)} */}
-                        {/* <div>{displayBoxReveal(`${this.fieldKey}_${side}`, side, this._props.PanelWidth() - 3)}</div> */}
-                        {/* <div style={{ display: this.layoutDoc[`_${this._props.fieldKey}_revealOp`] == 'hide/reveal' ? 'block' : 'none' }} className={`comparisonBox${this._props.isContentActive() ? '-interactive' : ''}`}>
-                            {displayBox(`${this.fieldKey}_${side === 0 ? 1 : 0}`, side === 0 ? 1 : 0, this._props.PanelWidth() - 3)}
-                        </div> */}
 
                         {this.overlayAlternateIcon}
                     </div>
-- 
cgit v1.2.3-70-g09d2

