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