/* * SonarQube * Copyright (C) 2009-2017 SonarSource SA * mailto:info AT sonarsource DOT com * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 3 of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program; if not, write to the Free Software Foundation, * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ import debounce from 'lodash/debounce'; import Marionette from 'backbone.marionette'; import Template from './templates/groups-search.hbs'; export default Marionette.ItemView.extend({ template: Template, events: { 'submit #groups-search-form': 'onFormSubmit', 'search #groups-search-query': 'debouncedOnKeyUp', 'keyup #groups-search-query': 'debouncedOnKeyUp' }, initialize() { this._bufferedValue = null; this.debouncedOnKeyUp = debounce(this.onKeyUp, 400); }, onRender() { this.delegateEvents(); }, onFormSubmit(e) { e.preventDefault(); this.debouncedOnKeyUp(); }, onKeyUp() { const q = this.getQuery(); if (q === this._bufferedValue) { return; } this._bufferedValue = this.getQuery(); if (this.searchRequest != null) { this.searchRequest.abort(); } this.searchRequest = this.search(q); }, getQuery() { return this.$('#groups-search-query').val(); }, search(q) { return this.collection.fetch({ reset: true, data: { q } }); } });