Procházet zdrojové kódy

tui: fix session list search filtering (#31748)

Fix #31182
Close #31211
Simon Klee před 3 měsíci
rodič
revize
c51a1588c7
3 změnil soubory, kde provedl 13 přidání a 7 odebrání
  1. 0 3
      bun.lock
  2. 0 1
      packages/tui/package.json
  3. 13 3
      packages/tui/src/util/signal.ts

+ 0 - 3
bun.lock

@@ -803,7 +803,6 @@
         "@opentui/core": "catalog:",
         "@opentui/keymap": "catalog:",
         "@opentui/solid": "catalog:",
-        "@solid-primitives/scheduled": "1.5.2",
         "clipboardy": "4.0.0",
         "diff": "catalog:",
         "effect": "catalog:",
@@ -5794,8 +5793,6 @@
 
     "@opencode-ai/llm/@smithy/util-utf8": ["@smithy/util-utf8@4.2.2", "", { "dependencies": { "@smithy/util-buffer-from": "^4.2.2", "tslib": "^2.6.2" } }, "sha512-75MeYpjdWRe8M5E3AW0O4Cx3UadweS+cwdXjwYGBW5h/gxxnbeZ877sLPX/ZJA9GVTlL/qG0dXP29JWFCD1Ayw=="],
 
-    "@opencode-ai/tui/@solid-primitives/scheduled": ["@solid-primitives/scheduled@1.5.2", "", { "peerDependencies": { "solid-js": "^1.6.12" } }, "sha512-/j2igE0xyNaHhj6kMfcUQn5rAVSTLbAX+CDEBm25hSNBmNiHLu2lM7Usj2kJJ5j36D67bE8wR1hBNA8hjtvsQA=="],
-
     "@opencode-ai/ui/@solid-primitives/resize-observer": ["@solid-primitives/resize-observer@2.1.3", "", { "dependencies": { "@solid-primitives/event-listener": "^2.4.3", "@solid-primitives/rootless": "^1.5.2", "@solid-primitives/static-store": "^0.1.2", "@solid-primitives/utils": "^6.3.2" }, "peerDependencies": { "solid-js": "^1.6.12" } }, "sha512-zBLje5E06TgOg93S7rGPldmhDnouNGhvfZVKOp+oG2XU8snA+GoCSSCz1M+jpNAg5Ek2EakU5UVQqL152WmdXQ=="],
 
     "@opencode-ai/web/@shikijs/transformers": ["@shikijs/transformers@3.20.0", "", { "dependencies": { "@shikijs/core": "3.20.0", "@shikijs/types": "3.20.0" } }, "sha512-PrHHMRr3Q5W1qB/42kJW6laqFyWdhrPF2hNR9qjOm1xcSiAO3hAHo7HaVyHE6pMyevmy3i51O8kuGGXC78uK3g=="],

+ 0 - 1
packages/tui/package.json

@@ -54,7 +54,6 @@
     "@opentui/core": "catalog:",
     "@opentui/keymap": "catalog:",
     "@opentui/solid": "catalog:",
-    "@solid-primitives/scheduled": "1.5.2",
     "clipboardy": "4.0.0",
     "diff": "catalog:",
     "effect": "catalog:",

+ 13 - 3
packages/tui/src/util/signal.ts

@@ -1,9 +1,19 @@
 import { createEffect, createSignal, on, onCleanup, type Accessor } from "solid-js"
-import { debounce, type Scheduled } from "@solid-primitives/scheduled"
 
-export function createDebouncedSignal<T>(value: T, ms: number): [Accessor<T>, Scheduled<[value: T]>] {
+export function createDebouncedSignal<T>(value: T, ms: number): [Accessor<T>, (value: T) => void] {
   const [get, set] = createSignal(value)
-  return [get, debounce((v: T) => set(() => v), ms)]
+  let timer: ReturnType<typeof setTimeout> | undefined
+  const debounced = (next: T) => {
+    if (timer) clearTimeout(timer)
+    timer = setTimeout(() => {
+      timer = undefined
+      set(() => next)
+    }, ms)
+  }
+  onCleanup(() => {
+    if (timer) clearTimeout(timer)
+  })
+  return [get, debounced]
 }
 
 export function createFadeIn(show: Accessor<boolean>, enabled: Accessor<boolean>) {