Sfoglia il codice sorgente

fix(tui): add weight to fuzzy search to maintain title priority (#10106)

Idris Gadi 4 settimane fa
parent
commit
510f595e25
1 ha cambiato i file con 13 aggiunte e 5 eliminazioni
  1. 13 5
      packages/opencode/src/cli/cmd/tui/ui/dialog-select.tsx

+ 13 - 5
packages/opencode/src/cli/cmd/tui/ui/dialog-select.tsx

@@ -72,15 +72,23 @@ export function DialogSelect<T>(props: DialogSelectProps<T>) {
   let input: InputRenderable
 
   const filtered = createMemo(() => {
-    if (props.skipFilter) {
-      return props.options.filter((x) => x.disabled !== true)
-    }
+    if (props.skipFilter) return props.options.filter((x) => x.disabled !== true)
     const needle = store.filter.toLowerCase()
-    const result = pipe(
+    const options = pipe(
       props.options,
       filter((x) => x.disabled !== true),
-      (x) => (!needle ? x : fuzzysort.go(needle, x, { keys: ["title", "category"] }).map((x) => x.obj)),
     )
+    if (!needle) return options
+
+    // prioritize title matches (weight: 2) over category matches (weight: 1).
+    // users typically search by the item name, and not its category.
+    const result = fuzzysort
+      .go(needle, options, {
+        keys: ["title", "category"],
+        scoreFn: (r) => r[0].score * 2 + r[1].score,
+      })
+      .map((x) => x.obj)
+
     return result
   })