From 743f4ab3a65babedb30b8ae9575e9b3583e52b3d Mon Sep 17 00:00:00 2001
From: bobzel <zzzman@gmail.com>
Date: Tue, 13 Sep 2022 12:51:37 -0400
Subject: fixed activePresentation to work properly with multiple dashboards. 
 fixed undoing PinDoc.

---
 src/client/views/MainView.tsx | 9 +++------
 1 file changed, 3 insertions(+), 6 deletions(-)

(limited to 'src/client/views/MainView.tsx')

diff --git a/src/client/views/MainView.tsx b/src/client/views/MainView.tsx
index 79f83b386..09ab49d1c 100644
--- a/src/client/views/MainView.tsx
+++ b/src/client/views/MainView.tsx
@@ -524,17 +524,14 @@ export class MainView extends React.Component {
     createNewPresentation = () => {
         const pres = Docs.Create.PresDocument({ title: 'Untitled Trail', _viewType: CollectionViewType.Stacking, _fitWidth: true, _width: 400, _height: 500, targetDropAction: 'alias', _chromeHidden: true, boxShadow: '0 0' });
         CollectionDockingView.AddSplit(pres, 'left');
-      
-        const myTrails = Doc.ActiveDashboard!.myTrails as Doc
-        console.log(Doc.ActiveDashboard!.myTrails)
-        Doc.AddDocToList(myTrails, "trails", pres)
-        Doc.ActivePresentation = pres
+        Doc.MyTrails && Doc.AddDocToList(Doc.MyTrails, 'data', pres); // Doc.MyTrails should be created in createDashboard
+        Doc.ActivePresentation = pres;
     };
 
     @action
     openPresentation = (pres: Doc) => {
         CollectionDockingView.AddSplit(pres, 'left');
-        Doc.ActivePresentation = pres;
+        Doc.MyTrails && (Doc.ActivePresentation = pres);
         Doc.AddDocToList(Doc.MyTrails, 'data', pres);
         this.closeFlyout();
     };
-- 
cgit v1.2.3-70-g09d2


From ef501d60faa2d843b65d9a12a03e979eb59f1655 Mon Sep 17 00:00:00 2001
From: bobzel <zzzman@gmail.com>
Date: Tue, 13 Sep 2022 14:51:50 -0400
Subject: made myTrails view navigate to docs the same way presBox does.

---
 src/client/views/MainView.tsx             | 17 +++++----
 src/client/views/nodes/trails/PresBox.tsx | 57 ++++++++++++++-----------------
 2 files changed, 37 insertions(+), 37 deletions(-)

(limited to 'src/client/views/MainView.tsx')

diff --git a/src/client/views/MainView.tsx b/src/client/views/MainView.tsx
index 09ab49d1c..bf52e2af0 100644
--- a/src/client/views/MainView.tsx
+++ b/src/client/views/MainView.tsx
@@ -11,12 +11,12 @@ import * as ReactDOM from 'react-dom';
 import { Doc, DocListCast, Opt } from '../../fields/Doc';
 import { List } from '../../fields/List';
 import { ScriptField } from '../../fields/ScriptField';
-import { StrCast } from '../../fields/Types';
+import { DocCast, StrCast } from '../../fields/Types';
 import { emptyFunction, returnEmptyDoclist, returnEmptyFilter, returnFalse, returnTrue, returnZero, setupMoveUpEvents, simulateMouseClick, Utils } from '../../Utils';
 import { GoogleAuthenticationManager } from '../apis/GoogleAuthenticationManager';
 import { DocServer } from '../DocServer';
 import { Docs, DocUtils } from '../documents/Documents';
-import { CollectionViewType } from '../documents/DocumentTypes';
+import { CollectionViewType, DocumentType } from '../documents/DocumentTypes';
 import { CaptureManager } from '../util/CaptureManager';
 import { DocumentManager } from '../util/DocumentManager';
 import { GroupManager } from '../util/GroupManager';
@@ -58,6 +58,7 @@ import { LinkDescriptionPopup } from './nodes/LinkDescriptionPopup';
 import { LinkDocPreview } from './nodes/LinkDocPreview';
 import { RadialMenu } from './nodes/RadialMenu';
 import { TaskCompletionBox } from './nodes/TaskCompletedBox';
+import { PresBox } from './nodes/trails';
 import { WebBox } from './nodes/WebBox';
 import { OverlayView } from './OverlayView';
 import { AnchorMenu } from './pdf/AnchorMenu';
@@ -530,10 +531,14 @@ export class MainView extends React.Component {
 
     @action
     openPresentation = (pres: Doc) => {
-        CollectionDockingView.AddSplit(pres, 'left');
-        Doc.MyTrails && (Doc.ActivePresentation = pres);
-        Doc.AddDocToList(Doc.MyTrails, 'data', pres);
-        this.closeFlyout();
+        if (pres.type === DocumentType.PRES) {
+            CollectionDockingView.AddSplit(pres, 'left');
+            Doc.MyTrails && (Doc.ActivePresentation = pres);
+            Doc.AddDocToList(Doc.MyTrails, 'data', pres);
+            this.closeFlyout();
+        } else {
+            PresBox.NavigateToDoc(DocCast(pres.presentationTargetDoc), pres);
+        }
     };
 
     @action
diff --git a/src/client/views/nodes/trails/PresBox.tsx b/src/client/views/nodes/trails/PresBox.tsx
index 1325a9d67..1dd03c52c 100644
--- a/src/client/views/nodes/trails/PresBox.tsx
+++ b/src/client/views/nodes/trails/PresBox.tsx
@@ -345,7 +345,8 @@ export class PresBox extends ViewBoxBaseComponent<FieldViewProps>() {
             }
             if (!group) this.clearSelectedArray();
             this.childDocs[index] && this.addToSelectedArray(this.childDocs[index]); //Update selected array
-            this.navigateToElement(this.childDocs[index]); //Handles movement to element only when presTrail is list
+            this.turnOffEdit();
+            this.navigateToActiveItem(); //Handles movement to element only when presTrail is list
             this.onHideDocument(); //Handles hide after/before
         }
     });
