aboutsummaryrefslogtreecommitdiff
path: root/src/client/views
diff options
context:
space:
mode:
authoraidahosa1 <aisosa_idahosa@brown.edu>2024-06-26 14:17:18 -0400
committeraidahosa1 <aisosa_idahosa@brown.edu>2024-06-26 14:17:18 -0400
commit3a3d4433e0b4bfc134370ba4938f22cbed61428b (patch)
tree7a3990de254ad6e4a32d73a16cddc5a37a8c9b9d /src/client/views
parent2f92d924a8dc1675cd12b08bbac7f57b2335a7b2 (diff)
sigh
Diffstat (limited to 'src/client/views')
-rw-r--r--src/client/views/collections/CollectionCardDeckView.tsx147
-rw-r--r--src/client/views/global/globalScripts.ts94
-rw-r--r--src/client/views/pdf/GPTPopup/GPTPopup.tsx1
3 files changed, 141 insertions, 101 deletions
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 (
diff --git a/src/client/views/global/globalScripts.ts b/src/client/views/global/globalScripts.ts
index 1344dd071..4239329dd 100644
--- a/src/client/views/global/globalScripts.ts
+++ b/src/client/views/global/globalScripts.ts
@@ -36,7 +36,7 @@ import { ImageBox } from '../nodes/ImageBox';
import { VideoBox } from '../nodes/VideoBox';
import { WebBox } from '../nodes/WebBox';
import { RichTextMenu } from '../nodes/formattedText/RichTextMenu';
-import { NumListCast } from '../../../fields/Doc';
+import { NumListCast, StrListCast } from '../../../fields/Doc';
import { List } from '../../../fields/List';
// import { InkTranscription } from '../InkTranscription';
@@ -137,20 +137,25 @@ ScriptingGlobals.add(function toggleOverlay(checkResult?: boolean) {
// eslint-disable-next-line prefer-arrow-callback
ScriptingGlobals.add(function showFreeform(attr: 'center' | 'grid' | 'snaplines' | 'clusters' | 'viewAll' | 'fitOnce', checkResult?: boolean, persist?: boolean) {
const selected = DocumentView.SelectedDocs().lastElement();
+
+ function isAttrFiltered(attr: string) {
+ return StrListCast(selected._childFilters).some(filter => filter.includes(attr))
+ }
+
// prettier-ignore
- const map: Map<'flashcards' | 'center' | 'grid' | 'snaplines' | 'clusters' | 'arrange' | 'viewAll' | 'fitOnce' | 'time' | 'docType' | 'color' | 'links' | 'like' | 'star' | 'idea' | 'chat' | '1' | '2' | '3' | '4',
+ const map: Map<'flashcards' | 'center' | 'grid' | 'snaplines' | 'clusters' | 'arrange' | 'viewAll' | 'fitOnce' | 'time' | 'docType' | 'color' | 'heart' | 'star' | 'cloud' | 'bolt' | 'chat' | '1' | '2' | '3' | '4' | 'up' | 'down',
{
waitForRender?: boolean;
checkResult: (doc: Doc) => any;
setDoc: (doc: Doc, dv: DocumentView) => void;
}> = new Map([
['grid', {
- checkResult: (doc:Doc) => BoolCast(doc?._freeform_backgroundGrid, false),
- setDoc: (doc:Doc) => { doc._freeform_backgroundGrid = !doc._freeform_backgroundGrid; },
+ checkResult: (doc: Doc) => BoolCast(doc?._freeform_backgroundGrid, false),
+ setDoc: (doc: Doc) => { doc._freeform_backgroundGrid = !doc._freeform_backgroundGrid; },
}],
['snaplines', {
- checkResult: (doc:Doc) => BoolCast(doc?._freeform_snapLines, false),
- setDoc: (doc:Doc) => { doc._freeform_snapLines = !doc._freeform_snapLines; },
+ checkResult: (doc: Doc) => BoolCast(doc?._freeform_snapLines, false),
+ setDoc: (doc: Doc) => { doc._freeform_snapLines = !doc._freeform_snapLines; },
}],
['viewAll', {
checkResult: (doc: Doc) => BoolCast(doc?._freeform_fitContentsToBox, false),
@@ -161,13 +166,13 @@ ScriptingGlobals.add(function showFreeform(attr: 'center' | 'grid' | 'snaplines'
},
}],
['center', {
- checkResult: (doc:Doc) => BoolCast(doc?._stacking_alignCenter, false),
- setDoc: (doc:Doc) => { doc._stacking_alignCenter = !doc._stacking_alignCenter; },
+ checkResult: (doc: Doc) => BoolCast(doc?._stacking_alignCenter, false),
+ setDoc: (doc: Doc) => { doc._stacking_alignCenter = !doc._stacking_alignCenter; },
}],
['clusters', {
waitForRender: true, // flags that undo batch should terminate after a re-render giving the script the chance to fire
- checkResult: (doc:Doc) => BoolCast(doc?._freeform_useClusters, false),
- setDoc: (doc:Doc) => { doc._freeform_useClusters = !doc._freeform_useClusters; },
+ checkResult: (doc: Doc) => BoolCast(doc?._freeform_useClusters, false),
+ setDoc: (doc: Doc) => { doc._freeform_useClusters = !doc._freeform_useClusters; },
}],
['flashcards', {
checkResult: (doc: Doc) => BoolCast(Doc.UserDoc().defaultToFlashcards, false),
@@ -185,63 +190,70 @@ ScriptingGlobals.add(function showFreeform(attr: 'center' | 'grid' | 'snaplines'
checkResult: (doc: Doc) => StrCast(doc?.cardSort) === "color",
setDoc: (doc: Doc, dv: DocumentView) => doc.cardSort === "color" ? doc.cardSort = '' : doc.cardSort = 'color',
}],
- ['links', {
- checkResult: (doc: Doc) => StrCast(doc?.cardSort) === "links",
- setDoc: (doc: Doc, dv: DocumentView) => doc.cardSort = "links",
- }],
- ['like', {
- checkResult: (doc: Doc) => StrCast(doc?.cardSort) === "custom" && StrCast(doc?.cardSort_customField) === "like",
+ ['heart', {
+ checkResult: (doc: Doc) => isAttrFiltered('heart'),
setDoc: (doc: Doc, dv: DocumentView) => {
- doc.cardSort = "custom";
- doc.cardSort_customField = "like";
- doc.cardSort_visibleSortGroups = new List<number>();
+ isAttrFiltered('heart') ? Doc.setDocFilter(doc, 'heart', true, 'remove') : Doc.setDocFilter(doc, 'heart', true, 'match');
+
}
}],
['star', {
- checkResult: (doc: Doc) => StrCast(doc?.cardSort) === "custom" && StrCast(doc?.cardSort_customField) === "star",
+ checkResult: (doc: Doc) => isAttrFiltered('star'),
+
setDoc: (doc: Doc, dv: DocumentView) => {
- doc.cardSort = "custom";
- doc.cardSort_customField = "star";
- doc.cardSort_visibleSortGroups = new List<number>();
+ isAttrFiltered('star') ? Doc.setDocFilter(doc, 'star', true, 'remove') : Doc.setDocFilter(doc, 'star', true, 'match');
}
}],
- ['idea', {
- checkResult: (doc: Doc) => StrCast(doc?.cardSort) === "custom" && StrCast(doc?.cardSort_customField) === "idea",
+ ['bolt', {
+ checkResult: (doc: Doc) => isAttrFiltered('bolt'),
setDoc: (doc: Doc, dv: DocumentView) => {
- doc.cardSort = "custom";
- doc.cardSort_customField = "idea";
- doc.cardSort_visibleSortGroups = new List<number>();
+ isAttrFiltered('bolt') ? Doc.setDocFilter(doc, 'bolt', true, 'remove') : Doc.setDocFilter(doc, 'bolt', true, 'match');
+
+ }
+ }],
+ ['cloud', {
+ checkResult: (doc: Doc) => isAttrFiltered('cloud'),
+ setDoc: (doc: Doc, dv: DocumentView) => {
+ isAttrFiltered('cloud') ? Doc.setDocFilter(doc, 'cloud', true, 'remove') : Doc.setDocFilter(doc, 'cloud', true, 'match');
+
}
}],
['chat', {
- checkResult: (doc: Doc) => StrCast(doc?.cardSort) === "custom" && StrCast(doc?.cardSort_customField) === "chat",
+ checkResult: (doc: Doc) => StrCast(doc?.cardSort) === "chat",
setDoc: (doc: Doc, dv: DocumentView) => {
- doc.cardSort === "custom" ? doc.cardSort = '' : doc.cardSort = 'custom';
- doc.cardSort_customField === "chat" ? doc.cardSort_customField = '' : doc.cardSort_customField = 'chat';
- doc.cardSort_visibleSortGroups = new List<number>();
+ doc.cardSort === "chat" ? doc.cardSort = '' : doc.cardSort = 'chat';
},
}],
- ]);
- for (let i = 0; i < 8; i++) {
- map.set((i + 1 + '') as any, {
- checkResult: (doc: Doc) => NumListCast(doc?.cardSort_visibleSortGroups).includes(i),
+ ['up', {
+ checkResult: (doc: Doc) => BoolCast(!doc?.cardSort_isDesc),
setDoc: (doc: Doc, dv: DocumentView) => {
- const list = NumListCast(doc.cardSort_visibleSortGroups);
- doc.cardSort_visibleSortGroups = new List<number>(list.includes(i) ? list.filter(d => d !== i) : [...list, i]);
+ doc.cardSort_isDesc = false;
},
- });
- }
+ }],
+ ['down', {
+ checkResult: (doc: Doc) => BoolCast(doc?.cardSort_isDesc),
+ setDoc: (doc: Doc, dv: DocumentView) => {
+ doc.cardSort_isDesc = true;
+ },
+ }],
+ ]);
if (checkResult) {
- // console.log("HIIIIII")
return map.get(attr)?.checkResult(selected);
}
+ const filters = StrListCast(selected._childFilters).concat(StrListCast(selected?._childFiltersByRanges).filter((filter, i) => !(i % 3)));
+
+
+
+ // console.log(filters.some(filter => filter.includes('star'))+ "SUOOOOPPP")
+
const batch = map.get(attr)?.waitForRender ? UndoManager.StartBatch('set freeform attribute') : { end: () => {} };
DocumentView.Selected().map(dv => map.get(attr)?.setDoc(dv.layoutDoc, dv));
setTimeout(() => batch.end(), 100);
return undefined;
});
+
ScriptingGlobals.add(function cardHasLabel(label: string) {
const selected = DocumentView.SelectedDocs().lastElement();
const labelNum = Number(label) - 1;
diff --git a/src/client/views/pdf/GPTPopup/GPTPopup.tsx b/src/client/views/pdf/GPTPopup/GPTPopup.tsx
index 468922532..6184a7b73 100644
--- a/src/client/views/pdf/GPTPopup/GPTPopup.tsx
+++ b/src/client/views/pdf/GPTPopup/GPTPopup.tsx
@@ -180,6 +180,7 @@ export class GPTPopup extends ObservableReactComponent<GPTPopupProps> {
* Sorts cards in the CollectionCardDeckView
*/
generateSort = async () => {
+ console.log(this.chatSortPrompt + "USER PROMPT")
this.setLoading(true);
this.setSortDone(false);