0.1.04 文件树与导入mmap

This commit is contained in:
liaibo
2026-01-07 18:38:56 +08:00
parent 103e36b1c5
commit 294d1d5fb1
28 changed files with 2703 additions and 442 deletions
@@ -0,0 +1,50 @@
"use client";
import type { FileTreeRow } from "@/lib/file-tree/types";
import { filterTopLevelDocIds } from "./dnd";
export type FileTreeDeleteTargets = {
docIds: string[];
assetIds: string[];
};
export function computeFileTreeDeleteTargets(args: {
visibleRows: FileTreeRow[];
selectedRowIds: Set<string>;
parentById: Map<string, string | null>;
}): FileTreeDeleteTargets {
const { visibleRows, selectedRowIds, parentById } = args;
const docCandidates: string[] = [];
const assetCandidates: string[] = [];
const assetDocIdByAssetId = new Map<string, string>();
for (const row of visibleRows) {
if (!selectedRowIds.has(row.rowId)) continue;
if (row.kind === "doc" || row.kind === "index") {
docCandidates.push(row.docId);
continue;
}
if (row.kind === "asset") {
assetCandidates.push(row.asset.id);
assetDocIdByAssetId.set(row.asset.id, row.docId);
}
}
const docIds = filterTopLevelDocIds(docCandidates, parentById);
const docIdSet = new Set(docIds);
const seenAssets = new Set<string>();
const assetIds: string[] = [];
for (const assetId of assetCandidates) {
if (seenAssets.has(assetId)) continue;
seenAssets.add(assetId);
const docId = assetDocIdByAssetId.get(assetId);
if (docId && docIdSet.has(docId)) continue;
assetIds.push(assetId);
}
return { docIds, assetIds };
}