mirror of
https://github.com/BookStackApp/BookStack.git
synced 2024-11-29 20:23:52 +08:00
47 lines
1.2 KiB
JavaScript
47 lines
1.2 KiB
JavaScript
|
/**
|
||
|
* @extends {Component}
|
||
|
*/
|
||
|
import {htmlToDom} from "../services/dom";
|
||
|
|
||
|
class GlobalSearch {
|
||
|
|
||
|
setup() {
|
||
|
this.input = this.$refs.input;
|
||
|
this.suggestions = this.$refs.suggestions;
|
||
|
this.suggestionResultsWrap = this.$refs.suggestionResults;
|
||
|
|
||
|
this.setupListeners();
|
||
|
}
|
||
|
|
||
|
setupListeners() {
|
||
|
this.input.addEventListener('input', () => {
|
||
|
const value = this.input.value;
|
||
|
if (value.length > 0) {
|
||
|
this.updateSuggestions(value);
|
||
|
} else {
|
||
|
this.hideSuggestions();
|
||
|
}
|
||
|
});
|
||
|
}
|
||
|
|
||
|
async updateSuggestions(search) {
|
||
|
const {data: results} = await window.$http.get('/ajax/search/entities', {term: search, count: 5});
|
||
|
const resultDom = htmlToDom(results);
|
||
|
|
||
|
const childrenToTrim = Array.from(resultDom.children).slice(9);
|
||
|
for (const child of childrenToTrim) {
|
||
|
child.remove();
|
||
|
}
|
||
|
|
||
|
this.suggestions.style.display = 'block';
|
||
|
this.suggestionResultsWrap.innerHTML = '';
|
||
|
this.suggestionResultsWrap.append(resultDom);
|
||
|
}
|
||
|
|
||
|
hideSuggestions() {
|
||
|
this.suggestions.style.display = null;
|
||
|
this.suggestionResultsWrap.innerHTML = '';
|
||
|
}
|
||
|
}
|
||
|
|
||
|
export default GlobalSearch;
|