From edcb12b4f4f9e625a83f0bbf27aa9e7a5d6baea3 Mon Sep 17 00:00:00 2001
From: Eugen Ciur <eugen@papermerge.com>
Date: Sun, 21 Nov 2021 10:01:31 +0100
Subject: [PATCH] basic dual panel model with documents and nodes!

---
 app/components/breadcrumb/index.js     |  2 ++
 app/components/dual_link_to/index.js   |  9 +++++--
 app/routes/authenticated/document.js   | 10 ++++---
 app/routes/authenticated/nodes.js      | 36 ++++++++++++--------------
 app/routes/authenticated/utils.js      | 23 ++++++++++++++++
 app/templates/authenticated/nodes.hbs  |  6 +++--
 app/templates/authenticated/viewer.hbs |  6 +++--
 7 files changed, 64 insertions(+), 28 deletions(-)
 create mode 100644 app/routes/authenticated/utils.js

diff --git a/app/components/breadcrumb/index.js b/app/components/breadcrumb/index.js
index 8568edb..63e73b2 100644
--- a/app/components/breadcrumb/index.js
+++ b/app/components/breadcrumb/index.js
@@ -10,6 +10,7 @@ export default class BreadcrumbComponent extends Component {
     current = this.args.node;
 
     while (current && current.get('id')) {
+      console.log(`pushing current node id = ${current.get('id')}`);
       _nodes.push(current);
       current = current.get('parent');
     }
@@ -18,6 +19,7 @@ export default class BreadcrumbComponent extends Component {
   }
 
   get query() {
+
     if (this.args.extranode) {
       return {
         extranode_id: this.args.extranode.id
diff --git a/app/components/dual_link_to/index.js b/app/components/dual_link_to/index.js
index 1843cc7..6257902 100644
--- a/app/components/dual_link_to/index.js
+++ b/app/components/dual_link_to/index.js
@@ -88,8 +88,13 @@ export default class DualLinkToComponent extends Component {
     let ret;
 
     ret = this.args.title || this.args.node.get('title');
-    if (ret.length > 16) {
-      return `${ret.substring(0, 16)}...`;
+
+    if (!ret) {
+      return '';
+    }
+
+    if (ret.length > 24) {
+      return `${ret.substring(0, 24)}...`;
     }
 
     return ret;
diff --git a/app/routes/authenticated/document.js b/app/routes/authenticated/document.js
index 2712757..ef7f51b 100644
--- a/app/routes/authenticated/document.js
+++ b/app/routes/authenticated/document.js
@@ -1,6 +1,8 @@
 import Route from '@ember/routing/route';
 import { inject as service } from '@ember/service';
 
+import { getPanelInfo } from './utils';
+
 
 export default class DocumentRoute extends Route {
   @service store;
@@ -17,7 +19,6 @@ export default class DocumentRoute extends Route {
   async model(params) {
     let doc_adapter,
       page_adapter,
-      node_adapter,
       extranode,
       document_version,
       document_version2,
@@ -26,7 +27,6 @@ export default class DocumentRoute extends Route {
       pages_with_url,
       pages_with_url2;
 
-    node_adapter = this.store.adapterFor('node');
     page_adapter = this.store.adapterFor('page');
     doc_adapter = this.store.adapterFor('document');
 
@@ -50,7 +50,11 @@ export default class DocumentRoute extends Route {
 
     if (params.extranode_id) {
 
-      extranode = await node_adapter.findNode(params.extranode_id)
+      extranode = await getPanelInfo({
+        store: this.store,
+        node_id: params.extranode_id,
+        page: 1
+      });
 
       return {
         'document_version': document_version,
diff --git a/app/routes/authenticated/nodes.js b/app/routes/authenticated/nodes.js
index 7783550..c290e49 100644
--- a/app/routes/authenticated/nodes.js
+++ b/app/routes/authenticated/nodes.js
@@ -2,6 +2,8 @@ import Route from '@ember/routing/route';
 import { inject as service } from '@ember/service';
 import RSVP from 'rsvp';
 
+import { getPanelInfo } from './utils';
+
 
 export default class FolderRoute extends Route {
   @service store;
@@ -24,10 +26,9 @@ export default class FolderRoute extends Route {
       doc_adapter,
       page_adapter,
       pages,
-      current_node,
       pages_with_url,
       document_version,
-      home_folder;
+      context = {};
 
     adapter = this.store.adapterFor('node');
     page_adapter = this.store.adapterFor('page');
@@ -35,6 +36,13 @@ export default class FolderRoute extends Route {
 
     await this.currentUser.loadCurrentUser();
 
+    context = await getPanelInfo({
+      store: this.store,
+      node_id: params.node_id,
+      page: params.page
+    });
+
+
     if (params.extradoc_id) {
       document_version  = await doc_adapter.getDocumentVersion(params.extradoc_id);
       pages = await document_version.pages;
@@ -49,27 +57,16 @@ export default class FolderRoute extends Route {
     }
 
     if (params.extranode_id) {
-      return RSVP.hash({
-        node: adapter.findNode(params.node_id),
-        extranode: adapter.findNode(params.extranode_id),
-        home_folder: this.currentUser.user.home_folder
+      context['extranode'] = await getPanelInfo({
+        store: this.store,
+        node_id: params.extranode_id,
+        page: 1
       });
     }
 
-    const {children, pagination} = await adapter.getChildren({
-      node_id: params.node_id,
-      page: params.page
-    });
-    home_folder = await this.currentUser.user.getHomeFolder();
-    current_node = await adapter.getFolder(params.node_id);
-
-    return {
-      current_node,
-      home_folder,
-      children,
-      pagination
-    };
+    context['home_folder'] = await this.currentUser.user.getHomeFolder();
 
+    return context;
   }
 
   setupController(controller, model) {
@@ -94,4 +91,5 @@ export default class FolderRoute extends Route {
     _controller.set('children', model.children);
     _controller.set('pagination', model.pagination);
   }
+
 }
diff --git a/app/routes/authenticated/utils.js b/app/routes/authenticated/utils.js
new file mode 100644
index 0000000..434ca79
--- /dev/null
+++ b/app/routes/authenticated/utils.js
@@ -0,0 +1,23 @@
+
+
+export async function getPanelInfo({store, node_id, page}) {
+  /*
+    Returns current_node model its
+    children nodes models and associated pagination info.
+
+    `page` is integer number of the page
+    `store` is "@service store" thingy
+  */
+  let node;
+  const adapter = store.adapterFor('node');
+  const {children, pagination} = await adapter.getChildren({node_id, page});
+
+
+  node = await adapter.getFolder(node_id);
+
+  return {
+    current_node: node,
+    children: children,
+    pagination: pagination
+  };
+}
diff --git a/app/templates/authenticated/nodes.hbs b/app/templates/authenticated/nodes.hbs
index 4145fb9..4f949df 100644
--- a/app/templates/authenticated/nodes.hbs
+++ b/app/templates/authenticated/nodes.hbs
@@ -1,7 +1,7 @@
 <div class="panels d-flex row">
   <Commander
     @node={{this.mainnode}}
-    @extranode={{this.extranode}}
+    @extranode={{this.extranode.current_node}}
     @children={{this.children}}
     @pagination={{this.pagination}}
     @onPanelToggle={{this.onPanelToggle}}
@@ -19,8 +19,10 @@
         @hint="right" />
     {{else}}
       <Commander
-        @node={{this.extranode}}
+        @node={{this.extranode.current_node}}
         @extranode={{this.mainnode}}
+        @children={{this.extranode.children}}
+        @pagination={{this.extranode.pagination}}
         @onPanelToggle={{this.onPanelToggle}}
         @dualPanelMode={{this.dualpanel_mode}}
         @hint="right" />
diff --git a/app/templates/authenticated/viewer.hbs b/app/templates/authenticated/viewer.hbs
index 0c2c60d..fcbafad 100644
--- a/app/templates/authenticated/viewer.hbs
+++ b/app/templates/authenticated/viewer.hbs
@@ -2,7 +2,7 @@
   <Viewer
     @document_version={{@model.document_version}}
     @pages={{@model.pages}}
-    @extranode={{this.extranode}}
+    @extranode={{this.extranode.current_node}}
     @onPanelToggle={{this.onPanelToggle}}
     @dualPanelMode={{this.dualpanel_mode}}
     @hint="left" />
@@ -18,7 +18,9 @@
         @hint="right" />
     {{else}}
       <Commander
-        @node={{this.extranode}}
+        @node={{this.extranode.current_node}}
+        @children={{this.extranode.children}}
+        @pagination={{this.extranode.pagination}}
         @extradoc={{@model}}
         @onPanelToggle={{this.onPanelToggle}}
         @dualPanelMode={{this.dualpanel_mode}}
-- 
GitLab