From b07642516467499ebf6610aa96d2ed76f7ca62c6 Mon Sep 17 00:00:00 2001 From: Adam Shiervani Date: Tue, 20 May 2025 13:49:09 +0200 Subject: [PATCH] refactor(ui): extract network information into separate components - Create DhcpLeaseCard component - Create Ipv6NetworkCard component --- ui/src/components/DhcpLeaseCard.tsx | 212 ++++++++++++++++++++++++++ ui/src/components/Ipv6NetworkCard.tsx | 93 +++++++++++ 2 files changed, 305 insertions(+) create mode 100644 ui/src/components/DhcpLeaseCard.tsx create mode 100644 ui/src/components/Ipv6NetworkCard.tsx diff --git a/ui/src/components/DhcpLeaseCard.tsx b/ui/src/components/DhcpLeaseCard.tsx new file mode 100644 index 0000000..8a6e59c --- /dev/null +++ b/ui/src/components/DhcpLeaseCard.tsx @@ -0,0 +1,212 @@ +import { LuRefreshCcw } from "react-icons/lu"; + +import { Button } from "@/components/Button"; +import { GridCard } from "@/components/Card"; +import { LifeTimeLabel } from "@/routes/devices.$id.settings.network"; +import { NetworkState } from "@/hooks/stores"; + +export default function DhcpLeaseCard({ + networkState, + setShowRenewLeaseConfirm, +}: { + networkState: NetworkState; + setShowRenewLeaseConfirm: (show: boolean) => void; +}) { + return ( + +
+
+

+ DHCP Lease Information +

+ +
+
+ {networkState?.dhcp_lease?.ip && ( +
+ + IP Address + + + {networkState?.dhcp_lease?.ip} + +
+ )} + + {networkState?.dhcp_lease?.netmask && ( +
+ + Subnet Mask + + + {networkState?.dhcp_lease?.netmask} + +
+ )} + + {networkState?.dhcp_lease?.dns && ( +
+ + DNS Servers + + + {networkState?.dhcp_lease?.dns.map(dns =>
{dns}
)} +
+
+ )} + + {networkState?.dhcp_lease?.broadcast && ( +
+ + Broadcast + + + {networkState?.dhcp_lease?.broadcast} + +
+ )} + + {networkState?.dhcp_lease?.domain && ( +
+ + Domain + + + {networkState?.dhcp_lease?.domain} + +
+ )} + + {networkState?.dhcp_lease?.ntp_servers && + networkState?.dhcp_lease?.ntp_servers.length > 0 && ( +
+
+ NTP Servers +
+
+ {networkState?.dhcp_lease?.ntp_servers.map(server => ( +
{server}
+ ))} +
+
+ )} + + {networkState?.dhcp_lease?.hostname && ( +
+ + Hostname + + + {networkState?.dhcp_lease?.hostname} + +
+ )} +
+ +
+ {networkState?.dhcp_lease?.routers && + networkState?.dhcp_lease?.routers.length > 0 && ( +
+ + Gateway + + + {networkState?.dhcp_lease?.routers.map(router => ( +
{router}
+ ))} +
+
+ )} + + {networkState?.dhcp_lease?.server_id && ( +
+ + DHCP Server + + + {networkState?.dhcp_lease?.server_id} + +
+ )} + + {networkState?.dhcp_lease?.lease_expiry && ( +
+ + Lease Expires + + + + +
+ )} + + {networkState?.dhcp_lease?.mtu && ( +
+ MTU + + {networkState?.dhcp_lease?.mtu} + +
+ )} + + {networkState?.dhcp_lease?.ttl && ( +
+ TTL + + {networkState?.dhcp_lease?.ttl} + +
+ )} + + {networkState?.dhcp_lease?.bootp_next_server && ( +
+ + Boot Next Server + + + {networkState?.dhcp_lease?.bootp_next_server} + +
+ )} + + {networkState?.dhcp_lease?.bootp_server_name && ( +
+ + Boot Server Name + + + {networkState?.dhcp_lease?.bootp_server_name} + +
+ )} + + {networkState?.dhcp_lease?.bootp_file && ( +
+ + Boot File + + + {networkState?.dhcp_lease?.bootp_file} + +
+ )} +
+
+ +
+
+
+
+
+ ); +} diff --git a/ui/src/components/Ipv6NetworkCard.tsx b/ui/src/components/Ipv6NetworkCard.tsx new file mode 100644 index 0000000..a31b78e --- /dev/null +++ b/ui/src/components/Ipv6NetworkCard.tsx @@ -0,0 +1,93 @@ +import { NetworkState } from "../hooks/stores"; +import { LifeTimeLabel } from "../routes/devices.$id.settings.network"; + +import { GridCard } from "./Card"; + +export default function Ipv6NetworkCard({ + networkState, +}: { + networkState: NetworkState; +}) { + return ( + +
+
+

+ IPv6 Information +

+ +
+ {networkState?.dhcp_lease?.ip && ( +
+ + Link-local + + + {networkState?.ipv6_link_local} + +
+ )} +
+ +
+ {networkState?.ipv6_addresses && networkState?.ipv6_addresses.length > 0 && ( +
+

IPv6 Addresses

+ {networkState.ipv6_addresses.map( + addr => ( +
+
+
+ + Address + + {addr.address} +
+ + {addr.valid_lifetime && ( +
+ + Valid Lifetime + + + {addr.valid_lifetime === "" ? ( + + N/A + + ) : ( + + )} + +
+ )} + {addr.preferred_lifetime && ( +
+ + Preferred Lifetime + + + {addr.preferred_lifetime === "" ? ( + + N/A + + ) : ( + + )} + +
+ )} +
+
+ ), + )} +
+ )} +
+
+
+
+ ); +}