From a3b993b4cd3f660a72f449e954a020a48ef6359e Mon Sep 17 00:00:00 2001 From: Lorenz van Herwaarden Date: Fri, 27 Jun 2025 11:54:59 +0200 Subject: [PATCH] Extract methods from filtered search --- .../vulnerability_report_filtered_search.vue | 57 ++++++++++--------- 1 file changed, 31 insertions(+), 26 deletions(-) diff --git a/ee/app/assets/javascripts/security_dashboard/components/shared/filtered_search_v2/vulnerability_report_filtered_search.vue b/ee/app/assets/javascripts/security_dashboard/components/shared/filtered_search_v2/vulnerability_report_filtered_search.vue index b50ac3188a73ae..b242bcb83f59c9 100644 --- a/ee/app/assets/javascripts/security_dashboard/components/shared/filtered_search_v2/vulnerability_report_filtered_search.vue +++ b/ee/app/assets/javascripts/security_dashboard/components/shared/filtered_search_v2/vulnerability_report_filtered_search.vue @@ -82,7 +82,7 @@ export default { })) .filter((token) => token.value.data?.length); - this.handleTokenComplete(); + this.processValue(); }, methods: { clear() { @@ -148,10 +148,9 @@ export default { return undefined; } }, - async handleTokenComplete() { + async processValue() { await this.$nextTick(); - - const newQuery = { ...this.$route.query }; + let newQuery = { ...this.$route.query }; let newFilters = {}; this.value.forEach(({ type, value }) => { @@ -161,31 +160,37 @@ export default { return; } - const filtersFn = definition.transformFilters; - - let transformedValue; + newFilters = this.getNewFilters(type, value, newFilters); + newQuery = this.getNewQuery(type, value, newQuery); + }); - if (typeof filtersFn === 'function') { - const tokenFilters = filtersFn(value.data); - this.filterKeys[type] = Object.keys(tokenFilters); - transformedValue = tokenFilters; - } else { - transformedValue = { - [type]: Array.isArray(value.data) ? value.data.filter((i) => i !== ALL_ID) : value.data, - }; - } + this.updateQueryAndFilters(newFilters, newQuery); + }, + getNewFilters(type, value, filters) { + const filtersFn = DEFINITIONS[type]?.transformFilters; - newFilters = { ...newFilters, ...transformedValue }; + let transformedValue; - if (definition.transformQueryParams) { - newQuery[type] = definition.transformQueryParams(value.data); - } else if (isEqual(value.data, definition.defaultValues)) { - newQuery[type] = undefined; - } else { - newQuery[type] = Array.isArray(value.data) ? value.data.join(',') : value.data; - } - }); + if (typeof filtersFn === 'function') { + transformedValue = filtersFn(value.data); + } else { + transformedValue = { [type]: value.data.filter((i) => i !== ALL_ID) }; + } + return { ...filters, ...transformedValue }; + }, + getNewQuery(type, value, query) { + const newQuery = { ...query }; + if (DEFINITIONS[type].transformQueryParams) { + newQuery[type] = DEFINITIONS[type].transformQueryParams(value.data); + } else if (isEqual(value.data, DEFINITIONS[type].defaultValues)) { + newQuery[type] = undefined; + } else { + newQuery[type] = value.data.join(','); + } + return newQuery; + }, + updateQueryAndFilters(newFilters, newQuery) { if (!isEqual(this.filters, newFilters)) { this.filters = newFilters; this.$emit('filters-changed', newFilters); @@ -233,7 +238,7 @@ export default { :placeholder="s__('Vulnerability|Search or filter vulnerabilities...')" :available-tokens="tokens" @token-destroy="handleTokenDestroy" - @token-complete="handleTokenComplete" + @token-complete="processValue" @clear="clear" /> -- GitLab