2025-05-18 13:31:25 +02:00
|
|
|
"use client"
|
2025-05-18 15:14:08 +02:00
|
|
|
import Sidebar from "@/components/Sidebar"
|
|
|
|
|
import useSite from "@/hooks/useSite"
|
|
|
|
|
import { useEffect, useState } from "react"
|
|
|
|
|
import { EditModeToggle } from "@/components/EditModeToggle"
|
2025-05-18 15:41:20 +02:00
|
|
|
import AddNetwork from "@/components/dialogues/AddNetwork"
|
2025-05-18 17:07:35 +02:00
|
|
|
import { Plus, Pencil, Trash } from "lucide-react"
|
2025-05-18 16:59:16 +02:00
|
|
|
import EditNetwork from "@/components/dialogues/EditNetwork"
|
2025-05-18 17:07:35 +02:00
|
|
|
import DeleteNetwork from "@/components/dialogues/DeleteNetwork"
|
2025-05-18 13:31:25 +02:00
|
|
|
|
|
|
|
|
interface SitesPageProps {
|
2025-05-18 15:14:08 +02:00
|
|
|
username: string
|
|
|
|
|
name: string
|
|
|
|
|
siteId: string
|
2025-05-18 13:31:25 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export default function SitesPage({ username, name, siteId }: SitesPageProps) {
|
2025-05-18 15:14:08 +02:00
|
|
|
const { site, loadSite, setSiteId } = useSite()
|
|
|
|
|
const [isEditMode, setIsEditMode] = useState(false)
|
|
|
|
|
|
|
|
|
|
useEffect(() => {
|
|
|
|
|
if (siteId) {
|
|
|
|
|
setSiteId(siteId)
|
|
|
|
|
}
|
|
|
|
|
}, [siteId, setSiteId])
|
|
|
|
|
|
|
|
|
|
return (
|
|
|
|
|
<Sidebar username={username} fullName={name} breadcrumbPath={["/", "Dashboard", "Ressources", "Sites", site.name]}>
|
|
|
|
|
<main>
|
|
|
|
|
<div className="flex flex-col gap-4">
|
|
|
|
|
<div className="flex gap-4 items-center bg-base-200 p-4 rounded-2xl">
|
|
|
|
|
<div className="flex-1">
|
|
|
|
|
<div className="w-full flex justify-between items-center">
|
|
|
|
|
<h1 className="text-2xl font-bold w-1/2">Site - {site.name}</h1>
|
|
|
|
|
<div className="w-1/2 flex justify-end">
|
|
|
|
|
<EditModeToggle onToggle={setIsEditMode} />
|
2025-05-18 13:31:25 +02:00
|
|
|
</div>
|
|
|
|
|
</div>
|
2025-05-18 15:14:08 +02:00
|
|
|
<p className="text-sm opacity-70">Description: {site.description || "No description"}</p>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<div className="flex gap-4 items-center bg-base-200 p-4 rounded-2xl">
|
|
|
|
|
<div className="flex-1">
|
2025-05-18 15:41:20 +02:00
|
|
|
<div className="flex justify-between items-center">
|
2025-05-18 15:14:08 +02:00
|
|
|
<h1 className="text-2xl font-bold">Networks</h1>
|
2025-05-18 15:41:20 +02:00
|
|
|
{isEditMode ? (
|
|
|
|
|
<button className="btn btn-primary btn-sm px-2" onClick={() => document.getElementById('add_network')?.showModal()}>
|
|
|
|
|
<Plus className="w-5 h-5" />
|
|
|
|
|
</button>
|
|
|
|
|
) : null}
|
|
|
|
|
</div>
|
2025-05-18 15:14:08 +02:00
|
|
|
<p className="text-sm opacity-70">
|
2025-05-18 16:05:14 +02:00
|
|
|
<div className="overflow-x-auto">
|
|
|
|
|
<table className="table">
|
|
|
|
|
<thead>
|
|
|
|
|
<tr>
|
|
|
|
|
<th></th>
|
|
|
|
|
<th>Network Name</th>
|
|
|
|
|
<th>IPv4 Subnet</th>
|
|
|
|
|
<th>IPv6 Subnet</th>
|
|
|
|
|
<th>Gateway</th>
|
2025-05-18 17:07:35 +02:00
|
|
|
{isEditMode ? (
|
|
|
|
|
<th className="w-20">Actions</th>
|
|
|
|
|
) : null}
|
2025-05-18 16:05:14 +02:00
|
|
|
</tr>
|
|
|
|
|
</thead>
|
|
|
|
|
<tbody>
|
|
|
|
|
{site.networks?.map((network, index) => (
|
|
|
|
|
<tr key={index}>
|
|
|
|
|
<th>{index + 1}</th>
|
|
|
|
|
<td>{network.name}</td>
|
|
|
|
|
<td>{network.ipv4Subnet}</td>
|
|
|
|
|
<td>{network.ipv6Subnet}</td>
|
|
|
|
|
<td>{network.gateway}</td>
|
2025-05-18 17:07:35 +02:00
|
|
|
{isEditMode ? (
|
|
|
|
|
<td className="px-0">
|
|
|
|
|
<div className="flex gap-1 justify-center">
|
|
|
|
|
<button
|
|
|
|
|
className="btn btn-primary btn-s px-2"
|
|
|
|
|
onClick={() => document.getElementById('edit_network')?.showModal()}
|
|
|
|
|
>
|
|
|
|
|
<Pencil className="w-3 h-3" />
|
|
|
|
|
</button>
|
|
|
|
|
<button
|
|
|
|
|
className="btn btn-error btn-s px-2"
|
|
|
|
|
onClick={() => document.getElementById('delete_network')?.showModal()}
|
|
|
|
|
>
|
|
|
|
|
<Trash className="w-3 h-3" />
|
|
|
|
|
</button>
|
|
|
|
|
</div>
|
2025-05-18 16:59:16 +02:00
|
|
|
<EditNetwork siteId={site.id} network={network} />
|
2025-05-18 17:07:35 +02:00
|
|
|
<DeleteNetwork networkId={network.id} />
|
2025-05-18 16:59:16 +02:00
|
|
|
</td>
|
2025-05-18 17:07:35 +02:00
|
|
|
) : null}
|
2025-05-18 16:05:14 +02:00
|
|
|
</tr>
|
|
|
|
|
))}
|
|
|
|
|
</tbody>
|
|
|
|
|
</table>
|
|
|
|
|
</div>
|
2025-05-18 15:14:08 +02:00
|
|
|
</p>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
2025-05-18 15:41:20 +02:00
|
|
|
<AddNetwork siteId={site.id} />
|
2025-05-18 15:14:08 +02:00
|
|
|
</div>
|
|
|
|
|
</main>
|
|
|
|
|
</Sidebar>
|
|
|
|
|
)
|
2025-05-18 16:05:14 +02:00
|
|
|
}
|