Skip to content

Commit 6eef7de

Browse files
committed
fix: review update
1 parent b3c8aa2 commit 6eef7de

1 file changed

Lines changed: 26 additions & 31 deletions

File tree

src/patternFly.search.ts

Lines changed: 26 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -205,9 +205,7 @@ filterPatternFly.memo = memo(filterPatternFly, DEFAULT_OPTIONS.resourceMemoOptio
205205
/**
206206
* Search for PatternFly component documentation URLs using fuzzy search.
207207
*
208-
* @note Uses `filterPatternFly` for additional filtering. Future updates should
209-
* consider moving the await outside the loop to improve performance, possibly a
210-
* second iteration.
208+
* @note Uses `filterPatternFly` for additional filtering.
211209
*
212210
* @param searchQuery - Search query. Values are coerced to string for fuzzy search.
213211
* @param {FilterPatternFlyFilters} filters - Available filters for PatternFly data.
@@ -260,13 +258,17 @@ const searchPatternFly = async (searchQuery: unknown, filters?: FilterPatternFly
260258

261259
// Store refined results in a map for easy "did we already find this?" checks"
262260
const searchResultsMap = new Map<string, SearchPatternFlyResult>();
261+
const searchResultsFilterMap = new Map<string, PatternFlyMcpResourceFilteredMetadata>();
262+
const fuzzyResultsMap = new Map<string, FuzzySearchResult>();
263263

264-
// Refine search results with version filtering and mapping
264+
// Refine search results with versioning for filtering and remapping
265265
for (const result of searchResults) {
266266
const versionMap = updatedResources.keywordsMap.get(result.item);
267267

268268
if (versionMap) {
269-
const versionResults = updatedFilters.version ? versionMap.get(updatedFilters.version) : Array.from(versionMap.values()).flat();
269+
const versionResults = updatedFilters.version
270+
? versionMap.get(updatedFilters.version)
271+
: Array.from(versionMap.values()).flat();
270272

271273
if (versionResults) {
272274
for (const name of versionResults) {
@@ -276,39 +278,32 @@ const searchPatternFly = async (searchQuery: unknown, filters?: FilterPatternFly
276278
continue;
277279
}
278280

279-
// Omit versions from the result
280-
const { versions, ...filteredResource } = namedResource;
281+
if (!fuzzyResultsMap.has(name)) {
282+
// Set results for filtering.
283+
searchResultsFilterMap.set(name, namedResource);
281284

282-
// Apply contextual filtering and flattening
283-
const { byResource } = await filterPatternFly(updatedFilters, new Map([[name, { ...filteredResource }]]));
284-
285-
if (!byResource.has(name)) {
286-
continue;
287-
}
288-
289-
let versionContextualProperties;
290-
291-
// Apply version contextual properties, typically URIs
292-
if (updatedFilters.version && versions[updatedFilters.version]) {
293-
versionContextualProperties = {
294-
isSchemasAvailable: versions[updatedFilters.version]?.isSchemasAvailable,
295-
uri: versions[updatedFilters.version]?.uri,
296-
uriSchemas: versions[updatedFilters.version]?.uriSchemas
297-
};
285+
// Set fuzzy results so we can map back the searchResultsFilterMap filtered output.
286+
fuzzyResultsMap.set(name, result);
298287
}
299-
300-
// Apply property filters
301-
searchResultsMap.set(name, {
302-
...result,
303-
...byResource.get(name),
304-
...versionContextualProperties,
305-
query: coercedSearchQuery
306-
} as SearchPatternFlyResult);
307288
}
308289
}
309290
}
310291
}
311292

293+
// Apply filtering
294+
const { byResource } = await filterPatternFly(updatedFilters, searchResultsFilterMap);
295+
296+
// Loop filtered results, update search results.
297+
for (const [name, filteredData] of byResource) {
298+
const fuzzyMatch = fuzzyResultsMap.get(name);
299+
300+
searchResultsMap.set(name, {
301+
...fuzzyMatch,
302+
...filteredData,
303+
query: coercedSearchQuery
304+
} as SearchPatternFlyResult);
305+
}
306+
312307
// Minor breakdown of search results
313308
const exactMatches = Array.from(searchResultsMap.values()).filter(result => result.matchType === 'exact' || result.matchType === 'all');
314309
const remainingMatches = Array.from(searchResultsMap.values()).filter(result => result.matchType !== 'exact' && result.matchType !== 'all');

0 commit comments

Comments
 (0)