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,