+/**
+ * @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;
\ No newline at end of file