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
+25 -1
View File
@@ -91,6 +91,31 @@ describe("buildVisibleRows", () => {
expect(new Set(rows.map((r) => r.rowId)).size).toBe(rows.length);
});
it("输入树包含重复 docId 时应自动去重", () => {
const a = {
access_scope: "private" as const,
id: "a",
workspace_id: "w",
title: "A",
parent_id: null,
sort_order: 0,
is_starred: null,
is_template: false,
created_at: "",
updated_at: null,
children: [],
};
const rows = buildVisibleRows({
nodes: [a, a],
expanded: new Set(["a"]),
assetsByDoc: {},
});
expect(rows.filter((r) => r.rowId === "doc:a").length).toBe(1);
expect(new Set(rows.map((r) => r.rowId)).size).toBe(rows.length);
});
});
describe("parseFileTreeRowId", () => {
@@ -102,4 +127,3 @@ describe("parseFileTreeRowId", () => {
expect(parseFileTreeRowId("doc:")).toBeNull();
});
});
+6
View File
@@ -19,8 +19,14 @@ export function buildVisibleRows({
expandedAssetFolderIds?: Set<string>;
}): FileTreeRow[] {
const rows: FileTreeRow[] = [];
const visitedDocIds = new Set<string>();
const walk = (node: DocumentNode, depth: number) => {
// 防御性处理:上游数据异常时(例如同一 docId 在树中重复出现),避免生成重复 rowId 导致 React key 冲突。
// 同时也能避免潜在的“循环引用/重复引用”导致的递归问题。
if (visitedDocIds.has(node.id)) return;
visitedDocIds.add(node.id);
const assets = assetsByDoc[node.id] ?? [];
const hasChildren = node.children.length > 0 || assets.length > 0;
const isExpanded = expanded.has(node.id);