From fa36c81f256a7b357cc64b42129a119d3c98b056 Mon Sep 17 00:00:00 2001 From: Florrie Date: Tue, 16 Jul 2019 12:08:40 -0300 Subject: Separate jump-to-item/search logic from UI code --- ui.js | 52 +++++++++++++++------------------------------------- 1 file changed, 15 insertions(+), 37 deletions(-) (limited to 'ui.js') diff --git a/ui.js b/ui.js index 7cc55e2..c8d5363 100644 --- a/ui.js +++ b/ui.js @@ -20,6 +20,7 @@ const { isGroup, isTrack, parentSymbol, + searchForItem, shuffleOrderOfGroups } = require('./playlist-utils') @@ -1289,46 +1290,23 @@ class GrouplikeListingElement extends Form { value = this.previousJumpValue } - if (value.length) { - // We prioritize searching past the index that the user opened the jump - // element from (oldFocusedIndex). This is so that it's more practical - // to do a "repeated" search, wherein the user searches for the same - // value over and over, each time jumping to the next match, until they - // have found the one they're looking for. + const grouplike = {items: this.form.inputs.map(inp => inp.item)} - const lower = value.toLowerCase() - const getName = inp => (inp.item && inp.item.name) ? inp.item.name.toLowerCase().trim() : '' + // We prioritize searching past the index that the user opened the jump + // element from (oldFocusedIndex). This is so that it's more practical + // to do a "repeated" search, wherein the user searches for the same + // value over and over, each time jumping to the next match, until they + // have found the one they're looking for. + const preferredStartIndex = this.oldFocusedIndex - const testStartsWith = inp => getName(inp).startsWith(lower) - const testIncludes = inp => getName(inp).includes(lower) + const item = searchForItem(grouplike, value, preferredStartIndex) - const searchPastCurrentIndex = test => { - const start = this.oldFocusedIndex + 1 - const match = this.form.inputs.slice(start).findIndex(test) - if (match === -1) { - return -1 - } else { - return start + match - } - } - - const start = this.oldFocusedIndex - const allIndexes = [ - searchPastCurrentIndex(testStartsWith), - searchPastCurrentIndex(testIncludes), - this.form.inputs.findIndex(testStartsWith), - this.form.inputs.findIndex(testIncludes) - ] - - const matchedIndex = allIndexes.find(value => value >= 0) - - if (typeof matchedIndex !== 'undefined') { - this.form.curIndex = matchedIndex - this.form.scrollSelectedElementIntoView() - } else { - // TODO: Feedback that the search failed.. right now we just close the - // jump-to menu, which might not be right. - } + if (item) { + this.form.curIndex = this.form.inputs.findIndex(inp => inp.item === item) + this.form.scrollSelectedElementIntoView() + } else { + // TODO: Feedback that the search failed.. right now we just close the + // jump-to menu, which might not be right. } if (isConfirm) { -- cgit 1.3.0-6-gf8a5