Skip to content

Commit 8719e25

Browse files
fix: live preview fixed new tab default setup
1 parent 6d58cf4 commit 8719e25

8 files changed

Lines changed: 53 additions & 19 deletions

File tree

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@contentstack/live-preview-utils",
3-
"version": "4.1.2",
3+
"version": "4.3.0",
44
"description": "Contentstack provides the Live Preview SDK to establish a communication channel between the various Contentstack SDKs and your website, transmitting live changes to the preview pane.",
55
"type": "module",
66
"types": "dist/legacy/index.d.ts",

src/configManager/__test__/configManager.test.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -91,14 +91,14 @@ describe("Config", () => {
9191
});
9292

9393
describe("config default flags", () => {
94-
test("enableLivePreviewOutsideIframe defaults to false in getDefaultConfig", () => {
94+
test("enableLivePreviewOutsideIframe defaults to undefined in getDefaultConfig", () => {
9595
const defaultConfig = getDefaultConfig();
96-
expect(defaultConfig.enableLivePreviewOutsideIframe).toBe(false);
96+
expect(defaultConfig.enableLivePreviewOutsideIframe).toBeUndefined();
9797
});
9898

99-
test("enableLivePreviewOutsideIframe defaults to false in getUserInitData", () => {
99+
test("enableLivePreviewOutsideIframe defaults to undefined in getUserInitData", () => {
100100
const initData = getUserInitData();
101-
expect(initData.enableLivePreviewOutsideIframe).toBe(false);
101+
expect(initData.enableLivePreviewOutsideIframe).toBeUndefined();
102102
});
103103
});
104104

src/configManager/__test__/handleUserConfig.test.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -423,10 +423,10 @@ describe("handleInitData() - enableLivePreviewOutsideIframe", () => {
423423
Config.reset();
424424
});
425425

426-
test("should default to false when not provided", () => {
426+
test("should default to undefined when not provided", () => {
427427
const initData: Partial<IInitData> = {};
428428
handleInitData(initData);
429-
expect(config.enableLivePreviewOutsideIframe).toBe(false);
429+
expect(config.enableLivePreviewOutsideIframe).toBeUndefined();
430430
});
431431

432432
test("should set to true when provided as true", () => {

src/configManager/config.default.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ export function getUserInitData(): IInitData {
3939
environment: "",
4040
},
4141
runScriptsOnUpdate: false,
42-
enableLivePreviewOutsideIframe: false,
42+
enableLivePreviewOutsideIframe: undefined,
4343
};
4444
}
4545

@@ -111,6 +111,6 @@ export function getDefaultConfig(): IConfig {
111111
},
112112
payload: [],
113113
},
114-
enableLivePreviewOutsideIframe: false,
114+
enableLivePreviewOutsideIframe: undefined,
115115
};
116116
}

src/configManager/handleUserConfig.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,12 @@ export const handleInitData = (initData: Partial<IInitData>): void => {
121121
"bottom-right",
122122
})
123123

124-
Config.set("enableLivePreviewOutsideIframe", initData.enableLivePreviewOutsideIframe ?? config.enableLivePreviewOutsideIframe ?? false);
124+
Config.set(
125+
"enableLivePreviewOutsideIframe",
126+
initData.enableLivePreviewOutsideIframe ??
127+
stackSdk.live_preview?.enableLivePreviewOutsideIframe ??
128+
config.enableLivePreviewOutsideIframe
129+
);
125130

126131
// client URL params
127132
handleClientUrlParams(

src/livePreview/eventManager/__test__/postMessageEvent.hooks.test.ts

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -432,6 +432,23 @@ describe("postMessageEvent.hooks", () => {
432432
});
433433
});
434434

435+
it("should omit enableLivePreviewOutsideIframe in INIT payload when config is unset", async () => {
436+
mockConfig = {
437+
ssr: true,
438+
mode: 1,
439+
enableLivePreviewOutsideIframe: undefined,
440+
};
441+
(Config.get as any).mockReturnValue(mockConfig);
442+
443+
await sendInitializeLivePreviewPostMessageEvent();
444+
await Promise.resolve();
445+
446+
const initPayload = (livePreviewPostMessage?.send as any).mock.calls.at(-1)?.[1];
447+
expect(initPayload.config).not.toHaveProperty(
448+
"enableLivePreviewOutsideIframe"
449+
);
450+
});
451+
435452
it("should include enableLivePreviewOutsideIframe=false in INIT payload", async () => {
436453
mockConfig = {
437454
ssr: true, // avoid timers

src/livePreview/eventManager/postMessageEvent.hooks.ts

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -119,17 +119,29 @@ export function useOnEntryUpdatePostMessageEvent(): void {
119119
}
120120

121121
export function sendInitializeLivePreviewPostMessageEvent(): void {
122+
const config = Config.get();
123+
const initConfig: {
124+
shouldReload: boolean;
125+
href: string;
126+
sdkVersion: string | undefined;
127+
mode: number;
128+
enableLivePreviewOutsideIframe?: boolean;
129+
} = {
130+
shouldReload: config.ssr,
131+
href: window.location.href,
132+
sdkVersion: process?.env?.PACKAGE_VERSION,
133+
mode: config.mode,
134+
};
135+
136+
if (config.enableLivePreviewOutsideIframe !== undefined) {
137+
initConfig.enableLivePreviewOutsideIframe = config.enableLivePreviewOutsideIframe;
138+
}
139+
122140
livePreviewPostMessage
123141
?.send<LivePreviewInitEventResponse>(
124142
LIVE_PREVIEW_POST_MESSAGE_EVENTS.INIT,
125143
{
126-
config: {
127-
shouldReload: Config.get().ssr,
128-
href: window.location.href,
129-
sdkVersion: process?.env?.PACKAGE_VERSION,
130-
mode: Config.get().mode,
131-
enableLivePreviewOutsideIframe: Config.get().enableLivePreviewOutsideIframe,
132-
},
144+
config: initConfig,
133145
}
134146
)
135147
.then((data) => {

src/types/types.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ export declare interface IConfig {
8787
highlightedElement: HTMLElement | null;
8888
};
8989
collab: ICollabConfig["collab"];
90-
enableLivePreviewOutsideIframe: boolean;
90+
enableLivePreviewOutsideIframe: boolean | undefined;
9191
}
9292

9393

@@ -133,7 +133,7 @@ export declare interface IInitData {
133133
editButton: IConfigEditButton;
134134
editInVisualBuilderButton: IConfigEditInVisualBuilderButton;
135135
mode: ILivePreviewMode;
136-
enableLivePreviewOutsideIframe: boolean; // default: false
136+
enableLivePreviewOutsideIframe: boolean | undefined; // default: undefined
137137
}
138138

139139
// type PickPartial<T, K extends keyof T> = Partial<Pick<T, K>> & Omit<T, K>;

0 commit comments

Comments
 (0)