mirror of
https://github.com/ansible/awx.git
synced 2026-05-19 23:07:42 -02:30
Merge pull request #2722 from YunfanZhang42/search-filter
Add AND filter to related search
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
}, {});
|
||||
|
||||
Reference in New Issue
Block a user