mirror of
https://github.com/crocofied/CoreControl.git
synced 2025-12-29 16:14:43 +00:00
Site view
This commit is contained in:
@@ -6,11 +6,19 @@ interface QueryParams {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export async function GET(request: NextRequest) {
|
export async function GET(request: NextRequest) {
|
||||||
const { siteId } = request.nextUrl.searchParams as unknown as QueryParams;
|
const searchParams = request.nextUrl.searchParams;
|
||||||
const site = await prisma.site.findUnique({
|
const siteId = searchParams.get("siteId");
|
||||||
where: {
|
|
||||||
id: Number(siteId),
|
try {
|
||||||
},
|
const site = await prisma.site.findUnique({
|
||||||
});
|
where: {
|
||||||
return NextResponse.json(site);
|
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 });
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -1,5 +1,7 @@
|
|||||||
"use client"
|
"use client"
|
||||||
import Sidebar from "@/components/Sidebar";
|
import Sidebar from "@/components/Sidebar";
|
||||||
|
import useSite from "@/hooks/useSite";
|
||||||
|
import { useEffect } from "react";
|
||||||
|
|
||||||
interface SitesPageProps {
|
interface SitesPageProps {
|
||||||
username: string;
|
username: string;
|
||||||
@@ -8,6 +10,13 @@ interface SitesPageProps {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export default function SitesPage({ username, name, siteId }: 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 (
|
return (
|
||||||
<Sidebar
|
<Sidebar
|
||||||
username={username}
|
username={username}
|
||||||
@@ -17,10 +26,9 @@ export default function SitesPage({ username, name, siteId }: SitesPageProps) {
|
|||||||
<main>
|
<main>
|
||||||
<div className="flex gap-4 items-center">
|
<div className="flex gap-4 items-center">
|
||||||
<div className="flex-1">
|
<div className="flex-1">
|
||||||
<h1 className="text-2xl font-bold">Site</h1>
|
<h1 className="text-2xl font-bold">Site - {site.name}</h1>
|
||||||
<p className="text-sm opacity-70">
|
<p className="text-sm opacity-70">
|
||||||
Manage your sites. Sites are real-world locations where you can
|
Description: {site.description}
|
||||||
monitor your assets & add networks.
|
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
40
hooks/useSite.ts
Normal file
40
hooks/useSite.ts
Normal file
@@ -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<Site>({
|
||||||
|
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;
|
||||||
Reference in New Issue
Block a user