From 5b149132e68f09b97e44105f8ba864280a89a97c Mon Sep 17 00:00:00 2001 From: Mridul Sharma Date: Fri, 11 Jul 2025 15:56:53 +0530 Subject: [PATCH 1/2] fix: multiple reloads in timeline --- .../eventManager/postMessageEvent.hooks.ts | 4 ++-- src/utils/addLivePreviewQueryTags.ts | 8 +++++++- src/utils/index.ts | 15 +++++++++++---- 3 files changed, 20 insertions(+), 7 deletions(-) diff --git a/src/livePreview/eventManager/postMessageEvent.hooks.ts b/src/livePreview/eventManager/postMessageEvent.hooks.ts index 2cf60b01..75988942 100644 --- a/src/livePreview/eventManager/postMessageEvent.hooks.ts +++ b/src/livePreview/eventManager/postMessageEvent.hooks.ts @@ -1,6 +1,6 @@ import Config, { setConfigFromParams } from "../../configManager/configManager"; import { ILivePreviewWindowType } from "../../types/types"; -import { addParamsToUrl } from "../../utils"; +import { addParamsToUrl, isOpeningInTimeline } from "../../utils"; import livePreviewPostMessage from "./livePreviewEventManager"; import { LIVE_PREVIEW_POST_MESSAGE_EVENTS } from "./livePreviewEventManager.constant"; import { @@ -95,7 +95,7 @@ export function sendInitializeLivePreviewPostMessageEvent(): void { // "init message did not contain contentTypeUid or entryUid." // ); } - if (Config.get().ssr) { + if (Config.get().ssr || isOpeningInTimeline()) { addParamsToUrl(); } Config.set("windowType", windowType); diff --git a/src/utils/addLivePreviewQueryTags.ts b/src/utils/addLivePreviewQueryTags.ts index b99ead05..fc1014a7 100644 --- a/src/utils/addLivePreviewQueryTags.ts +++ b/src/utils/addLivePreviewQueryTags.ts @@ -8,11 +8,17 @@ export function addLivePreviewQueryTags(link: string): string { const ctUid: string | null = docUrl.searchParams.get("content_type_uid"); const entryUid: string | null = docUrl.searchParams.get("entry_uid"); - if (livePreviewHash && ctUid && entryUid) { + const previewTimestamp: string | null = docUrl.searchParams.get("preview_timestamp"); + if (livePreviewHash) { newUrl.searchParams.set("live_preview", livePreviewHash); + } + if(ctUid && entryUid){ newUrl.searchParams.set("content_type_uid", ctUid); newUrl.searchParams.set("entry_uid", entryUid); } + if (previewTimestamp) { + newUrl.searchParams.set("preview_timestamp", previewTimestamp); + } return newUrl.href; } catch (error) { PublicLogger.error("Error while adding live preview to URL"); diff --git a/src/utils/index.ts b/src/utils/index.ts index 4030ca0d..2e290153 100644 --- a/src/utils/index.ts +++ b/src/utils/index.ts @@ -7,16 +7,23 @@ export { addLivePreviewQueryTags }; export function addParamsToUrl() { // Setting the query params to all the click events related to current domain window.addEventListener("click", (event: any) => { - const target: any = event.target; - const targetHref: string | any = target.href; + const clickedElement = event.target; + const anchorElement = clickedElement.closest('a'); + + // Only proceed if the clicked element is either an anchor or a direct/indirect child of an anchor + if (!anchorElement || !anchorElement.contains(clickedElement)) { + return; + } + + const targetHref: string | any = anchorElement.href; const docOrigin: string = document.location.origin; if ( targetHref && targetHref.includes(docOrigin) && !targetHref.includes("live_preview") ) { - const newUrl = addLivePreviewQueryTags(target.href); - event.target.href = newUrl || target.href; + const newUrl = addLivePreviewQueryTags(targetHref); + anchorElement.href = newUrl || targetHref; } }); } From e335877c8f7d120f5f0549463f6ad1a1c81c9176 Mon Sep 17 00:00:00 2001 From: Mridul Sharma Date: Fri, 11 Jul 2025 16:43:28 +0530 Subject: [PATCH 2/2] chore: test fix from merge operation --- src/livePreview/__test__/live-preview.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/livePreview/__test__/live-preview.test.ts b/src/livePreview/__test__/live-preview.test.ts index dfdcce7d..023a19c8 100644 --- a/src/livePreview/__test__/live-preview.test.ts +++ b/src/livePreview/__test__/live-preview.test.ts @@ -432,7 +432,7 @@ describe("incoming postMessage", () => { describe("testing window event listeners", () => { let addEventListenerMock: any; - let sendInitEvent = vi.fn().mockImplementation(mockLivePreviewInitEventListener); + const sendInitEvent = vi.fn().mockImplementation(mockLivePreviewInitEventListener); let livePreviewInstance: LivePreview; beforeEach(() => {