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}