From 3580f7f640ef5e015598c9299db012acbe455f2b Mon Sep 17 00:00:00 2001 From: headlessdev Date: Sat, 19 Apr 2025 15:46:01 +0200 Subject: [PATCH] Add icon field to AddRequest and EditRequest interfaces, and update Dashboard component to support icon selection and display. Enhanced server creation and editing functionality with icon integration. --- app/api/servers/add/route.ts | 4 +- app/api/servers/edit/route.ts | 4 +- app/dashboard/servers/Servers.tsx | 131 ++++++++++++++++++++++++++++-- 3 files changed, 130 insertions(+), 9 deletions(-) diff --git a/app/api/servers/add/route.ts b/app/api/servers/add/route.ts index 34634ce..e29924c 100644 --- a/app/api/servers/add/route.ts +++ b/app/api/servers/add/route.ts @@ -5,6 +5,7 @@ interface AddRequest { host: boolean; hostServer: number; name: string; + icon: string; os: string; ip: string; url: string; @@ -18,13 +19,14 @@ interface AddRequest { export async function POST(request: NextRequest) { try { const body: AddRequest = await request.json(); - const { host, hostServer, name, os, ip, url, cpu, gpu, ram, disk } = body; + const { host, hostServer, name, icon, os, ip, url, cpu, gpu, ram, disk } = body; const server = await prisma.server.create({ data: { host, hostServer, name, + icon, os, ip, url, diff --git a/app/api/servers/edit/route.ts b/app/api/servers/edit/route.ts index 7a5abb4..e0ef2f6 100644 --- a/app/api/servers/edit/route.ts +++ b/app/api/servers/edit/route.ts @@ -6,6 +6,7 @@ interface EditRequest { hostServer: number; id: number; name: string; + icon: string; os: string; ip: string; url: string; @@ -18,7 +19,7 @@ interface EditRequest { export async function PUT(request: NextRequest) { try { const body: EditRequest = await request.json(); - const { host, hostServer, id, name, os, ip, url, cpu, gpu, ram, disk } = body; + const { host, hostServer, id, name, icon, os, ip, url, cpu, gpu, ram, disk } = body; const existingServer = await prisma.server.findUnique({ where: { id } }); if (!existingServer) { @@ -38,6 +39,7 @@ export async function PUT(request: NextRequest) { host, hostServer: newHostServer, name, + icon, os, ip, url, diff --git a/app/dashboard/servers/Servers.tsx b/app/dashboard/servers/Servers.tsx index 059bd71..75b9deb 100644 --- a/app/dashboard/servers/Servers.tsx +++ b/app/dashboard/servers/Servers.tsx @@ -77,10 +77,12 @@ import axios from "axios"; import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs"; import { Checkbox } from "@/components/ui/checkbox"; import { ScrollArea } from "@/components/ui/scroll-area"; +import { DynamicIcon } from 'lucide-react/dynamic'; interface Server { id: number; name: string; + icon: string; host: boolean; hostServer: number | null; os?: string; @@ -103,6 +105,7 @@ export default function Dashboard() { const [host, setHost] = useState(false); const [hostServer, setHostServer] = useState(0); const [name, setName] = useState(""); + const [icon, setIcon] = useState(""); const [os, setOs] = useState(""); const [ip, setIp] = useState(""); const [url, setUrl] = useState(""); @@ -122,6 +125,7 @@ export default function Dashboard() { const [editHost, setEditHost] = useState(false); const [editHostServer, setEditHostServer] = useState(0); const [editName, setEditName] = useState(""); + const [editIcon, setEditIcon] = useState(""); const [editOs, setEditOs] = useState(""); const [editIp, setEditIp] = useState(""); const [editUrl, setEditUrl] = useState(""); @@ -160,6 +164,7 @@ export default function Dashboard() { host, hostServer, name, + icon, os, ip, url, @@ -171,7 +176,7 @@ export default function Dashboard() { setIsAddDialogOpen(false); setHost(false); setHostServer(0); - + setIcon(""); setName(""); setOs(""); setIp(""); @@ -234,6 +239,7 @@ export default function Dashboard() { setEditHost(server.host); setEditHostServer(server.hostServer || null); setEditName(server.name); + setEditIcon(server.icon || ""); setEditOs(server.os || ""); setEditIp(server.ip || ""); setEditUrl(server.url || ""); @@ -252,6 +258,7 @@ export default function Dashboard() { host: editHost, hostServer: editHostServer, name: editName, + icon: editIcon, os: editOs, ip: editIp, url: editUrl, @@ -319,6 +326,17 @@ export default function Dashboard() { return hostServer ? hostServer.name : ""; }; + const icons = [ + "server", "network", "database", "cloud", + "terminal", "code", "cpu", "hard-drive", "router", + "activity", "monitor", "bug", "settings", "shield", + "lock", "key", "wifi", "antenna", "power", + "folder", "file-code", "clipboard-list", "binary", "command", + "git-branch", "git-commit", "git-merge", "git-pull-request", "github", + "life-buoy", "alarm-check", "alert-triangle", "check-circle", "x-octagon" + ]; + + return ( @@ -390,6 +408,37 @@ export default function Dashboard() {
+
+
+ + +
+
+ +
+ {icon && } +
+
+
- {server.name} +
+ {server.icon && } + {server.name} +
{server.isVM && ( VM )} @@ -728,9 +780,40 @@ export default function Dashboard() {
-
-