From 6e78d5d0bf88d25db48a82e498fe0193dc9baedf Mon Sep 17 00:00:00 2001
From: zaultavangar <zaul_tavangar@brown.edu>
Date: Sun, 17 Dec 2023 20:13:21 -0500
Subject: developing CalendarBox and CollectionCalendarView

---
 .../views/collections/CollectionCalendarView.tsx   | 103 ++++++++++++++++++++-
 1 file changed, 99 insertions(+), 4 deletions(-)

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

diff --git a/src/client/views/collections/CollectionCalendarView.tsx b/src/client/views/collections/CollectionCalendarView.tsx
index 99dc09732..f94d05c61 100644
--- a/src/client/views/collections/CollectionCalendarView.tsx
+++ b/src/client/views/collections/CollectionCalendarView.tsx
@@ -1,8 +1,18 @@
 import * as React from 'react';
 import { CollectionSubView } from "./CollectionSubView";
 import { observer } from 'mobx-react';
-import { makeObservable, observable } from 'mobx';
-import { Doc, DocListCast } from '../../../fields/Doc';
+import { computed, makeObservable, observable } from 'mobx';
+import { Doc, DocListCast, Opt } from '../../../fields/Doc';
+import { CollectionStackingView } from './CollectionStackingView';
+import { CollectionViewType } from '../../documents/DocumentTypes';
+import { dateRangeStrToDates, emptyFunction, returnAll, returnEmptyDoclist, returnNone, returnOne, returnTrue } from '../../../Utils';
+import { DocumentView, DocumentViewProps } from '../nodes/DocumentView';
+import { TbRuler } from 'react-icons/tb';
+import { Transform } from '../../util/Transform';
+import { DocData } from '../../../fields/DocSymbols';
+import { Cast, NumCast, StrCast } from '../../../fields/Types';
+import { StyleProp } from '../StyleProvider';
+import { CollectionFreeFormDocumentView } from '../nodes/CollectionFreeFormDocumentView';
 
 @observer
 export class CollectionCalendarView extends CollectionSubView(){
@@ -20,13 +30,98 @@ export class CollectionCalendarView extends CollectionSubView(){
         
     }
 
-    @observable private existingCalendars: Doc[] = DocListCast(Doc.MyCalendars?.data);
+    @computed get allCalendars(){
+        return this.childDocs; // returns a list of docs (i.e. calendars)
+    }
+
+    removeCalendar = () => {
+
+    }
+
+    addCalendar = (doc: Doc | Doc[], annotationKey?: string | undefined): boolean => {
+        // bring up calendar modal with option to create a calendar 
+        return true;
+    }
+
+    _stackRef = React.createRef<CollectionStackingView>();
+
+    panelHeight = () => {
+        return 0; // a standard height for all calendars; TODO: change
+    }
+
+    panelWidth = () => {
+        return 0; //a standard width for all calendars; TODO: change
+    }
+
+    // most recent calendar should come first
+    sortByMostRecentDate = (calendarA: Doc, calendarB: Doc) => {
+        const aDateRangeStr = StrCast(calendarA.date_range);
+        const bDateRangeStr = StrCast(calendarB.date_range);
+
+        const [aFromDate, aToDate] = dateRangeStrToDates(aDateRangeStr);
+        const [bFromDate, bToDate] = dateRangeStrToDates(bDateRangeStr);
+        
+        if (aFromDate > bFromDate) { 
+            return -1; // a comes first
+        } else if (aFromDate < bFromDate) {
+            return 1; // b comes first
+        } else { // start dates are the same
+            if (aToDate > bToDate) {
+                return -1; // a comes first
+            } else if (aToDate < bToDate) {
+                return 1; // b comes first
+            } else {
+                return 0; // same start and end dates
+            }
+        }
+
+
+    }
+
+    
+
+    screenToLocalTransform = () =>
+        this._props
+            .ScreenToLocalTransform()
+            .translate(Doc.NativeWidth(this._props.Document), 0)
+            .scale(this._props.NativeDimScaling?.() || 1);
+
+    get calendarsKey() {
+        return this._props.fieldKey + '_calendars';
+    }
 
     render(){
         return (
             <div>
-                Hello
+                 <CollectionStackingView
+                        {...this._props}
+                        setContentView={emptyFunction}
+                        // NativeWidth={}
+                        // NativeHeight={returnZero}
+                        ref={this._stackRef}
+                        PanelHeight={this.panelHeight}
+                        PanelWidth={this.panelWidth}
+                        // childFilters={this.childFilters} DO I NEED THIS?
+                        sortFunc={this.sortByMostRecentDate}
+                        setHeight={this.setHeightCallback}
+                        isAnnotationOverlay={false}
+                        // select={emptyFunction} What does this mean?
+                        NativeDimScaling={returnOne}
+                        isAnyChildContentActive={returnTrue} // ??
+                        // childDocumentsActive={}
+                        // whenChildContentsActiveChanged={}
+                        childHideDecorationTitle={false}
+                        removeDocument={this.removeDocument} // will calendar automatically be removed from myCalendars
+                        moveDocument={this.moveDocument}
+                        addDocument={this.addCalendar}
+                        ScreenToLocalTransform={this.screenToLocalTransform}
+                        renderDepth={this._props.renderDepth + 1}
+                        type_collection={CollectionViewType.Stacking}
+                        fieldKey={this.calendarsKey}
+                        pointerEvents={returnAll}
+                    />
             </div>
+
         )
     }
 }
\ No newline at end of file
-- 
cgit v1.2.3-70-g09d2

