| null, nodeId: string | null) => {
+ if (!nodeId) return;
- // eslint-disable-next-line no-console
- console.log('node====')
+ setSelectedNode(nodeId);
+ const node = findNode(treeData, nodeId);
- if (!node) return
+ if (!node) return;
- const real_path = pathname?.replace('/tree', '')
- const modified_path = real_path?.replace('/code/', '/code/blob/')
+ const basePath = pathname?.replace(`/${scope}/code/tree`, '') || '';
+
+ let fullPath = node.path;
- if (node?.content_type === 'directory') {
- router.push(`${pathname}/${node.label}`)
- } else {
- router.push(`/${modified_path}/${node.label}`)
- }
- }
-
- const findNode = (data: MuiTreeNode[], nodeId: string): MuiTreeNode | null => {
- for (const node of data) {
- if (node.id === nodeId) return node
- if (node.children) {
- const found = findNode(node.children, nodeId)
+ if (basePath && fullPath?.startsWith(basePath)) {
+ fullPath = fullPath?.substring(basePath.length);
+ }
- if (found) return found
+ fullPath = fullPath?.replace(/^\//, '');
+ if (node?.isLeaf) {
+ router.push(`/${scope}/code/blob${basePath}/${fullPath}`);
}
- }
- return null
- }
+
+ },
+ [pathname, router, treeData, scope, findNode],
+ );
return (
-
- )
-}
-
-export default RepoTree
+ <>
+ {isInitialLoading ? (
+
+
+
+ ) : treeData.length === 0 ? (
+
+ no data
+
+ ) : (
+ (
+
+ )
+ }}
+ >
+
+ )}
+ {/* {loadingError && (
+
+ 加载错误: {loadingError}
+
+ )} */}
+ >
+ );
+};
+
+export default RepoTree;
\ No newline at end of file
diff --git a/moon/apps/web/hooks/useGetTree.ts b/moon/apps/web/hooks/useGetTree.ts
new file mode 100644
index 000000000..8541d43b1
--- /dev/null
+++ b/moon/apps/web/hooks/useGetTree.ts
@@ -0,0 +1,12 @@
+import { useQuery } from '@tanstack/react-query'
+import { legacyApiClient } from '@/utils/queryClient'
+import { GetApiTreeParams, RequestParams } from '@gitmono/types'
+
+export function useGetTree(params: GetApiTreeParams, requestParams?: RequestParams) {
+ return useQuery({
+ // eslint-disable-next-line @tanstack/query/exhaustive-deps
+ queryKey: legacyApiClient.v1.getApiTree().requestKey(params),
+ queryFn: () => legacyApiClient.v1.getApiTree().request(params, requestParams),
+ enabled: !!params.path,
+ })
+}
\ No newline at end of file
diff --git a/moon/apps/web/pages/[org]/code/blob/[...path].tsx b/moon/apps/web/pages/[org]/code/blob/[...path].tsx
index df00ebcbb..750fa2716 100644
--- a/moon/apps/web/pages/[org]/code/blob/[...path].tsx
+++ b/moon/apps/web/pages/[org]/code/blob/[...path].tsx
@@ -1,6 +1,6 @@
import React from 'react'
import { Flex, Layout } from 'antd'
-import Bread from '@/components/CodeView/TreeView/BreadCrumb'
+import BreadCrumb from '@/components/CodeView/TreeView/BreadCrumb'
import CodeContent from '@/components/CodeView/BlobView/CodeContent'
import { AppLayout } from '@/components/Layout/AppLayout'
import AuthAppProviders from '@/components/Providers/AuthAppProviders'
@@ -80,7 +80,7 @@ function BlobPage() {
-
+
diff --git a/moon/apps/web/pages/[org]/code/tree/[...path]/index.tsx b/moon/apps/web/pages/[org]/code/tree/[...path]/index.tsx
index 318b1852f..a5e7df4ca 100644
--- a/moon/apps/web/pages/[org]/code/tree/[...path]/index.tsx
+++ b/moon/apps/web/pages/[org]/code/tree/[...path]/index.tsx
@@ -9,7 +9,7 @@ import { CommonResultVecTreeCommitItem } from '@gitmono/types/generated'
import { LoadingSpinner } from '@gitmono/ui'
import CodeTable from '@/components/CodeView/CodeTable'
-import Bread from '@/components/CodeView/TreeView/BreadCrumb'
+import BreadCrumb from '@/components/CodeView/TreeView/BreadCrumb'
import CloneTabs from '@/components/CodeView/TreeView/CloneTabs'
import RepoTree from '@/components/CodeView/TreeView/RepoTree'
import { AppLayout } from '@/components/Layout/AppLayout'
@@ -81,7 +81,7 @@ function TreeDetailPage() {
) : (
-
+
{canClone?.data && (