diff --git a/src/data/search/prefixes.ts b/src/data/search/prefixes.ts index e78717c..5aad2f5 100644 --- a/src/data/search/prefixes.ts +++ b/src/data/search/prefixes.ts @@ -57,6 +57,23 @@ export function filterSearchPrefixes( } } + // Filter by category + const category = params.category; + if (category) { + prefixes = (prefixes || data.sortedPrefixes).filter( + (prefix) => iconSets[prefix].item.info?.category === category + ); + } + + // Filter by tag + const tag = params.tag; + if (tag) { + prefixes = (prefixes || data.sortedPrefixes).filter((prefix) => { + const tags = iconSets[prefix].item.info?.tags; + return tags && tags.indexOf(tag) !== -1; + }); + } + // Filter by prefix if (params.prefixes) { prefixes = filterSearchPrefixesList(prefixes || data.sortedPrefixes, params.prefixes); diff --git a/tests/search/search-test.ts b/tests/search/search-test.ts index 9abbd1b..a8be1f3 100644 --- a/tests/search/search-test.ts +++ b/tests/search/search-test.ts @@ -98,6 +98,41 @@ describe('Searching icons', () => { hasMore: false, }); + // Search with category filter + expect( + search( + { + keyword: 'cycle', + limit: 999, + category: 'General', + }, + searchIndex, + iconSets + ) + ).toEqual({ + prefixes: ['mdi-test-prefix'], + names: [ + 'mdi-test-prefix:cash-cycle', + 'mdi-test-prefix:hand-cycle', + 'mdi-test-prefix:power-cycle', + 'mdi-test-prefix:bicycle', + 'mdi-test-prefix:bicycle-basket', + 'mdi-test-prefix:bicycle-cargo', + 'mdi-test-prefix:bicycle-electric', + 'mdi-test-prefix:bicycle-penny-farthing', + 'mdi-test-prefix:battery-recycle', + 'mdi-test-prefix:battery-recycle-outline', + 'mdi-test-prefix:recycle', + 'mdi-test-prefix:recycle-variant', + 'mdi-test-prefix:water-recycle', + 'mdi-test-prefix:unicycle', + 'mdi-test-prefix:motorcycle', + 'mdi-test-prefix:motorcycle-electric', + 'mdi-test-prefix:motorcycle-off', + ], + hasMore: false, + }); + // Search with style and palette expect( search(