From a6cc25e5d03ffed16bfaa32e48e9cc2eaff7deaf Mon Sep 17 00:00:00 2001
From: bobzel <zzzman@gmail.com>
Date: Tue, 7 Nov 2023 13:48:26 -0500
Subject: Changed how selection works to avoid invalidations. Fixed Cast
 problem with ProxyFields that caused renameEmbedding to infinite loop.. 
 Changed brushing for the same reason.   Cleaned up a few things with filter
 code.

---
 src/client/views/nodes/DocumentView.tsx | 18 +++++++++++++++---
 1 file changed, 15 insertions(+), 3 deletions(-)

(limited to 'src/client/views/nodes/DocumentView.tsx')

diff --git a/src/client/views/nodes/DocumentView.tsx b/src/client/views/nodes/DocumentView.tsx
index 98b13f90f..d87efb7b1 100644
--- a/src/client/views/nodes/DocumentView.tsx
+++ b/src/client/views/nodes/DocumentView.tsx
@@ -5,7 +5,7 @@ import { observer } from 'mobx-react';
 import { computedFn } from 'mobx-utils';
 import { Bounce, Fade, Flip, LightSpeed, Roll, Rotate, Zoom } from 'react-reveal';
 import { Doc, DocListCast, Field, Opt, StrListCast } from '../../../fields/Doc';
-import { AclPrivate, Animation, AudioPlay, DocData, Width } from '../../../fields/DocSymbols';
+import { AclPrivate, Animation, AudioPlay, DocData, DocViews, Width } from '../../../fields/DocSymbols';
 import { Id } from '../../../fields/FieldSymbols';
 import { InkTool } from '../../../fields/InkField';
 import { List } from '../../../fields/List';
@@ -900,7 +900,7 @@ export class DocumentViewInternal extends DocComponent<DocumentViewInternalProps
     @computed get _rootSelected() {
         return this.props.isSelected(false) || (this.props.Document.rootDocument && this.props.rootSelected?.(false)) || false;
     }
-    rootSelected = (outsideReaction?: boolean) => this._rootSelected;
+    rootSelected = () => this._rootSelected;
     panelHeight = () => this.props.PanelHeight() - this.headerMargin;
     screenToLocal = () => this.props.ScreenToLocalTransform().translate(0, -this.headerMargin);
     onClickFunc: any = () => (this.disableClickScriptFunc ? undefined : this.onClickHandler);
@@ -1345,6 +1345,13 @@ export class DocumentViewInternal extends DocComponent<DocumentViewInternalProps
 @observer
 export class DocumentView extends React.Component<DocumentViewProps> {
     public static ROOT_DIV = 'documentView-effectsWrapper';
+    @observable _selected = false;
+    public get SELECTED() {
+        return this._selected;
+    }
+    public set SELECTED(val) {
+        this._selected = val;
+    }
     @observable public static Interacting = false;
     @observable public static LongPress = false;
     @observable public static ExploreMode = false;
@@ -1579,7 +1586,7 @@ export class DocumentView extends React.Component<DocumentViewProps> {
 
     scaleToScreenSpace = () => (1 / (this.props.NativeDimScaling?.() || 1)) * this.screenToLocalTransform().Scale;
     docViewPathFunc = () => this.docViewPath;
-    isSelected = (outsideReaction?: boolean) => SelectionManager.IsSelected(this, outsideReaction);
+    isSelected = () => SelectionManager.IsSelected(this);
     select = (extendSelection: boolean, focusSelection?: boolean) => {
         SelectionManager.SelectView(this, extendSelection);
         if (focusSelection) {
@@ -1602,7 +1609,10 @@ export class DocumentView extends React.Component<DocumentViewProps> {
             .ScreenToLocalTransform()
             .translate(-this.centeringX, -this.centeringY)
             .scale(this.trueNativeWidth() ? 1 / this.nativeScaling : 1);
+
+    @action
     componentDidMount() {
+        this.rootDoc[DocViews].add(this);
         this._disposers.updateContentsScript = reaction(
             () => ScriptCast(this.rootDoc.updateContentsScript)?.script?.run({ this: this.props.Document, self: Cast(this.rootDoc, Doc, null) || this.props.Document }).result,
             output => output
@@ -1617,7 +1627,9 @@ export class DocumentView extends React.Component<DocumentViewProps> {
         );
         !BoolCast(this.props.Document.dontRegisterView, this.props.dontRegisterView) && DocumentManager.Instance.AddView(this);
     }
+    @action
     componentWillUnmount() {
+        this.rootDoc[DocViews].delete(this);
         Object.values(this._disposers).forEach(disposer => disposer?.());
         !BoolCast(this.props.Document.dontRegisterView, this.props.dontRegisterView) && DocumentManager.Instance.RemoveView(this);
     }
-- 
cgit v1.2.3-70-g09d2

