diff --git a/app/[nsfront]/[nsbehind]/[name]/[version]/page.tsx b/app/[nsfront]/[nsbehind]/[name]/[version]/page.tsx index dfc63c4..63ae271 100644 --- a/app/[nsfront]/[nsbehind]/[name]/[version]/page.tsx +++ b/app/[nsfront]/[nsbehind]/[name]/[version]/page.tsx @@ -154,12 +154,22 @@ const CratePage = () => { const [error, setError] = useState(null); const [packageCurrentPage, setPackageCurrentPage] = useState(1); const [depCurrentPage, setDepCurrentPage] = useState(1); + const [versions, setVersions] = useState([]); const itemsPerPage = 1; - const basePath = `/${params.nsfront}/${params.nsbehind}/${params.name}/${params.version}`; + const basePath = `/${params.nsfront}/${params.nsbehind}/${params.name}`; useEffect(() => { const fetchCrateData = async () => { try { + // 首先获取所有版本信息 + const versionsResponse = await fetch(`/api/crates/${params.nsfront}/${params.nsbehind}/${params.name}/all`); + if (!versionsResponse.ok) { + throw new Error(`HTTP error! status: ${versionsResponse.status}`); + } + const versionsData = await versionsResponse.json(); + setVersions(versionsData.versions || []); + + // 获取当前URL版本的数据 const response = await fetch(`/api/crates/${params.nsfront}/${params.nsbehind}/${params.name}/${params.version}`); if (!response.ok) { throw new Error(`HTTP error! status: ${response.status}`); @@ -171,11 +181,12 @@ const CratePage = () => { setError('An error occurred'); } finally { setLoading(false); + console.log('results', versions); } }; fetchCrateData(); - }, [params.name, params.version, params.nsfront, params.nsbehind]); + }, [params.name, params.nsfront, params.nsbehind]); if (loading) return

Loading...

; if (error) return

Error: {error}

; diff --git a/app/api/crates/[nsfront]/[nsbehind]/[cratename]/all/route.tsx b/app/api/crates/[nsfront]/[nsbehind]/[cratename]/all/route.tsx new file mode 100644 index 0000000..37607bf --- /dev/null +++ b/app/api/crates/[nsfront]/[nsbehind]/[cratename]/all/route.tsx @@ -0,0 +1,23 @@ +import { NextRequest, NextResponse } from "next/server"; +type Params = Promise<{ nsfront: string, nsbehind: string, cratename: string, version: string }> + +export async function GET(req: NextRequest, props: { params: Params }) { + try { + const params = await props.params + const { nsfront, nsbehind, cratename } = params; + const endpoint = process.env.CRATES_PRO_INTERNAL_HOST; + + const externalApiUrl = `${endpoint}/api/crates/${nsfront}/${nsbehind}/${cratename}/all`; // 替换为你的外部 API URL + const externalRes = await fetch(externalApiUrl); + if (!externalRes.ok) { + throw new Error('Failed to fetch external data'); + } + const externalData = await externalRes.json(); + console.log('crateinfo in api', externalData); + return NextResponse.json(externalData); + } catch (error) { + console.error('Error:', error); + return NextResponse.json({ error: 'Internal Server Error' }, { status: 500 }); + + } +} diff --git a/app/search/page.tsx b/app/search/page.tsx index 8b7f300..4cbb10a 100644 --- a/app/search/page.tsx +++ b/app/search/page.tsx @@ -161,7 +161,7 @@ const Search = () => { hover:shadow-[0_0_12px_0_rgba(43,88,221,0.2)] `} > - +
NuGet
{item.name}
diff --git a/components/CrateNav.tsx b/components/CrateNav.tsx index 62e659f..8ff5e6b 100644 --- a/components/CrateNav.tsx +++ b/components/CrateNav.tsx @@ -17,7 +17,6 @@ const CrateNav: React.FC = ({ nsfront, nsbehind, name, version }) const router = useRouter(); const basePath = `/${nsfront}/${nsbehind}/${name}/${version}`; const [isOpen, setIsOpen] = useState(false); - const [currentVersion, setCurrentVersion] = useState(version); const [searchTerm, setSearchTerm] = useState(''); const { crateData, setCrateData } = useHeaderContext(); @@ -82,7 +81,7 @@ const CrateNav: React.FC = ({ nsfront, nsbehind, name, version }) onClick={toggleDropdown} className="flex items-center justify-between w-[150px] h-[36px] flex-shrink-0 rounded-[18.5px] border border-[#333333] bg-white px-4" > - {currentVersion || 'Select Version'} + {version} version = ({ nsfront, nsbehind, name, version }) />