0.3.3 外网下载修复

This commit is contained in:
liaibo
2026-01-21 18:21:10 +08:00
parent f13de35321
commit 71de56850b
45 changed files with 2499 additions and 476 deletions
-17
View File
@@ -40,7 +40,6 @@ import type { SidebarInitialData, SidebarSectionId } from "@/components/sidebar/
import { useSidebarData } from "@/hooks/use-sidebar-data";
import { PrivateTree } from "@/components/sidebar/private-tree";
import { buildSidebarSectionsFromTree, flattenDocumentTree } from "@/lib/sidebar-tree";
import { supabaseBrowser } from "@/lib/supabase/client";
import { useSearchPaletteStore } from "@/store/search-palette";
import { FileTree } from "@/components/sidebar/file-tree";
import type { MediaAsset } from "@/types/media";
@@ -112,22 +111,6 @@ export function Sidebar({ initialData }: SidebarProps) {
await sidebarQuery.refetch();
}, [sidebarQuery]);
useEffect(() => {
const channel = supabaseBrowser
.channel("documents-feed")
.on(
"postgres_changes",
{ event: "*", schema: "public", table: "documents" },
() => {
void refreshTree();
},
)
.subscribe();
return () => {
supabaseBrowser.removeChannel(channel);
};
}, [refreshTree]);
const sections = useMemo(() => buildSidebarSectionsFromTree(tree), [tree]);
const starredNodes = useMemo(() => sections.find((section) => section.id === "starred")?.nodes ?? [], [sections]);
const publicNodes = useMemo(() => sections.find((section) => section.id === "public")?.nodes ?? [], [sections]);
+25 -2
View File
@@ -16,13 +16,36 @@ export interface DocumentNode extends DocumentRecord {
}
export function buildDocumentTree(records: DocumentRecord[]): DocumentNode[] {
// 防御性处理:当上游数据意外包含重复 id 时,避免生成重复节点导致渲染 key 冲突。
// 以“最后一次出现”为准(与原先 nodeMap.set 的覆盖行为保持一致)。
const seen = new Set<string>();
const duplicatedIds = new Set<string>();
const uniqueRecords: DocumentRecord[] = [];
for (let i = records.length - 1; i >= 0; i--) {
const record = records[i];
if (seen.has(record.id)) {
duplicatedIds.add(record.id);
continue;
}
seen.add(record.id);
uniqueRecords.push(record);
}
uniqueRecords.reverse();
if (duplicatedIds.size > 0 && process.env.NODE_ENV !== "production") {
// eslint-disable-next-line no-console
console.warn(
`[buildDocumentTree] 检测到重复文档 id(已自动去重):${Array.from(duplicatedIds).slice(0, 10).join(", ")}${duplicatedIds.size > 10 ? "…" : ""}`,
);
}
const nodeMap = new Map<string, DocumentNode>();
records.forEach((record) => {
uniqueRecords.forEach((record) => {
nodeMap.set(record.id, { ...record, children: [] });
});
const roots: DocumentNode[] = [];
records.forEach((record) => {
uniqueRecords.forEach((record) => {
const node = nodeMap.get(record.id);
if (!node) return;
if (record.parent_id && nodeMap.has(record.parent_id)) {