From aaef5f4693b5eb6aae429f5c8caaf82838e9c65e Mon Sep 17 00:00:00 2001
From: bobzel <zzzman@gmail.com>
Date: Mon, 3 Oct 2022 15:12:14 -0400
Subject: added a reset menu item for docking views in their context menu. 
 fixed being able to edit dockingConfig in keyValue by quoting with ' instead
 of ".  If there's no dockingConfig, make one.

---
 src/client/views/DashboardView.tsx | 85 ++++++++++++++++++++++++++++++++++++++
 1 file changed, 85 insertions(+)

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

diff --git a/src/client/views/DashboardView.tsx b/src/client/views/DashboardView.tsx
index 11bb0c6a8..192e55431 100644
--- a/src/client/views/DashboardView.tsx
+++ b/src/client/views/DashboardView.tsx
@@ -294,6 +294,88 @@ export class DashboardView extends React.Component {
         }
     };
 
+    public static resetDashboard = (dashboard: Doc) => {
+        const config = StrCast(dashboard.dockingConfig);
+        const matches = config.match(/\"documentId\":\"[a-z0-9-]+\"/g);
+        const docids = matches?.map(m => m.replace('"documentId":"', '').replace('"', '')) ?? [];
+
+        const components =
+            docids.map(docid => ({
+                type: 'component',
+                component: 'DocumentFrameRenderer',
+                title: 'Untitled Tab 1',
+                width: 600,
+                props: {
+                    documentId: docid,
+                },
+                componentName: 'lm-react-component',
+                isClosable: true,
+                reorderEnabled: true,
+                componentState: null,
+            })) ?? [];
+        const reset = {
+            isClosable: true,
+            reorderEnabled: true,
+            title: '',
+            openPopouts: [],
+            maximisedItemId: null,
+            settings: {
+                hasHeaders: true,
+                constrainDragToContainer: true,
+                reorderEnabled: true,
+                selectionEnabled: false,
+                popoutWholeStack: false,
+                blockedPopoutsThrowError: true,
+                closePopoutsOnUnload: true,
+                showPopoutIcon: true,
+                showMaximiseIcon: true,
+                showCloseIcon: true,
+                responsiveMode: 'onload',
+                tabOverlapAllowance: 0,
+                reorderOnTabMenuClick: false,
+                tabControlOffset: 10,
+            },
+            dimensions: {
+                borderWidth: 3,
+                borderGrabWidth: 5,
+                minItemHeight: 10,
+                minItemWidth: 20,
+                headerHeight: 27,
+                dragProxyWidth: 300,
+                dragProxyHeight: 200,
+            },
+            labels: {
+                close: 'close',
+                maximise: 'maximise',
+                minimise: 'minimise',
+                popout: 'new tab',
+                popin: 'pop in',
+                tabDropdown: 'additional tabs',
+            },
+            content: [
+                {
+                    type: 'row',
+                    isClosable: true,
+                    reorderEnabled: true,
+                    title: '',
+                    content: [
+                        {
+                            type: 'stack',
+                            width: 100,
+                            isClosable: true,
+                            reorderEnabled: true,
+                            title: '',
+                            activeItemIndex: 0,
+                            content: components,
+                        },
+                    ],
+                },
+            ],
+        };
+        Doc.SetInPlace(dashboard, 'dockingConfig', JSON.stringify(reset), true);
+        return reset;
+    };
+
     public static createNewDashboard = (id?: string, name?: string, background?: string) => {
         const dashboards = Doc.MyDashboards;
         const dashboardCount = DocListCast(dashboards.data).length + 1;
@@ -393,6 +475,9 @@ ScriptingGlobals.add(function shareDashboard(dashboard: Doc) {
 ScriptingGlobals.add(function removeDashboard(dashboard: Doc) {
     DashboardView.removeDashboard(dashboard);
 }, 'Remove Dashboard from Dashboards');
+ScriptingGlobals.add(function resetDashboard(dashboard: Doc) {
+    DashboardView.resetDashboard(dashboard);
+}, 'move all dashboard tabs to single stack');
 ScriptingGlobals.add(function addToDashboards(dashboard: Doc) {
     DashboardView.openDashboard(Doc.MakeAlias(dashboard));
 }, 'adds Dashboard to set of Dashboards');
-- 
cgit v1.2.3-70-g09d2

