diff --git a/src/utils/mjml-component-utils.ts b/src/utils/mjml-component-utils.ts index 75e1e95..bbf7745 100644 --- a/src/utils/mjml-component-utils.ts +++ b/src/utils/mjml-component-utils.ts @@ -34,7 +34,7 @@ export function convertPropsToMjmlAttributes

(props: { return mjmlProps; } -const booleanToString = ["inline", "full-width", "fluid-on-mobile"]; +const booleanToString = ["inline", "full-width"]; const numberToPixel = [ "width", "height", @@ -65,6 +65,9 @@ function convertPropValueToMjml( if (typeof value === "boolean" && booleanToString.includes(name)) { return name; } + if (typeof value === "boolean") { + return `${value}`; + } if (typeof value === "object" && value !== null) { return value; } diff --git a/test/mjml-props.test.tsx b/test/mjml-props.test.tsx index 4f346d0..06b5edc 100644 --- a/test/mjml-props.test.tsx +++ b/test/mjml-props.test.tsx @@ -37,9 +37,15 @@ describe("mjml components prop values", () => { expect(renderToMjml()).toBe( `` ); + }); + + it("boolean props convert as expected", () => { expect(renderToMjml()).toBe( - `` + `` ); + expect( + renderToMjml() + ).toBe(``); }); it("enum prop type accepts all enum values", () => { diff --git a/test/render.test.tsx b/test/render.test.tsx index df0fb8e..498ac9d 100644 --- a/test/render.test.tsx +++ b/test/render.test.tsx @@ -1,6 +1,17 @@ import React from "react"; -import { Mjml, MjmlHead, MjmlTitle, MjmlBody, MjmlRaw } from "../src"; +import { + Mjml, + MjmlHead, + MjmlTitle, + MjmlBody, + MjmlRaw, + MjmlSection, + MjmlColumn, + MjmlText, + MjmlButton, + MjmlImage, +} from "../src"; import { render } from "../src/utils/render"; describe("render()", () => { @@ -54,4 +65,32 @@ describe("render()", () => { "Element div doesn't exist or is not registered" ); }); + + it("should handle all prop types (numbers, booleans, strings, objects, etc.) without error", () => { + const email = ( + + + {/* Boolean in booleanToString array -> returns property name */} + + {/* Number in numberToPixel array -> returns `${value}px` */} + + returns string as-is + fontSize={16} // Number in numberToPixel array -> returns `${value}px` + > + Test text content + + Click me + {/* Boolean NOT in booleanToString array -> returns `${value}` (string) */} + + + + + + ); + const { html, errors } = render(email); + // Verify no errors when rendering the different prop types + expect(errors).toHaveLength(0); + expect(html).toBeDefined(); + }); });