diff --git a/packages/playwright-ct-solid/registerSource.mjs b/packages/playwright-ct-solid/registerSource.mjs
index a04d65c404..fed1b46540 100644
--- a/packages/playwright-ct-solid/registerSource.mjs
+++ b/packages/playwright-ct-solid/registerSource.mjs
@@ -73,28 +73,27 @@ async function __pwResolveComponent(component) {
await Promise.all(component.children.map(child => __pwResolveComponent(child)));
}
+/**
+ * @param {JsxComponentChild} child
+ */
function __pwCreateChild(child) {
- return typeof child === 'string' ? child : __pwCreateComponent(child);
+ if (Array.isArray(child))
+ return child.map(grandChild => __pwCreateChild(grandChild));
+ if (isComponent(child))
+ return __pwCreateComponent(child);
+ return child;
}
/**
* @param {JsxComponent} component
*/
function __pwCreateComponent(component) {
- if (typeof component !== 'object' || Array.isArray(component))
- return component;
-
const componentFunc = __pwRegistry.get(component.type);
-
-
- const children = component.children.reduce((/** @type {any[]} */ children, current) => {
- const child = __pwCreateChild(current);
- if (Array.isArray(child))
- return child.map(grandChild => __pwCreateChild(grandChild));
- if (typeof child !== 'string' || !!child.trim())
- children.push(child);
- return children;
- }, []);
+ const children = component.children.map(child => __pwCreateChild(child)).filter(child => {
+ if (typeof child === 'string')
+ return !!child.trim();
+ return true;
+ });
if (!componentFunc)
return __pwH(component.type, component.props, children);
diff --git a/tests/components/ct-solid/tests/children.spec.tsx b/tests/components/ct-solid/tests/children.spec.tsx
index 9fa69ef932..75515f754e 100644
--- a/tests/components/ct-solid/tests/children.spec.tsx
+++ b/tests/components/ct-solid/tests/children.spec.tsx
@@ -49,9 +49,9 @@ test('render string as child', async ({ mount }) => {
});
test('render array as child', async ({ mount }) => {
- const component = await mount({[{[4]}
,2
]});
+ const component = await mount({[{[4]}
,[[[2,3]
]]]});
await expect(component.getByRole('heading', { level: 4 })).toHaveText('4');
- await expect(component.getByRole('paragraph')).toHaveText('2');
+ await expect(component.getByRole('paragraph')).toHaveText('[2,3]');
});
test('render number as child', async ({ mount }) => {