From c1f79b0bd61399efb8805cc23b8848075945413e Mon Sep 17 00:00:00 2001
From: Eugen Ciur <eugen@papermerge.com>
Date: Sat, 4 Dec 2021 09:29:04 +0100
Subject: [PATCH] move most of the logic behind dual link inside easy testable
 utility module

---
 app/components/dual_link_to/index.js | 85 +++++++---------------------
 app/components/dual_link_to/utils.js | 76 +++++++++++++++++++++++++
 2 files changed, 96 insertions(+), 65 deletions(-)
 create mode 100644 app/components/dual_link_to/utils.js

diff --git a/app/components/dual_link_to/index.js b/app/components/dual_link_to/index.js
index 724194b..319f4ac 100644
--- a/app/components/dual_link_to/index.js
+++ b/app/components/dual_link_to/index.js
@@ -1,5 +1,9 @@
 import Component from '@glimmer/component';
 
+import { route_name as _route_name } from "./utils";
+import { model_obj as _model_obj } from "./utils";
+import { query_dict as _query_dict } from "./utils";
+
 
 export default class DualLinkToComponent extends Component {
   /*
@@ -58,26 +62,9 @@ export default class DualLinkToComponent extends Component {
     extranode = this.args.extranode;
     extradoc = this.args.extradoc;
 
-    if (hint == 'left') {
-      if (node && node.get('nodeType') === 'document') {
-        return 'authenticated.document';
-      }
-
-      if (node && node.get('nodeType') === 'folder') {
-        return 'authenticated.nodes';
-      }
-    }
-
-    // hint == 'right'
-    if (extranode) {
-      return 'authenticated.nodes';
-    }
-
-    if (extradoc) {
-      return 'authenticated.document';
-    }
-
-    return 'authenticated.nodes';
+    return _route_name({
+      node, hint, extranode, extradoc
+    });
   }
 
   get model() {
@@ -91,16 +78,9 @@ export default class DualLinkToComponent extends Component {
     extranode = this.args.extranode;
     extradoc = this.args.extradoc;
 
-    if (hint === 'left') {
-      return node;
-    }
-
-    // hint right
-    if (extradoc) {
-      return extradoc;
-    }
-
-    return extranode;
+    return _model_obj({
+      node, hint, extranode, extradoc
+    });
   }
 
   get title() {
@@ -124,46 +104,21 @@ export default class DualLinkToComponent extends Component {
       extranode,
       extradoc,
       hint,
-      result = {};
+      q;
 
     node = this.args.node;
     extranode = this.args.extranode;
     extradoc = this.args.extradoc;
     hint = this.args.hint;
-
-    if (this.args.query) {
-      result = Object.assign(result, this.args.query);
-    }
-
-    if ((hint === 'left') && extranode) {
-      return {
-        'extra_id': extranode.get('id'),
-        'extra_type': 'folder'
-      };
-    }
-
-    if ((hint === 'left') && extradoc) {
-      return {
-        'extra_id': extradoc.get('id'),
-        'extra_type': 'doc'
-      };
-    }
-
-    if (hint === 'right' && node) {
-      if (node.get('nodeType') === 'document') {
-        return {
-          'extra_id': node.get('id'),
-          'extra_type': 'doc'
-        }
-      } else if (node.get('nodeType') === 'folder' ) {
-        return {
-          'extra_id': node.get('id'),
-          'extra_type': 'folder'
-        }
-      }
-    }
-
-    return result;
+    q = this.args.query
+
+    return _query_dict({
+      node: node,
+      extranode: extranode,
+      extradoc: extradoc,
+      hint: hint,
+      query: q
+    });
   } // end of query
 
 } // end of DualLinkToComponent
diff --git a/app/components/dual_link_to/utils.js b/app/components/dual_link_to/utils.js
new file mode 100644
index 0000000..d9dcb0e
--- /dev/null
+++ b/app/components/dual_link_to/utils.js
@@ -0,0 +1,76 @@
+
+
+export function route_name({node, hint, extranode, extradoc}) {
+
+  if (hint == 'left') {
+    if (node && node.get('nodeType') === 'document') {
+      return 'authenticated.document';
+    }
+
+    if (node && node.get('nodeType') === 'folder') {
+      return 'authenticated.nodes';
+    }
+  }
+
+  // hint == 'right'
+  if (extranode) {
+    return 'authenticated.nodes';
+  }
+
+  if (extradoc) {
+    return 'authenticated.document';
+  }
+
+  return 'authenticated.nodes';
+}
+
+export function model_obj({node, hint, extradoc, extranode}) {
+  if (hint === 'left') {
+    return node;
+  }
+
+  // hint right
+  if (extradoc) {
+    return extradoc;
+  }
+
+  return extranode;
+}
+
+export function query_dict({node, hint, extranode, extradoc, query}) {
+  let result = {};
+
+  if (query) {
+    result = Object.assign(result, query);
+  }
+
+  if ((hint === 'left') && extranode) {
+    return {
+      'extra_id': extranode.get('id'),
+      'extra_type': 'folder'
+    };
+  }
+
+  if ((hint === 'left') && extradoc) {
+    return {
+      'extra_id': extradoc.get('id'),
+      'extra_type': 'doc'
+    };
+  }
+
+  if (hint === 'right' && node) {
+    if (node.get('nodeType') === 'document') {
+      return {
+        'extra_id': node.get('id'),
+        'extra_type': 'doc'
+      }
+    } else if (node.get('nodeType') === 'folder' ) {
+      return {
+        'extra_id': node.get('id'),
+        'extra_type': 'folder'
+      }
+    }
+  }
+
+    return result;
+} // end of query
\ No newline at end of file
-- 
GitLab