@@ -360,7 +361,7 @@ export class PresBox extends ViewBoxBaseComponent<FieldViewProps>() {
     }
 
     @action
-    static restoreTargetDocView(bestTarget: Doc, activeItem: Doc, jumpToDoc: boolean) {
+    static restoreTargetDocView(bestTarget: Doc, activeItem: Doc) {
         const transTime = NumCast(activeItem.presTransition, 500);
         const presTransitionTime = `all ${transTime}ms`;
         const { scrollable, pannable, temporal, clippable, dataview, textview } = this.pinDataTypes(bestTarget);
@@ -427,7 +428,7 @@ export class PresBox extends ViewBoxBaseComponent<FieldViewProps>() {
         }
     }
 
-    _navTimer!: NodeJS.Timeout;
+    static _navTimer: NodeJS.Timeout;
     /**
      * This method makes sure that cursor navigates to the element that
      * has the option open and last in the group.
@@ -436,7 +437,7 @@ export class PresBox extends ViewBoxBaseComponent<FieldViewProps>() {
      * a new tab. If presCollection is undefined it will open the document
      * on the right.
      */
-    navigateToElement = async (curDoc: Doc) => {
+    navigateToActiveItem = () => {
         const activeItem: Doc = this.activeItem;
         const targetDoc: Doc = this.targetDoc;
         const srcContext = Cast(targetDoc.context, Doc, null) ?? Cast(Cast(targetDoc.annotationOn, Doc, null)?.context, Doc, null);
@@ -444,7 +445,6 @@ export class PresBox extends ViewBoxBaseComponent<FieldViewProps>() {
         const collectionDocView = presCollection ? DocumentManager.Instance.getDocumentView(presCollection) : undefined;
         const includesDoc: boolean = DocListCast(presCollection?.data).includes(targetDoc);
         const tab = CollectionDockingView.Instance && Array.from(CollectionDockingView.Instance.tabMap).find(tab => tab.DashDoc === srcContext);
-        this.turnOffEdit();
         // Handles the setting of presCollection
         if (includesDoc) {
             //Case 1: Pres collection should not change as it is already the same
@@ -467,7 +467,7 @@ export class PresBox extends ViewBoxBaseComponent<FieldViewProps>() {
             self._eleArray.splice(0, self._eleArray.length, ...eleViewCache);
         });
         const openInTab = (doc: Doc, finished?: () => void) => {
-            collectionDocView ? collectionDocView.props.addDocTab(doc, '') : this.props.addDocTab(doc, '');
+            (collectionDocView ?? this).props.addDocTab(doc, '');
             this.layoutDoc.presCollection = targetDoc;
             // this still needs some fixing
             setTimeout(resetSelection, 500);
@@ -477,6 +477,10 @@ export class PresBox extends ViewBoxBaseComponent<FieldViewProps>() {
                 finished?.();
             }
         };
+        PresBox.NavigateToTarget(targetDoc, activeItem, openInTab, srcContext, includesDoc || tab ? undefined : resetSelection);
+    };
+
+    static NavigateToTarget(targetDoc: Doc, activeItem: Doc, openInTab: any, srcContext: Doc, finished?: () => void) {
         if (activeItem.presPinView && DocCast(targetDoc.context)?._currentFrame === undefined) {
             const transTime = NumCast(activeItem.presTransition, 500);
             const presTransitionTime = `all ${transTime}ms`;
@@ -491,20 +495,20 @@ export class PresBox extends ViewBoxBaseComponent<FieldViewProps>() {
         // If openDocument is selected then it should open the document for the user
         if (activeItem.openDocument) {
             LightboxView.SetLightboxDoc(targetDoc); // openInTab(targetDoc);
-        } else if (targetDoc && curDoc.presMovement !== PresMovement.None && targetDoc) {
+        } else if (targetDoc && activeItem.presMovement !== PresMovement.None) {
             LightboxView.SetLightboxDoc(undefined);
-            const zooming = curDoc.presMovement !== PresMovement.Pan;
-            DocumentManager.Instance.jumpToDocument(targetDoc, zooming, openInTab, srcContext ? [srcContext] : [], undefined, undefined, undefined, includesDoc || tab ? undefined : resetSelection, undefined, true, NumCast(curDoc.presZoom));
+            const zooming = activeItem.presMovement !== PresMovement.Pan;
+            DocumentManager.Instance.jumpToDocument(targetDoc, zooming, openInTab, srcContext ? [srcContext] : [], undefined, undefined, undefined, finished, undefined, true, NumCast(activeItem.presZoom));
         }
         // After navigating to the document, if it is added as a presPinView then it will
         // adjust the pan and scale to that of the pinView when it was added.
         if (activeItem.presPinView) {
-            // if targetDoc is not displayed but one of its aliases is, then we need to modify that alias, not the original target
-            clearTimeout(this._navTimer);
+            clearTimeout(PresBox._navTimer);
+            // targetDoc may or may not be displayed.  this gets the first available document (or alias) view that matches targetDoc
             const bestTarget = DocumentManager.Instance.getFirstDocumentView(targetDoc)?.props.Document;
-            if (bestTarget) this._navTimer = PresBox.restoreTargetDocView(bestTarget, activeItem, false);
+            if (bestTarget) PresBox._navTimer = PresBox.restoreTargetDocView(bestTarget, activeItem);
         }
-    };
+    }
 
     /**
      * Uses the viewfinder to progressivize through the different views of a single collection.
@@ -2658,25 +2662,16 @@ export class PresBox extends ViewBoxBaseComponent<FieldViewProps>() {
             </div>
         );
     }
+    static NavigateToDoc(bestTarget: Doc, activeItem: Doc) {
+        const srcContext = Cast(bestTarget.context, Doc, null) ?? Cast(Cast(bestTarget.annotationOn, Doc, null)?.context, Doc, null);
+        const openInTab = (doc: Doc, finished?: () => void) => {
+            CollectionDockingView.AddSplit(doc, 'right');
+            finished?.();
+        };
+        PresBox.NavigateToTarget(bestTarget, activeItem, openInTab, srcContext);
+    }
 }
 
 ScriptingGlobals.add(function navigateToDoc(bestTarget: Doc, activeItem: Doc) {
-    const srcContext = Cast(bestTarget.context, Doc, null) ?? Cast(Cast(bestTarget.annotationOn, Doc, null)?.context, Doc, null);
-    const openInTab = (doc: Doc, finished?: () => void) => {
-        CollectionDockingView.AddSplit(doc, 'right');
-        finished?.();
-    };
-    DocumentManager.Instance.jumpToDocument(
-        bestTarget,
-        true,
-        openInTab,
-        srcContext ? [srcContext] : [],
-        undefined,
-        undefined,
-        undefined,
-        () => PresBox.restoreTargetDocView(bestTarget, activeItem, true),
-        undefined,
-        true,
-        NumCast(activeItem.presZoom)
-    );
+    PresBox.NavigateToDoc(bestTarget, activeItem);
 });
-- 
cgit v1.2.3-70-g09d2


From b55fefa87179b9f15fb72d088f527771e90b9bb8 Mon Sep 17 00:00:00 2001
From: bobzel <zzzman@gmail.com>
Date: Tue, 13 Sep 2022 15:04:06 -0400
Subject: made things consistent by renaming  emptyPresentation to emptyTrail
 and then always making copies of emptyTrail instead of calling the
 Docs.create constructor

---
 src/client/documents/Documents.ts           | 2 +-
 src/client/util/CurrentUserUtils.ts         | 4 ++--
 src/client/views/MainView.tsx               | 3 ++-
 src/client/views/collections/TabDocView.tsx | 2 +-
 4 files changed, 6 insertions(+), 5 deletions(-)

(limited to 'src/client/views/MainView.tsx')

diff --git a/src/client/documents/Documents.ts b/src/client/documents/Documents.ts
index 75024d9c9..63080f8cf 100644
--- a/src/client/documents/Documents.ts
+++ b/src/client/documents/Documents.ts
@@ -1564,7 +1564,7 @@ export namespace DocUtils {
         const documentList: ContextMenuProps[] = DocListCast(DocListCast(Doc.MyTools?.data)[0]?.data)
             .filter(btnDoc => !btnDoc.hidden)
             .map(btnDoc => Cast(btnDoc?.dragFactory, Doc, null))
-            .filter(doc => doc && doc !== Doc.UserDoc().emptyPresentation)
+            .filter(doc => doc && doc !== Doc.UserDoc().emptyTrail)
             .map((dragDoc, i) => ({
                 description: ':' + StrCast(dragDoc.title).replace('Untitled ', ''),
                 event: undoBatch((args: { x: number; y: number }) => {
diff --git a/src/client/util/CurrentUserUtils.ts b/src/client/util/CurrentUserUtils.ts
index 7419750b1..3f3816a8a 100644
--- a/src/client/util/CurrentUserUtils.ts
+++ b/src/client/util/CurrentUserUtils.ts
@@ -207,7 +207,7 @@ export class CurrentUserUtils {
         DocUtils.AssignOpts(DocCast(doc[field]), {}, iconTemplates);
     }
 
-    /// initalizes the set of "empty<DocType>" versions of each document type with default fields.  e.g.,. emptyNote, emptyPresentation
+    /// initalizes the set of "empty<DocType>" versions of each document type with default fields.  e.g.,. emptyNote, emptyTrail
     static creatorBtnDescriptors(doc: Doc): {
         title: string, toolTip: string, icon: string,  ignoreClick?: boolean, dragFactory?: Doc, 
         backgroundColor?: string,  clickFactory?: Doc, scripts?: { onClick?: string, onDragStart?: string}, funcs?: {onDragStart?:string, hidden?: string},
@@ -269,7 +269,7 @@ export class CurrentUserUtils {
             {key: "Script",     creator: opts => Docs.Create.ScriptingDocument(null, opts), opts: { _width: 200, _height: 250, }},
             // {key: "DataViz",    creator: opts => Docs.Create.DataVizDocument(opts),         opts: { _width: 300, _height: 300 }},
             {key: "Header",     creator: headerTemplate,                                    opts: { _width: 300, _height: 70, _headerPointerEvents: "all", _headerHeight: 12, _headerFontSize: 9, _autoHeight: true,}},
-            {key: "Presentation",creator: Docs.Create.PresDocument,                         opts: { _width: 400, _height: 500, _viewType: CollectionViewType.Stacking, targetDropAction: "alias" as any, treeViewHideTitle: true,  _chromeHidden: true, boxShadow: "0 0" }},
+            {key: "Trail",      creator: Docs.Create.PresDocument,                          opts: { _width: 400, _height: 500, _viewType: CollectionViewType.Stacking, targetDropAction: "alias" as any, treeViewHideTitle: true,  _chromeHidden: true, boxShadow: "0 0" }},
             {key: "Tab",        creator: opts => Docs.Create.FreeformDocument([], opts),    opts: { _width: 500, _height: 800, _backgroundGridShow: true, }},
             {key: "Slide",      creator: opts => Docs.Create.TreeDocument([], opts),        opts: { _width: 300, _height: 200, _viewType: CollectionViewType.Tree, 
                                                                                                 treeViewHasOverlay: true, _fontSize: "20px", _autoHeight: true, 
diff --git a/src/client/views/MainView.tsx b/src/client/views/MainView.tsx
index bf52e2af0..a96a04ec9 100644
--- a/src/client/views/MainView.tsx
+++ b/src/client/views/MainView.tsx
@@ -523,7 +523,8 @@ export class MainView extends React.Component {
 
     @action
     createNewPresentation = () => {
-        const pres = Docs.Create.PresDocument({ title: 'Untitled Trail', _viewType: CollectionViewType.Stacking, _fitWidth: true, _width: 400, _height: 500, targetDropAction: 'alias', _chromeHidden: true, boxShadow: '0 0' });
+        const pres = Doc.MakeCopy(Doc.UserDoc().emptyTrail as Doc, true);
+        Docs.Create.PresDocument({ title: 'Untitled Trail', _viewType: CollectionViewType.Stacking, _fitWidth: true, treeViewHideTitle: true, _width: 400, _height: 500, targetDropAction: 'alias', _chromeHidden: true, boxShadow: '0 0' });
         CollectionDockingView.AddSplit(pres, 'left');
         Doc.MyTrails && Doc.AddDocToList(Doc.MyTrails, 'data', pres); // Doc.MyTrails should be created in createDashboard
         Doc.ActivePresentation = pres;
diff --git a/src/client/views/collections/TabDocView.tsx b/src/client/views/collections/TabDocView.tsx
index 042d39285..46386fa71 100644
--- a/src/client/views/collections/TabDocView.tsx
+++ b/src/client/views/collections/TabDocView.tsx
@@ -214,7 +214,7 @@ export class TabDocView extends React.Component<TabDocViewProps> {
         const docList = docs instanceof Doc ? [docs] : docs;
 
         const batch = UndoManager.StartBatch('pinning doc');
-        const curPres = Doc.ActivePresentation ?? Doc.MakeCopy(Doc.UserDoc().emptyPresentation as Doc, true);
+        const curPres = Doc.ActivePresentation ?? Doc.MakeCopy(Doc.UserDoc().emptyTrail as Doc, true);
 
         if (!Doc.ActivePresentation) {
             Doc.AddDocToList(Doc.MyTrails, 'data', curPres);
-- 
cgit v1.2.3-70-g09d2


From 97e8729523b7a53b8eef843bdeaab13bbd942d1d Mon Sep 17 00:00:00 2001
From: bobzel <zzzman@gmail.com>
Date: Tue, 13 Sep 2022 21:00:15 -0400
Subject: fixed changing slides on shared presentation

---
 src/client/views/MainView.tsx | 1 +
 1 file changed, 1 insertion(+)

(limited to 'src/client/views/MainView.tsx')

diff --git a/src/client/views/MainView.tsx b/src/client/views/MainView.tsx
index a96a04ec9..a1e355c22 100644
--- a/src/client/views/MainView.tsx
+++ b/src/client/views/MainView.tsx
@@ -160,6 +160,7 @@ export class MainView extends React.Component {
                 'viewTransition',
                 'treeViewOpen',
                 'showSidebar',
+                'itemIndex', // for changing slides in presentations
                 'sidebarWidthPercent',
                 'currentTimecode',
                 'timelineHeightPercent',
-- 
cgit v1.2.3-70-g09d2


From 90f394be1bd4d2797770e43f9f99a919ca09823b Mon Sep 17 00:00:00 2001
From: bobzel <zzzman@gmail.com>
Date: Tue, 13 Sep 2022 21:15:50 -0400
Subject: added x/y as playground fields so that pres box mini player can be
 dragged around.  added height as a playground field for mini player.  fixed
 not setting GuestTarget when opening up to a docking view.

---
 src/client/views/MainView.tsx | 12 +++++++++++-
 1 file changed, 11 insertions(+), 1 deletion(-)

(limited to 'src/client/views/MainView.tsx')

diff --git a/src/client/views/MainView.tsx b/src/client/views/MainView.tsx
index a1e355c22..2aa7f392b 100644
--- a/src/client/views/MainView.tsx
+++ b/src/client/views/MainView.tsx
@@ -34,6 +34,7 @@ import { CollectionDockingView } from './collections/CollectionDockingView';
 import { MarqueeOptionsMenu } from './collections/collectionFreeForm/MarqueeOptionsMenu';
 import { CollectionLinearView } from './collections/collectionLinear';
 import { CollectionMenu } from './collections/CollectionMenu';
+import { CollectionView } from './collections/CollectionView';
 import './collections/TreeView.scss';
 import { ComponentDecorations } from './ComponentDecorations';
 import { ContextMenu } from './ContextMenu';
@@ -166,6 +167,8 @@ export class MainView extends React.Component {
                 'timelineHeightPercent',
                 'panX',
                 'panY',
+                'x',
+                'y',
                 'fitWidth',
                 'nativeWidth',
                 'nativeHeight',
@@ -180,6 +183,7 @@ export class MainView extends React.Component {
                 'chromeHidden',
                 'currentFrame',
                 'width',
+                'height',
                 'nativeWidth',
             ]); // can play with these fields on someone else's
         }
@@ -231,7 +235,13 @@ export class MainView extends React.Component {
             if (pathname.length > 1 && pathname[0] === 'doc') {
                 Doc.MainDocId = pathname[1];
                 //!this.userDoc &&
-                DocServer.GetRefField(pathname[1]).then(action(field => field instanceof Doc && (Doc.GuestTarget = field)));
+                DocServer.GetRefField(pathname[1]).then(
+                    action(field => {
+                        if (field instanceof Doc && field._viewType !== CollectionViewType.Docking) {
+                            Doc.GuestTarget = field;
+                        }
+                    })
+                );
             }
         }
 
-- 
cgit v1.2.3-70-g09d2


From cea66bd846e886776bcb9d376f0aa7c88cf73504 Mon Sep 17 00:00:00 2001
From: bobzel <zzzman@gmail.com>
Date: Tue, 13 Sep 2022 21:43:59 -0400
Subject: made overlayX/overlayY instead of re-using x/y in order that overlay
 docs can be dragged in playground mode (for shared mini-player presentations)
 without necessarily allowing regular docs to be dragged in playground mode.

---
 src/client/views/MainView.tsx             |  4 ++--
 src/client/views/OverlayView.tsx          | 12 ++++++------
 src/client/views/nodes/trails/PresBox.tsx |  4 ++--
 3 files changed, 10 insertions(+), 10 deletions(-)

(limited to 'src/client/views/MainView.tsx')

diff --git a/src/client/views/MainView.tsx b/src/client/views/MainView.tsx
index 2aa7f392b..4bf6bb881 100644
--- a/src/client/views/MainView.tsx
+++ b/src/client/views/MainView.tsx
@@ -167,8 +167,8 @@ export class MainView extends React.Component {
                 'timelineHeightPercent',
                 'panX',
                 'panY',
-                'x',
-                'y',
+                'overlayX',
+                'overlayY',
                 'fitWidth',
                 'nativeWidth',
                 'nativeHeight',
diff --git a/src/client/views/OverlayView.tsx b/src/client/views/OverlayView.tsx
index 5242fabb8..2354e84ff 100644
--- a/src/client/views/OverlayView.tsx
+++ b/src/client/views/OverlayView.tsx
@@ -164,7 +164,7 @@ export class OverlayView extends React.Component {
 
     docScreenToLocalXf = computedFn(
         function docScreenToLocalXf(this: any, doc: Doc) {
-            return () => new Transform(-NumCast(doc.x), -NumCast(doc.y), 1);
+            return () => new Transform(-NumCast(doc.overlayX), -NumCast(doc.overlayY), 1);
         }.bind(this)
     );
 
@@ -175,8 +175,8 @@ export class OverlayView extends React.Component {
             const dref = React.createRef<HTMLDivElement>();
             const onPointerMove = action((e: PointerEvent, down: number[]) => {
                 if (e.buttons === 1) {
-                    d.x = e.clientX + offsetx;
-                    d.y = e.clientY + offsety;
+                    d.overlayX = e.clientX + offsetx;
+                    d.overlayY = e.clientY + offsety;
                 }
                 if (e.metaKey) {
                     const dragData = new DragManager.DocumentDragData([d]);
@@ -198,8 +198,8 @@ export class OverlayView extends React.Component {
 
             const onPointerDown = (e: React.PointerEvent) => {
                 setupMoveUpEvents(this, e, onPointerMove, emptyFunction, emptyFunction);
-                offsetx = NumCast(d.x) - e.clientX;
-                offsety = NumCast(d.y) - e.clientY;
+                offsetx = NumCast(d.overlayX) - e.clientX;
+                offsety = NumCast(d.overlayY) - e.clientY;
             };
             return (
                 <div
@@ -207,7 +207,7 @@ export class OverlayView extends React.Component {
                     ref={dref}
                     key={d[Id]}
                     onPointerDown={onPointerDown}
-                    style={{ top: d.type === 'presentation' ? 0 : undefined, width: NumCast(d._width), height: NumCast(d._height), transform: `translate(${d.x}px, ${d.y}px)` }}>
+                    style={{ top: d.type === 'presentation' ? 0 : undefined, width: NumCast(d._width), height: NumCast(d._height), transform: `translate(${d.overlayX}px, ${d.overlayY}px)` }}>
                     <DocumentView
                         Document={d}
                         rootSelected={returnTrue}
diff --git a/src/client/views/nodes/trails/PresBox.tsx b/src/client/views/nodes/trails/PresBox.tsx
index 1dd03c52c..a4db2d777 100644
--- a/src/client/views/nodes/trails/PresBox.tsx
+++ b/src/client/views/nodes/trails/PresBox.tsx
@@ -715,8 +715,8 @@ export class PresBox extends ViewBoxBaseComponent<FieldViewProps>() {
             this.layoutDoc.presStatus = PresStatus.Edit;
             clearTimeout(this._presTimer);
             const pt = this.props.ScreenToLocalTransform().inverse().transformPoint(0, 0);
-            this.rootDoc.x = pt[0] + (this.props.PanelWidth() - 250);
-            this.rootDoc.y = pt[1] + 10;
+            this.rootDoc.overlayX = pt[0] + (this.props.PanelWidth() - 250);
+            this.rootDoc.overlayY = pt[1] + 10;
             this.rootDoc._height = 30;
             this.rootDoc._width = 248;
             Doc.AddDocToList(Doc.MyOverlayDocs, undefined, this.rootDoc);
-- 
cgit v1.2.3-70-g09d2


From 8ded118135a5e296a83a85cf3f2180be56c6a045 Mon Sep 17 00:00:00 2001
From: bobzel <zzzman@gmail.com>
Date: Tue, 13 Sep 2022 22:36:49 -0400
Subject: fixed mainContainer on mainView to always show the activeDashboard if
 it exists.

---
 src/client/views/DashboardView.tsx | 9 +--------
 src/client/views/MainView.tsx      | 1 +
 2 files changed, 2 insertions(+), 8 deletions(-)

(limited to 'src/client/views/MainView.tsx')

diff --git a/src/client/views/DashboardView.tsx b/src/client/views/DashboardView.tsx
index 35aa67ac8..6415601f1 100644
--- a/src/client/views/DashboardView.tsx
+++ b/src/client/views/DashboardView.tsx
@@ -53,14 +53,7 @@ export class DashboardView extends React.Component {
     clickDashboard = async (e: React.MouseEvent, dashboard: Doc) => {
         if (e.detail === 2) {
             Doc.AddDocToList(Doc.MySharedDocs, 'viewed', dashboard);
-            if (DocListCast(Doc.MySharedDocs.data).includes(dashboard)) {
-                // choose an appropriate alias or make one. --- choose the first alias that (1) user owns,  (2) has no context field ... otherwise make a new alias
-                const bestAlias = DocListCast(dashboard.aliases).find(doc => doc.author === Doc.CurrentUserEmail);
-                const nextBestAlias = DocListCast(dashboard.aliases).find(doc => doc.author === Doc.CurrentUserEmail);
-                Doc.ActiveDashboard = bestAlias ?? nextBestAlias ?? Doc.MakeAlias(dashboard);
-            } else {
-                Doc.ActiveDashboard = dashboard;
-            }
+            Doc.ActiveDashboard = dashboard;
             Doc.ActivePage = 'dashboard';
         }
     };
diff --git a/src/client/views/MainView.tsx b/src/client/views/MainView.tsx
index 4bf6bb881..c1cc80163 100644
--- a/src/client/views/MainView.tsx
+++ b/src/client/views/MainView.tsx
@@ -115,6 +115,7 @@ export class MainView extends React.Component {
     }
     @observable mainDoc: Opt<Doc>;
     @computed private get mainContainer() {
+        if (Doc.ActiveDashboard) return Doc.ActiveDashboard;
         if (window.location.pathname.startsWith('/doc/')) {
             DocServer.GetRefField(window.location.pathname.substring('/doc/'.length)).then(main => runInAction(() => (this.mainDoc = main as Doc)));
             return this.mainDoc;
-- 
cgit v1.2.3-70-g09d2

