28 |
29 | setQuery(e.target.value)}
34 | onKeyUp={(e) => {
35 | if (e.key !== "Enter") return;
36 | search();
37 | }}
38 | />
39 |
47 |
48 |
49 |
50 | );
51 | }
52 |
--------------------------------------------------------------------------------
/examples/nextjs/finished/src/app/search/page.info.ts:
--------------------------------------------------------------------------------
1 | import { z } from "zod";
2 |
3 | export const Route = {
4 | name: "Search",
5 | params: z.object({}),
6 | search: z.object({
7 | q: z.string().optional(),
8 | limit: z.coerce.number().optional()
9 | })
10 | };
11 |
--------------------------------------------------------------------------------
/examples/nextjs/finished/src/app/search/page.tsx:
--------------------------------------------------------------------------------
1 | import { getFullPokemon } from "@/pokemon";
2 |
3 | import SearchList from "./SearchList";
4 |
5 | export const dynamic = "force-dynamic";
6 |
7 | export default async function SearchPage({
8 | searchParams
9 | }: {
10 | searchParams: { q?: string };
11 | }) {
12 | const pokemon = await getFullPokemon(10, searchParams.q);
13 |
14 | return (
15 |