From 6b64ef8f64d6bea4cd21acc3b324a2d63ab31b27 Mon Sep 17 00:00:00 2001 From: Jared Tabor Date: Tue, 3 Jul 2018 18:28:53 -0700 Subject: [PATCH] Changes a related search w/ two search params. Changes from using a pattern like "search=A&search=B" to "search=A,B". --- .../shared/smart-search/queryset.service.js | 51 ++++++++++--------- 1 file changed, 26 insertions(+), 25 deletions(-) diff --git a/awx/ui/client/src/shared/smart-search/queryset.service.js b/awx/ui/client/src/shared/smart-search/queryset.service.js index 5d860a55fa..d55f4e27f0 100644 --- a/awx/ui/client/src/shared/smart-search/queryset.service.js +++ b/awx/ui/client/src/shared/smart-search/queryset.service.js @@ -44,38 +44,39 @@ 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) {