import type { Metadata } from "next"; import { cookies } from "next/headers"; import { getMe, search, lookupRemoteActor } from "@/lib/api"; export async function generateMetadata({ searchParams, }: { searchParams: Promise<{ q?: string }>; }): Promise { const { q } = await searchParams; const title = q ? `Search: "${q}"` : "Search"; return { title, description: q ? `Search results for "${q}" on Thoughts` : "Search for people and thoughts on Thoughts", }; } import { UserListCard } from "@/components/user-list-card"; import { RemoteUserCard } from "@/components/remote-user-card"; import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs"; import { ThoughtList } from "@/components/thought-list"; const HANDLE_RE = /^@[\w.-]+@[\w.-]+\.\w+$/; interface SearchPageProps { searchParams: Promise<{ q?: string }>; } export default async function SearchPage({ searchParams }: SearchPageProps) { const { q } = await searchParams; const query = q || ""; const token = (await cookies()).get("auth_token")?.value ?? null; if (!query) { return (

Search Thoughts

Find users and thoughts across the platform.

); } const isHandle = HANDLE_RE.test(query); const [results, remoteActor, me] = await Promise.all([ isHandle ? null : search(query, token).catch(() => null), isHandle ? lookupRemoteActor(query, token).catch(() => null) : null, token ? getMe(token).catch(() => null) : null, ]); return (

Search Results

Showing results for: "{query}"

{isHandle ? ( remoteActor ? (

Remote user

) : (

No user found at {query}

) ) : results ? ( Thoughts ({results.thoughts.length}) Users ({results.users.length}) ) : (

No results found or an error occurred.

)}
); }