From 3d0ac9b4157e151247f0e981a69c3ae1660c8898 Mon Sep 17 00:00:00 2001 From: Divya Jagadish Date: Fri, 5 Nov 2021 12:16:58 -0700 Subject: [PATCH] Uses debounce function for parameter search --- ui/components/all-parameters.ts | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/ui/components/all-parameters.ts b/ui/components/all-parameters.ts index ac3a8a7..376df1e 100644 --- a/ui/components/all-parameters.ts +++ b/ui/components/all-parameters.ts @@ -24,6 +24,7 @@ import { parse } from "../../lib/common/expression-parser"; import memoize from "../../lib/common/memoize"; import { getIcon } from "../icons"; import { evaluateExpression } from "../store"; +import debounce from "../../lib/common/debounce"; const memoizedParse = memoize(parse); @@ -52,6 +53,12 @@ function orderKeysByDepth(device: Record): string[][] { } const component: ClosureComponent = (): Component => { + let queryString: string; + const formQueryString = debounce((args: string[]) => { + queryString = args[args.length - 1]; + m.redraw(); + }, 500); + return { view: (vnode) => { const device = vnode.attrs["device"]; @@ -62,19 +69,15 @@ const component: ClosureComponent = (): Component => { type: "text", placeholder: "Search parameters", oninput: (e) => { - vnode.state["searchString"] = e.target.value; + formQueryString(e.target.value); e.redraw = false; - clearTimeout(vnode.state["timeout"]); - vnode.state["timeout"] = setTimeout(m.redraw, 500); }, }); const instanceRegex = /\.[0-9]+$/; let re; - if (vnode.state["searchString"]) { - const keywords = vnode.state["searchString"] - .split(" ") - .filter((s) => s); + if (queryString) { + const keywords = queryString.split(" ").filter((s) => s); if (keywords.length) re = new RegExp(keywords.map((s) => escapeRegExp(s)).join(".*"), "i"); }