"use client"; import { AppSidebar } from "@/components/app-sidebar" import { Breadcrumb, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator, } from "@/components/ui/breadcrumb" import { Separator } from "@/components/ui/separator" import { SidebarInset, SidebarProvider, SidebarTrigger, } from "@/components/ui/sidebar" import { Button } from "@/components/ui/button" import { Plus, Link, MonitorCog, FileDigit, Trash2, LayoutGrid, List, Pencil, Cpu, Microchip, MemoryStick, HardDrive } from "lucide-react" import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, } from "@/components/ui/card" import { Pagination, PaginationContent, PaginationEllipsis, PaginationItem, PaginationLink, PaginationNext, PaginationPrevious, } from "@/components/ui/pagination" import { AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogTitle, AlertDialogTrigger, } from "@/components/ui/alert-dialog" import { Input } from "@/components/ui/input" import { Label } from "@/components/ui/label" import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from "@/components/ui/select" import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, } from "@/components/ui/tooltip" import Cookies from "js-cookie"; import { useState, useEffect } from "react"; import axios from 'axios'; import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs" export default function Dashboard() { const [name, setName] = useState(""); const [os, setOs] = useState(""); const [ip, setIp] = useState(""); const [url, setUrl] = useState(""); const [cpu, setCpu] = useState(""); const [gpu, setGpu] = useState(""); const [ram, setRam] = useState(""); const [disk, setDisk] = useState(""); const [currentPage, setCurrentPage] = useState(1); const [maxPage, setMaxPage] = useState(1); const [servers, setServers] = useState([]); const [isGridLayout, setIsGridLayout] = useState(false); const [loading, setLoading] = useState(true); const [editId, setEditId] = useState(null); const [editName, setEditName] = useState(""); const [editOs, setEditOs] = useState(""); const [editIp, setEditIp] = useState(""); const [editUrl, setEditUrl] = useState(""); const [editCpu, setEditCpu] = useState(""); const [editGpu, setEditGpu] = useState(""); const [editRam, setEditRam] = useState(""); const [editDisk, setEditDisk] = useState(""); useEffect(() => { const savedLayout = Cookies.get('layoutPreference-servers'); setIsGridLayout(savedLayout === 'grid'); }, []); const toggleLayout = () => { const newLayout = !isGridLayout; setIsGridLayout(newLayout); Cookies.set('layoutPreference-servers', newLayout ? 'grid' : 'standard', { expires: 365, path: '/', sameSite: 'strict' }); }; const add = async () => { try { const response = await axios.post('/api/servers/add', { name, os, ip, url, cpu, gpu, ram, disk }); getServers(); } catch (error: any) { console.log(error.response.data); } } const getServers = async () => { try { setLoading(true); const response = await axios.post('/api/servers/get', { page: currentPage }); setServers(response.data.servers); console.log(response.data.servers) setMaxPage(response.data.maxPage); setLoading(false); } catch (error: any) { console.log(error.response); } } useEffect(() => { getServers(); }, [currentPage]); const handlePrevious = () => { setCurrentPage(prev => Math.max(1, prev - 1)); } const handleNext = () => { setCurrentPage(prev => Math.min(maxPage, prev + 1)); } const deleteApplication = async (id: number) => { try { await axios.post('/api/servers/delete', { id }); getServers(); } catch (error: any) { console.log(error.response.data); } } const openEditDialog = (server: any) => { setEditId(server.id); setEditName(server.name); setEditOs(server.os); setEditIp(server.ip); setEditUrl(server.url); setEditCpu(server.cpu); setEditGpu(server.gpu); setEditRam(server.ram); setEditDisk(server.disk); }; const edit = async () => { try { await axios.put('/api/servers/edit', { id: editId, name: editName, os: editOs, ip: editIp, url: editUrl, cpu: editCpu, gpu: editGpu, ram: editRam, disk: editDisk }); getServers(); setEditId(null); } catch (error: any) { console.log(error.response.data); } } return (
/ My Infrastructure Servers
Your Servers
{isGridLayout ? "Switch to list view" : "Switch to grid view"} Add an server General Hardware
setName(e.target.value)}/>
setIp(e.target.value)}/>
Link to a web interface (e.g. Proxmox or Portainer) with which the server can be managed setUrl(e.target.value)}/>
setCpu(e.target.value)}/>
setGpu(e.target.value)}/>
setRam(e.target.value)}/>
setDisk(e.target.value)}/>
Cancel Add

{!loading ?
{servers.map((server) => (
{server.name}
OS: {server.os || '-'}
IP: {server.ip || 'Nicht angegeben'}
CPU: {server.cpu || '-'}
GPU: {server.gpu || '-'}
RAM: {server.ram || '-'}
Disk: {server.disk || '-'}
{server.url && ( )}
Edit Server General Hardware
setEditIp(e.target.value)} />
setEditUrl(e.target.value)} />
setEditCpu(e.target.value)} />
setEditGpu(e.target.value)} />
setEditRam(e.target.value)} />
setEditDisk(e.target.value)} />
Cancel
))}
:
Loading...
}
1} /> {currentPage}
) }