search: cache results

This commit is contained in:
2026-05-30 17:57:56 -07:00
parent 5b7ed25522
commit 600bc3befc
8 changed files with 148 additions and 11 deletions

View File

@@ -4,7 +4,7 @@ import { AuthScreen } from "@/components/auth/auth-screen";
import { SearchResultsPanel } from "@/components/search/search-results-panel";
import { Button } from "@/components/ui/button";
import { Input } from "@/components/ui/input";
import { createSearch, runSearchStream, type SearchDetail } from "@/lib/api";
import { createReusableSearch, getSearch, runSearchStream, type SearchDetail } from "@/lib/api";
import { useSessionAuth } from "@/hooks/use-session-auth";
function readQueryFromUrl() {
@@ -85,14 +85,16 @@ export default function SearchRoutePage() {
const runQuery = async (query: string) => {
const trimmed = query.trim();
const requestId = ++requestCounterRef.current;
streamAbortRef.current?.abort();
if (!trimmed) {
setSearch(null);
setError(null);
setIsRunning(false);
return;
}
const requestId = ++requestCounterRef.current;
streamAbortRef.current?.abort();
const abortController = new AbortController();
streamAbortRef.current = abortController;
let wasInterrupted = false;
@@ -119,10 +121,11 @@ export default function SearchRoutePage() {
});
try {
const created = await createSearch({
const createdResult = await createReusableSearch({
query: trimmed,
title: trimmed.slice(0, 80),
});
const created = createdResult.search;
if (requestId !== requestCounterRef.current) return;
setSearch((current) =>
@@ -140,6 +143,13 @@ export default function SearchRoutePage() {
: current
);
if (createdResult.cacheHit) {
const cached = await getSearch(created.id);
if (requestId !== requestCounterRef.current) return;
setSearch(cached);
return;
}
await runSearchStream(
created.id,
{