feat(mapper): add IP and port fields via node metadata
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
import { memo } from 'react';
|
||||
import { memo, useMemo } from 'react';
|
||||
import { Handle, Position, type NodeProps } from '@xyflow/react';
|
||||
import type { Module } from '../../../types';
|
||||
import { MODULE_TYPE_COLORS, MODULE_TYPE_LABELS } from '../../../lib/constants';
|
||||
@@ -16,6 +16,17 @@ export const DeviceNode = memo(({ data, selected }: NodeProps) => {
|
||||
|
||||
const colors = mod ? MODULE_TYPE_COLORS[mod.type] : null;
|
||||
|
||||
const meta = useMemo(() => {
|
||||
try {
|
||||
return nodeData.metadata ? JSON.parse(nodeData.metadata as string) : {};
|
||||
} catch {
|
||||
return {};
|
||||
}
|
||||
}, [nodeData.metadata]);
|
||||
|
||||
const ipToDisplay = meta.ipAddress || mod?.ipAddress;
|
||||
const hasAddress = ipToDisplay || meta.port;
|
||||
|
||||
return (
|
||||
<div
|
||||
className={`min-w-[160px] max-w-[200px] bg-slate-800 border rounded-lg shadow-lg overflow-hidden transition-all ${
|
||||
@@ -37,15 +48,24 @@ export const DeviceNode = memo(({ data, selected }: NodeProps) => {
|
||||
<span className="text-xs font-semibold text-slate-100 truncate">{nodeData.label}</span>
|
||||
</div>
|
||||
{mod && (
|
||||
<div className="flex flex-wrap gap-1">
|
||||
<div className="flex flex-wrap gap-1 mt-1">
|
||||
<Badge variant="slate" className="text-[10px]">{MODULE_TYPE_LABELS[mod.type]}</Badge>
|
||||
{mod.ipAddress && (
|
||||
<span className="text-[10px] text-slate-400 font-mono">{mod.ipAddress}</span>
|
||||
{hasAddress && (
|
||||
<span className="text-[10px] text-slate-400 font-mono ml-1 mt-0.5">
|
||||
{ipToDisplay}{meta.port ? `:${meta.port}` : ''}
|
||||
</span>
|
||||
)}
|
||||
</div>
|
||||
)}
|
||||
{!mod && (
|
||||
<span className="text-[10px] text-slate-500">Unlinked device</span>
|
||||
<div className="flex flex-col mt-1">
|
||||
<span className="text-[10px] text-slate-500">Unlinked device</span>
|
||||
{hasAddress && (
|
||||
<span className="text-[10px] text-slate-400 font-mono">
|
||||
{ipToDisplay}{meta.port ? `:${meta.port}` : ''}
|
||||
</span>
|
||||
)}
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user