Files
web_hghl_h5/src/app/search/page.tsx
T
2026-10-26 19:51:59 +07:00

49 lines
1.7 KiB
TypeScript

import type { Metadata } from "next";
import { redirect } from "next/navigation";
import { Suspense } from "react";
import { PageLoading } from "@/components/common/page-loading";
import { buildSearchList, parseSearchType } from "@/components/search/data";
import { searchListHref } from "@/components/search/route";
import { SearchPage } from "@/components/search/search-page";
import { resolvePageMetadata } from "@/lib/seo";
type SearchParams = Promise<{ q?: string | string[]; type?: string | string[]; page?: string | string[] }>;
function first(value: string | string[] | undefined) {
return Array.isArray(value) ? value[0] : value;
}
export async function generateMetadata(): Promise<Metadata> {
return resolvePageMetadata({
fallbackTitle: "搜索",
fallbackDescription: "搜索黄果黑料短剧与视频。",
fallbackKeywords: ["黄果黑料", "搜索"],
canonical: "/search",
// 搜索入口不收录;robots.txt 同步 Disallow /search
robots: { index: false, follow: false },
});
}
/** 兼容旧链接 /search?q=&type=&page= → /search/{type}/{q}[/{page}] */
async function SearchIndexContent({ searchParams }: { searchParams: SearchParams }) {
const params = await searchParams;
const query = first(params.q)?.trim() ?? "";
const type = parseSearchType(first(params.type));
const page = Number(first(params.page)) || 1;
if (query) {
redirect(searchListHref(query, type, page > 1 ? page : 1));
}
return <SearchPage list={buildSearchList(null, "", type, 1)} />;
}
export default function Page({ searchParams }: { searchParams: SearchParams }) {
return (
<Suspense fallback={<PageLoading />}>
<SearchIndexContent searchParams={searchParams} />
</Suspense>
);
}