From 54874f9fcb2258cf9974c08560460dae44caccc0 Mon Sep 17 00:00:00 2001 From: Julian Appel Date: Fri, 31 Jul 2026 09:56:49 +0200 Subject: [PATCH] Render circuit protection values --- src/frontend/utils/circuit-grid-projection.ts | 7 ++++ tests/circuit-grid-projection.test.ts | 36 +++++++++++++++++++ 2 files changed, 43 insertions(+) diff --git a/src/frontend/utils/circuit-grid-projection.ts b/src/frontend/utils/circuit-grid-projection.ts index ec28259..0f0fc8f 100644 --- a/src/frontend/utils/circuit-grid-projection.ts +++ b/src/frontend/utils/circuit-grid-projection.ts @@ -146,6 +146,13 @@ function makeVisibleGridRow( value = getDeviceValue(device, column.key); } else if (kind === "circuitField" && circuit) { value = getCircuitValue(circuit, column.key); + } else if ( + kind === "computed" && + rowType !== "deviceRow" && + circuit && + circuitOnlyColumns.has(column.key) + ) { + value = getCircuitValue(circuit, column.key); } else if (column.key === "rowTotalPower" && device) { value = device.rowTotalPower; } else if (column.key === "rowTotalPower" && circuit) { diff --git a/tests/circuit-grid-projection.test.ts b/tests/circuit-grid-projection.test.ts index c5fdfdb..bdfba8c 100644 --- a/tests/circuit-grid-projection.test.ts +++ b/tests/circuit-grid-projection.test.ts @@ -177,6 +177,42 @@ describe("circuit grid projection", () => { ); }); + it("shows circuit protection once on each visible circuit row", () => { + const protectedSections = sections.map((section) => ({ + ...section, + circuits: section.circuits.map((circuit) => ({ + ...circuit, + protectionDevice: { + type: "FI_LS" as const, + ratedCurrentA: 16, + tripCharacteristic: "B" as const, + rcdType: "A" as const, + ratedResidualCurrentMa: 30, + }, + })), + })); + const rows = buildVisibleGridRows(protectedSections); + const protectionValue = (rowType: string) => + rows + .find((row) => row.rowType === rowType) + ?.cells.find((cell) => cell.cellKey === "protectionSummary") + ?.value; + + assert.equal( + protectionValue("circuitCompact"), + "FI/LS · 16 A · B · Typ A · 30 mA" + ); + assert.equal( + protectionValue("circuitSummary"), + "FI/LS · 16 A · B · Typ A · 30 mA" + ); + assert.equal( + protectionValue("reserveCircuit"), + "FI/LS · 16 A · B · Typ A · 30 mA" + ); + assert.equal(protectionValue("deviceRow"), undefined); + }); + it("normalizes structural component rows around complete circuit groups", () => { const component = { circuitListId: "list-1",