"use client"; import React, { useMemo, useState } from "react"; import { UseDiscloseReturn, useDisclose } from "@/hooks/useDisclose"; import { FiChevronRight, FiFilePlus, FiFolderPlus, FiMoreVertical, } from "react-icons/fi"; import trpc from "@/lib/trpc"; import type { FileSchema } from "@/server/db/schema/file"; import CreateFileDialog, { CreateFileSchema } from "./createfile-dialog"; import ActionButton from "../../../../components/ui/action-button"; import { useProjectContext } from "../context"; import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger, DropdownMenuSeparator, } from "@/components/ui/dropdown-menu"; import { cn } from "@/lib/utils"; import FileIcon from "@/components/ui/file-icon"; const FileListing = () => { const { onOpenFile, onFileChanged } = useProjectContext(); const createFileDlg = useDisclose(); const files = trpc.file.getAll.useQuery(); const fileList = useMemo(() => groupFiles(files.data, null), [files.data]); return (

My Project

createFileDlg.onOpen()} /> createFileDlg.onOpen({ isDirectory: true, filename: "" }) } /> Upload File Project Settings Download Project
{fileList.map((file) => ( ))}
{ files.refetch(); if (type === "create") { onOpenFile && onOpenFile(file.id); } if (onFileChanged) { onFileChanged(file); } }} />
); }; type TFile = Omit & { children: TFile[] }; type FileItemProps = { file: TFile; createFileDlg: UseDiscloseReturn; }; const FileItem = ({ file, createFileDlg }: FileItemProps) => { const { onOpenFile, onDeleteFile } = useProjectContext(); const [isCollapsed, setCollapsed] = useState(false); return (
{isCollapsed && file.children?.length > 0 ? (
{file.children.map((file) => ( ))}
) : null}
); }; function groupFiles(files?: any[] | null, parentId?: number | null) { if (!files) { return []; } const groupedFiles: TFile[] = []; files.forEach((file) => { if (file.parentId !== parentId) { return; } groupedFiles.push(file); if (file.isDirectory) { file.children = groupFiles(files, file.id); } }); return groupedFiles; } export default FileListing;