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 (
+
+
+
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,
};
};