diff --git a/app/api/sites/delete/route.ts b/app/api/sites/delete/route.ts
index bd16574..ff6dd87 100644
--- a/app/api/sites/delete/route.ts
+++ b/app/api/sites/delete/route.ts
@@ -1,13 +1,10 @@
import { NextRequest, NextResponse } from "next/server";
import prisma from "@/app/prisma";
-interface Body {
- siteId: string;
-}
export async function DELETE(request: NextRequest) {
- const body: Body = await request.json();
- const { siteId } = body;
+ const searchParams = request.nextUrl.searchParams;
+ const siteId = searchParams.get("siteId");
try {
const site = await prisma.site.delete({
diff --git a/app/api/sites/edit/route.ts b/app/api/sites/edit/route.ts
index a81325c..882dd07 100644
--- a/app/api/sites/edit/route.ts
+++ b/app/api/sites/edit/route.ts
@@ -1,19 +1,21 @@
import { NextRequest, NextResponse } from "next/server";
import prisma from "@/app/prisma";
+import { Network } from "@/app/types";
interface Body {
- siteId: string;
+ id: string;
name: string;
description: string;
+ networks: Network[];
}
export async function POST(request: NextRequest) {
const body: Body = await request.json();
- const { siteId, name, description } = body;
+ const { id, name, description, networks } = body;
try {
const site = await prisma.site.update({
- where: { id: Number(siteId) },
+ where: { id: Number(id) },
data: { name, description },
});
diff --git a/app/dashboard/sites/[siteId]/SitePage.tsx b/app/dashboard/sites/[siteId]/SitePage.tsx
index c2715bd..04d8e3d 100644
--- a/app/dashboard/sites/[siteId]/SitePage.tsx
+++ b/app/dashboard/sites/[siteId]/SitePage.tsx
@@ -7,6 +7,8 @@ import AddNetwork from "@/components/dialogues/AddNetwork"
import { Plus, Pencil, Trash, Info, Building2, Network as NetworkIcon, Globe, Cpu } from "lucide-react"
import EditNetwork from "@/components/dialogues/EditNetwork"
import DeleteNetwork from "@/components/dialogues/DeleteNetwork"
+import EditSite from "@/components/dialogues/EditSite"
+import DeleteSite from "@/components/dialogues/DeleteSite"
interface SitesPageProps {
username: string
@@ -31,8 +33,24 @@ export default function SitesPage({ username, name, siteId }: SitesPageProps) {
-
Site - {site.name}
-
+
Site - {site.name}
+
+ {isEditMode && (
+ <>
+
+
+ >
+ )}
@@ -132,6 +150,8 @@ export default function SitesPage({ username, name, siteId }: SitesPageProps) {
+
+
diff --git a/components/dialogues/DeleteSite.tsx b/components/dialogues/DeleteSite.tsx
new file mode 100644
index 0000000..6205b86
--- /dev/null
+++ b/components/dialogues/DeleteSite.tsx
@@ -0,0 +1,54 @@
+"use client";
+import axios from "axios"
+import { useRouter } from "next/navigation"
+import { Trash2, AlertTriangle } from "lucide-react";
+import useSite from "@/hooks/useSite";
+
+interface DeleteSiteProps {
+ siteId: string;
+}
+
+export default function DeleteSite({ siteId }: DeleteSiteProps) {
+ const router = useRouter()
+ const { deleteSite } = useSite()
+
+ return (
+
+
+
+ );
+}
diff --git a/components/dialogues/EditSite.tsx b/components/dialogues/EditSite.tsx
new file mode 100644
index 0000000..e0ea7ab
--- /dev/null
+++ b/components/dialogues/EditSite.tsx
@@ -0,0 +1,91 @@
+"use client"
+import { useState, useEffect } from "react"
+import axios from "axios"
+import { Site } from "@/app/types"
+import { PencilLine, Building2, FileText } from "lucide-react"
+import ErrorToast from "@/components/Error"
+import SuccessToast from "@/components/Success"
+import useSite from "@/hooks/useSite"
+
+interface EditSiteProps {
+ site: Site
+}
+
+export default function EditSite({ site }: EditSiteProps) {
+ const [name, setName] = useState(site.name)
+ const [description, setDescription] = useState(site.description || "")
+ const [error, setError] = useState("")
+ const [success, setSuccess] = useState("")
+ const { editSite } = useSite()
+
+ useEffect(() => {
+ setName(site.name)
+ setDescription(site.description || "")
+ }, [site])
+
+ return (
+
+
+
setError('')} />
+ setSuccess('')} />
+
+ )
+}
\ No newline at end of file
diff --git a/hooks/useSite.ts b/hooks/useSite.ts
index 99ded96..032f7a5 100644
--- a/hooks/useSite.ts
+++ b/hooks/useSite.ts
@@ -24,10 +24,33 @@ const useSite = () => {
loadSite();
}, [loadSite]);
+ const editSite = (site: Site) => {
+ axios.post('/api/sites/edit', site)
+ .then(() => {
+ setSite(site);
+ })
+ .catch(err => {
+ console.error(err);
+ })
+ };
+
+ const deleteSite = (siteId: string) => {
+ axios.delete('/api/sites/delete', {
+ params: { siteId }
+ })
+ .then(() => {
+ setSiteId('');
+ })
+ .catch(err => {
+ console.error(err);
+ })
+ };
return {
site,
loadSite,
setSiteId,
+ editSite,
+ deleteSite,
};
};