From 3a3d4433e0b4bfc134370ba4938f22cbed61428b Mon Sep 17 00:00:00 2001
From: aidahosa1 <aisosa_idahosa@brown.edu>
Date: Wed, 26 Jun 2024 14:17:18 -0400
Subject: sigh

---
 .../views/collections/CollectionCardDeckView.tsx   | 147 ++++++++++++---------
 1 file changed, 87 insertions(+), 60 deletions(-)

(limited to 'src/client/views/collections/CollectionCardDeckView.tsx')

diff --git a/src/client/views/collections/CollectionCardDeckView.tsx b/src/client/views/collections/CollectionCardDeckView.tsx
index 09cddda19..d8f4362f1 100644
--- a/src/client/views/collections/CollectionCardDeckView.tsx
+++ b/src/client/views/collections/CollectionCardDeckView.tsx
@@ -34,7 +34,7 @@ enum cardSortings {
     Type = 'type',
     Color = 'color',
     Custom = 'custom',
-    Drag = 'drag',
+    Chat = 'chat',
     None = '',
 }
 @observer
@@ -45,7 +45,7 @@ export class CollectionCardView extends CollectionSubView() {
     private _textToDoc = new Map<string, Doc>();
 
     @observable _forceChildXf = false;
-    @observable _isLoading = false;
+    // @observable _isLoading = false;
     @observable _hoveredNodeIndex = -1;
     @observable _docRefs = new ObservableMap<Doc, DocumentView>();
     _draggerRef = React.createRef<HTMLDivElement>();
@@ -94,9 +94,10 @@ export class CollectionCardView extends CollectionSubView() {
     };
 
     componentDidMount(): void {
+        this.Document.childFilters_boolean = 'OR'
         this._disposers.sort = reaction(
-            () => ({ cardSort: this.cardSort, field: this.cardSort_customField }),
-            ({ cardSort, field }) => (cardSort === cardSortings.Custom && field === 'chat' ? this.openChatPopup() : GPTPopup.Instance.setVisible(false))
+            () => ({ cardSort: this.cardSort }),
+            ({ cardSort}) => (cardSort === cardSortings.Chat  ? this.openChatPopup() : GPTPopup.Instance.setVisible(false))
         );
     }
 
@@ -112,6 +113,7 @@ export class CollectionCardView extends CollectionSubView() {
     @computed get cardSort() {
         return StrCast(this.Document.cardSort) as any as cardSortings;
     }
+    
     /**
      * how much to scale down the contents of the view so that everything will fit
      */
@@ -126,15 +128,13 @@ export class CollectionCardView extends CollectionSubView() {
      */
     @computed get childDocsWithoutLinks() {
         const regularDocs = this.childDocs.filter(l => l.type !== DocumentType.LINK);
-        const activeGroups = NumListCast(this.Document.cardSort_visibleSortGroups);
+        const activeGroups = StrListCast(this.Document.cardSort_visibleSortGroups);
 
-        if (activeGroups.length > 0 && this.cardSort === cardSortings.Custom) {
+        if (activeGroups.length > 0) {
             return regularDocs.filter(doc => {
-                // Get the group number for the current index
-                const groupNumber = CollectionCardView.getButtonGroup(this.cardSort_customField, doc);
-                // Check if the group number is in the active groups
-                return groupNumber !== undefined && activeGroups.includes(groupNumber);
-            });
+                const activeTags = StrListCast(doc.cardSort_activeIcons)
+                return activeTags !== undefined && activeTags.some(tag => activeGroups.includes(tag));
+            })
         }
 
         // Default return for non-custom cardSort or other cases, filtering out links
@@ -217,7 +217,7 @@ export class CollectionCardView extends CollectionSubView() {
         return Math.abs(stepMag * (apex - index - 1)) - rowOffset;
     };
 
-     findCardDropIndex = (mouseX: number, mouseY: number) => {
+     findCardDropIndex = (mouseX: number, mouseY: number, direction: 'left' | 'right') => {
 
         const amCardsTotal = this.sortedDocs.length
         let index = 0;
@@ -257,8 +257,9 @@ export class CollectionCardView extends CollectionSubView() {
     onPointerMove = (e: React.PointerEvent<HTMLDivElement>) => {
         if (DragManager.docsBeingDragged.length != 0 ) {
             this._isACardBeingDragged = true
-
-            const newIndex = this.findCardDropIndex(e.clientX, e.clientY);
+            
+            const direction = e.movementX > 0 ? 'right' : 'left';
+            const newIndex = this.findCardDropIndex(e.clientX, e.clientY, direction);
             
             if (newIndex !== this._docDraggedIndex && newIndex != -1) {
                 this._docDraggedIndex = newIndex;
@@ -278,9 +279,13 @@ export class CollectionCardView extends CollectionSubView() {
         return false;
     };
 
+
      @computed get sortedDocs() {
         // console.log("hi hi hi")
-        return this.sort(this.childDocsWithoutLinks, this.cardSort, BoolCast(this.layoutDoc.sortDesc), this._docDraggedIndex);
+        // console.log(this.layoutDoc.cardSort_isDesc + "layoutdoc desc")
+        console.log(this.cardSort + "card sort")
+  
+        return this.sort(this.childDocsWithoutLinks, this.cardSort, BoolCast(this.layoutDoc.cardSort_isDesc), this._docDraggedIndex);
     }
     /**
      * Called in the sortedDocsType method. Compares the cards' value in regards to the desired sort type-- earlier cards are move to the
@@ -291,48 +296,53 @@ export class CollectionCardView extends CollectionSubView() {
      * @returns
      */
     sort = (docs: Doc[], sortType: cardSortings, isDesc: boolean, dragIndex: number) => {
-        // console.log('HIIIIIIIII')
-        if (sortType === cardSortings.None) return docs;
-        docs.sort((docA, docB) => {
-            const [typeA, typeB] = (() => {
+        // if (sortType === cardSortings.None) return docs;
+        
+        if(sortType !== cardSortings.None){
+            docs.sort((docA, docB) => {
+            
+                const [typeA, typeB] = (() => {
                 switch (sortType) {
                     case cardSortings.Time: 
-                                return   [DateCast(docA.author_date)?.date ?? Date.now(),
-                                          DateCast(docB.author_date)?.date ?? Date.now()];
+                        return [DateCast(docA.author_date)?.date ?? Date.now(),
+                                DateCast(docB.author_date)?.date ?? Date.now()];
                     case cardSortings.Color: 
-                                return [ClientUtils.hexToHsv(StrCast(docA.backgroundColor)), // If docA.type is undefined, use an empty string
-                                        ClientUtils.hexToHsv(StrCast(docB.backgroundColor))]; // If docB.type is undefined, use an empty string
+                        return [ClientUtils.hexToHsv(StrCast(docA.backgroundColor)),
+                                ClientUtils.hexToHsv(StrCast(docB.backgroundColor))];
                     case cardSortings.Custom:
-                                  return [CollectionCardView.getButtonGroup(this.cardSort_customField, docA)??9999,
-                                          CollectionCardView.getButtonGroup(this.cardSort_customField, docB)??9999];
-                    default:      return [StrCast(docA.type), // If docA.type is undefined, use an empty string
-                                          StrCast(docB.type)]; // If docB.type is undefined, use an empty string
-                    } // prettier-ignore
+                        return [CollectionCardView.getButtonGroup(this.cardSort_customField, docA) ?? 9999,
+                                CollectionCardView.getButtonGroup(this.cardSort_customField, docB) ?? 9999];
+                    case cardSortings.Chat:
+                        return [NumCast(docA.chat) ?? 9999,
+                                NumCast(docB.chat) ?? 9999]
+                    default:
+                        return [StrCast(docA.type), StrCast(docB.type)]
+                }
             })();
-
-            // console.log(ClientUtils.hexToHsv(StrCast(docA.backgroundColor)) ?? 9999 + "docA col")
-            // console.log(ClientUtils.hexToHsv(StrCast(docB.backgroundColor)) ?? 9999 + "docB col")
-
+    
+            // console.log(`Sorting ${sortType}: ${typeA} vs ${typeB}`);
             const out = typeA < typeB ? -1 : typeA > typeB ? 1 : 0;
-            return isDesc ? -out : out; // Reverse the sort order if descending is true
-        });
+            // console.log(`Comparison result: ${out} (isDesc: ${isDesc})`);
 
-        if (dragIndex != -1){
-            // console.log("what what")
+            if (isDesc){
+                return out
+            }
 
-            const draggedDoc = DragManager.docsBeingDragged[0]
+            return -out
+    
+        });}
+    
+        if (dragIndex != -1) {
+            const draggedDoc = DragManager.docsBeingDragged[0];
             const originalIndex = docs.findIndex(doc => doc === draggedDoc);
-
-                    
-            // Remove the dragged document from its original position
+    
             docs.splice(originalIndex, 1);
-            // Insert the dragged document at the new position
             docs.splice(dragIndex, 0, draggedDoc);
-                // }
         }
-
+    
         return docs;
     };
+    
 
 
 
@@ -464,22 +474,35 @@ export class CollectionCardView extends CollectionSubView() {
      * Converts the gpt output into a hashmap that can be used for sorting. lists are seperated by ==== while elements within the list are seperated by ~~~~~~
      * @param gptOutput
      */
-    processGptOutput = (gptOutput: string) => {
+    @action processGptOutput = (gptOutput: string) => {
         // Split the string into individual list items
         const listItems = gptOutput.split('======').filter(item => item.trim() !== '');
+        // console.log(listItems + " LISTT");
+    
+        // Debug: print the map contents
+        // console.log("Map contents:", Array.from(this._textToDoc.entries()));
+    
         listItems.forEach((item, index) => {
-            // Split the item by '~~~~~~' to get all descriptors
-            const parts = item.split('~~~~~~').map(part => part.trim());
-
-            parts.forEach(part => {
-                // Find the corresponding Doc in the textToDoc map
-                const doc = this._textToDoc.get(part);
-                if (doc) {
-                    doc.chat = index;
-                }
-            });
+            // Normalize the item (trim whitespace)
+            const normalizedItem = item.trim();
+            // console.log("Normalized item:", normalizedItem);
+    
+            // Find the corresponding Doc in the textToDoc map
+            const doc = this._textToDoc.get(normalizedItem);
+            // console.log("DOC:", doc);
+            // console.log("ITEM:", normalizedItem);
+    
+            if (doc) {
+                doc.chat = index;
+            } else {
+                console.warn(`No matching document found for item: ${normalizedItem}`);
+            }
         });
-    };
+
+    }
+    
+        // );
+    // };
     /**
      * Opens up the chat popup and starts the process for smart sorting.
      */
@@ -513,7 +536,7 @@ export class CollectionCardView extends CollectionSubView() {
         //     }, new Set<number>()).size ?? 0
         // );
 
-        const activeButtonIndex = CollectionCardView.getButtonGroup(this.cardSort_customField, doc);
+        // const activeButtonIndex = CollectionCardView.getButtonGroup(this.cardSort_customField, doc);
 
         const totalWidth = amButtons * 72 + amButtons * 2 * 5 + 6;
 
@@ -552,8 +575,10 @@ export class CollectionCardView extends CollectionSubView() {
         // doc.cardSort_activeIcons = new List<string>()
 
 
-        const list = StrListCast(doc.cardSort_activeIcons);
-        doc.cardSort_activeIcons = new List<string>(list.includes(icon) ? list.filter(d => d !== icon) : [...list, icon]);
+        // const list = StrListCast(doc.cardSort_activeIcons);
+        // doc.cardSort_activeIcons = new List<string>(list.includes(icon) ? list.filter(d => d !== icon) : [...list, icon]);
+
+        BoolCast(doc[icon]) ? doc[icon] = false : doc[icon] = true
 
 
 
@@ -563,9 +588,10 @@ export class CollectionCardView extends CollectionSubView() {
 
     getButtonIcon = (doc: Doc, icon: any): JSX.Element => {
 
-        const isActive = StrListCast(doc.cardSort_activeIcons).includes(icon)
+        // const isActive = StrListCast(doc.cardSort_activeIcons).includes(icon)
+        const isActive = doc[icon]
 
-        console.log(StrListCast(doc.cardSort_activeIcons))
+        // console.log(StrListCast(doc.cardSort_activeIcons))
         const color = isActive ? '#4476f7' : '#323232';
 
         return <FontAwesomeIcon icon={icon} size="lg" style={{ color }} />;
@@ -577,6 +603,7 @@ export class CollectionCardView extends CollectionSubView() {
     renderCards = () => {
         const anySelected = this.childDocs.some(doc => DocumentView.SelectedDocs().includes(doc));
         const isEmpty = this.childDocsWithoutLinks.length === 0;
+        const isDesc = BoolCast(this.Document.cardSort_isDesc)
 
         if (isEmpty) {
             return (
-- 
cgit v1.2.3-70-g09d2

