diff --git a/lib/components/primitive-components/Group/Subcircuit/Subcircuit.ts b/lib/components/primitive-components/Group/Subcircuit/Subcircuit.ts index ed159ee53..8cfb412ec 100644 --- a/lib/components/primitive-components/Group/Subcircuit/Subcircuit.ts +++ b/lib/components/primitive-components/Group/Subcircuit/Subcircuit.ts @@ -7,6 +7,7 @@ import { inflateSourcePort } from "./inflators/inflateSourcePort" import { inflateSourceGroup } from "./inflators/inflateSourceGroup" import type { InflatorContext, SourceGroupId } from "./InflatorFn" import { inflateSourceChip } from "./inflators/inflateSourceChip" +import { inflateSourceCapacitor } from "./inflators/inflateSourceCapacitor" export class Subcircuit extends Group { constructor(props: z.input) { @@ -61,6 +62,9 @@ export class Subcircuit extends Group { case "simple_resistor": inflateSourceResistor(sourceComponent, inflationCtx) break + case "simple_capacitor": + inflateSourceCapacitor(sourceComponent, inflationCtx) + break case "simple_chip": inflateSourceChip(sourceComponent, inflationCtx) break diff --git a/lib/components/primitive-components/Group/Subcircuit/inflators/inflateSourceCapacitor.ts b/lib/components/primitive-components/Group/Subcircuit/inflators/inflateSourceCapacitor.ts new file mode 100644 index 000000000..7b27dfd47 --- /dev/null +++ b/lib/components/primitive-components/Group/Subcircuit/inflators/inflateSourceCapacitor.ts @@ -0,0 +1,43 @@ +import type { + SourceSimpleCapacitor, + PcbComponent, + CadComponent, +} from "circuit-json" +import { Capacitor } from "lib/components/normal-components/Capacitor" +import { inflatePcbComponent } from "./inflatePcbComponent" +import type { InflatorContext } from "../InflatorFn" + +export function inflateSourceCapacitor( + sourceElm: SourceSimpleCapacitor, + inflatorContext: InflatorContext, +) { + const { injectionDb, subcircuit, groupsMap } = inflatorContext + + const pcbElm = injectionDb.pcb_component.getWhere({ + source_component_id: sourceElm.source_component_id, + }) as PcbComponent | null + + const cadElm = injectionDb.cad_component.getWhere({ + source_component_id: sourceElm.source_component_id, + }) as CadComponent | null + + const capacitor = new Capacitor({ + name: sourceElm.name, + capacitance: sourceElm.capacitance, + }) + + if (pcbElm) { + inflatePcbComponent(pcbElm, { + ...inflatorContext, + normalComponent: capacitor, + }) + } + + // Add the capacitor to its group if it has one, otherwise add to subcircuit + if (sourceElm.source_group_id && groupsMap?.has(sourceElm.source_group_id)) { + const group = groupsMap.get(sourceElm.source_group_id)! + group.add(capacitor) + } else { + subcircuit.add(capacitor) + } +} diff --git a/tests/features/subcircuit-circuit-json/__snapshots__/subcircuit-circuit-json03-pcb.snap.svg b/tests/features/subcircuit-circuit-json/__snapshots__/subcircuit-circuit-json03-pcb.snap.svg new file mode 100644 index 000000000..61ad9b54c --- /dev/null +++ b/tests/features/subcircuit-circuit-json/__snapshots__/subcircuit-circuit-json03-pcb.snap.svg @@ -0,0 +1 @@ +C1R1 \ No newline at end of file diff --git a/tests/features/subcircuit-circuit-json/subcircuit-circuit-json03.test.tsx b/tests/features/subcircuit-circuit-json/subcircuit-circuit-json03.test.tsx new file mode 100644 index 000000000..9f3baa1f8 --- /dev/null +++ b/tests/features/subcircuit-circuit-json/subcircuit-circuit-json03.test.tsx @@ -0,0 +1,41 @@ +import { test, expect } from "bun:test" +import { getTestFixture } from "tests/fixtures/get-test-fixture" +import { renderToCircuitJson } from "tests/fixtures/renderToCircuitJson" + +test("subcircuit-circuit-json03 - capacitor inflation", async () => { + const { circuit } = await getTestFixture() + + const subcircuitCircuitJson = await renderToCircuitJson( + + + + + , + ) + + circuit.add( + + + + , + ) + + await circuit.renderUntilSettled() + + const circuitJson = await circuit.getCircuitJson() + + const C1 = circuitJson.find( + (c) => + c.type === "source_component" && + c.name === "C1" && + c.ftype === "simple_capacitor", + ) + expect(C1).toBeDefined() + + expect(circuit).toMatchPcbSnapshot(import.meta.path) +})