src/app/search/page.tsx
Linked repository file from this build.
import { AppShell } from "@/components/app-shell";
import { ReviewSearch } from "@/features/reviews/search";
import { getPageActor } from "@/lib/auth/page";
import { querySearchPage, searchSchema } from "@/lib/db/search-store";
import { serverTiming } from "@/lib/server-timing";
export default async function SearchPage({
searchParams,
}: {
searchParams: Promise<Record<string, string | string[] | undefined>>;
}) {
const timing = serverTiming();
const actor = await timing.measure("auth", getPageActor);
const raw = await searchParams;
const parsed = searchSchema.safeParse(
Object.fromEntries(
Object.entries(raw).map(([key, value]) => [key, Array.isArray(value) ? value[0] : value]),
),
);
const filters = parsed.success ? parsed.data : searchSchema.parse({});
const data = await timing.measure("data", () => querySearchPage(actor, filters));
timing.log("search");
return (
<AppShell title="Search">
<ReviewSearch initial={{ scope: JSON.stringify(actor), filters, data }} />
</AppShell>
);
}