- saved-views-client.ts: full CRUD client for backend saved-views module - use-keyboard-shortcuts.ts: reusable hook for global keyboard shortcuts - KeyboardShortcuts.tsx: wired into (app) layout — Cmd+K search, Cmd+N workspaces, Cmd+Shift+D dashboard, Cmd+Shift+R reviews, Esc blur - use-debounce.ts: shared debounce hook (replaces inline setTimeout in search) - Search page: saved views loaded from backend with save/delete UI - Search page: search debounced at 250ms via useDebounce hook - Updated search page test to mock saved-views-client and useDebounce Verification: web typecheck + 6/6 tests pass.
15 lines
369 B
TypeScript
15 lines
369 B
TypeScript
"use client";
|
|
|
|
import { useEffect, useState } from "react";
|
|
|
|
export function useDebounce<T>(value: T, delayMs: number): T {
|
|
const [debouncedValue, setDebouncedValue] = useState(value);
|
|
|
|
useEffect(() => {
|
|
const timer = setTimeout(() => setDebouncedValue(value), delayMs);
|
|
return () => clearTimeout(timer);
|
|
}, [value, delayMs]);
|
|
|
|
return debouncedValue;
|
|
}
|