X-Git-Url: http://source.bookstackapp.com/bookstack/blobdiff_plain/214992650db16bceca439a60d45fb78035d38af1..refs/pull/3908/head:/resources/js/components/auto-suggest.js diff --git a/resources/js/components/auto-suggest.js b/resources/js/components/auto-suggest.js index d1c15c00a..b4e6c5957 100644 --- a/resources/js/components/auto-suggest.js +++ b/resources/js/components/auto-suggest.js @@ -1,13 +1,13 @@ import {escapeHtml} from "../services/util"; import {onChildEvent} from "../services/dom"; +import {Component} from "./component"; const ajaxCache = {}; /** * AutoSuggest - * @extends {Component} */ -class AutoSuggest { +export class AutoSuggest extends Component { setup() { this.parent = this.$el.parentElement; this.container = this.$el; @@ -88,14 +88,12 @@ class AutoSuggest { } const nameFilter = this.getNameFilterIfNeeded(); - const search = this.input.value.slice(0, 3).toLowerCase(); + const search = this.input.value.toLowerCase(); const suggestions = await this.loadSuggestions(search, nameFilter); - let toShow = suggestions.slice(0, 6); - if (search.length > 0) { - toShow = suggestions.filter(val => { - return val.toLowerCase().includes(search); - }).slice(0, 6); - } + + const toShow = suggestions.filter(val => { + return search === '' || val.toLowerCase().startsWith(search); + }).slice(0, 10); this.displaySuggestions(toShow); } @@ -111,6 +109,9 @@ class AutoSuggest { * @returns {Promise} */ async loadSuggestions(search, nameFilter = null) { + // Truncate search to prevent over numerous lookups + search = search.slice(0, 4); + const params = {search, name: nameFilter}; const cacheKey = `${this.url}:${JSON.stringify(params)}`; @@ -147,6 +148,4 @@ class AutoSuggest { this.hideSuggestions(); } } -} - -export default AutoSuggest; \ No newline at end of file +} \ No newline at end of file