diff --git a/src/app/catalog/[repoName]/[serverName]/[version]/actions.ts b/src/app/catalog/[repoName]/[serverName]/[version]/actions.ts index b2717380..4d8d02df 100644 --- a/src/app/catalog/[repoName]/[serverName]/[version]/actions.ts +++ b/src/app/catalog/[repoName]/[serverName]/[version]/actions.ts @@ -1,14 +1,18 @@ "use server"; +import { getRegistries } from "@/app/catalog/actions"; import { getAuthenticatedClient } from "@/lib/api-client"; -export async function getServerDetails(serverName: string, version: string) { +export async function getServerDetails( + registryName: string | undefined, + serverName: string, + version: string, +) { const api = await getAuthenticatedClient(); - const registriesResult = await api.getV1Registries({ client: api.client }); - const registryName = registriesResult.data?.registries?.[0]?.name; + const resolvedRegistry = registryName || (await getRegistries()).at(0)?.name; - if (!registryName) { + if (!resolvedRegistry) { return { error: new Error("No registry available"), data: null, @@ -16,15 +20,8 @@ export async function getServerDetails(serverName: string, version: string) { }; } - const { error, data, response } = - await api.getRegistryByRegistryNameV01ServersByServerNameVersionsByVersion({ - path: { - registryName, - serverName, - version, - }, - client: api.client, - }); - - return { error, data, response }; + return api.getRegistryByRegistryNameV01ServersByServerNameVersionsByVersion({ + path: { registryName: resolvedRegistry, serverName, version }, + client: api.client, + }); } diff --git a/src/app/catalog/[repoName]/[serverName]/[version]/not-found.tsx b/src/app/catalog/[repoName]/[serverName]/[version]/not-found.tsx index 97d2bf02..f707b534 100644 --- a/src/app/catalog/[repoName]/[serverName]/[version]/not-found.tsx +++ b/src/app/catalog/[repoName]/[serverName]/[version]/not-found.tsx @@ -5,7 +5,7 @@ import { Button } from "@/components/ui/button"; export default function NotFound() { return ( -
+
; + searchParams: Promise<{ + registryName?: string; + }>; } export default async function CatalogDetailPage({ params, + searchParams, }: CatalogDetailPageProps) { const { repoName, serverName, version } = await params; + const { registryName } = await searchParams; + + const fullServerName = `${repoName}/${serverName}`; const { data: serverResponse, response } = await getServerDetails( - `${repoName}/${serverName}`, + registryName, + fullServerName, version, ); diff --git a/src/app/catalog/components/__tests__/servers.test.tsx b/src/app/catalog/components/__tests__/servers.test.tsx index fb581dce..c8de9053 100644 --- a/src/app/catalog/components/__tests__/servers.test.tsx +++ b/src/app/catalog/components/__tests__/servers.test.tsx @@ -33,6 +33,7 @@ describe("Servers", () => { render( { const { container } = render( { render( { render( { render( { render( { render( { render( { const { container } = render( { render( - + - All registries {registries .filter( (registry): registry is typeof registry & { name: string } => diff --git a/src/app/catalog/components/servers-wrapper.tsx b/src/app/catalog/components/servers-wrapper.tsx index eaeb6042..17f90de0 100644 --- a/src/app/catalog/components/servers-wrapper.tsx +++ b/src/app/catalog/components/servers-wrapper.tsx @@ -48,7 +48,7 @@ export function ServersWrapper({ void; @@ -20,6 +21,7 @@ interface ServersProps { */ export function Servers({ servers, + registryName, viewMode, searchQuery, onClearSearch, @@ -29,7 +31,7 @@ export function Servers({ const handleServerClick = (server: V0ServerJson) => { if (!server.name) return; - const detailUrl = `/catalog/${server.name}/${server.version || "latest"}`; + const detailUrl = `/catalog/${server.name}/${server.version || "latest"}?registryName=${encodeURIComponent(registryName)}`; router.push(detailUrl); }; diff --git a/src/app/catalog/constants.ts b/src/app/catalog/constants.ts index 6159e1e7..3cb6e2c1 100644 --- a/src/app/catalog/constants.ts +++ b/src/app/catalog/constants.ts @@ -1,4 +1,3 @@ -export const CATALOG_ALL_REGISTRIES = "all"; export const CATALOG_VIEW_MODES = ["grid", "list"] as const; export const CATALOG_PREV_CURSOR_HISTORY_KEY = "catalog:prevCursors"; export const CATALOG_PAGE_SIZE = 24; diff --git a/src/app/catalog/hooks/use-catalog-filters.ts b/src/app/catalog/hooks/use-catalog-filters.ts index a34f4983..1cdc5861 100644 --- a/src/app/catalog/hooks/use-catalog-filters.ts +++ b/src/app/catalog/hooks/use-catalog-filters.ts @@ -6,11 +6,7 @@ import { useQueryStates, } from "nuqs"; import { useTransition } from "react"; -import { - CATALOG_ALL_REGISTRIES, - CATALOG_PAGE_SIZE, - CATALOG_VIEW_MODES, -} from "../constants"; +import { CATALOG_PAGE_SIZE, CATALOG_VIEW_MODES } from "../constants"; import { useSessionStack } from "./use-session-stack"; /** @@ -61,7 +57,7 @@ export function useCatalogFilters() { setFilters( (prev) => ({ ...prev, - registryName: value === CATALOG_ALL_REGISTRIES ? null : value, + registryName: value, cursor: "", }), { startTransition }, @@ -97,7 +93,7 @@ export function useCatalogFilters() { return { viewMode, search, - selectedRegistry: registryName || CATALOG_ALL_REGISTRIES, + selectedRegistry: registryName, cursor, limit, isFirstPage,