From 917aeb762ee5464156f2e2225388e2fe3882a124 Mon Sep 17 00:00:00 2001
From: bobzel <zzzman@gmail.com>
Date: Fri, 12 Mar 2021 20:16:05 -0500
Subject: fixed dropping documents onto file system view.  fixed problem with
 tabDocView not removing itself from TabMap causing problem trying to open the
 same doc twice from the file system.  made shouldNotScale a computed value.

---
 src/client/views/collections/TabDocView.tsx | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

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

diff --git a/src/client/views/collections/TabDocView.tsx b/src/client/views/collections/TabDocView.tsx
index f7e067399..e0bbd1224 100644
--- a/src/client/views/collections/TabDocView.tsx
+++ b/src/client/views/collections/TabDocView.tsx
@@ -213,7 +213,6 @@ export class TabDocView extends React.Component<TabDocViewProps> {
     }
 
     componentDidMount() {
-        const selected = () => SelectionManager.Views().some(v => v.props.Document === this._document);
         new _global.ResizeObserver(action((entries: any) => {
             for (const entry of entries) {
                 this._panelWidth = entry.contentRect.width;
@@ -229,6 +228,8 @@ export class TabDocView extends React.Component<TabDocViewProps> {
 
     componentWillUnmount() {
         this._tabReaction?.();
+        this.tab && CollectionDockingView.Instance.tabMap.delete(this.tab);
+
         this.props.glContainer.layoutManager.off("activeContentItemChanged", this.onActiveContentItemChanged);
     }
 
@@ -344,6 +345,7 @@ export class TabDocView extends React.Component<TabDocViewProps> {
     }
 
     render() {
+        this.tab && CollectionDockingView.Instance.tabMap.delete(this.tab);
         return (
             <div className="collectionDockingView-content" style={{ height: "100%", width: "100%" }} ref={ref => {
                 if (this._mainCont = ref) {
-- 
cgit v1.2.3-70-g09d2


From b18d4d2b9a4a624e61116642d4dbfe9a53437d0c Mon Sep 17 00:00:00 2001
From: bobzel <zzzman@gmail.com>
Date: Fri, 12 Mar 2021 22:18:10 -0500
Subject: prevent anything but Docs from being written to offScreenTabs.  fixed
 tabs to activate an unrendered tab when it is uncovered for the first time.

---
 src/client/views/collections/CollectionDockingView.tsx | 9 +++++----
 src/client/views/collections/TabDocView.tsx            | 8 ++++----
 src/client/views/nodes/KeyValueBox.tsx                 | 9 ++-------
 3 files changed, 11 insertions(+), 15 deletions(-)

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

diff --git a/src/client/views/collections/CollectionDockingView.tsx b/src/client/views/collections/CollectionDockingView.tsx
index 5da75b1b7..3556e74bc 100644
--- a/src/client/views/collections/CollectionDockingView.tsx
+++ b/src/client/views/collections/CollectionDockingView.tsx
@@ -372,16 +372,17 @@ export class CollectionDockingView extends CollectionSubView(doc => doc) {
 
         this.props.Document.dockingConfig = json;
         setTimeout(async () => {
-            const sublists = DocListCast(this.props.Document[this.props.fieldKey]);
-            const tabs = Cast(sublists[0], Doc, null);
-            const other = Cast(sublists[1], Doc, null);
+            const sublists = await DocListCastAsync(this.props.Document[this.props.fieldKey]);
+            const tabs = sublists && Cast(sublists[0], Doc, null);
+            const other = sublists && Cast(sublists[1], Doc, null);
             const tabdocs = await DocListCastAsync(tabs?.data);
             const otherdocs = await DocListCastAsync(other?.data);
             tabs && (Doc.GetProto(tabs).data = new List<Doc>(docs));
             const otherSet = new Set<Doc>();
             otherdocs?.filter(doc => !docs.includes(doc)).forEach(doc => otherSet.add(doc));
             tabdocs?.filter(doc => !docs.includes(doc) && doc.type !== DocumentType.KVP).forEach(doc => otherSet.add(doc));
-            other && (Doc.GetProto(other).data = new List<Doc>(Array.from(otherSet.values())));
+            const vals = Array.from(otherSet.values()).filter(val => val instanceof Doc).map(d => d as Doc).filter(d => d.type !== DocumentType.KVP);
+            other && (Doc.GetProto(other).data = new List<Doc>(vals));
         }, 0);
     }
 
diff --git a/src/client/views/collections/TabDocView.tsx b/src/client/views/collections/TabDocView.tsx
index e0bbd1224..2ead98aa4 100644
--- a/src/client/views/collections/TabDocView.tsx
+++ b/src/client/views/collections/TabDocView.tsx
@@ -220,7 +220,7 @@ export class TabDocView extends React.Component<TabDocViewProps> {
             }
         })).observe(this.props.glContainer._element[0]);
         this.props.glContainer.layoutManager.on("activeContentItemChanged", this.onActiveContentItemChanged);
-        this.props.glContainer.tab?.isActive && this.onActiveContentItemChanged();
+        this.props.glContainer.tab?.isActive && this.onActiveContentItemChanged(undefined);
         this._tabReaction = reaction(() => ({ selected: this.active(), title: this.tab?.titleElement[0] }),
             ({ selected, title }) => title && (title.style.backgroundColor = selected ? "white" : ""),
             { fireImmediately: true });
@@ -234,9 +234,9 @@ export class TabDocView extends React.Component<TabDocViewProps> {
     }
 
     @action.bound
-    private onActiveContentItemChanged() {
-        if (this.props.glContainer.tab && this._isActive !== this.props.glContainer.tab.isActive) {
-            this._isActive = this.props.glContainer.tab.isActive;
+    private onActiveContentItemChanged(contentItem: any) {
+        if (!contentItem || (this.stack === contentItem.parent && ((contentItem?.tab === this.tab && !this._isActive) || (contentItem?.tab !== this.tab && this._isActive)))) {
+            this._activated = this._isActive = !contentItem || contentItem?.tab === this.tab;
             (CollectionDockingView.Instance as any)._goldenLayout?.isInitialised && CollectionDockingView.Instance.stateChanged();
             !this._isActive && this._document && Doc.UnBrushDoc(this._document); // bcz: bad -- trying to simulate a pointer leave event when a new tab is opened up on top of an existing one.
         }
diff --git a/src/client/views/nodes/KeyValueBox.tsx b/src/client/views/nodes/KeyValueBox.tsx
index 8acf4081c..383650e89 100644
--- a/src/client/views/nodes/KeyValueBox.tsx
+++ b/src/client/views/nodes/KeyValueBox.tsx
@@ -61,10 +61,7 @@ export class KeyValueBox extends React.Component<FieldViewProps> {
         const options: ScriptOptions = { addReturn: true, params: { this: "Doc", _last_: "any" }, editable: false };
         if (dubEq) options.typecheck = false;
         const script = CompileScript(value, options);
-        if (!script.compiled) {
-            return undefined;
-        }
-        return { script, type: dubEq, onDelegate: eq };
+        return !script.compiled ? undefined : { script, type: dubEq, onDelegate: eq };
     }
 
     public static ApplyKVPScript(doc: Doc, key: string, kvpScript: KVPScript, forceOnDelegate?: boolean): boolean {
@@ -100,9 +97,7 @@ export class KeyValueBox extends React.Component<FieldViewProps> {
             e.stopPropagation();
         }
     }
-    onPointerWheel = (e: React.WheelEvent): void => {
-        e.stopPropagation();
-    }
+    onPointerWheel = (e: React.WheelEvent): void => e.stopPropagation();
 
     rowHeight = () => 30;
 
-- 
cgit v1.2.3-70-g09d2

