2018-11-22 15:31:53 +01:00
|
|
|
import {SearchParams} from './SearchParams';
|
|
|
|
|
|
|
|
export class MultiSearch {
|
|
|
|
constructor(kwargs) {
|
|
|
|
this.uiUrl = kwargs['uiUrl']; // Url for advanced search
|
|
|
|
this.apiUrl = kwargs['apiUrl']; // Url for api calls
|
|
|
|
this.searchParams = MultiSearch.createMultiSearchParams(kwargs['searchParams']);
|
|
|
|
this.q = '';
|
|
|
|
}
|
|
|
|
|
|
|
|
setSearchWord(q) {
|
|
|
|
this.q = q;
|
|
|
|
this.searchParams.forEach((qsParam) => {
|
|
|
|
qsParam.setSearchWord(q);
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
getSearchUrl() {
|
|
|
|
return this.uiUrl + '?q=' + this.q;
|
|
|
|
}
|
|
|
|
|
|
|
|
getAllParams() {
|
|
|
|
let retval = $.map(this.searchParams, (msParams) => {
|
|
|
|
return msParams.params;
|
|
|
|
});
|
|
|
|
return retval;
|
|
|
|
}
|
|
|
|
|
|
|
|
parseResult(rawResult) {
|
|
|
|
return $.map(rawResult, (subResult, index) => {
|
|
|
|
let name = this.searchParams[index].name;
|
|
|
|
let pStr = this.searchParams[index].getParamStr();
|
|
|
|
let result = $.map(subResult.hits.hits, (hit) => {
|
|
|
|
return hit._source;
|
|
|
|
});
|
|
|
|
return {
|
|
|
|
name: name,
|
|
|
|
url: this.uiUrl + '?' + pStr,
|
|
|
|
result: result,
|
|
|
|
hasResults: !!result.length
|
|
|
|
};
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
thenExecute() {
|
|
|
|
let data = JSON.stringify(this.getAllParams());
|
2018-11-27 10:00:44 +01:00
|
|
|
let rawAjax = $.ajax({
|
|
|
|
url: this.apiUrl,
|
|
|
|
type: 'POST',
|
|
|
|
data: data,
|
|
|
|
dataType: 'json',
|
|
|
|
contentType: 'application/json; charset=UTF-8'
|
|
|
|
});
|
2018-11-22 15:31:53 +01:00
|
|
|
let prettyPromise = rawAjax.then(this.parseResult.bind(this));
|
|
|
|
prettyPromise['abort'] = rawAjax.abort.bind(rawAjax); // Hack to be able to abort the promise down the road
|
|
|
|
return prettyPromise;
|
|
|
|
}
|
|
|
|
|
|
|
|
static createMultiSearchParams(argsList) {
|
|
|
|
return $.map(argsList, (args) => {
|
|
|
|
return new SearchParams(args);
|
|
|
|
});
|
|
|
|
}
|
|
|
|
}
|