0.0.2.0
This commit is contained in:
+19
-41
@@ -1,7 +1,7 @@
|
||||
"use client"
|
||||
|
||||
import type React from "react"
|
||||
import { createContext, useContext, useState, useCallback, useEffect, useRef } from "react"
|
||||
import { createContext, useContext, useState, useCallback, useEffect, useRef, Suspense } from "react"
|
||||
import type { FamilyMember, FamilyTreeData } from "@/types/family"
|
||||
import { useSession } from "next-auth/react"
|
||||
import { useSearchParams } from "next/navigation"
|
||||
@@ -33,7 +33,7 @@ interface FamilyContextType {
|
||||
|
||||
const FamilyContext = createContext<FamilyContextType | undefined>(undefined)
|
||||
|
||||
export function FamilyProvider({ children }: { children: React.ReactNode }) {
|
||||
function FamilyProviderInner({ children }: { children: React.ReactNode }) {
|
||||
const { data: session, status } = useSession()
|
||||
const searchParams = useSearchParams()
|
||||
const [searchResults, setSearchResults] = useState<FamilyMember[]>([])
|
||||
@@ -75,13 +75,11 @@ export function FamilyProvider({ children }: { children: React.ReactNode }) {
|
||||
|
||||
// 如果正在加载相同的树,跳过
|
||||
if (loadingTreeIdRef.current === targetTreeId) {
|
||||
console.log('⏭️ 跳过重复加载:', targetTreeId)
|
||||
return
|
||||
}
|
||||
|
||||
// 如果 treeId 与当前树相同,跳过
|
||||
if (treeId && treeId === currentTree?.id) {
|
||||
console.log('⏭️ 已加载该树,跳过:', treeId)
|
||||
return
|
||||
}
|
||||
|
||||
@@ -101,15 +99,6 @@ export function FamilyProvider({ children }: { children: React.ReactNode }) {
|
||||
}
|
||||
const data = await res.json()
|
||||
|
||||
console.log('🌳 获取家族树响应:', {
|
||||
fetchUrl,
|
||||
targetTreeId,
|
||||
responseData: data,
|
||||
treesCount: data.trees?.length,
|
||||
firstTree: data.trees?.[0],
|
||||
singleTree: data.tree
|
||||
})
|
||||
|
||||
if (signal.aborted) return
|
||||
|
||||
let tree = null
|
||||
@@ -119,28 +108,16 @@ export function FamilyProvider({ children }: { children: React.ReactNode }) {
|
||||
tree = data.tree
|
||||
}
|
||||
|
||||
console.log('🎯 选择的家族树:', tree)
|
||||
|
||||
if (tree) {
|
||||
setCurrentTree(tree)
|
||||
// 加载该树的成员数据
|
||||
console.log('🔄 开始加载成员数据:', { treeId: tree.id, treeName: tree.name })
|
||||
try {
|
||||
const memberRes = await fetch(`/api/trees/${tree.id}/members`, { signal })
|
||||
console.log('📡 成员数据响应状态:', memberRes.status, memberRes.ok)
|
||||
if (!memberRes.ok) {
|
||||
throw new Error(`Failed to load members: ${memberRes.status}`)
|
||||
}
|
||||
const memberData = await memberRes.json()
|
||||
|
||||
console.log('📊 获取到的成员数据:', {
|
||||
treeId: tree.id,
|
||||
treeName: tree.name,
|
||||
membersCount: memberData.members?.length || 0,
|
||||
members: memberData.members,
|
||||
rootId: memberData.rootId
|
||||
})
|
||||
|
||||
if (signal.aborted) return
|
||||
|
||||
if (memberData.members) {
|
||||
@@ -151,11 +128,6 @@ export function FamilyProvider({ children }: { children: React.ReactNode }) {
|
||||
},
|
||||
{}
|
||||
)
|
||||
console.log('✅ 设置 treeData:', {
|
||||
rootId: memberData.rootId || "",
|
||||
membersMapKeys: Object.keys(membersMap),
|
||||
membersMapCount: Object.keys(membersMap).length
|
||||
})
|
||||
setTreeData({
|
||||
rootId: memberData.rootId || "",
|
||||
members: membersMap,
|
||||
@@ -163,7 +135,6 @@ export function FamilyProvider({ children }: { children: React.ReactNode }) {
|
||||
}
|
||||
} catch (err: any) {
|
||||
if (err.name === 'AbortError') {
|
||||
console.log('❌ 成员数据加载被中断')
|
||||
return
|
||||
}
|
||||
console.error('加载成员数据失败:', err)
|
||||
@@ -176,7 +147,6 @@ export function FamilyProvider({ children }: { children: React.ReactNode }) {
|
||||
}
|
||||
} catch (err: any) {
|
||||
if (err.name === 'AbortError') {
|
||||
console.log('❌ 家族树加载被中断')
|
||||
return
|
||||
}
|
||||
|
||||
@@ -357,15 +327,15 @@ export function FamilyProvider({ children }: { children: React.ReactNode }) {
|
||||
}, [loadData])
|
||||
|
||||
// 监听 treeData 变化
|
||||
useEffect(() => {
|
||||
console.log('🔄 FamilyContext treeData 更新:', {
|
||||
rootId: treeData.rootId,
|
||||
membersCount: Object.keys(treeData.members).length,
|
||||
memberIds: Object.keys(treeData.members),
|
||||
currentTreeId: currentTree?.id,
|
||||
currentTreeName: currentTree?.name
|
||||
})
|
||||
}, [treeData, currentTree])
|
||||
// useEffect(() => {
|
||||
// console.log('🔄 FamilyContext treeData 更新:', {
|
||||
// rootId: treeData.rootId,
|
||||
// membersCount: Object.keys(treeData.members).length,
|
||||
// memberIds: Object.keys(treeData.members),
|
||||
// currentTreeId: currentTree?.id,
|
||||
// currentTreeName: currentTree?.name
|
||||
// })
|
||||
// }, [treeData, currentTree])
|
||||
|
||||
return (
|
||||
<FamilyContext.Provider
|
||||
@@ -390,6 +360,14 @@ export function FamilyProvider({ children }: { children: React.ReactNode }) {
|
||||
)
|
||||
}
|
||||
|
||||
export function FamilyProvider({ children }: { children: React.ReactNode }) {
|
||||
return (
|
||||
<Suspense fallback={<div>Loading...</div>}>
|
||||
<FamilyProviderInner>{children}</FamilyProviderInner>
|
||||
</Suspense>
|
||||
)
|
||||
}
|
||||
|
||||
export function useFamily() {
|
||||
const context = useContext(FamilyContext)
|
||||
if (context === undefined) {
|
||||
|
||||
Reference in New Issue
Block a user