'use client'; import { useState } from "react"; import { Button, CircularProgress, Box, Chip, IconButton, Typography, Stack, TextField, InputAdornment, Tooltip, } from "@mui/material"; import { DataGrid, GridColDef, GridToolbarContainer, // Using the new non-deprecated QuickFilter components QuickFilter, QuickFilterControl, } from "@mui/x-data-grid"; import SyncIcon from "@mui/icons-material/Sync"; import RefreshIcon from "@mui/icons-material/Refresh"; import FolderIcon from "@mui/icons-material/Folder"; import InsertDriveFileIcon from "@mui/icons-material/InsertDriveFile"; import DeleteIcon from "@mui/icons-material/Delete"; import EditIcon from "@mui/icons-material/Edit"; import SearchIcon from '@mui/icons-material/Search'; import DownloadIcon from '@mui/icons-material/Download'; import OpenInNewIcon from '@mui/icons-material/OpenInNew'; import { syncOneDrive } from "./sync-actions"; import { deleteFileNodeAction } from "./actions"; import { useRouter } from "next/navigation"; /** * UPDATED TOOLBAR: Uses the new QuickFilter structure to avoid deprecation */ function CustomToolbar() { return ( Library ( ), }, }} /> )} /> ); } interface DashboardViewProps { initialFiles: any[]; user?: { id?: string; role?: string; }; } export default function DashboardView({ initialFiles, user }: DashboardViewProps) { const [loading, setLoading] = useState(false); const [isRefreshing, setIsRefreshing] = useState(false); const router = useRouter(); const isAdmin = user?.role === "ADMIN"; const getVirtualPath = (parentId: string | null): string => { if (!parentId) return "WebCalibre"; const parent = initialFiles.find((f) => f.id === parentId); if (!parent) return "WebCalibre"; const prefix = parent.parentId ? `${getVirtualPath(parent.parentId)} / ` : ""; return `${prefix}${parent.name}`; }; const handleSync = async () => { setLoading(true); try { await syncOneDrive(); router.refresh(); } catch (error) { console.error("Sync failed:", error); } finally { setLoading(false); } }; const handleRefresh = () => { setIsRefreshing(true); router.refresh(); setTimeout(() => setIsRefreshing(false), 800); }; const handleDelete = async (id: string, name: string) => { if (!confirm(`Are you sure you want to delete "${name}"?`)) return; try { await deleteFileNodeAction(id); router.refresh(); } catch (error: any) { alert(error.message || "Failed to delete file"); } }; const handleDownload = (id: string) => { window.location.href = `/api/download?id=${id}&mode=attachment`; }; const handleViewInTab = (id: string) => { window.open(`/api/download?id=${id}&mode=inline`, '_blank'); }; const columns: GridColDef[] = [ { field: "name", headerName: "Name", flex: 1.5, minWidth: 250, renderCell: (params) => ( {params.row.isFolder ? : } {params.value} ) }, { field: "parentId", headerName: "Location", flex: 1, renderCell: (params) => }, { field: "description", headerName: "Description", flex: 1 }, { field: "type", headerName: "Type", width: 120, valueGetter: (value, row) => row.metadata?.type || (row.isFolder ? "Folder" : "File"), renderCell: (params) => ( {params.value} ) }, { field: "size", headerName: "Size", width: 100, renderCell: (params) => params.row.isFolder ? "--" : `${(Number(params.value) / 1024 / 1024).toFixed(2)} MB` }, { field: "actions", headerName: "Actions", width: 180, align: 'right', renderCell: (params) => { const isOwner = params.row.ownerId === user?.id; const isFolder = params.row.isFolder; return ( {!isFolder && ( <> handleViewInTab(params.row.id)}> handleDownload(params.row.id)}> )} {(isAdmin || isOwner) && ( <> router.push(`/update/${params.row.id}`)} > handleDelete(params.row.id, params.row.name)} > )} ); } } ]; return ( ); }