diff --git a/app/api/sites/get/route.ts b/app/api/sites/get/route.ts index 7a8e700..3a62a7a 100644 --- a/app/api/sites/get/route.ts +++ b/app/api/sites/get/route.ts @@ -6,11 +6,19 @@ interface QueryParams { } export async function GET(request: NextRequest) { - const { siteId } = request.nextUrl.searchParams as unknown as QueryParams; - const site = await prisma.site.findUnique({ - where: { - id: Number(siteId), - }, - }); - return NextResponse.json(site); + const searchParams = request.nextUrl.searchParams; + const siteId = searchParams.get("siteId"); + + try { + const site = await prisma.site.findUnique({ + where: { + id: Number(siteId), + }, + }); + + return NextResponse.json({ site }); + } catch (error) { + console.error("Error fetching site:", error); + return NextResponse.json({ error: "Failed to fetch site" }, { 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 e4cb477..1f3b604 100644 --- a/app/dashboard/sites/[siteId]/SitePage.tsx +++ b/app/dashboard/sites/[siteId]/SitePage.tsx @@ -1,5 +1,7 @@ "use client" import Sidebar from "@/components/Sidebar"; +import useSite from "@/hooks/useSite"; +import { useEffect } from "react"; interface SitesPageProps { username: string; @@ -8,6 +10,13 @@ interface SitesPageProps { } export default function SitesPage({ username, name, siteId }: SitesPageProps) { + const { site, loadSite, setSiteId } = useSite(); + useEffect(() => { + console.log(siteId); + if (siteId) { + setSiteId(siteId); + } + }, [siteId, setSiteId]); return (
-

Site

+

Site - {site.name}

- Manage your sites. Sites are real-world locations where you can - monitor your assets & add networks. + Description: {site.description}

diff --git a/hooks/useSite.ts b/hooks/useSite.ts new file mode 100644 index 0000000..7751bca --- /dev/null +++ b/hooks/useSite.ts @@ -0,0 +1,40 @@ +import { useState, useEffect, useCallback } from "react"; +import axios from "axios"; + +interface Site { + id: number; + name: string; + description: string; + networks: string[]; +} + +const useSite = () => { + const [site, setSite] = useState({ + id: 0, + name: "", + description: "", + networks: [] + }); + const [siteId, setSiteId] = useState(""); + + const loadSite = useCallback(() => { + if (!siteId) return; + axios.get('/api/sites/get', { + params: { siteId } + }).then((response) => { + setSite(response.data.site); + }); + }, [siteId]); + + useEffect(() => { + loadSite(); + }, [loadSite]); + + return { + site, + loadSite, + setSiteId, + }; +}; + +export default useSite; \ No newline at end of file