diff --git a/src/app/api/get-theme/route.ts b/src/app/api/get-theme/route.ts new file mode 100644 index 0000000..9728315 --- /dev/null +++ b/src/app/api/get-theme/route.ts @@ -0,0 +1,25 @@ + +import { getThemeFromId } from "@/lib/themes"; +import { NextApiRequest, NextApiResponse } from "next"; + +function getQSParamFromURL( + key: string, + url: string | undefined +): string | null { + if (!url) return ""; + const search = new URL(url).search; + const urlParams = new URLSearchParams(search); + return urlParams.get(key); +} + +export async function GET(request: NextApiRequest, response: NextApiResponse) { + const id = getQSParamFromURL("id", request.url); + if (!id) { + return Response.json({ error: "id is required" }); + } + const theme = getThemeFromId(id); + if (!theme) { + return Response.json({ error: "theme not found" }); + } + return Response.json( theme ); +} \ No newline at end of file diff --git a/src/components/theme-card.tsx b/src/components/theme-card.tsx index 84f2df8..085507b 100644 --- a/src/components/theme-card.tsx +++ b/src/components/theme-card.tsx @@ -16,7 +16,14 @@ export default function ThemeCard({ {theme.name} -

{theme.name}

+
+

{theme.name}

+ {theme.homepage && ( + + Visit Homepage + + )} +

{theme.description}

diff --git a/src/lib/themes.ts b/src/lib/themes.ts index 3ff214c..a2d1d14 100644 --- a/src/lib/themes.ts +++ b/src/lib/themes.ts @@ -5,6 +5,7 @@ export interface ZenTheme { image: string downloadUrl: string id: string + homepage?: string } export function getAllThemes(): ZenTheme[] { @@ -23,3 +24,7 @@ export function getAllThemes(): ZenTheme[] { export function getThemesFromSearch(themes: ZenTheme[], query: string): ZenTheme[] { return themes.filter((theme) => theme.name.toLowerCase().includes(query.toLowerCase())); } + +export function getThemeFromId(id: string): ZenTheme | undefined { + return getAllThemes().find((theme) => theme.id === id); +}