mirror of
https://github.com/hanzo-apps/dataroom.git
synced 2026-10-30 14:47:36 +00:00
148 lines
4.3 KiB
TypeScript
148 lines
4.3 KiB
TypeScript
import { useRouter } from "next/router";
|
|
|
|
import { useState } from "react";
|
|
|
|
import { useTeam } from "@/context/team-context";
|
|
import { toast } from "sonner";
|
|
|
|
import { moveDataroomDocumentToFolder } from "@/lib/documents/move-dataroom-documents";
|
|
import { moveDataroomFolderToFolder } from "@/lib/documents/move-dataroom-folders";
|
|
|
|
import { SidebarFolderTreeSelection } from "@/components/datarooms/folders";
|
|
import { Button } from "@/components/ui/button";
|
|
import {
|
|
Dialog,
|
|
DialogContent,
|
|
DialogDescription,
|
|
DialogFooter,
|
|
DialogHeader,
|
|
DialogTitle,
|
|
} from "@/components/ui/dialog";
|
|
|
|
import { TSelectedFolder } from "../documents/move-folder-modal";
|
|
|
|
export function MoveToDataroomFolderModal({
|
|
open,
|
|
setOpen,
|
|
dataroomId,
|
|
setSelectedDocuments,
|
|
documentIds,
|
|
itemName,
|
|
folderIds,
|
|
folderParentId,
|
|
setSelectedFoldersId,
|
|
}: {
|
|
open: boolean;
|
|
folderIds: string[];
|
|
setOpen: React.Dispatch<React.SetStateAction<boolean>>;
|
|
dataroomId: string;
|
|
setSelectedDocuments?: React.Dispatch<React.SetStateAction<string[]>>;
|
|
documentIds?: string[];
|
|
itemName?: string;
|
|
folderParentId?: string;
|
|
setSelectedFoldersId?: React.Dispatch<React.SetStateAction<string[]>>;
|
|
}) {
|
|
const router = useRouter();
|
|
const [selectedFolder, setSelectedFolder] = useState<TSelectedFolder>(null);
|
|
const [loading, setLoading] = useState<boolean>(false);
|
|
|
|
const teamInfo = useTeam();
|
|
const teamId = teamInfo?.currentTeam?.id;
|
|
|
|
const currentPath = router.query.name
|
|
? (router.query.name as string[]).join("/")
|
|
: "";
|
|
|
|
const handleSubmit = async (event: any) => {
|
|
event.preventDefault();
|
|
event.stopPropagation();
|
|
|
|
if (!selectedFolder) return;
|
|
|
|
setLoading(true);
|
|
if (folderParentId === selectedFolder.id) {
|
|
toast.error("Folder is already in the selected folder.");
|
|
setLoading(false);
|
|
return;
|
|
}
|
|
if (folderIds.includes(selectedFolder.id!)) {
|
|
toast.error("Cannot move to the same folder.");
|
|
setLoading(false);
|
|
return;
|
|
}
|
|
if (documentIds && documentIds.length > 0) {
|
|
await moveDataroomDocumentToFolder({
|
|
documentIds,
|
|
folderId: selectedFolder.id!,
|
|
folderPathName: currentPath ? currentPath.split("/") : undefined,
|
|
dataroomId,
|
|
teamId,
|
|
folderIds,
|
|
});
|
|
}
|
|
if (folderIds && folderIds.length > 0) {
|
|
await moveDataroomFolderToFolder({
|
|
folderIds: folderIds,
|
|
folderPathName: currentPath ? currentPath.split("/") : undefined,
|
|
teamId,
|
|
selectedFolder: selectedFolder.id!,
|
|
dataroomId: dataroomId,
|
|
selectedFolderPath: selectedFolder.path!,
|
|
});
|
|
}
|
|
|
|
setLoading(false);
|
|
setOpen(false); // Close the modal
|
|
setSelectedDocuments?.([]); // Clear the selected documents
|
|
setSelectedFoldersId?.([]); // Clear the selected folders
|
|
};
|
|
|
|
return (
|
|
<Dialog open={open} onOpenChange={setOpen}>
|
|
<DialogContent className="sm:max-w-[425px]">
|
|
<DialogHeader className="text-start">
|
|
<DialogTitle>
|
|
Move{" "}
|
|
<span className="font-bold">
|
|
{`${(documentIds?.length ?? 0) + (folderIds?.length ?? 0)} items`}
|
|
</span>
|
|
</DialogTitle>
|
|
<DialogDescription>Move your item to a folder.</DialogDescription>
|
|
</DialogHeader>
|
|
<form>
|
|
<div className="mb-2 max-h-[75vh] overflow-x-hidden overflow-y-scroll">
|
|
<SidebarFolderTreeSelection
|
|
dataroomId={dataroomId}
|
|
selectedFolder={selectedFolder}
|
|
setSelectedFolder={setSelectedFolder}
|
|
disableId={folderIds}
|
|
/>
|
|
</div>
|
|
|
|
<DialogFooter>
|
|
<Button
|
|
onClick={handleSubmit}
|
|
className="flex h-9 w-full gap-1"
|
|
loading={loading}
|
|
disabled={
|
|
!selectedFolder || folderIds?.includes(selectedFolder.id!)
|
|
}
|
|
>
|
|
{!selectedFolder ? (
|
|
"Select a folder"
|
|
) : (
|
|
<>
|
|
Move to{" "}
|
|
<span className="max-w-[200px] truncate font-medium">
|
|
{selectedFolder.name}
|
|
</span>
|
|
</>
|
|
)}
|
|
</Button>
|
|
</DialogFooter>
|
|
</form>
|
|
</DialogContent>
|
|
</Dialog>
|
|
);
|
|
}
|