diff --git a/frontend/src/components/panels/DetailPanel.tsx b/frontend/src/components/panels/DetailPanel.tsx
index 244e165..63a74af 100644
--- a/frontend/src/components/panels/DetailPanel.tsx
+++ b/frontend/src/components/panels/DetailPanel.tsx
@@ -29,6 +29,7 @@ export function DetailPanel({ onEdit }: DetailPanelProps) {
const editingIndex = editingFor?.nodeId === node.id ? editingFor.index : null
const { data } = node
+ const services = data.services ?? []
const statusColor = STATUS_COLORS[data.status]
const host = data.ip ?? data.hostname
@@ -46,19 +47,19 @@ export function DetailPanel({ onEdit }: DetailPanelProps) {
protocol: newSvc.protocol,
service_name: newSvc.service_name.trim(),
}
- updateNode(node.id, { services: [...(data.services ?? []), svc] })
+ updateNode(node.id, { services: [...services, svc] })
setNewSvc(EMPTY_FORM)
setAddingForNode(null)
}
const handleRemoveService = (index: number) => {
- const updated = (data.services ?? []).filter((_, i) => i !== index)
+ const updated = services.filter((_, i) => i !== index)
updateNode(node.id, { services: updated })
if (editingIndex === index) setEditingFor(null)
}
const handleStartEdit = (index: number) => {
- const svc = (data.services ?? [])[index]
+ const svc = services[index]
if (!svc) return
setEditSvc({ port: String(svc.port), protocol: svc.protocol, service_name: svc.service_name })
setEditingFor({ nodeId: node.id, index })
@@ -69,7 +70,7 @@ export function DetailPanel({ onEdit }: DetailPanelProps) {
if (editingIndex === null) return
const port = parseInt(editSvc.port, 10)
if (!editSvc.service_name.trim() || isNaN(port) || port < 1 || port > 65535) return
- const updated = (data.services ?? []).map((svc, i) =>
+ const updated = services.map((svc, i) =>
i === editingIndex
? { ...svc, port, protocol: editSvc.protocol, service_name: editSvc.service_name.trim() }
: svc
@@ -84,6 +85,7 @@ export function DetailPanel({ onEdit }: DetailPanelProps) {
{data.label}