Make customsearch filter async results for typeahead.js
This commit is contained in:
parent
5865314172
commit
0bc5ec4bb4
3 changed files with 14 additions and 11 deletions
|
|
@ -43,14 +43,14 @@ app.views.SearchBase = app.views.Base.extend({
|
|||
setupCustomSearch: function() {
|
||||
var self = this;
|
||||
this.bloodhound.customSearch = function(query, sync, async) {
|
||||
var _sync = function(datums) {
|
||||
var _async = function(datums) {
|
||||
var results = datums.filter(function(datum) {
|
||||
return datum.handle !== undefined && self.ignoreDiasporaIds.indexOf(datum.handle) === -1;
|
||||
});
|
||||
sync(results);
|
||||
async(results);
|
||||
};
|
||||
|
||||
self.bloodhound.search(query, _sync, async);
|
||||
self.bloodhound.search(query, sync, _async);
|
||||
};
|
||||
},
|
||||
|
||||
|
|
@ -59,9 +59,8 @@ app.views.SearchBase = app.views.Base.extend({
|
|||
hint: false,
|
||||
highlight: true,
|
||||
minLength: 2
|
||||
},
|
||||
{
|
||||
name: "search",
|
||||
}, {
|
||||
async: true,
|
||||
display: "name",
|
||||
limit: 5,
|
||||
source: this.bloodhound.customSearch !== undefined ? this.bloodhound.customSearch : this.bloodhound,
|
||||
|
|
|
|||
|
|
@ -30,7 +30,7 @@
|
|||
//= require markdown-it-sup
|
||||
//= require highlightjs
|
||||
//= require clear-form
|
||||
//= require typeahead.js
|
||||
//= require typeahead.bundle.js
|
||||
//= require app/app
|
||||
//= require diaspora
|
||||
//= require_tree ./helpers
|
||||
|
|
|
|||
|
|
@ -109,22 +109,26 @@ describe("app.views.SearchBase", function() {
|
|||
this.view = new app.views.SearchBase({
|
||||
el: "#search_people_form",
|
||||
typeaheadInput: $("#q"),
|
||||
customSearch: true
|
||||
customSearch: true,
|
||||
remoteRoute: "/contacts"
|
||||
});
|
||||
this.view.bloodhound.add(this.bloodhoundData);
|
||||
this.view.bloodhound.search = function(query, sync, async) {
|
||||
sync([]);
|
||||
async(this.bloodhoundData);
|
||||
}.bind(this);
|
||||
});
|
||||
|
||||
it("returns all results if none of them should be ignored", function() {
|
||||
var spy = jasmine.createSpyObj("callbacks", ["syncCallback", "asyncCallback"]);
|
||||
this.view.bloodhound.customSearch("user", spy.syncCallback, spy.asyncCallback);
|
||||
expect(spy.syncCallback).toHaveBeenCalledWith(this.bloodhoundData);
|
||||
expect(spy.asyncCallback).toHaveBeenCalledWith(this.bloodhoundData);
|
||||
});
|
||||
|
||||
it("doesn't return results that should be ignored", function() {
|
||||
var spy = jasmine.createSpyObj("callbacks", ["syncCallback", "asyncCallback"]);
|
||||
this.view.ignorePersonForSuggestions({handle: "user1@pod.tld"});
|
||||
this.view.bloodhound.customSearch("user", spy.syncCallback, spy.asyncCallback);
|
||||
expect(spy.syncCallback).toHaveBeenCalledWith([this.bloodhoundData[1]]);
|
||||
expect(spy.asyncCallback).toHaveBeenCalledWith([this.bloodhoundData[1]]);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
|
|
|||
Loading…
Reference in a new issue