diff --git a/CHANGELOG.md b/CHANGELOG.md index ddea74a352..ba2506ebe1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -19,6 +19,7 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/). - [#7037](https://github.com/apache/trafficcontrol/pull/7037) *Traffic Router* Uses Traffic Ops API 4.0 by default ### Fixed +- [#7049](https://github.com/apache/trafficcontrol/issues/7049), [#7052](https://github.com/apache/trafficcontrol/issues/7052) *Traffic Portal* Fixed server table's quick search and filter option for multiple profiles. - [#7080](https://github.com/apache/trafficcontrol/issues/7080), [#6335](https://github.com/apache/trafficcontrol/issues/6335) *Traffic Portal* Fixed redirect links for server capability. - [#7022](https://github.com/apache/trafficcontrol/pull/7022) *Traffic Stats* Reuse InfluxDB client handle to prevent potential connection leaks. - [#7021](https://github.com/apache/trafficcontrol/issues/7021) *Cache Config* Fixed cache config for Delivery Services with IP Origins. diff --git a/traffic_portal/app/src/common/modules/table/agGrid/CommonGridController.js b/traffic_portal/app/src/common/modules/table/agGrid/CommonGridController.js index 4bedb383de..6503804661 100644 --- a/traffic_portal/app/src/common/modules/table/agGrid/CommonGridController.js +++ b/traffic_portal/app/src/common/modules/table/agGrid/CommonGridController.js @@ -301,6 +301,34 @@ let CommonGridController = function ($scope, $document, $state, userModel, dateU this.columns[i].tooltipValueGetter = dateCellFormatterUTC; this.columns[i].valueFormatter = dateCellFormatterUTC; } + } else if (this.columns[i].filter === 'arrayTextColumnFilter') { + this.columns[i].filter = 'agTextColumnFilter' + this.columns[i].filterParams = { + textCustomComparator: (filter, value, filterText) => { + const filterTextLowerCase = filterText.toLowerCase(); + const valueLowerCase = value.toString().toLowerCase(); + const profileNameValue = valueLowerCase.split(","); + switch (filter) { + case 'contains': + return valueLowerCase.indexOf(filterTextLowerCase) >= 0; + case 'notContains': + return valueLowerCase.indexOf(filterTextLowerCase) === -1; + case 'equals': + return profileNameValue.includes(filterTextLowerCase); + case 'notEqual': + return !profileNameValue.includes(filterTextLowerCase); + case 'startsWith': + return valueLowerCase.indexOf(filterTextLowerCase) === 0; + case 'endsWith': + let index = valueLowerCase.lastIndexOf(filterTextLowerCase); + return index >= 0 && index === (valueLowerCase.length - filterTextLowerCase.length); + default: + // should never happen + console.warn('invalid filter type ' + filter); + return false; + } + } + } } } diff --git a/traffic_portal/app/src/common/modules/table/deliveryServiceServers/TableAssignDSServersController.js b/traffic_portal/app/src/common/modules/table/deliveryServiceServers/TableAssignDSServersController.js index 17097dec47..289bc89613 100644 --- a/traffic_portal/app/src/common/modules/table/deliveryServiceServers/TableAssignDSServersController.js +++ b/traffic_portal/app/src/common/modules/table/deliveryServiceServers/TableAssignDSServersController.js @@ -36,8 +36,14 @@ var TableAssignDSServersController = function(deliveryService, servers, assigned field: "cachegroup", }, { - headerName: "Profile", - field: "profile" + headerName: "Profile(s)", + field: "profile", + valueGetter: function(params) { + return params.data.profileNames; + }, + tooltipValueGetter: function(params) { + return params.data.profileNames.join(", "); + } } ]; diff --git a/traffic_portal/app/src/common/modules/table/servers/TableServersController.js b/traffic_portal/app/src/common/modules/table/servers/TableServersController.js index 7c8e994195..e4c22580d3 100644 --- a/traffic_portal/app/src/common/modules/table/servers/TableServersController.js +++ b/traffic_portal/app/src/common/modules/table/servers/TableServersController.js @@ -166,18 +166,16 @@ var TableServersController = function(tableName, servers, filter, $scope, $state hide: true }, { - headerName: "Profile", + headerName: "Profile(s)", field: "profileName", hide: false, valueGetter: function(params) { - if (params.data.profileNames.length > 1) { - return params.data.profileName + ' *'; - } - return params.data.profileName; + return params.data.profileNames; }, tooltipValueGetter: function(params) { return params.data.profileNames.join(", "); - } + }, + filter: 'arrayTextColumnFilter' }, { headerName: "Rack",