From 818b7202394afd0f246e355d990fb21a895561a7 Mon Sep 17 00:00:00 2001 From: EnixCoda Date: Mon, 26 Nov 2018 10:37:54 +0800 Subject: [PATCH] feat(NodeGenerator): better search UX --- src/utils/visibleNodesGenerator.js | 26 ++++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/src/utils/visibleNodesGenerator.js b/src/utils/visibleNodesGenerator.js index 6fa3d45..367938e 100644 --- a/src/utils/visibleNodesGenerator.js +++ b/src/utils/visibleNodesGenerator.js @@ -27,20 +27,30 @@ function getFilterFunc(keyRegex) { } } +function filterDuplications(arr) { + return Array.from(new Set(arr)) +} + function search(treeNodes, searchKey) { if (!searchKey) return treeNodes /** * if searchKey is 'abcd' - * then keyRegex will be /a.*?b.*?c.*?d/i + * then keyRegex will be /abcd/i and /a.*?b.*?c.*?d/i */ - const keyRegex = new RegExp( - searchKey - .replace(/\//, '') - .split('') - .join('.*?'), - 'i' + const keyRegexes = [ + new RegExp(searchKey, 'i'), + new RegExp( + searchKey + .replace(/\//, '') + .split('') + .join('.*?'), + 'i' + ), + ] + const searchResults = [].concat( + ...keyRegexes.map(keyRegex => treeNodes.filter(getFilterFunc(keyRegex))) ) - return treeNodes.filter(getFilterFunc(keyRegex)) + return filterDuplications(searchResults) } function debounce(func, delay) {