mirror of
https://github.com/hanzo-apps/dataroom.git
synced 2026-10-30 14:47:36 +00:00
102 lines
2.6 KiB
TypeScript
102 lines
2.6 KiB
TypeScript
import { DataroomDocument, DataroomFolder } from "@prisma/client";
|
|
|
|
import { DataroomFolderWithDocuments } from "@/lib/swr/use-dataroom";
|
|
|
|
// Helper function to build nested folder structure
|
|
export const buildNestedFolderStructure = (
|
|
folders: DataroomFolderWithDocuments[],
|
|
) => {
|
|
const folderMap = new Map();
|
|
|
|
// Initialize every folder with an additional childFolders property
|
|
folders.forEach((folder) => {
|
|
folderMap.set(folder.id, { ...folder, childFolders: [] });
|
|
});
|
|
|
|
const rootFolders: DataroomFolderWithDocuments[] = [];
|
|
|
|
folderMap.forEach((folder, id) => {
|
|
if (folder.parentId) {
|
|
const parent = folderMap.get(folder.parentId);
|
|
parent.childFolders.push(folder);
|
|
} else {
|
|
rootFolders.push(folder);
|
|
}
|
|
});
|
|
|
|
return rootFolders;
|
|
};
|
|
|
|
export const buildNestedFolderStructureWithDocs = (
|
|
folders: DataroomFolder[],
|
|
documents: DataroomDocumentWithVersion[],
|
|
) => {
|
|
const folderMap = new Map();
|
|
|
|
// Initialize every folder with an additional childFolders property
|
|
folders.forEach((folder) => {
|
|
folderMap.set(folder.id, {
|
|
...folder,
|
|
documents: documents.filter((doc) => doc.folderId === folder.id),
|
|
childFolders: [],
|
|
});
|
|
});
|
|
|
|
const rootFolders: DataroomFolderWithDocumentsNew[] = [];
|
|
|
|
folderMap.forEach((folder, id) => {
|
|
if (folder.parentId) {
|
|
const parent = folderMap.get(folder.parentId);
|
|
parent.childFolders.push(folder);
|
|
} else {
|
|
rootFolders.push(folder);
|
|
}
|
|
});
|
|
|
|
return rootFolders;
|
|
};
|
|
|
|
type DataroomDocumentWithVersion = {
|
|
dataroomDocumentId: string;
|
|
folderId: string | null;
|
|
id: string;
|
|
name: string;
|
|
hierarchicalIndex: string | null;
|
|
versions: {
|
|
id: string;
|
|
versionNumber: number;
|
|
hasPages: boolean;
|
|
}[];
|
|
};
|
|
|
|
type DataroomFolderWithDocumentsNew = DataroomFolder & {
|
|
childFolders: DataroomFolderWithDocumentsNew[];
|
|
documents: {
|
|
dataroomDocumentId: string;
|
|
folderId: string | null;
|
|
id: string;
|
|
name: string;
|
|
hierarchicalIndex: string | null;
|
|
}[];
|
|
};
|
|
|
|
export const itemsMessage = (
|
|
documentsToMove: string[],
|
|
foldersToMove: string[],
|
|
action: "Moving" | "Successfully moved",
|
|
) => {
|
|
const docCount = documentsToMove.length;
|
|
const folderCount = foldersToMove.length;
|
|
|
|
if (docCount && folderCount) {
|
|
return `${action} ${docCount} document${docCount > 1 ? "s" : ""} and ${folderCount} folder${folderCount > 1 ? "s" : ""}...`;
|
|
}
|
|
if (docCount) {
|
|
return `${action} ${docCount} document${docCount > 1 ? "s" : ""}...`;
|
|
}
|
|
if (folderCount) {
|
|
return `${action} ${folderCount} folder${folderCount > 1 ? "s" : ""}...`;
|
|
}
|
|
return `${action} items...`;
|
|
};
|