From c7d31fa39e962ec6fb9d937b63ff5d33bd557e44 Mon Sep 17 00:00:00 2001 From: Darin Kelkhoff Date: Wed, 19 Jun 2024 16:43:26 -0500 Subject: [PATCH] Better matching for multi-word search terms ("one th" now matches "one two three") --- src/CommandMenu.tsx | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/src/CommandMenu.tsx b/src/CommandMenu.tsx index b59e95e..4482774 100644 --- a/src/CommandMenu.tsx +++ b/src/CommandMenu.tsx @@ -72,7 +72,7 @@ const CommandMenu = ({metaData}: Props) => const navigate = useNavigate(); const pathParts = location.pathname.replace(/\/+$/, "").split("/"); - const {accentColor, tableMetaData, dotMenuOpen, setDotMenuOpen, keyboardHelpOpen, setKeyboardHelpOpen, setTableMetaData, tableProcesses} = useContext(QContext); + const {accentColor, tableMetaData, dotMenuOpen, setDotMenuOpen, keyboardHelpOpen, setKeyboardHelpOpen, setTableMetaData, tableProcesses, recordAnalytics} = useContext(QContext); const classes = useStyles(); @@ -87,6 +87,7 @@ const CommandMenu = ({metaData}: Props) => if (e.key === "." && !keyboardHelpOpen) { e.preventDefault(); + recordAnalytics({category: "globalEvents", action: "dotMenuKeyboardShortcut"}); setDotMenuOpen(true); } else if (e.key === "?" && !dotMenuOpen) @@ -423,9 +424,20 @@ const CommandMenu = ({metaData}: Props) => ///////////////////////////////////////////////////////////////////////////////////////////////////////////// // iterate over the search parts - if any don't match the corresponding value parts, then it's a non-match // ///////////////////////////////////////////////////////////////////////////////////////////////////////////// + let valueIndex = 0; for (let i = 0; i < searchParts.length; i++) { - if (!valueParts[i].includes(searchParts[i])) + let foundMatch = false; + for (; valueIndex < valueParts.length; valueIndex++) + { + if (valueParts[valueIndex].includes(searchParts[i])) + { + foundMatch = true; + break; + } + } + + if (!foundMatch) { return (0); }