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();
+ });
});