From bdb8a585fe7aaa495d81178d03b2522bee3de10e Mon Sep 17 00:00:00 2001 From: Bogdan Chadkin Date: Sat, 8 Mar 2025 01:00:42 +0700 Subject: [PATCH 1/2] fix: render empty page when xml is empty --- packages/cli/src/prebuild.ts | 9 ++--- .../src/component-generator.test.tsx | 22 ++++++++++++ packages/react-sdk/src/component-generator.ts | 34 +++++++++++-------- 3 files changed, 44 insertions(+), 21 deletions(-) diff --git a/packages/cli/src/prebuild.ts b/packages/cli/src/prebuild.ts index 7831edb9b2e7..0a51fd24c46c 100644 --- a/packages/cli/src/prebuild.ts +++ b/packages/cli/src/prebuild.ts @@ -498,12 +498,9 @@ export const prebuild = async (options: { // treat first body child as root const bodyInstance = instances.get(rootInstanceId); // @todo test empty xml - if ( - bodyInstance && - bodyInstance.children.length > 0 && - bodyInstance.children[0].type === "id" - ) { - rootInstanceId = bodyInstance.children[0].value; + const firstChild = bodyInstance?.children.at(0); + if (firstChild?.type === "id") { + rootInstanceId = firstChild.value; } // remove all unexpected components for (const instance of instances.values()) { diff --git a/packages/react-sdk/src/component-generator.test.tsx b/packages/react-sdk/src/component-generator.test.tsx index 21ed5a1e8c8c..dee11a410090 100644 --- a/packages/react-sdk/src/component-generator.test.tsx +++ b/packages/react-sdk/src/component-generator.test.tsx @@ -1250,3 +1250,25 @@ test("ignore ws:block-template when generate index attribute", () => { ) ); }); + +test("render empty component when no instances found", () => { + expect( + generateWebstudioComponent({ + classesMap: new Map(), + scope: createScope(), + name: "Page", + rootInstanceId: "", + parameters: [], + metas: new Map(), + ...renderData(<$.Body ws:id="bodyId">), + }) + ).toEqual( + validateJSX( + clear(` + const Page = () => { + return <> + } + `) + ) + ); +}); diff --git a/packages/react-sdk/src/component-generator.ts b/packages/react-sdk/src/component-generator.ts index 02003573b1c6..1fe139344c50 100644 --- a/packages/react-sdk/src/component-generator.ts +++ b/packages/react-sdk/src/component-generator.ts @@ -408,33 +408,37 @@ export const generateWebstudioComponent = ({ }) => { const instance = instances.get(rootInstanceId); if (instance === undefined) { - return ""; + // return ""; } const indexesWithinAncestors = getIndexesWithinAncestors(metas, instances, [ rootInstanceId, ]); const usedDataSources: DataSources = new Map(); - const generatedJsx = generateJsxElement({ - context: "expression", - scope, - instance, - props, - dataSources, - usedDataSources, - indexesWithinAncestors, - classesMap, - children: generateJsxChildren({ + let generatedJsx = "<>\n"; + // instance can be missing when generate xml + if (instance) { + generatedJsx = generateJsxElement({ + context: "expression", scope, - children: instance.children, - instances, + instance, props, dataSources, usedDataSources, indexesWithinAncestors, classesMap, - }), - }); + children: generateJsxChildren({ + scope, + children: instance.children, + instances, + props, + dataSources, + usedDataSources, + indexesWithinAncestors, + classesMap, + }), + }); + } let generatedProps = ""; let generatedParameters = ""; From 64ec29d7971cc47a833f267fd9a0cf045ee1c32d Mon Sep 17 00:00:00 2001 From: Bogdan Chadkin Date: Sat, 8 Mar 2025 01:14:21 +0700 Subject: [PATCH 2/2] forgotten --- packages/react-sdk/src/component-generator.ts | 3 --- 1 file changed, 3 deletions(-) diff --git a/packages/react-sdk/src/component-generator.ts b/packages/react-sdk/src/component-generator.ts index 1fe139344c50..dfa91b73fb3c 100644 --- a/packages/react-sdk/src/component-generator.ts +++ b/packages/react-sdk/src/component-generator.ts @@ -407,9 +407,6 @@ export const generateWebstudioComponent = ({ metas: Map; }) => { const instance = instances.get(rootInstanceId); - if (instance === undefined) { - // return ""; - } const indexesWithinAncestors = getIndexesWithinAncestors(metas, instances, [ rootInstanceId, ]);