import { useState } from "react"; import { useNavigate } from "react-router-dom"; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "@/components/ui/table"; import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { Badge } from "@/components/ui/badge"; import { Progress } from "@/components/ui/progress"; import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuSeparator, DropdownMenuTrigger } from "@/components/ui/dropdown-menu"; import { RefreshCw, Search, Eye, Activity, MoreHorizontal, Pause, Play, Edit, Trash2 } from "lucide-react"; import { Server } from "@/types/server.types"; import { ServerStatusBadge } from "./ServerStatusBadge"; import { OSTypeIcon } from "./OSTypeIcon"; import { serverService } from "@/services/serverService"; interface ServerTableProps { servers: Server[]; isLoading: boolean; onRefresh: () => void; } export const ServerTable = ({ servers, isLoading, onRefresh }: ServerTableProps) => { const [searchTerm, setSearchTerm] = useState(""); const [pausedServers, setPausedServers] = useState>(new Set()); const navigate = useNavigate(); const filteredServers = servers.filter(server => server.name.toLowerCase().includes(searchTerm.toLowerCase()) || server.hostname.toLowerCase().includes(searchTerm.toLowerCase()) || server.ip_address.toLowerCase().includes(searchTerm.toLowerCase()) ); const handleViewDetails = (serverId: string) => { navigate(`/server-detail/${serverId}`); }; const handleViewContainers = (serverId: string) => { navigate(`/container-monitoring/${serverId}`); }; const handlePauseResume = (serverId: string) => { const isPaused = pausedServers.has(serverId); if (isPaused) { setPausedServers(prev => { const newSet = new Set(prev); newSet.delete(serverId); return newSet; }); console.log('Resume server monitoring:', serverId); } else { setPausedServers(prev => new Set(prev).add(serverId)); console.log('Pause server monitoring:', serverId); } }; const handleEdit = (serverId: string) => { // TODO: Implement edit functionality console.log('Edit server:', serverId); }; const handleDelete = (serverId: string) => { // TODO: Implement delete functionality console.log('Delete server:', serverId); }; if (isLoading) { return ( Servers
Loading servers...
); } return (
Servers
setSearchTerm(e.target.value)} className="pl-8" />
{filteredServers.length === 0 ? (

No servers found

) : (
Name Status OS IP Address CPU Memory Disk Uptime Docker Last Checked Actions {filteredServers.map((server) => { const cpuUsage = server.cpu_usage || 0; const memoryUsage = server.ram_total > 0 ? (server.ram_used / server.ram_total) * 100 : 0; const diskUsage = server.disk_total > 0 ? (server.disk_used / server.disk_total) * 100 : 0; const isPaused = pausedServers.has(server.id); return (
{server.name}
{server.hostname}
{server.os_type}
{server.ip_address}
{cpuUsage.toFixed(1)}% {server.cpu_cores} cores
80 ? "bg-red-500" : cpuUsage > 60 ? "bg-yellow-500" : "bg-green-500" } />
{serverService.formatBytes(server.ram_used)} {memoryUsage.toFixed(1)}%
90 ? "bg-red-500" : memoryUsage > 75 ? "bg-yellow-500" : "bg-blue-500" } />
{serverService.formatBytes(server.disk_used)} {diskUsage.toFixed(1)}%
95 ? "bg-red-500" : diskUsage > 85 ? "bg-yellow-500" : "bg-orange-500" } />
{server.uptime}
{server.docker === 'true' ? ( Enabled ) : ( Disabled )}
{new Date(server.last_checked).toLocaleString()}
handleViewDetails(server.id)}> View Server Detail {server.docker === 'true' && ( handleViewContainers(server.id)}> Container Monitoring )} handlePauseResume(server.id)}> {isPaused ? ( <> Resume Monitoring ) : ( <> Pause Monitoring )} handleEdit(server.id)}> Edit Server handleDelete(server.id)} className="text-red-600 focus:text-red-600" > Delete Server
); })}
)}
); };