diff --git a/src/utils/quickNavigator.ts b/src/utils/quickNavigator.ts index 4d4b70ec..08c7d97c 100644 --- a/src/utils/quickNavigator.ts +++ b/src/utils/quickNavigator.ts @@ -1,4 +1,5 @@ import type { TableInfo, ViewInfo, RoutineInfo, TriggerInfo, SchemaData } from '../contexts/DatabaseContext'; +import { fuzzyFilter } from './fuzzy'; export interface NavigatorItem { name: string; @@ -158,11 +159,7 @@ export function getNavigatorItems(params: NavigatorItemParams): NavigatorItem[] } export function filterNavigatorItems(items: NavigatorItem[], search: string): NavigatorItem[] { - if (!search) return items; - const lowerSearch = search.toLowerCase(); - return items.filter((item) => { - const matchName = item.name.toLowerCase().includes(lowerSearch); - const matchSchema = item.schema?.toLowerCase().includes(lowerSearch); - return matchName || matchSchema; - }); + return fuzzyFilter(items, search, (item) => + item.schema ? `${item.name} ${item.schema}` : item.name, + ); } diff --git a/tests/utils/quickNavigator.test.ts b/tests/utils/quickNavigator.test.ts index 610a92fe..ce787736 100644 --- a/tests/utils/quickNavigator.test.ts +++ b/tests/utils/quickNavigator.test.ts @@ -135,5 +135,11 @@ describe("quickNavigator utility", () => { expect(result).toHaveLength(1); expect(result[0].name).toBe("user_sessions"); }); + + it("should tolerate typos", () => { + const result = filterNavigatorItems(mockItems, "sesion").map((i) => i.name); + expect(result).toContain("user_sessions"); + expect(result).toContain("active_sessions"); + }); }); });