diff --git a/packages/app-degree-pages/src/core/services/degree-data-manager-service.js b/packages/app-degree-pages/src/core/services/degree-data-manager-service.js index ba16affa1f..72b9271199 100644 --- a/packages/app-degree-pages/src/core/services/degree-data-manager-service.js +++ b/packages/app-degree-pages/src/core/services/degree-data-manager-service.js @@ -46,10 +46,26 @@ function filterData({ !isAccelConcValid(acceleratedConcurrent) || row[acceleratedConcurrent.value]?.length > 0; - const filterByKeyword = (resolver, searchTerm) => { + const filterByKeywordTitle = (resolver, searchTerm) => { if (!searchTerm) return true; const regex = new RegExp(searchTerm, "i"); - return regex.test(resolver.getFullDescription()); + const title = regex.test(resolver.getMajorDesc()); + if (title) { + return true; + } + + return false; + }; + + const filterByKeywordDescription = (resolver, searchTerm) => { + if (!searchTerm) return true; + const regex = new RegExp(searchTerm, "i"); + const description = regex.test(resolver.getFullDescription()); + if (description) { + return true; + } + + return false; }; const filterByBlacklist = resolver => @@ -81,13 +97,39 @@ function filterData({ filterByDepartmentCode(resolver) && filterByCampus(resolver) && filterByAcceleratedConcurrent(row) && - filterByKeyword(resolver, keyword) && filterByBlacklist(resolver) && filterGraduateCerts(resolver) ); }; - return programs.filter(applyFilters); + const filteredByTitle = []; + const filteredByDescription = []; + + const newPrograms = programs.filter(degree => { + const resolver = degreeDataPropResolverService(degree); + + const isFilteredByTitle = filterByKeywordTitle(resolver, keyword); + const isFilteredByDescription = filterByKeywordDescription( + resolver, + keyword + ); + + if ( + (isFilteredByTitle || isFilteredByDescription) && + applyFilters(degree) + ) { + if (isFilteredByTitle) { + filteredByTitle.push(degree); + } else { + filteredByDescription.push(degree); + } + return true; + } + + return false; + }); + + return filteredByTitle.concat(filteredByDescription); } /** diff --git a/packages/app-degree-pages/src/core/services/degree-data-prop-resolver-service.jsx b/packages/app-degree-pages/src/core/services/degree-data-prop-resolver-service.jsx index cb02ca216b..b392a5a125 100644 --- a/packages/app-degree-pages/src/core/services/degree-data-prop-resolver-service.jsx +++ b/packages/app-degree-pages/src/core/services/degree-data-prop-resolver-service.jsx @@ -91,7 +91,6 @@ function degreeDataPropResolverService(row = {}) { /** @type {string} */ const gradRequirement2 = row["degreeRequirements"] || ""; return `${gradRequirement1}${gradRequirement2}`; - }, isOnline: () => row["asuOnlineAcadPlanUrl"], // Returns null if online url is not available // See getGeneralDegreeMajorMap for more info @@ -222,9 +221,8 @@ function degreeDataPropResolverService(row = {}) { const text = row["stemOptText"]; if (text && text !== "") { return "Yes"; - } else { - return "No"; } + return "No"; }, getSubPlnMajorMaps: () => { if (!row["subplans"] || !row["majorMapSubplans"]) return [];