feat: render search on server

This commit is contained in:
2023-08-10 16:59:18 +02:00
parent 61ac1f39e9
commit c29743bd52
9 changed files with 235 additions and 111 deletions

View File

@ -6,17 +6,31 @@ import { getAllSeries, Series } from "@lib/resource/series.ts";
import { RedirectSearchHandler } from "@islands/Search.tsx";
import { KMenu } from "@islands/KMenu.tsx";
import { MovieCard } from "@components/MovieCard.tsx";
import { parseResourceUrl, searchResource } from "@lib/search.ts";
import { SearchResult } from "@lib/types.ts";
export const handler: Handlers<Series[] | null> = {
async GET(_, ctx) {
const movies = await getAllSeries();
return ctx.render(movies);
async GET(req, ctx) {
const series = await getAllSeries();
const searchParams = parseResourceUrl(req.url);
const searchResults = searchParams &&
await searchResource({ ...searchParams, type: "series" });
return ctx.render({ series, searchResults });
},
};
export default function Greet(props: PageProps<Series[] | null>) {
export default function Greet(
props: PageProps<{ series: Series[] | null; searchResults: SearchResult }>,
) {
const { series, searchResults } = props.data;
return (
<MainLayout url={props.url} title="Series" context={{ type: "series" }}>
<MainLayout
url={props.url}
title="Series"
context={{ type: "series" }}
searchResults={searchResults}
>
<RedirectSearchHandler />
<KMenu type="main" context={{ type: "series" }} />
<header class="flex gap-4 items-center mb-5 md:hidden">
@ -31,7 +45,7 @@ export default function Greet(props: PageProps<Series[] | null>) {
<h3 class="text-2xl text-white font-light">🎥 Series</h3>
</header>
<Grid>
{props.data?.map((doc) => {
{series?.map((doc) => {
return <MovieCard sublink="series" movie={doc} />;
})}
</Grid>