aboutsummaryrefslogtreecommitdiff
path: root/src/client/views/collections
diff options
context:
space:
mode:
Diffstat (limited to 'src/client/views/collections')
-rw-r--r--src/client/views/collections/CollectionCardDeckView.tsx147
1 files changed, 87 insertions, 60 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 (