diff --git a/client/src/components/rack/ModuleBlock.tsx b/client/src/components/rack/ModuleBlock.tsx index 7dbfd69..30473a8 100644 --- a/client/src/components/rack/ModuleBlock.tsx +++ b/client/src/components/rack/ModuleBlock.tsx @@ -49,15 +49,20 @@ export function ModuleBlock({ module }: ModuleBlockProps) { // Split Main ports into rows const portRows: (typeof module.ports)[] = []; - for (let i = 0; i < mainPorts.length; i += PORTS_PER_ROW) { - portRows.push(mainPorts.slice(i, i + PORTS_PER_ROW)); + if (mainPorts.length > 0) { + for (let i = 0; i < mainPorts.length; i += PORTS_PER_ROW) { + portRows.push(mainPorts.slice(i, i + PORTS_PER_ROW)); + } + } else if (sidePorts.length > 0) { + // If only special ports exist, create an empty first row to hold them + portRows.push([]); } // Calculate vertical space const availableForPorts = height - 16; const maxRows = Math.max(1, Math.floor(availableForPorts / 14)); - const visibleRows = portRows.slice(0, maxRows); - const hiddenPortCount = mainPorts.length - visibleRows.flat().length; + const visibleRows = portRows.length > 0 ? portRows.slice(0, maxRows) : []; + const hiddenPortCount = mainPorts.length - (visibleRows.length > 0 ? visibleRows.flat().length : 0); // SFP/WAN ports often sit on the far right of the module // We'll show them on the first row if possible