From 99cf6dab624b444ebee63c4aa637030772608930 Mon Sep 17 00:00:00 2001 From: SurajJadhav7 Date: Mon, 1 Jul 2024 16:49:36 +0530 Subject: [PATCH] added fuzzy matching logic for menu search --- .../editor/components/slash-menu/menu-items.ts | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/apps/client/src/features/editor/components/slash-menu/menu-items.ts b/apps/client/src/features/editor/components/slash-menu/menu-items.ts index 290a3873..cb7b65be 100644 --- a/apps/client/src/features/editor/components/slash-menu/menu-items.ts +++ b/apps/client/src/features/editor/components/slash-menu/menu-items.ts @@ -264,10 +264,20 @@ export const getSuggestionItems = ({ const search = query.toLowerCase(); const filteredGroups: SlashMenuGroupedItemsType = {}; + const fuzzyMatch = (query, target) => { + let queryIndex = 0; + target = target.toLowerCase(); + for (let char of target) { + if (query[queryIndex] === char) queryIndex++; + if (queryIndex === query.length) return true; + } + return false; + }; + for (const [group, items] of Object.entries(CommandGroups)) { const filteredItems = items.filter((item) => { return ( - item.title.toLowerCase().includes(search) || + fuzzyMatch(search, item.title) || item.description.toLowerCase().includes(search) || (item.searchTerms && item.searchTerms.some((term: string) => term.includes(search)))