From b858bd3cad81da41e63b9f8e807e41421ca4aa34 Mon Sep 17 00:00:00 2001
From: bobzel <zzzman@gmail.com>
Date: Wed, 8 May 2024 21:03:08 -0400
Subject: lots of api cleanup and cycle removal

---
 src/client/views/LightboxView.tsx | 33 ++++++++++++++++++++++++++-------
 1 file changed, 26 insertions(+), 7 deletions(-)

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

diff --git a/src/client/views/LightboxView.tsx b/src/client/views/LightboxView.tsx
index 12d899388..269f4fa83 100644
--- a/src/client/views/LightboxView.tsx
+++ b/src/client/views/LightboxView.tsx
@@ -19,14 +19,16 @@ import { GestureOverlay } from './GestureOverlay';
 import './LightboxView.scss';
 import { ObservableReactComponent } from './ObservableReactComponent';
 import { DefaultStyleProvider, wavyBorderPath } from './StyleProvider';
-import { CollectionDockingView } from './collections/CollectionDockingView';
 import { DocumentView } from './nodes/DocumentView';
 import { OpenWhere, OpenWhereMod } from './nodes/OpenWhere';
+import { ScriptingGlobals } from '../util/ScriptingGlobals';
+import { OverlayView } from './OverlayView';
 
 interface LightboxViewProps {
     PanelWidth: number;
     PanelHeight: number;
     maxBorder: number[];
+    addSplit: (document: Doc, pullSide: OpenWhereMod, stack?: any, panelName?: string | undefined, keyValue?: boolean | undefined) => boolean;
 }
 
 const savedKeys = ['freeform_panX', 'freeform_panY', 'freeform_scale', 'layout_scrollTop', 'layout_fieldKey'];
@@ -39,7 +41,7 @@ export class LightboxView extends ObservableReactComponent<LightboxViewProps> {
      * @returns true if a DocumentView is descendant of the lightbox view
      */
     public static Contains(view?:DocumentView) { return view && LightboxView.Instance?._docView && (view.containerViewPath?.() ?? []).concat(view).includes(LightboxView.Instance?._docView); } // prettier-ignore
-    public static get LightboxDoc() { return LightboxView.Instance?._doc; } // prettier-ignore
+    public static LightboxDoc = () => LightboxView.Instance?._doc;
     // eslint-disable-next-line no-use-before-define
     static Instance: LightboxView;
     private _path: {
@@ -65,10 +67,20 @@ export class LightboxView extends ObservableReactComponent<LightboxViewProps> {
         super(props);
         makeObservable(this);
         LightboxView.Instance = this;
+        DocumentView._setLightboxDoc = this.SetLightboxDoc;
+        DocumentView._lightboxContains = LightboxView.Contains;
+        DocumentView._lightboxDoc = LightboxView.LightboxDoc;
     }
-
+    /**
+     * Sets the root Doc to render in the lightbox view.
+     * @param doc
+     * @param target a Doc within 'doc' to focus on (useful for freeform collections)
+     * @param future a list of Docs to step through with the arrow buttons of the lightbox
+     * @param layoutTemplate a template to apply to 'doc' to render it.
+     * @returns success flag which is currently always true
+     */
     @action
-    public SetLightboxDoc(doc: Opt<Doc>, target?: Doc, future?: Doc[], layoutTemplate?: Doc | string) {
+    public SetLightboxDoc = (doc: Opt<Doc>, target?: Doc, future?: Doc[], layoutTemplate?: Doc | string) => {
         const lightDoc = this._doc;
         lightDoc &&
             lightDoc !== doc &&
@@ -110,7 +122,7 @@ export class LightboxView extends ObservableReactComponent<LightboxViewProps> {
         this._docTarget = target ?? doc;
 
         return true;
-    }
+    };
 
     public AddDocTab = (docs: Doc | Doc[], location: OpenWhere, layoutTemplate?: Doc | string) => {
         const doc = toList(docs).lastElement();
@@ -183,7 +195,7 @@ export class LightboxView extends ObservableReactComponent<LightboxViewProps> {
         const lightDoc = this._docTarget ?? this._doc;
         if (lightDoc) {
             Doc.RemoveDocFromList(Doc.MyRecentlyClosed, 'data', lightDoc);
-            CollectionDockingView.AddSplit(lightDoc, OpenWhereMod.none);
+            this._props.addSplit(lightDoc, OpenWhereMod.none);
             this.SetLightboxDoc(undefined);
         }
     };
@@ -243,7 +255,9 @@ export class LightboxView extends ObservableReactComponent<LightboxViewProps> {
                 />
             </div>
         );
-        return !this._doc ? null : (
+        return !this._doc ? (
+            <OverlayView />
+        ) : (
             <div
                 className="lightboxView-frame"
                 style={{ background: SnappingManager.userBackgroundColor }}
@@ -324,3 +338,8 @@ export class LightboxTourBtn extends React.Component<LightboxTourBtnProps> {
         return this.props.navBtn('50%', 0, 0, 'chevron-down', this.props.lightboxDoc(), this.props.stepInto, '');
     }
 }
+
+// eslint-disable-next-line prefer-arrow-callback
+ScriptingGlobals.add(function deiconifyViewToLightbox(documentView: DocumentView) {
+    LightboxView.Instance.AddDocTab(documentView.Document, OpenWhere.lightbox, 'layout'); // , 0);
+});
-- 
cgit v1.2.3-70-g09d2

