From 56571ba65a5eb208b347a1cfe507d65156075773 Mon Sep 17 00:00:00 2001 From: headlesdev Date: Sun, 18 May 2025 16:59:16 +0200 Subject: [PATCH] Edit network --- app/api/sites/networks/edit/route.ts | 33 +++++++ app/dashboard/sites/[siteId]/SitePage.tsx | 10 +- components/dialogues/EditNetwork.tsx | 109 ++++++++++++++++++++++ hooks/useNetworks.ts | 5 + 4 files changed, 156 insertions(+), 1 deletion(-) create mode 100644 app/api/sites/networks/edit/route.ts create mode 100644 components/dialogues/EditNetwork.tsx diff --git a/app/api/sites/networks/edit/route.ts b/app/api/sites/networks/edit/route.ts new file mode 100644 index 0000000..2897f0b --- /dev/null +++ b/app/api/sites/networks/edit/route.ts @@ -0,0 +1,33 @@ +import { NextRequest, NextResponse } from "next/server"; +import prisma from "@/app/prisma"; + +interface Body { + id: string; + name: string; + ipv4Subnet?: string; + ipv6Subnet?: string; + gateway?: string; +} + +export async function POST(request: NextRequest) { + const body: Body = await request.json(); + + try { + const network = await prisma.network.update({ + where: { + id: Number(body.id), + }, + data: { + name: body.name, + ipv4Subnet: body.ipv4Subnet, + ipv6Subnet: body.ipv6Subnet, + gateway: body.gateway, + }, + }); + + return NextResponse.json({ network }, { status: 201 }); + } catch (error) { + console.error("Error editing network:", error); + return NextResponse.json({ error: "Failed to edit network" }, { status: 500 }); + } +} \ No newline at end of file diff --git a/app/dashboard/sites/[siteId]/SitePage.tsx b/app/dashboard/sites/[siteId]/SitePage.tsx index 4a3350c..8710665 100644 --- a/app/dashboard/sites/[siteId]/SitePage.tsx +++ b/app/dashboard/sites/[siteId]/SitePage.tsx @@ -4,7 +4,8 @@ import useSite from "@/hooks/useSite" import { useEffect, useState } from "react" import { EditModeToggle } from "@/components/EditModeToggle" import AddNetwork from "@/components/dialogues/AddNetwork" -import { Plus } from "lucide-react" +import { Plus, Pencil } from "lucide-react" +import EditNetwork from "@/components/dialogues/EditNetwork" interface SitesPageProps { username: string @@ -57,6 +58,7 @@ export default function SitesPage({ username, name, siteId }: SitesPageProps) { IPv4 Subnet IPv6 Subnet Gateway + @@ -67,6 +69,12 @@ export default function SitesPage({ username, name, siteId }: SitesPageProps) { {network.ipv4Subnet} {network.ipv6Subnet} {network.gateway} + + + + ))} diff --git a/components/dialogues/EditNetwork.tsx b/components/dialogues/EditNetwork.tsx new file mode 100644 index 0000000..860c0a6 --- /dev/null +++ b/components/dialogues/EditNetwork.tsx @@ -0,0 +1,109 @@ +"use client"; + +import { useState } from "react"; +import ErrorToast from "@/components/Error"; +import SuccessToast from "@/components/Success"; +import useNetworks from "@/hooks/useNetworks"; +import { Network } from "@/app/types"; + +interface EditNetworkProps { + onNetworkAdded?: () => void; + siteId: string; + network: Network; +} + +export default function EditNetwork({ onNetworkAdded, siteId, network }: EditNetworkProps) { + const [editName, setEditName] = useState(network.name); + const [editIpv4Subnet, setEditIpv4Subnet] = useState(network.ipv4Subnet); + const [editIpv6Subnet, setEditIpv6Subnet] = useState(network.ipv6Subnet); + const [editGateway, setEditGateway] = useState(network.gateway); + const [error, setError] = useState(""); + const [success, setSuccess] = useState(""); + const { editNetwork } = useNetworks(); + + + return ( +
+ +
+
+
+

Edit Network

+

Provide details for the network

+
+ +
+
+ + setEditName(e.target.value)} + /> +
+ +
+ + setEditIpv4Subnet(e.target.value)} + /> +
+
+ + setEditIpv6Subnet(e.target.value)} + /> +
+
+ + setEditGateway(e.target.value)} + /> +
+
+ +
+
+ + +
+
+
+
+
+ setError('')} /> + setSuccess('')} /> +
+ ) +} \ No newline at end of file diff --git a/hooks/useNetworks.ts b/hooks/useNetworks.ts index a60d2df..bcec1a0 100644 --- a/hooks/useNetworks.ts +++ b/hooks/useNetworks.ts @@ -8,6 +8,10 @@ const useNetworks = () => { axios.post('/api/sites/networks/add', network); }; + const editNetwork = (network: Network) => { + axios.post('/api/sites/networks/edit', network); + }; + const deleteNetwork = (networkId: string) => { axios.delete('/api/sites/networks/delete', { params: { networkId } @@ -16,6 +20,7 @@ const useNetworks = () => { return { addNetwork, + editNetwork, deleteNetwork, }; };