0.0.1.1
This commit is contained in:
@@ -21,7 +21,7 @@ var _s = __turbopack_context__.k.signature(), _s1 = __turbopack_context__.k.sign
|
||||
const FamilyContext = /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["createContext"])(undefined);
|
||||
function FamilyProvider({ children }) {
|
||||
_s();
|
||||
const { data: session } = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$2d$auth$40$4$2e$24$2e$13_next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0_$5f$react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2d$auth$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useSession"])();
|
||||
const { data: session, status } = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$2d$auth$40$4$2e$24$2e$13_next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0_$5f$react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2d$auth$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useSession"])();
|
||||
const searchParams = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$navigation$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useSearchParams"])();
|
||||
const [searchResults, setSearchResults] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])([]);
|
||||
const [isLoading, setIsLoading] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])(true);
|
||||
@@ -34,94 +34,123 @@ function FamilyProvider({ children }) {
|
||||
// 监听 URL 和 Session 变化,加载家族树
|
||||
(0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useEffect"])({
|
||||
"FamilyProvider.useEffect": ()=>{
|
||||
const treeId = searchParams.get('treeId');
|
||||
console.log('FamilyContext - Effect triggered, treeId:', treeId, 'currentTree:', currentTree?.id);
|
||||
// 如果 session 不存在,清除所有数据
|
||||
if (!session?.user?.id) {
|
||||
console.log('FamilyContext - No session, clearing data');
|
||||
setCurrentTree(null);
|
||||
setTreeData({
|
||||
rootId: "",
|
||||
members: {}
|
||||
});
|
||||
setIsLoading(false);
|
||||
return;
|
||||
}
|
||||
// 如果 treeId 与当前树相同,跳过
|
||||
if (treeId && treeId === currentTree?.id) {
|
||||
console.log('FamilyContext - Same tree, skipping');
|
||||
return;
|
||||
}
|
||||
// 如果没有 treeId 且已有树,跳过
|
||||
if (!treeId && currentTree) {
|
||||
console.log('FamilyContext - No treeId but has currentTree, skipping');
|
||||
return;
|
||||
}
|
||||
// 需要加载新树
|
||||
const targetTreeId = treeId || 'first';
|
||||
console.log('FamilyContext - Loading tree:', targetTreeId);
|
||||
setIsLoading(true);
|
||||
const fetchUrl = targetTreeId === 'first' ? '/api/trees' : `/api/trees/${targetTreeId}`;
|
||||
console.log('FamilyContext - Fetching URL:', fetchUrl);
|
||||
fetch(fetchUrl).then({
|
||||
"FamilyProvider.useEffect": (res)=>res.json()
|
||||
}["FamilyProvider.useEffect"]).then({
|
||||
"FamilyProvider.useEffect": (data)=>{
|
||||
let tree = null;
|
||||
if (targetTreeId === 'first') {
|
||||
tree = data.trees?.[0];
|
||||
} else {
|
||||
tree = data.tree;
|
||||
const controller = new AbortController();
|
||||
const signal = controller.signal;
|
||||
const loadTree = {
|
||||
"FamilyProvider.useEffect.loadTree": async ()=>{
|
||||
const treeId = searchParams.get('treeId');
|
||||
// 如果 session 正在加载,等待
|
||||
if (status === 'loading') {
|
||||
return;
|
||||
}
|
||||
console.log('FamilyContext - Fetched tree:', tree?.name, tree?.id);
|
||||
if (tree) {
|
||||
setCurrentTree(tree);
|
||||
// 加载该树的成员数据
|
||||
return fetch(`/api/trees/${tree.id}/members`).then({
|
||||
"FamilyProvider.useEffect": (res)=>res.json()
|
||||
}["FamilyProvider.useEffect"]).then({
|
||||
"FamilyProvider.useEffect": (memberData)=>{
|
||||
console.log('FamilyContext - Loaded members:', memberData.members?.length);
|
||||
// 如果 session 不存在(未登录),清除所有数据
|
||||
if (!session?.user?.id) {
|
||||
if (!signal.aborted) {
|
||||
setCurrentTree(null);
|
||||
setTreeData({
|
||||
rootId: "",
|
||||
members: {}
|
||||
});
|
||||
setIsLoading(false);
|
||||
}
|
||||
return;
|
||||
}
|
||||
// 如果 treeId 与当前树相同,跳过
|
||||
if (treeId && treeId === currentTree?.id) {
|
||||
return;
|
||||
}
|
||||
// 如果没有 treeId 且已有树,跳过
|
||||
if (!treeId && currentTree) {
|
||||
return;
|
||||
}
|
||||
// 需要加载新树
|
||||
const targetTreeId = treeId || 'first';
|
||||
if (!signal.aborted) setIsLoading(true);
|
||||
const fetchUrl = targetTreeId === 'first' ? '/api/trees' : `/api/trees/${targetTreeId}`;
|
||||
try {
|
||||
const res = await fetch(fetchUrl, {
|
||||
signal
|
||||
});
|
||||
if (!res.ok) {
|
||||
throw new Error(`HTTP error! status: ${res.status}`);
|
||||
}
|
||||
const data = await res.json();
|
||||
if (signal.aborted) return;
|
||||
let tree = null;
|
||||
if (targetTreeId === 'first') {
|
||||
tree = data.trees?.[0];
|
||||
} else {
|
||||
tree = data.tree;
|
||||
}
|
||||
if (tree) {
|
||||
setCurrentTree(tree);
|
||||
// 加载该树的成员数据
|
||||
try {
|
||||
const memberRes = await fetch(`/api/trees/${tree.id}/members`, {
|
||||
signal
|
||||
});
|
||||
if (!memberRes.ok) {
|
||||
throw new Error(`Failed to load members: ${memberRes.status}`);
|
||||
}
|
||||
const memberData = await memberRes.json();
|
||||
if (signal.aborted) return;
|
||||
if (memberData.members) {
|
||||
const membersMap = memberData.members.reduce({
|
||||
"FamilyProvider.useEffect.membersMap": (acc, member)=>{
|
||||
"FamilyProvider.useEffect.loadTree.membersMap": (acc, member)=>{
|
||||
acc[member.id] = member;
|
||||
return acc;
|
||||
}
|
||||
}["FamilyProvider.useEffect.membersMap"], {});
|
||||
}["FamilyProvider.useEffect.loadTree.membersMap"], {});
|
||||
setTreeData({
|
||||
rootId: memberData.rootId || "",
|
||||
members: membersMap
|
||||
});
|
||||
}
|
||||
} catch (err) {
|
||||
if (err.name === 'AbortError') return;
|
||||
console.error('加载成员数据失败:', err);
|
||||
// 即使成员加载失败,也保留树的信息
|
||||
setTreeData({
|
||||
rootId: "",
|
||||
members: {}
|
||||
});
|
||||
}
|
||||
}["FamilyProvider.useEffect"]);
|
||||
} else {
|
||||
// 没找到树(可能是被删除了,或者没有权限)
|
||||
console.log('FamilyContext - Tree not found');
|
||||
} else {
|
||||
setCurrentTree(null);
|
||||
setTreeData({
|
||||
rootId: "",
|
||||
members: {}
|
||||
});
|
||||
}
|
||||
} catch (err) {
|
||||
if (err.name === 'AbortError') return;
|
||||
// 忽略 Failed to fetch 错误,通常发生在页面跳转或网络问题时
|
||||
if (err.message === 'Failed to fetch' || err.toString().includes('Failed to fetch')) {
|
||||
return;
|
||||
}
|
||||
console.error('加载家族树失败:', err.message || err);
|
||||
setCurrentTree(null);
|
||||
setTreeData({
|
||||
rootId: "",
|
||||
members: {}
|
||||
});
|
||||
} finally{
|
||||
if (!signal.aborted) setIsLoading(false);
|
||||
}
|
||||
}
|
||||
}["FamilyProvider.useEffect"]).catch({
|
||||
"FamilyProvider.useEffect": (err)=>{
|
||||
console.error('FamilyContext - Load failed:', err);
|
||||
setCurrentTree(null);
|
||||
setTreeData({
|
||||
rootId: "",
|
||||
members: {}
|
||||
});
|
||||
}["FamilyProvider.useEffect.loadTree"];
|
||||
loadTree();
|
||||
return ({
|
||||
"FamilyProvider.useEffect": ()=>{
|
||||
controller.abort();
|
||||
}
|
||||
}["FamilyProvider.useEffect"]).finally({
|
||||
"FamilyProvider.useEffect": ()=>setIsLoading(false)
|
||||
}["FamilyProvider.useEffect"]);
|
||||
})["FamilyProvider.useEffect"];
|
||||
}
|
||||
}["FamilyProvider.useEffect"], [
|
||||
searchParams,
|
||||
session?.user?.id
|
||||
session?.user?.id,
|
||||
status,
|
||||
currentTree?.id
|
||||
]);
|
||||
const getMember = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useCallback"])({
|
||||
"FamilyProvider.useCallback[getMember]": (id)=>{
|
||||
@@ -310,11 +339,11 @@ function FamilyProvider({ children }) {
|
||||
children: children
|
||||
}, void 0, false, {
|
||||
fileName: "[project]/Documents/go-new/chinese-family-tree/context/family-context.tsx",
|
||||
lineNumber: 286,
|
||||
lineNumber: 316,
|
||||
columnNumber: 5
|
||||
}, this);
|
||||
}
|
||||
_s(FamilyProvider, "e27NWljR35sXqVEGI7dDhnNuGnM=", false, function() {
|
||||
_s(FamilyProvider, "KaYl0J+pe5j/nHe3uRW+Y+tmcLs=", false, function() {
|
||||
return [
|
||||
__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$2d$auth$40$4$2e$24$2e$13_next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0_$5f$react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2d$auth$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useSession"],
|
||||
__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$navigation$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useSearchParams"]
|
||||
@@ -352,21 +381,19 @@ function registerServiceWorker() {
|
||||
}
|
||||
const register = ()=>{
|
||||
navigator.serviceWorker.register("/sw.js").then((registration)=>{
|
||||
console.log("Service Worker 注册成功:", registration.scope);
|
||||
// 检查更新
|
||||
registration.addEventListener("updatefound", ()=>{
|
||||
const newWorker = registration.installing;
|
||||
if (newWorker) {
|
||||
newWorker.addEventListener("statechange", ()=>{
|
||||
if (newWorker.state === "installed" && navigator.serviceWorker.controller) {
|
||||
// 新的 Service Worker 已安装,提示用户刷新
|
||||
console.log("发现新版本,可以刷新页面");
|
||||
// 新的 Service Worker 已安装
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
}).catch((error)=>{
|
||||
console.log("Service Worker 注册失败:", error);
|
||||
console.error("Service Worker 注册失败:", error);
|
||||
});
|
||||
};
|
||||
// 如果页面已经加载完成,直接注册;否则等待 load 事件
|
||||
|
||||
Reference in New Issue
Block a user