Merge pull request #2722 from YunfanZhang42/search-filter

Add AND filter to related search
This commit is contained in:
Jared Tabor
2018-08-02 09:10:30 -07:00
committed by GitHub
4 changed files with 107 additions and 37 deletions

View File

@@ -92,6 +92,7 @@ function resolveResource (
if (job_event_search) { // eslint-disable-line camelcase
const query = qs.encodeQuerysetObject(qs.decodeArr(job_event_search));
Object.assign(config.params, query);
}

View File

@@ -44,49 +44,50 @@ function QuerysetService ($q, Rest, ProcessErrors, $rootScope, Wait, DjangoSearc
replaceEncodedTokens(value) {
return decodeURIComponent(value).replace(/"|'/g, "");
},
encodeTerms (values, key) {
encodeTerms(value, key){
key = this.replaceDefaultFlags(key);
if (!Array.isArray(values)) {
values = [values];
}
return values
.map(value => {
value = this.replaceDefaultFlags(value);
value = this.replaceEncodedTokens(value);
return [key, value];
value = this.replaceDefaultFlags(value);
var that = this;
if (Array.isArray(value)){
value = _.uniq(_.flattenDeep(value));
let concated = '';
angular.forEach(value, function(item){
if(item && typeof item === 'string') {
item = that.replaceEncodedTokens(item);
}
concated += `${key}=${item}&`;
});
return concated;
}
else {
if(value && typeof value === 'string') {
value = this.replaceEncodedTokens(value);
}
return `${key}=${value}&`;
}
},
// encodes ui-router params from {operand__key__comparator: value} pairs to API-consumable URL
encodeQueryset(params) {
if (typeof params !== 'object') {
return '';
}
let queryset;
queryset = _.reduce(params, (result, value, key) => {
return result + this.encodeTerms(value, key);
}, '');
queryset = queryset.substring(0, queryset.length - 1);
return angular.isObject(params) ? `?${queryset}` : '';
return _.reduce(params, (result, value, key) => {
if (result !== '?') {
result += '&';
}
const encodedTermString = this.encodeTerms(value, key)
.map(([key, value]) => `${key}=${value}`)
.join('&');
return result += encodedTermString;
}, '?');
},
// like encodeQueryset, but return an actual unstringified API-consumable http param object
encodeQuerysetObject(params) {
return _.reduce(params, (obj, value, key) => {
const encodedTerms = this.encodeTerms(value, key);
const encodedKey = this.replaceDefaultFlags(key);
const values = Array.isArray(value) ? value : [value];
for (let encodedIndex in encodedTerms) {
const [encodedKey, encodedValue] = encodedTerms[encodedIndex];
obj[encodedKey] = obj[encodedKey] || [];
obj[encodedKey].push(encodedValue);
}
obj[encodedKey] = values
.map(value => this.replaceDefaultFlags(value))
.map(value => this.replaceEncodedTokens(value))
.join(',');
return obj;
}, {});