Skip to content

Commit d3bbe84

Browse files
authored
dependencies graph (#94)
* aaa * solved some bugs * dependencies graph
1 parent 0b6ac27 commit d3bbe84

File tree

27 files changed

+1191
-349
lines changed

27 files changed

+1191
-349
lines changed
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
// Dependencies 页面
2+
"use client";
3+
import React, { useEffect, useState } from "react";
4+
import { useParams } from "next/navigation";
5+
6+
// import DependencyTable from "@/components/DependencyTable";
7+
import DependencyGraph from "@/components/DependencyGraph"; // 假设你已经创建了 DependencyGraph 组件
8+
import { dependenciesInfo } from "@/app/lib/all_interface";
9+
10+
const CratePage = () => {
11+
const params = useParams();
12+
// const currentVersion = params.version;
13+
// const crateName = params.name;
14+
const [results, setResults] = useState<dependenciesInfo | null>(null);
15+
console.log(results);
16+
const [loading, setLoading] = useState(true);
17+
const [error, setError] = useState<string | null>(null);
18+
19+
// 新增状态:控制显示 DependencyTable 或 DependencyGraph
20+
// const [showTable, setShowTable] = useState(true);
21+
22+
useEffect(() => {
23+
const fetchCrateData = async () => {
24+
try {
25+
setError(null);
26+
const response = await fetch(
27+
`/api/crates/${params.nsfront}/${params.nsbehind}/${params.name}/${params.version}/dependencies`
28+
);
29+
30+
if (!response.ok) {
31+
throw new Error(`HTTP error! status: ${response.status}`);
32+
}
33+
34+
const data = await response.json();
35+
36+
setResults(data); // 设置获取的数据
37+
} catch (error) {
38+
console.log("Error fetching data:", error);
39+
setError("Failed to fetch data.");
40+
} finally {
41+
setLoading(false); // 完成加载
42+
}
43+
};
44+
fetchCrateData(); // 调用函数来获取数据
45+
}, [params.name, params.version, params.nsfront, params.nsbehind]); // 依赖项数组,确保在 crateName 或 version 改变时重新获取数据
46+
47+
if (loading) return <div>Loading...</div>;
48+
if (error) return <div className="text-red-500">Error: {error}</div>;
49+
50+
return (
51+
<div className="container mx-auto p-4">
52+
53+
54+
<DependencyGraph crateName={params.name as string} currentVersion={params.version as string} />
55+
56+
</div>
57+
);
58+
};
59+
60+
export default CratePage;
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
// Dependencies 页面
2+
"use client";
3+
import React, { useEffect, useState } from "react";
4+
import { useParams } from "next/navigation";
5+
6+
import DependencyTable from "@/components/DependencyTable";
7+
// import DependencyGraph from "@/components/DependencyGraph"; // 假设你已经创建了 DependencyGraph 组件
8+
import { dependenciesInfo } from "@/app/lib/all_interface";
9+
import Link from "next/link";
10+
11+
const CratePage = () => {
12+
const params = useParams();
13+
// const currentVersion = params.version;
14+
// const crateName = params.name;
15+
const [results, setResults] = useState<dependenciesInfo | null>(null);
16+
const [loading, setLoading] = useState(true);
17+
const [error, setError] = useState<string | null>(null);
18+
19+
// 新增状态:控制显示 DependencyTable 或 DependencyGraph
20+
const [showTable, setShowTable] = useState(true);
21+
22+
useEffect(() => {
23+
const fetchCrateData = async () => {
24+
try {
25+
setError(null);
26+
const response = await fetch(
27+
`/api/crates/${params.nsfront}/${params.nsbehind}/${params.name}/${params.version}/dependencies`
28+
);
29+
30+
if (!response.ok) {
31+
throw new Error(`HTTP error! status: ${response.status}`);
32+
}
33+
34+
const data = await response.json();
35+
36+
setResults(data); // 设置获取的数据
37+
} catch (error) {
38+
console.log("Error fetching data:", error);
39+
setError("Failed to fetch data.");
40+
} finally {
41+
setLoading(false); // 完成加载
42+
}
43+
};
44+
fetchCrateData(); // 调用函数来获取数据
45+
}, [params.name, params.version, params.nsfront, params.nsbehind]); // 依赖项数组,确保在 crateName 或 version 改变时重新获取数据
46+
47+
if (loading) return <div>Loading...</div>;
48+
if (error) return <div className="text-red-500">Error: {error}</div>;
49+
50+
return (
51+
<div className="container mx-auto p-4">
52+
53+
{/* 切换按钮 */}
54+
<Link
55+
onClick={() => setShowTable(!showTable)} // 切换状态
56+
className="mb-4 px-4 py-2 bg-blue-500 text-white rounded hover:bg-blue-600"
57+
href={`/${params.nsfront}/${params.nsbehind}/${params.name}/${params.version}/dependencies/graph`} >
58+
{showTable ? "Show Graph" : "Show Table"}
59+
</Link>
60+
61+
<DependencyTable data={results?.data} />
62+
63+
</div>
64+
);
65+
};
66+
67+
export default CratePage;
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
//Dependents页面
2+
"use client";
3+
import React, { useEffect, useState } from 'react';
4+
5+
import DependentTable from '@/components/DependentTable';
6+
import { dependentsInfo } from '@/app/lib/all_interface';
7+
import { useParams } from 'next/navigation';
8+
9+
10+
11+
const CratePage = () => {
12+
const [results, setResults] = useState<dependentsInfo | null>(null);
13+
const [loading, setLoading] = useState(true);
14+
const [error, setError] = useState(null);
15+
16+
const params = useParams();
17+
18+
19+
20+
useEffect(() => {
21+
const fetchCrateData = async () => {
22+
try {
23+
const response = await fetch(`/api/crates/${params.nsfront}/${params.nsbehind}/${params.name}/${params.version}/dependents`);
24+
25+
if (!response.ok) {
26+
throw new Error(`HTTP error! status: ${response.status}`);
27+
}
28+
29+
const data = await response.json();
30+
31+
32+
setResults(data); // 设置获取的数据
33+
34+
} catch (error) {
35+
setError(null);
36+
console.log('Error fetching data:', error);
37+
} finally {
38+
setLoading(false); // 完成加载
39+
}
40+
};
41+
fetchCrateData(); // 调用函数来获取数据
42+
}, [params.name, params.version, params.nsfront, params.nsbehind]); // 依赖项数组,确保在 crateName 或 version 改变时重新获取数据
43+
44+
if (loading) return <div>Loading...</div>;
45+
if (error) return <div className="text-red-500">Error: {error}</div>;
46+
47+
48+
49+
return (
50+
<div>
51+
52+
<DependentTable data={results?.data} />
53+
54+
</div>
55+
);
56+
};
57+
58+
export default CratePage;

0 commit comments

Comments
 (0)