@contentstack/live-preview-utils 4.2.1 → 4.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/legacy/configManager/config.default.cjs +4 -2
- package/dist/legacy/configManager/config.default.cjs.map +1 -1
- package/dist/legacy/configManager/config.default.d.cts +1 -1
- package/dist/legacy/configManager/config.default.d.ts +1 -1
- package/dist/legacy/configManager/config.default.js +4 -2
- package/dist/legacy/configManager/config.default.js.map +1 -1
- package/dist/legacy/configManager/handleUserConfig.cjs +4 -0
- package/dist/legacy/configManager/handleUserConfig.cjs.map +1 -1
- package/dist/legacy/configManager/handleUserConfig.js +4 -0
- package/dist/legacy/configManager/handleUserConfig.js.map +1 -1
- package/dist/legacy/cslp/cslpdata.cjs +28 -3
- package/dist/legacy/cslp/cslpdata.cjs.map +1 -1
- package/dist/legacy/cslp/cslpdata.d.cts +27 -1
- package/dist/legacy/cslp/cslpdata.d.ts +27 -1
- package/dist/legacy/cslp/cslpdata.js +26 -2
- package/dist/legacy/cslp/cslpdata.js.map +1 -1
- package/dist/legacy/cslp/index.d.cts +1 -1
- package/dist/legacy/cslp/index.d.ts +1 -1
- package/dist/legacy/light-sdk.cjs +1 -1
- package/dist/legacy/light-sdk.js +1 -1
- package/dist/legacy/livePreview/editButton/editButton.cjs +1 -1
- package/dist/legacy/livePreview/editButton/editButton.cjs.map +1 -1
- package/dist/legacy/livePreview/editButton/editButton.js +2 -2
- package/dist/legacy/livePreview/editButton/editButton.js.map +1 -1
- package/dist/legacy/livePreview/eventManager/postMessageEvent.hooks.cjs +11 -6
- package/dist/legacy/livePreview/eventManager/postMessageEvent.hooks.cjs.map +1 -1
- package/dist/legacy/livePreview/eventManager/postMessageEvent.hooks.js +11 -6
- package/dist/legacy/livePreview/eventManager/postMessageEvent.hooks.js.map +1 -1
- package/dist/legacy/preview/contentstack-live-preview-HOC.cjs +1 -1
- package/dist/legacy/preview/contentstack-live-preview-HOC.js +1 -1
- package/dist/legacy/timeline/compare/compare.cjs +3 -1
- package/dist/legacy/timeline/compare/compare.cjs.map +1 -1
- package/dist/legacy/timeline/compare/compare.js +3 -1
- package/dist/legacy/timeline/compare/compare.js.map +1 -1
- package/dist/legacy/types/types.cjs.map +1 -1
- package/dist/legacy/types/types.d.cts +2 -0
- package/dist/legacy/types/types.d.ts +2 -0
- package/dist/legacy/types/types.js.map +1 -1
- package/dist/legacy/visualBuilder/components/fieldLabelWrapper.cjs +1 -1
- package/dist/legacy/visualBuilder/components/fieldLabelWrapper.cjs.map +1 -1
- package/dist/legacy/visualBuilder/components/fieldLabelWrapper.js +2 -2
- package/dist/legacy/visualBuilder/components/fieldLabelWrapper.js.map +1 -1
- package/dist/legacy/visualBuilder/eventManager/useRecalculateVariantDataCSLPValues.cjs +3 -2
- package/dist/legacy/visualBuilder/eventManager/useRecalculateVariantDataCSLPValues.cjs.map +1 -1
- package/dist/legacy/visualBuilder/eventManager/useRecalculateVariantDataCSLPValues.js +3 -2
- package/dist/legacy/visualBuilder/eventManager/useRecalculateVariantDataCSLPValues.js.map +1 -1
- package/dist/legacy/visualBuilder/eventManager/useRevalidateFieldDataPostMessageEvent.cjs +2 -2
- package/dist/legacy/visualBuilder/eventManager/useRevalidateFieldDataPostMessageEvent.cjs.map +1 -1
- package/dist/legacy/visualBuilder/eventManager/useRevalidateFieldDataPostMessageEvent.js +3 -3
- package/dist/legacy/visualBuilder/eventManager/useRevalidateFieldDataPostMessageEvent.js.map +1 -1
- package/dist/legacy/visualBuilder/eventManager/useVariantsPostMessageEvent.cjs +1 -1
- package/dist/legacy/visualBuilder/eventManager/useVariantsPostMessageEvent.cjs.map +1 -1
- package/dist/legacy/visualBuilder/eventManager/useVariantsPostMessageEvent.js +2 -2
- package/dist/legacy/visualBuilder/eventManager/useVariantsPostMessageEvent.js.map +1 -1
- package/dist/legacy/visualBuilder/generators/generateEmptyBlock.cjs +1 -1
- package/dist/legacy/visualBuilder/generators/generateEmptyBlock.cjs.map +1 -1
- package/dist/legacy/visualBuilder/generators/generateEmptyBlock.js +2 -2
- package/dist/legacy/visualBuilder/generators/generateEmptyBlock.js.map +1 -1
- package/dist/legacy/visualBuilder/generators/generateHighlightedComment.cjs +2 -1
- package/dist/legacy/visualBuilder/generators/generateHighlightedComment.cjs.map +1 -1
- package/dist/legacy/visualBuilder/generators/generateHighlightedComment.js +2 -1
- package/dist/legacy/visualBuilder/generators/generateHighlightedComment.js.map +1 -1
- package/dist/legacy/visualBuilder/generators/generateOverlay.cjs +1 -1
- package/dist/legacy/visualBuilder/generators/generateOverlay.cjs.map +1 -1
- package/dist/legacy/visualBuilder/generators/generateOverlay.js +2 -2
- package/dist/legacy/visualBuilder/generators/generateOverlay.js.map +1 -1
- package/dist/legacy/visualBuilder/generators/generateThread.d.cts +1 -1
- package/dist/legacy/visualBuilder/generators/generateThread.d.ts +1 -1
- package/dist/legacy/visualBuilder/index.cjs +1 -1
- package/dist/legacy/visualBuilder/index.cjs.map +1 -1
- package/dist/legacy/visualBuilder/index.js +2 -2
- package/dist/legacy/visualBuilder/index.js.map +1 -1
- package/dist/legacy/visualBuilder/listeners/mouseClick.cjs +14 -10
- package/dist/legacy/visualBuilder/listeners/mouseClick.cjs.map +1 -1
- package/dist/legacy/visualBuilder/listeners/mouseClick.js +14 -10
- package/dist/legacy/visualBuilder/listeners/mouseClick.js.map +1 -1
- package/dist/legacy/visualBuilder/utils/collabUtils.d.cts +1 -1
- package/dist/legacy/visualBuilder/utils/collabUtils.d.ts +1 -1
- package/dist/legacy/visualBuilder/utils/getCsDataOfElement.cjs +3 -3
- package/dist/legacy/visualBuilder/utils/getCsDataOfElement.cjs.map +1 -1
- package/dist/legacy/visualBuilder/utils/getCsDataOfElement.js +4 -4
- package/dist/legacy/visualBuilder/utils/getCsDataOfElement.js.map +1 -1
- package/dist/legacy/visualBuilder/utils/getEntryIdentifiersInCurrentPage.cjs +1 -1
- package/dist/legacy/visualBuilder/utils/getEntryIdentifiersInCurrentPage.cjs.map +1 -1
- package/dist/legacy/visualBuilder/utils/getEntryIdentifiersInCurrentPage.js +2 -2
- package/dist/legacy/visualBuilder/utils/getEntryIdentifiersInCurrentPage.js.map +1 -1
- package/dist/legacy/visualBuilder/utils/getVisualBuilderRedirectionUrl.cjs +2 -2
- package/dist/legacy/visualBuilder/utils/getVisualBuilderRedirectionUrl.cjs.map +1 -1
- package/dist/legacy/visualBuilder/utils/getVisualBuilderRedirectionUrl.js +3 -3
- package/dist/legacy/visualBuilder/utils/getVisualBuilderRedirectionUrl.js.map +1 -1
- package/dist/legacy/visualBuilder/utils/updateFocussedState.cjs +1 -1
- package/dist/legacy/visualBuilder/utils/updateFocussedState.cjs.map +1 -1
- package/dist/legacy/visualBuilder/utils/updateFocussedState.js +2 -2
- package/dist/legacy/visualBuilder/utils/updateFocussedState.js.map +1 -1
- package/dist/modern/configManager/config.default.cjs +4 -2
- package/dist/modern/configManager/config.default.cjs.map +1 -1
- package/dist/modern/configManager/config.default.d.cts +1 -1
- package/dist/modern/configManager/config.default.d.ts +1 -1
- package/dist/modern/configManager/config.default.js +4 -2
- package/dist/modern/configManager/config.default.js.map +1 -1
- package/dist/modern/configManager/handleUserConfig.cjs +4 -0
- package/dist/modern/configManager/handleUserConfig.cjs.map +1 -1
- package/dist/modern/configManager/handleUserConfig.js +4 -0
- package/dist/modern/configManager/handleUserConfig.js.map +1 -1
- package/dist/modern/cslp/cslpdata.cjs +28 -3
- package/dist/modern/cslp/cslpdata.cjs.map +1 -1
- package/dist/modern/cslp/cslpdata.d.cts +27 -1
- package/dist/modern/cslp/cslpdata.d.ts +27 -1
- package/dist/modern/cslp/cslpdata.js +26 -2
- package/dist/modern/cslp/cslpdata.js.map +1 -1
- package/dist/modern/cslp/index.d.cts +1 -1
- package/dist/modern/cslp/index.d.ts +1 -1
- package/dist/modern/light-sdk.cjs +1 -1
- package/dist/modern/light-sdk.js +1 -1
- package/dist/modern/livePreview/editButton/editButton.cjs +1 -1
- package/dist/modern/livePreview/editButton/editButton.cjs.map +1 -1
- package/dist/modern/livePreview/editButton/editButton.js +2 -2
- package/dist/modern/livePreview/editButton/editButton.js.map +1 -1
- package/dist/modern/livePreview/eventManager/postMessageEvent.hooks.cjs +11 -6
- package/dist/modern/livePreview/eventManager/postMessageEvent.hooks.cjs.map +1 -1
- package/dist/modern/livePreview/eventManager/postMessageEvent.hooks.js +11 -6
- package/dist/modern/livePreview/eventManager/postMessageEvent.hooks.js.map +1 -1
- package/dist/modern/preview/contentstack-live-preview-HOC.cjs +1 -1
- package/dist/modern/preview/contentstack-live-preview-HOC.js +1 -1
- package/dist/modern/timeline/compare/compare.cjs +3 -1
- package/dist/modern/timeline/compare/compare.cjs.map +1 -1
- package/dist/modern/timeline/compare/compare.js +3 -1
- package/dist/modern/timeline/compare/compare.js.map +1 -1
- package/dist/modern/types/types.cjs.map +1 -1
- package/dist/modern/types/types.d.cts +2 -0
- package/dist/modern/types/types.d.ts +2 -0
- package/dist/modern/types/types.js.map +1 -1
- package/dist/modern/visualBuilder/components/fieldLabelWrapper.cjs +1 -1
- package/dist/modern/visualBuilder/components/fieldLabelWrapper.cjs.map +1 -1
- package/dist/modern/visualBuilder/components/fieldLabelWrapper.js +2 -2
- package/dist/modern/visualBuilder/components/fieldLabelWrapper.js.map +1 -1
- package/dist/modern/visualBuilder/eventManager/useRecalculateVariantDataCSLPValues.cjs +3 -2
- package/dist/modern/visualBuilder/eventManager/useRecalculateVariantDataCSLPValues.cjs.map +1 -1
- package/dist/modern/visualBuilder/eventManager/useRecalculateVariantDataCSLPValues.js +3 -2
- package/dist/modern/visualBuilder/eventManager/useRecalculateVariantDataCSLPValues.js.map +1 -1
- package/dist/modern/visualBuilder/eventManager/useRevalidateFieldDataPostMessageEvent.cjs +2 -2
- package/dist/modern/visualBuilder/eventManager/useRevalidateFieldDataPostMessageEvent.cjs.map +1 -1
- package/dist/modern/visualBuilder/eventManager/useRevalidateFieldDataPostMessageEvent.js +3 -3
- package/dist/modern/visualBuilder/eventManager/useRevalidateFieldDataPostMessageEvent.js.map +1 -1
- package/dist/modern/visualBuilder/eventManager/useVariantsPostMessageEvent.cjs +1 -1
- package/dist/modern/visualBuilder/eventManager/useVariantsPostMessageEvent.cjs.map +1 -1
- package/dist/modern/visualBuilder/eventManager/useVariantsPostMessageEvent.js +2 -2
- package/dist/modern/visualBuilder/eventManager/useVariantsPostMessageEvent.js.map +1 -1
- package/dist/modern/visualBuilder/generators/generateEmptyBlock.cjs +1 -1
- package/dist/modern/visualBuilder/generators/generateEmptyBlock.cjs.map +1 -1
- package/dist/modern/visualBuilder/generators/generateEmptyBlock.js +2 -2
- package/dist/modern/visualBuilder/generators/generateEmptyBlock.js.map +1 -1
- package/dist/modern/visualBuilder/generators/generateHighlightedComment.cjs +2 -1
- package/dist/modern/visualBuilder/generators/generateHighlightedComment.cjs.map +1 -1
- package/dist/modern/visualBuilder/generators/generateHighlightedComment.js +2 -1
- package/dist/modern/visualBuilder/generators/generateHighlightedComment.js.map +1 -1
- package/dist/modern/visualBuilder/generators/generateOverlay.cjs +1 -1
- package/dist/modern/visualBuilder/generators/generateOverlay.cjs.map +1 -1
- package/dist/modern/visualBuilder/generators/generateOverlay.js +2 -2
- package/dist/modern/visualBuilder/generators/generateOverlay.js.map +1 -1
- package/dist/modern/visualBuilder/generators/generateThread.d.cts +1 -1
- package/dist/modern/visualBuilder/generators/generateThread.d.ts +1 -1
- package/dist/modern/visualBuilder/index.cjs +1 -1
- package/dist/modern/visualBuilder/index.cjs.map +1 -1
- package/dist/modern/visualBuilder/index.js +2 -2
- package/dist/modern/visualBuilder/index.js.map +1 -1
- package/dist/modern/visualBuilder/listeners/mouseClick.cjs +14 -10
- package/dist/modern/visualBuilder/listeners/mouseClick.cjs.map +1 -1
- package/dist/modern/visualBuilder/listeners/mouseClick.js +14 -10
- package/dist/modern/visualBuilder/listeners/mouseClick.js.map +1 -1
- package/dist/modern/visualBuilder/utils/collabUtils.d.cts +1 -1
- package/dist/modern/visualBuilder/utils/collabUtils.d.ts +1 -1
- package/dist/modern/visualBuilder/utils/getCsDataOfElement.cjs +3 -3
- package/dist/modern/visualBuilder/utils/getCsDataOfElement.cjs.map +1 -1
- package/dist/modern/visualBuilder/utils/getCsDataOfElement.js +4 -4
- package/dist/modern/visualBuilder/utils/getCsDataOfElement.js.map +1 -1
- package/dist/modern/visualBuilder/utils/getEntryIdentifiersInCurrentPage.cjs +1 -1
- package/dist/modern/visualBuilder/utils/getEntryIdentifiersInCurrentPage.cjs.map +1 -1
- package/dist/modern/visualBuilder/utils/getEntryIdentifiersInCurrentPage.js +2 -2
- package/dist/modern/visualBuilder/utils/getEntryIdentifiersInCurrentPage.js.map +1 -1
- package/dist/modern/visualBuilder/utils/getVisualBuilderRedirectionUrl.cjs +2 -2
- package/dist/modern/visualBuilder/utils/getVisualBuilderRedirectionUrl.cjs.map +1 -1
- package/dist/modern/visualBuilder/utils/getVisualBuilderRedirectionUrl.js +3 -3
- package/dist/modern/visualBuilder/utils/getVisualBuilderRedirectionUrl.js.map +1 -1
- package/dist/modern/visualBuilder/utils/updateFocussedState.cjs +1 -1
- package/dist/modern/visualBuilder/utils/updateFocussedState.cjs.map +1 -1
- package/dist/modern/visualBuilder/utils/updateFocussedState.js +2 -2
- package/dist/modern/visualBuilder/utils/updateFocussedState.js.map +1 -1
- package/package.json +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/livePreview/eventManager/postMessageEvent.hooks.ts"],"sourcesContent":["import { isOpeningInNewTab } from \"../../common/inIframe\";\nimport Config, { setConfigFromParams } from \"../../configManager/configManager\";\nimport { PublicLogger } from \"../../logger/logger\";\nimport { ILivePreviewWindowType } from \"../../types/types\";\nimport { addParamsToUrl, isOpeningInTimeline } from \"../../utils\";\nimport livePreviewPostMessage from \"./livePreviewEventManager\";\nimport { LIVE_PREVIEW_POST_MESSAGE_EVENTS } from \"./livePreviewEventManager.constant\";\nimport {\n HistoryLivePreviewPostMessageEventData,\n LivePreviewInitEventResponse,\n OnChangeLivePreviewPostMessageEventData,\n OnChangeLivePreviewPostMessageEventTypes,\n} from \"./types/livePreviewPostMessageEvent.type\";\n\n/**\n * Registers a post message event listener for history-related events.\n * The listener handles events for forward, backward, and reload actions on the browser history.\n */\nexport function useHistoryPostMessageEvent(): void {\n livePreviewPostMessage?.on<HistoryLivePreviewPostMessageEventData>(\n LIVE_PREVIEW_POST_MESSAGE_EVENTS.HISTORY,\n (event) => {\n switch (event.data.type) {\n case \"forward\": {\n window.history.forward();\n break;\n }\n case \"backward\": {\n window.history.back();\n break;\n }\n case \"reload\": {\n window.history.go();\n break;\n }\n default: {\n const exhaustiveCheck: never = event.data.type;\n throw new Error(`Unhandled event: ${exhaustiveCheck}`);\n }\n }\n }\n );\n}\n\n/**\n * Registers a post message event listener for updating the entry in the live preview.\n */\nexport function useOnEntryUpdatePostMessageEvent(): void {\n livePreviewPostMessage?.on<OnChangeLivePreviewPostMessageEventData>(\n LIVE_PREVIEW_POST_MESSAGE_EVENTS.ON_CHANGE,\n (event) => {\n try {\n const { ssr, onChange, stackDetails } = Config.get();\n const event_type = event.data._metadata?.event_type;\n setConfigFromParams({\n live_preview: event.data.hash,\n });\n\n // This section will run when there is a change in the entry and the website is CSR\n if (!ssr && !event_type) {\n onChange();\n }\n\n if (isOpeningInNewTab()) {\n if (!window) {\n PublicLogger.error(\"window is not defined\");\n return;\n };\n\n if (ssr && !event_type) {\n const url = new URL(window.location.href);\n let live_preview = url.searchParams.get(\"live_preview\");\n let content_type_uid = url.searchParams.get(\"content_type_uid\");\n let entry_uid = url.searchParams.get(\"entry_uid\");\n\n if (live_preview && content_type_uid && entry_uid) {\n // All required params are present, just reload\n window.location.reload();\n } else {\n live_preview = event.data.hash;\n content_type_uid = event.data.content_type_uid || stackDetails.$contentTypeUid?.toString() || \"\";\n entry_uid = event.data.entry_uid || stackDetails.$entryUid?.toString() || \"\";\n // Set missing params and redirect\n url.searchParams.set(\"live_preview\", live_preview);\n if (content_type_uid) {\n url.searchParams.set(\n \"content_type_uid\",\n content_type_uid\n );\n }\n if (entry_uid) {\n url.searchParams.set(\n \"entry_uid\",\n entry_uid\n );\n }\n window.location.href = url.toString();\n }\n }\n\n // This section will run when the hash changes and the website is SSR or CSR\n if (event_type === OnChangeLivePreviewPostMessageEventTypes.HASH_CHANGE) {\n const newUrl = new URL(window.location.href);\n newUrl.searchParams.set(\"live_preview\", event.data.hash);\n window.history.pushState({}, \"\", newUrl.toString());\n }\n\n // This section will run when the URL of the page changes\n if (event_type === OnChangeLivePreviewPostMessageEventTypes.URL_CHANGE && event.data.url) {\n window.location.href = event.data.url;\n }\n }\n } catch (error) {\n PublicLogger.error(\"Error handling live preview update:\", error);\n return;\n }\n }\n );\n}\n\nexport function sendInitializeLivePreviewPostMessageEvent(): void {\n livePreviewPostMessage\n ?.send<LivePreviewInitEventResponse>(\n LIVE_PREVIEW_POST_MESSAGE_EVENTS.INIT,\n {\n config: {\n shouldReload: Config.get().ssr,\n href: window.location.href,\n sdkVersion: process?.env?.PACKAGE_VERSION,\n mode: Config.get().mode,\n },\n }\n )\n .then((data) => {\n const {\n contentTypeUid,\n entryUid,\n windowType = ILivePreviewWindowType.PREVIEW,\n } = data || {};\n\n // TODO: This is a fix for the issue where we were calling sending init in the builder\n // Let's remove this condition when we fix it.\n if (Config?.get()?.windowType && Config.get().windowType === ILivePreviewWindowType.BUILDER) {\n return;\n }\n\n if (contentTypeUid && entryUid) {\n // TODO: we should not use this function. Instead we should have sideEffect run automatically when we set the config.\n setConfigFromParams({\n content_type_uid: contentTypeUid,\n entry_uid: entryUid,\n });\n } else {\n // TODO: add debug logs that runs conditionally\n // PublicLogger.debug(\n // \"init message did not contain contentTypeUid or entryUid.\"\n // );\n }\n if (Config.get().ssr || isOpeningInTimeline() || isOpeningInNewTab()) {\n addParamsToUrl();\n }\n Config.set(\"windowType\", windowType);\n\n // set timeout for client side (use to show warning: You are not editing this page)\n if (!Config.get().ssr) {\n setInterval(() => {\n sendCurrentPageUrlPostMessageEvent();\n }, 1500);\n }\n\n useHistoryPostMessageEvent();\n useOnEntryUpdatePostMessageEvent();\n })\n .catch((e) => {\n // TODO: add debug logs that runs conditionally\n // PublicLogger.debug(\"Error while sending init message\", e);\n });\n}\n\nfunction sendCurrentPageUrlPostMessageEvent(): void {\n livePreviewPostMessage\n ?.send(LIVE_PREVIEW_POST_MESSAGE_EVENTS.CHECK_ENTRY_PAGE, {\n href: window.location.href,\n })\n .catch(() => {\n // TODO: add debug logs that runs conditionally\n });\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../../../src/livePreview/eventManager/postMessageEvent.hooks.ts"],"sourcesContent":["import { isOpeningInNewTab } from \"../../common/inIframe\";\nimport Config, { setConfigFromParams } from \"../../configManager/configManager\";\nimport { PublicLogger } from \"../../logger/logger\";\nimport { ILivePreviewWindowType } from \"../../types/types\";\nimport { addParamsToUrl, isOpeningInTimeline } from \"../../utils\";\nimport livePreviewPostMessage from \"./livePreviewEventManager\";\nimport { LIVE_PREVIEW_POST_MESSAGE_EVENTS } from \"./livePreviewEventManager.constant\";\nimport {\n HistoryLivePreviewPostMessageEventData,\n LivePreviewInitEventResponse,\n OnChangeLivePreviewPostMessageEventData,\n OnChangeLivePreviewPostMessageEventTypes,\n} from \"./types/livePreviewPostMessageEvent.type\";\n\n/**\n * Registers a post message event listener for history-related events.\n * The listener handles events for forward, backward, and reload actions on the browser history.\n */\nexport function useHistoryPostMessageEvent(): void {\n livePreviewPostMessage?.on<HistoryLivePreviewPostMessageEventData>(\n LIVE_PREVIEW_POST_MESSAGE_EVENTS.HISTORY,\n (event) => {\n switch (event.data.type) {\n case \"forward\": {\n window.history.forward();\n break;\n }\n case \"backward\": {\n window.history.back();\n break;\n }\n case \"reload\": {\n window.history.go();\n break;\n }\n default: {\n const exhaustiveCheck: never = event.data.type;\n throw new Error(`Unhandled event: ${exhaustiveCheck}`);\n }\n }\n }\n );\n}\n\n/**\n * Registers a post message event listener for updating the entry in the live preview.\n */\nexport function useOnEntryUpdatePostMessageEvent(): void {\n livePreviewPostMessage?.on<OnChangeLivePreviewPostMessageEventData>(\n LIVE_PREVIEW_POST_MESSAGE_EVENTS.ON_CHANGE,\n (event) => {\n try {\n const { ssr, onChange, stackDetails } = Config.get();\n const event_type = event.data._metadata?.event_type;\n setConfigFromParams({\n live_preview: event.data.hash,\n });\n\n // This section will run when there is a change in the entry and the website is CSR\n if (!ssr && !event_type) {\n onChange();\n }\n\n if (isOpeningInNewTab()) {\n if (!window) {\n PublicLogger.error(\"window is not defined\");\n return;\n };\n\n if (ssr && !event_type) {\n const url = new URL(window.location.href);\n let live_preview = url.searchParams.get(\"live_preview\");\n let content_type_uid = url.searchParams.get(\"content_type_uid\");\n let entry_uid = url.searchParams.get(\"entry_uid\");\n\n if (live_preview && content_type_uid && entry_uid) {\n // All required params are present, just reload\n window.location.reload();\n } else {\n live_preview = event.data.hash;\n content_type_uid = event.data.content_type_uid || stackDetails.$contentTypeUid?.toString() || \"\";\n entry_uid = event.data.entry_uid || stackDetails.$entryUid?.toString() || \"\";\n // Set missing params and redirect\n url.searchParams.set(\"live_preview\", live_preview);\n if (content_type_uid) {\n url.searchParams.set(\n \"content_type_uid\",\n content_type_uid\n );\n }\n if (entry_uid) {\n url.searchParams.set(\n \"entry_uid\",\n entry_uid\n );\n }\n window.location.href = url.toString();\n }\n }\n\n // This section will run when the hash changes and the website is SSR or CSR\n if (event_type === OnChangeLivePreviewPostMessageEventTypes.HASH_CHANGE) {\n const newUrl = new URL(window.location.href);\n newUrl.searchParams.set(\"live_preview\", event.data.hash);\n window.history.pushState({}, \"\", newUrl.toString());\n }\n\n // This section will run when the URL of the page changes\n if (event_type === OnChangeLivePreviewPostMessageEventTypes.URL_CHANGE && event.data.url) {\n window.location.href = event.data.url;\n }\n }\n } catch (error) {\n PublicLogger.error(\"Error handling live preview update:\", error);\n return;\n }\n }\n );\n}\n\nexport function sendInitializeLivePreviewPostMessageEvent(): void {\n const config = Config.get();\n const initConfig: {\n shouldReload: boolean;\n href: string;\n sdkVersion: string | undefined;\n mode: number;\n enableLivePreviewOutsideIframe?: boolean;\n } = {\n shouldReload: config.ssr,\n href: window.location.href,\n sdkVersion: process?.env?.PACKAGE_VERSION,\n mode: config.mode,\n };\n\n if (config.enableLivePreviewOutsideIframe !== undefined) {\n initConfig.enableLivePreviewOutsideIframe = config.enableLivePreviewOutsideIframe;\n }\n\n livePreviewPostMessage\n ?.send<LivePreviewInitEventResponse>(\n LIVE_PREVIEW_POST_MESSAGE_EVENTS.INIT,\n {\n config: initConfig,\n }\n )\n .then((data) => {\n const {\n contentTypeUid,\n entryUid,\n windowType = ILivePreviewWindowType.PREVIEW,\n } = data || {};\n\n // TODO: This is a fix for the issue where we were calling sending init in the builder\n // Let's remove this condition when we fix it.\n if (Config?.get()?.windowType && Config.get().windowType === ILivePreviewWindowType.BUILDER) {\n return;\n }\n\n if (contentTypeUid && entryUid) {\n // TODO: we should not use this function. Instead we should have sideEffect run automatically when we set the config.\n setConfigFromParams({\n content_type_uid: contentTypeUid,\n entry_uid: entryUid,\n });\n } else {\n // TODO: add debug logs that runs conditionally\n // PublicLogger.debug(\n // \"init message did not contain contentTypeUid or entryUid.\"\n // );\n }\n if (Config.get().ssr || isOpeningInTimeline() || isOpeningInNewTab()) {\n addParamsToUrl();\n }\n Config.set(\"windowType\", windowType);\n\n // set timeout for client side (use to show warning: You are not editing this page)\n if (!Config.get().ssr) {\n setInterval(() => {\n sendCurrentPageUrlPostMessageEvent();\n }, 1500);\n }\n\n useHistoryPostMessageEvent();\n useOnEntryUpdatePostMessageEvent();\n })\n .catch((e) => {\n // TODO: add debug logs that runs conditionally\n // PublicLogger.debug(\"Error while sending init message\", e);\n });\n}\n\nfunction sendCurrentPageUrlPostMessageEvent(): void {\n livePreviewPostMessage\n ?.send(LIVE_PREVIEW_POST_MESSAGE_EVENTS.CHECK_ENTRY_PAGE, {\n href: window.location.href,\n })\n .catch(() => {\n // TODO: add debug logs that runs conditionally\n });\n}\n"],"mappings":"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","names":[]}
|
|
@@ -227,7 +227,7 @@ var _ContentstackLivePreview = class _ContentstackLivePreview {
|
|
|
227
227
|
* @returns The version of the SDK as a string.
|
|
228
228
|
*/
|
|
229
229
|
static getSdkVersion() {
|
|
230
|
-
return "4.
|
|
230
|
+
return "4.3.0";
|
|
231
231
|
}
|
|
232
232
|
};
|
|
233
233
|
_ContentstackLivePreview.previewConstructors = {};
|
|
@@ -195,7 +195,7 @@ var _ContentstackLivePreview = class _ContentstackLivePreview {
|
|
|
195
195
|
* @returns The version of the SDK as a string.
|
|
196
196
|
*/
|
|
197
197
|
static getSdkVersion() {
|
|
198
|
-
return "4.
|
|
198
|
+
return "4.3.0";
|
|
199
199
|
}
|
|
200
200
|
};
|
|
201
201
|
_ContentstackLivePreview.previewConstructors = {};
|
|
@@ -36,6 +36,7 @@ module.exports = __toCommonJS(compare_exports);
|
|
|
36
36
|
var import_timelinePostMessage = __toESM(require("../timelinePostMessage/timelinePostMessage.cjs"), 1);
|
|
37
37
|
var import_timelinePostMessage2 = require("../timelinePostMessage/timelinePostMessage.constant.cjs");
|
|
38
38
|
var import_compare = require("./compare.style.cjs");
|
|
39
|
+
var import_cslpdata = require("../../cslp/cslpdata.cjs");
|
|
39
40
|
var voidElements = /* @__PURE__ */ new Set([
|
|
40
41
|
"area",
|
|
41
42
|
"base",
|
|
@@ -89,6 +90,7 @@ function handleWebCompare() {
|
|
|
89
90
|
const map = {};
|
|
90
91
|
for (const element of elements) {
|
|
91
92
|
const cslp = element.getAttribute("data-cslp");
|
|
93
|
+
if (!(0, import_cslpdata.isValidCslp)(cslp)) continue;
|
|
92
94
|
if (element.hasAttributes() && voidElements.has(element.tagName.toLowerCase())) {
|
|
93
95
|
let attributes = "";
|
|
94
96
|
for (const attr of element.attributes) {
|
|
@@ -120,7 +122,7 @@ function handleWebCompare() {
|
|
|
120
122
|
);
|
|
121
123
|
for (const element of elements) {
|
|
122
124
|
const path = element.getAttribute("data-cslp");
|
|
123
|
-
if (!diff[path]) continue;
|
|
125
|
+
if (!(0, import_cslpdata.isValidCslp)(path) || !diff[path]) continue;
|
|
124
126
|
if (voidElements.has(element.tagName.toLowerCase())) {
|
|
125
127
|
element.classList.add(`cs-compare__void--${operation}`);
|
|
126
128
|
} else {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/timeline/compare/compare.ts"],"sourcesContent":["import timelinePostMessage from \"../timelinePostMessage/timelinePostMessage\";\nimport { timelinePostMessageEvents } from \"../timelinePostMessage/timelinePostMessage.constant\";\nimport { compareGlobalStyles } from \"./compare.style\";\n\nconst voidElements = new Set([\n \"area\",\n \"base\",\n \"br\",\n \"col\",\n \"embed\",\n \"hr\",\n \"img\",\n \"input\",\n \"keygen\",\n \"link\",\n \"meta\",\n \"param\",\n \"source\",\n \"track\",\n \"wbr\",\n \"video\"\n]);\n\nconst LEAF_CSLP_SELECTOR = \"[data-cslp]:not(:has([data-cslp]))\";\nconst DIFF_WRAPPER = \"cs-compare\";\n\nfunction registerCompareElement() {\n class Compare extends HTMLSpanElement {\n constructor() {\n super();\n }\n }\n\n if (!customElements.get(DIFF_WRAPPER)) {\n customElements.define(DIFF_WRAPPER, Compare, {\n extends: \"span\",\n });\n }\n}\n\n\n\nexport function handleWebCompare() {\n // Check if window and document are available\n if (typeof window === \"undefined\" || typeof document === \"undefined\") {\n // Server-side, don't execute client-specific logic\n return;\n }\n compareGlobalStyles();\n registerCompareElement();\n\n timelinePostMessage?.on(\n timelinePostMessageEvents.SEND_CURRENT_BASE_ROUTE,\n async () => {\n return { url: window.location.href.split(\"?\")[0] };\n }\n );\n\n timelinePostMessage?.on(\n timelinePostMessageEvents.SEND_CSLP_DATA,\n async () => {\n const elements = Array.from(\n document.querySelectorAll(LEAF_CSLP_SELECTOR)\n );\n const map: Record<string, string> = {};\n for (const element of elements) {\n const cslp = element.getAttribute(\"data-cslp\")
|
|
1
|
+
{"version":3,"sources":["../../../../src/timeline/compare/compare.ts"],"sourcesContent":["import timelinePostMessage from \"../timelinePostMessage/timelinePostMessage\";\nimport { timelinePostMessageEvents } from \"../timelinePostMessage/timelinePostMessage.constant\";\nimport { compareGlobalStyles } from \"./compare.style\";\nimport { isValidCslp } from \"../../cslp/cslpdata\";\n\nconst voidElements = new Set([\n \"area\",\n \"base\",\n \"br\",\n \"col\",\n \"embed\",\n \"hr\",\n \"img\",\n \"input\",\n \"keygen\",\n \"link\",\n \"meta\",\n \"param\",\n \"source\",\n \"track\",\n \"wbr\",\n \"video\"\n]);\n\nconst LEAF_CSLP_SELECTOR = \"[data-cslp]:not(:has([data-cslp]))\";\nconst DIFF_WRAPPER = \"cs-compare\";\n\nfunction registerCompareElement() {\n class Compare extends HTMLSpanElement {\n constructor() {\n super();\n }\n }\n\n if (!customElements.get(DIFF_WRAPPER)) {\n customElements.define(DIFF_WRAPPER, Compare, {\n extends: \"span\",\n });\n }\n}\n\n\n\nexport function handleWebCompare() {\n // Check if window and document are available\n if (typeof window === \"undefined\" || typeof document === \"undefined\") {\n // Server-side, don't execute client-specific logic\n return;\n }\n compareGlobalStyles();\n registerCompareElement();\n\n timelinePostMessage?.on(\n timelinePostMessageEvents.SEND_CURRENT_BASE_ROUTE,\n async () => {\n return { url: window.location.href.split(\"?\")[0] };\n }\n );\n\n timelinePostMessage?.on(\n timelinePostMessageEvents.SEND_CSLP_DATA,\n async () => {\n const elements = Array.from(\n document.querySelectorAll(LEAF_CSLP_SELECTOR)\n );\n const map: Record<string, string> = {};\n for (const element of elements) {\n const cslp = element.getAttribute(\"data-cslp\");\n if (!isValidCslp(cslp)) continue;\n if (\n element.hasAttributes() &&\n voidElements.has(element.tagName.toLowerCase())\n ) {\n let attributes = \"\";\n for (const attr of element.attributes) {\n attributes += `${attr.name} -> ${attr.value}\\n`;\n }\n map[cslp] = attributes;\n } else {\n map[cslp] = element.innerHTML;\n }\n }\n return map;\n }\n );\n const mergeColors = (className = \".cs-compare--added\") => {\n const elements = Array.from(document.querySelectorAll(className));\n for (let i = 1; i < elements.length; i++) {\n const prev = elements[i - 1];\n const next = elements[i];\n if (prev.nextElementSibling === next)\n prev.appendChild(prev.nextSibling!);\n }\n };\n\n timelinePostMessage?.on<{\n diff: Record<string, string>;\n type: \"base\" | \"compare\";\n }>(timelinePostMessageEvents.DIFF_VALUE, async (event) => {\n const { diff, type } = event.data;\n const operation = type === \"base\" ? \"removed\" : \"added\";\n const elements = Array.from(\n document.querySelectorAll(LEAF_CSLP_SELECTOR)\n );\n for (const element of elements) {\n const path = element.getAttribute(\"data-cslp\");\n if (!isValidCslp(path) || !diff[path]) continue;\n\n if (voidElements.has(element.tagName.toLowerCase())) {\n element.classList.add(`cs-compare__void--${operation}`);\n } else {\n element.innerHTML = diff[path];\n }\n };\n\n mergeColors(`.cs-compare--${operation}`);\n });\n\n\n timelinePostMessage?.on(timelinePostMessageEvents.REMOVE_DIFF, async () => {\n // unwrap the cs-compare tags\n const elements = Array.from(document.querySelectorAll(\"cs-compare\"));\n for (const element of elements) {\n const parent = element.parentElement!;\n while (element.firstChild) {\n parent.insertBefore(element.firstChild, element);\n }\n parent.removeChild(element);\n }\n // remove classes cs-compare__void--added and cs-compare__void--removed\n const voidElements = Array.from(\n document.querySelectorAll(\n \".cs-compare__void--added, .cs-compare__void--removed\"\n )\n );\n for (const element of voidElements) {\n element.classList.remove(\"cs-compare__void--added\");\n element.classList.remove(\"cs-compare__void--removed\");\n }\n });\n}\n"],"mappings":"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","names":["import_timelinePostMessage","timelinePostMessage","voidElements"]}
|
|
@@ -4,6 +4,7 @@ import "../../chunk-5WRI5ZAA.js";
|
|
|
4
4
|
import timelinePostMessage from "../timelinePostMessage/timelinePostMessage.js";
|
|
5
5
|
import { timelinePostMessageEvents } from "../timelinePostMessage/timelinePostMessage.constant.js";
|
|
6
6
|
import { compareGlobalStyles } from "./compare.style.js";
|
|
7
|
+
import { isValidCslp } from "../../cslp/cslpdata.js";
|
|
7
8
|
var voidElements = /* @__PURE__ */ new Set([
|
|
8
9
|
"area",
|
|
9
10
|
"base",
|
|
@@ -57,6 +58,7 @@ function handleWebCompare() {
|
|
|
57
58
|
const map = {};
|
|
58
59
|
for (const element of elements) {
|
|
59
60
|
const cslp = element.getAttribute("data-cslp");
|
|
61
|
+
if (!isValidCslp(cslp)) continue;
|
|
60
62
|
if (element.hasAttributes() && voidElements.has(element.tagName.toLowerCase())) {
|
|
61
63
|
let attributes = "";
|
|
62
64
|
for (const attr of element.attributes) {
|
|
@@ -88,7 +90,7 @@ function handleWebCompare() {
|
|
|
88
90
|
);
|
|
89
91
|
for (const element of elements) {
|
|
90
92
|
const path = element.getAttribute("data-cslp");
|
|
91
|
-
if (!diff[path]) continue;
|
|
93
|
+
if (!isValidCslp(path) || !diff[path]) continue;
|
|
92
94
|
if (voidElements.has(element.tagName.toLowerCase())) {
|
|
93
95
|
element.classList.add(`cs-compare__void--${operation}`);
|
|
94
96
|
} else {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/timeline/compare/compare.ts"],"sourcesContent":["import timelinePostMessage from \"../timelinePostMessage/timelinePostMessage\";\nimport { timelinePostMessageEvents } from \"../timelinePostMessage/timelinePostMessage.constant\";\nimport { compareGlobalStyles } from \"./compare.style\";\n\nconst voidElements = new Set([\n \"area\",\n \"base\",\n \"br\",\n \"col\",\n \"embed\",\n \"hr\",\n \"img\",\n \"input\",\n \"keygen\",\n \"link\",\n \"meta\",\n \"param\",\n \"source\",\n \"track\",\n \"wbr\",\n \"video\"\n]);\n\nconst LEAF_CSLP_SELECTOR = \"[data-cslp]:not(:has([data-cslp]))\";\nconst DIFF_WRAPPER = \"cs-compare\";\n\nfunction registerCompareElement() {\n class Compare extends HTMLSpanElement {\n constructor() {\n super();\n }\n }\n\n if (!customElements.get(DIFF_WRAPPER)) {\n customElements.define(DIFF_WRAPPER, Compare, {\n extends: \"span\",\n });\n }\n}\n\n\n\nexport function handleWebCompare() {\n // Check if window and document are available\n if (typeof window === \"undefined\" || typeof document === \"undefined\") {\n // Server-side, don't execute client-specific logic\n return;\n }\n compareGlobalStyles();\n registerCompareElement();\n\n timelinePostMessage?.on(\n timelinePostMessageEvents.SEND_CURRENT_BASE_ROUTE,\n async () => {\n return { url: window.location.href.split(\"?\")[0] };\n }\n );\n\n timelinePostMessage?.on(\n timelinePostMessageEvents.SEND_CSLP_DATA,\n async () => {\n const elements = Array.from(\n document.querySelectorAll(LEAF_CSLP_SELECTOR)\n );\n const map: Record<string, string> = {};\n for (const element of elements) {\n const cslp = element.getAttribute(\"data-cslp\")
|
|
1
|
+
{"version":3,"sources":["../../../../src/timeline/compare/compare.ts"],"sourcesContent":["import timelinePostMessage from \"../timelinePostMessage/timelinePostMessage\";\nimport { timelinePostMessageEvents } from \"../timelinePostMessage/timelinePostMessage.constant\";\nimport { compareGlobalStyles } from \"./compare.style\";\nimport { isValidCslp } from \"../../cslp/cslpdata\";\n\nconst voidElements = new Set([\n \"area\",\n \"base\",\n \"br\",\n \"col\",\n \"embed\",\n \"hr\",\n \"img\",\n \"input\",\n \"keygen\",\n \"link\",\n \"meta\",\n \"param\",\n \"source\",\n \"track\",\n \"wbr\",\n \"video\"\n]);\n\nconst LEAF_CSLP_SELECTOR = \"[data-cslp]:not(:has([data-cslp]))\";\nconst DIFF_WRAPPER = \"cs-compare\";\n\nfunction registerCompareElement() {\n class Compare extends HTMLSpanElement {\n constructor() {\n super();\n }\n }\n\n if (!customElements.get(DIFF_WRAPPER)) {\n customElements.define(DIFF_WRAPPER, Compare, {\n extends: \"span\",\n });\n }\n}\n\n\n\nexport function handleWebCompare() {\n // Check if window and document are available\n if (typeof window === \"undefined\" || typeof document === \"undefined\") {\n // Server-side, don't execute client-specific logic\n return;\n }\n compareGlobalStyles();\n registerCompareElement();\n\n timelinePostMessage?.on(\n timelinePostMessageEvents.SEND_CURRENT_BASE_ROUTE,\n async () => {\n return { url: window.location.href.split(\"?\")[0] };\n }\n );\n\n timelinePostMessage?.on(\n timelinePostMessageEvents.SEND_CSLP_DATA,\n async () => {\n const elements = Array.from(\n document.querySelectorAll(LEAF_CSLP_SELECTOR)\n );\n const map: Record<string, string> = {};\n for (const element of elements) {\n const cslp = element.getAttribute(\"data-cslp\");\n if (!isValidCslp(cslp)) continue;\n if (\n element.hasAttributes() &&\n voidElements.has(element.tagName.toLowerCase())\n ) {\n let attributes = \"\";\n for (const attr of element.attributes) {\n attributes += `${attr.name} -> ${attr.value}\\n`;\n }\n map[cslp] = attributes;\n } else {\n map[cslp] = element.innerHTML;\n }\n }\n return map;\n }\n );\n const mergeColors = (className = \".cs-compare--added\") => {\n const elements = Array.from(document.querySelectorAll(className));\n for (let i = 1; i < elements.length; i++) {\n const prev = elements[i - 1];\n const next = elements[i];\n if (prev.nextElementSibling === next)\n prev.appendChild(prev.nextSibling!);\n }\n };\n\n timelinePostMessage?.on<{\n diff: Record<string, string>;\n type: \"base\" | \"compare\";\n }>(timelinePostMessageEvents.DIFF_VALUE, async (event) => {\n const { diff, type } = event.data;\n const operation = type === \"base\" ? \"removed\" : \"added\";\n const elements = Array.from(\n document.querySelectorAll(LEAF_CSLP_SELECTOR)\n );\n for (const element of elements) {\n const path = element.getAttribute(\"data-cslp\");\n if (!isValidCslp(path) || !diff[path]) continue;\n\n if (voidElements.has(element.tagName.toLowerCase())) {\n element.classList.add(`cs-compare__void--${operation}`);\n } else {\n element.innerHTML = diff[path];\n }\n };\n\n mergeColors(`.cs-compare--${operation}`);\n });\n\n\n timelinePostMessage?.on(timelinePostMessageEvents.REMOVE_DIFF, async () => {\n // unwrap the cs-compare tags\n const elements = Array.from(document.querySelectorAll(\"cs-compare\"));\n for (const element of elements) {\n const parent = element.parentElement!;\n while (element.firstChild) {\n parent.insertBefore(element.firstChild, element);\n }\n parent.removeChild(element);\n }\n // remove classes cs-compare__void--added and cs-compare__void--removed\n const voidElements = Array.from(\n document.querySelectorAll(\n \".cs-compare__void--added, .cs-compare__void--removed\"\n )\n );\n for (const element of voidElements) {\n element.classList.remove(\"cs-compare__void--added\");\n element.classList.remove(\"cs-compare__void--removed\");\n }\n });\n}\n"],"mappings":"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","names":["voidElements"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/types/types.ts"],"sourcesContent":["import { ICollabConfig } from \"../visualBuilder/types/collab.types\";\nexport declare interface IEditEntrySearchParams {\n hash?: string;\n entry_uid?: string;\n content_type_uid?: string;\n /**\n * @deprecated pass this value as hash instead\n */\n live_preview?: string;\n}\n\nexport declare interface IClientUrlParams {\n protocol: \"http\" | \"https\";\n host: string;\n port: string | number;\n url: string;\n}\n\nexport declare interface IStackSdk {\n live_preview: { [key: string]: any } & Partial<IConfig>;\n [key: string]: any;\n environment: string;\n}\n\nexport declare interface IStackDetails {\n apiKey: string;\n environment: string;\n contentTypeUid: string;\n entryUid: string;\n branch: string;\n /**\n * This locale is currently used by the visual builder to\n * redirect to the correct locale if the no data-cslp tag\n * is present in the HTML to extract the locale.\n */\n locale: string;\n masterLocale: string;\n}\n\nexport declare interface IInitStackDetails {\n apiKey: string;\n environment: string;\n branch: string;\n /**\n * This locale is currently used by the visual builder to\n * redirect to the correct locale if the no data-cslp tag\n * is present in the HTML to extract the locale.\n */\n locale: string;\n}\n\nexport declare type ILivePreviewMode = \"builder\" | \"preview\";\n\n//? We kept it as number so that we could disable only the unrequired features,\n//? since the \"Builder\" mode will contain all the features of the \"Preview\" mode.\nexport enum ILivePreviewModeConfig {\n PREVIEW = 1,\n BUILDER = 2,\n}\n\nexport enum ILivePreviewWindowType {\n PREVIEW = \"preview\",\n PREVIEW_SHARE = \"preview-share\",\n BUILDER = \"builder\",\n INDEPENDENT = \"independent\",\n}\n\nexport declare interface IConfig {\n ssr: boolean;\n enable: boolean;\n /**\n * @default false\n */\n debug: boolean;\n cleanCslpOnProduction: boolean;\n stackDetails: IStackDetails;\n clientUrlParams: IClientUrlParams;\n stackSdk: IStackSdk;\n onChange: () => void;\n runScriptsOnUpdate: boolean;\n windowType: ILivePreviewWindowType;\n hash: string;\n editButton: IConfigEditButton;\n editInVisualBuilderButton: IConfigEditInVisualBuilderButton;\n mode: ILivePreviewModeConfig;\n elements: {\n highlightedElement: HTMLElement | null;\n };\n collab: ICollabConfig[\"collab\"];\n}\n\n\nexport declare interface IConfigEditInVisualBuilderButton {\n enable: boolean;\n position?:\n | \"top-left\"\n | \"top-right\"\n | \"bottom-left\"\n | \"bottom-right\"\n}\n\n\nexport declare interface IConfigEditButton {\n enable: boolean;\n exclude?: (\"insideLivePreviewPortal\" | \"outsideLivePreviewPortal\")[];\n includeByQueryParameter?: boolean;\n position?:\n | \"top\"\n | \"bottom\"\n | \"left\"\n | \"right\"\n | \"top-left\"\n | \"top-right\"\n | \"top-center\"\n | \"bottom-left\"\n | \"bottom-right\"\n | \"bottom-center\";\n}\n\nexport declare interface IInitData {\n ssr: boolean;\n runScriptsOnUpdate: boolean;\n enable: boolean;\n /**\n * @default false\n */\n debug: boolean;\n cleanCslpOnProduction: boolean;\n stackDetails: Partial<IInitStackDetails>;\n clientUrlParams: Partial<Omit<IClientUrlParams, \"url\">>;\n stackSdk: IStackSdk;\n editButton: IConfigEditButton;\n editInVisualBuilderButton: IConfigEditInVisualBuilderButton;\n mode: ILivePreviewMode;\n}\n\n// type PickPartial<T, K extends keyof T> = Partial<Pick<T, K>> & Omit<T, K>;\n\n// export type IInitData =\n// | {\n// ssr?: true;\n// stackSdk?: IStackSdk;\n// runScriptsOnUpdate?: boolean;\n// enable?: boolean;\n// cleanCslpOnProduction?: boolean;\n// stackDetails?: Partial<IInitStackDetails>;\n// clientUrlParams?: Partial<Omit<IClientUrlParams, \"url\">>;\n// editButton?: IConfigEditButton;\n// mode?: \"preview\";\n// }\n// | {\n// ssr?: true;\n// stackSdk?: IStackSdk;\n// runScriptsOnUpdate?: boolean;\n// enable?: boolean;\n// cleanCslpOnProduction?: boolean;\n// stackDetails: PickPartial<IInitStackDetails, \"branch\">;\n// clientUrlParams: PickPartial<\n// Omit<IClientUrlParams, \"url\">,\n// \"port\" | \"protocol\"\n// >;\n// editButton?: IConfigEditButton;\n// mode: \"builder\";\n// }\n// | {\n// ssr: false;\n// runScriptsOnUpdate?: boolean;\n// enable?: boolean;\n// cleanCslpOnProduction?: boolean;\n// stackDetails?: Partial<IInitStackDetails>;\n// clientUrlParams?: Partial<Omit<IClientUrlParams, \"url\">>;\n// stackSdk: IStackSdk;\n// editButton?: IConfigEditButton;\n// mode?: \"preview\";\n// }\n// | {\n// ssr: false;\n// runScriptsOnUpdate?: boolean;\n// enable?: boolean;\n// cleanCslpOnProduction?: boolean;\n// stackDetails: PickPartial<IInitStackDetails, \"branch\">;\n// clientUrlParams: PickPartial<\n// Omit<IClientUrlParams, \"url\">,\n// \"port\" | \"protocol\"\n// >;\n// stackSdk: IStackSdk;\n// editButton?: IConfigEditButton;\n// mode: \"builder\";\n// };\n\n// Post message types\n\nexport declare interface ILivePreviewMessageCommon {\n from: \"live-preview\";\n}\n\nexport declare interface IEditButtonPosition {\n upperBoundOfTooltip: number;\n leftBoundOfTooltip: number;\n}\n\n// end of Post message types\n\nexport interface IVisualBuilderInitEvent {\n windowType: ILivePreviewWindowType;\n stackDetails: {\n masterLocale: string;\n };\n collab?: ICollabConfig[\"collab\"];\n}\n\nexport type IExportedConfig = Pick<\n IConfig,\n | \"ssr\"\n | \"enable\"\n | \"cleanCslpOnProduction\"\n | \"stackDetails\"\n | \"clientUrlParams\"\n | \"windowType\"\n | \"hash\"\n | \"editButton\"\n | \"mode\"\n>;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAuDO,IAAK,yBAAL,kBAAKA,4BAAL;AACH,EAAAA,gDAAA,aAAU,KAAV;AACA,EAAAA,gDAAA,aAAU,KAAV;AAFQ,SAAAA;AAAA,GAAA;AAKL,IAAK,yBAAL,kBAAKC,4BAAL;AACH,EAAAA,wBAAA,aAAU;AACV,EAAAA,wBAAA,mBAAgB;AAChB,EAAAA,wBAAA,aAAU;AACV,EAAAA,wBAAA,iBAAc;AAJN,SAAAA;AAAA,GAAA;","names":["ILivePreviewModeConfig","ILivePreviewWindowType"]}
|
|
1
|
+
{"version":3,"sources":["../../../src/types/types.ts"],"sourcesContent":["import { ICollabConfig } from \"../visualBuilder/types/collab.types\";\nexport declare interface IEditEntrySearchParams {\n hash?: string;\n entry_uid?: string;\n content_type_uid?: string;\n /**\n * @deprecated pass this value as hash instead\n */\n live_preview?: string;\n}\n\nexport declare interface IClientUrlParams {\n protocol: \"http\" | \"https\";\n host: string;\n port: string | number;\n url: string;\n}\n\nexport declare interface IStackSdk {\n live_preview: { [key: string]: any } & Partial<IConfig>;\n [key: string]: any;\n environment: string;\n}\n\nexport declare interface IStackDetails {\n apiKey: string;\n environment: string;\n contentTypeUid: string;\n entryUid: string;\n branch: string;\n /**\n * This locale is currently used by the visual builder to\n * redirect to the correct locale if the no data-cslp tag\n * is present in the HTML to extract the locale.\n */\n locale: string;\n masterLocale: string;\n}\n\nexport declare interface IInitStackDetails {\n apiKey: string;\n environment: string;\n branch: string;\n /**\n * This locale is currently used by the visual builder to\n * redirect to the correct locale if the no data-cslp tag\n * is present in the HTML to extract the locale.\n */\n locale: string;\n}\n\nexport declare type ILivePreviewMode = \"builder\" | \"preview\";\n\n//? We kept it as number so that we could disable only the unrequired features,\n//? since the \"Builder\" mode will contain all the features of the \"Preview\" mode.\nexport enum ILivePreviewModeConfig {\n PREVIEW = 1,\n BUILDER = 2,\n}\n\nexport enum ILivePreviewWindowType {\n PREVIEW = \"preview\",\n PREVIEW_SHARE = \"preview-share\",\n BUILDER = \"builder\",\n INDEPENDENT = \"independent\",\n}\n\nexport declare interface IConfig {\n ssr: boolean;\n enable: boolean;\n /**\n * @default false\n */\n debug: boolean;\n cleanCslpOnProduction: boolean;\n stackDetails: IStackDetails;\n clientUrlParams: IClientUrlParams;\n stackSdk: IStackSdk;\n onChange: () => void;\n runScriptsOnUpdate: boolean;\n windowType: ILivePreviewWindowType;\n hash: string;\n editButton: IConfigEditButton;\n editInVisualBuilderButton: IConfigEditInVisualBuilderButton;\n mode: ILivePreviewModeConfig;\n elements: {\n highlightedElement: HTMLElement | null;\n };\n collab: ICollabConfig[\"collab\"];\n enableLivePreviewOutsideIframe: boolean | undefined;\n}\n\n\nexport declare interface IConfigEditInVisualBuilderButton {\n enable: boolean;\n position?:\n | \"top-left\"\n | \"top-right\"\n | \"bottom-left\"\n | \"bottom-right\"\n}\n\n\nexport declare interface IConfigEditButton {\n enable: boolean;\n exclude?: (\"insideLivePreviewPortal\" | \"outsideLivePreviewPortal\")[];\n includeByQueryParameter?: boolean;\n position?:\n | \"top\"\n | \"bottom\"\n | \"left\"\n | \"right\"\n | \"top-left\"\n | \"top-right\"\n | \"top-center\"\n | \"bottom-left\"\n | \"bottom-right\"\n | \"bottom-center\";\n}\n\nexport declare interface IInitData {\n ssr: boolean;\n runScriptsOnUpdate: boolean;\n enable: boolean;\n /**\n * @default false\n */\n debug: boolean;\n cleanCslpOnProduction: boolean;\n stackDetails: Partial<IInitStackDetails>;\n clientUrlParams: Partial<Omit<IClientUrlParams, \"url\">>;\n stackSdk: IStackSdk;\n editButton: IConfigEditButton;\n editInVisualBuilderButton: IConfigEditInVisualBuilderButton;\n mode: ILivePreviewMode;\n enableLivePreviewOutsideIframe: boolean | undefined; // default: undefined\n}\n\n// type PickPartial<T, K extends keyof T> = Partial<Pick<T, K>> & Omit<T, K>;\n\n// export type IInitData =\n// | {\n// ssr?: true;\n// stackSdk?: IStackSdk;\n// runScriptsOnUpdate?: boolean;\n// enable?: boolean;\n// cleanCslpOnProduction?: boolean;\n// stackDetails?: Partial<IInitStackDetails>;\n// clientUrlParams?: Partial<Omit<IClientUrlParams, \"url\">>;\n// editButton?: IConfigEditButton;\n// mode?: \"preview\";\n// }\n// | {\n// ssr?: true;\n// stackSdk?: IStackSdk;\n// runScriptsOnUpdate?: boolean;\n// enable?: boolean;\n// cleanCslpOnProduction?: boolean;\n// stackDetails: PickPartial<IInitStackDetails, \"branch\">;\n// clientUrlParams: PickPartial<\n// Omit<IClientUrlParams, \"url\">,\n// \"port\" | \"protocol\"\n// >;\n// editButton?: IConfigEditButton;\n// mode: \"builder\";\n// }\n// | {\n// ssr: false;\n// runScriptsOnUpdate?: boolean;\n// enable?: boolean;\n// cleanCslpOnProduction?: boolean;\n// stackDetails?: Partial<IInitStackDetails>;\n// clientUrlParams?: Partial<Omit<IClientUrlParams, \"url\">>;\n// stackSdk: IStackSdk;\n// editButton?: IConfigEditButton;\n// mode?: \"preview\";\n// }\n// | {\n// ssr: false;\n// runScriptsOnUpdate?: boolean;\n// enable?: boolean;\n// cleanCslpOnProduction?: boolean;\n// stackDetails: PickPartial<IInitStackDetails, \"branch\">;\n// clientUrlParams: PickPartial<\n// Omit<IClientUrlParams, \"url\">,\n// \"port\" | \"protocol\"\n// >;\n// stackSdk: IStackSdk;\n// editButton?: IConfigEditButton;\n// mode: \"builder\";\n// };\n\n// Post message types\n\nexport declare interface ILivePreviewMessageCommon {\n from: \"live-preview\";\n}\n\nexport declare interface IEditButtonPosition {\n upperBoundOfTooltip: number;\n leftBoundOfTooltip: number;\n}\n\n// end of Post message types\n\nexport interface IVisualBuilderInitEvent {\n windowType: ILivePreviewWindowType;\n stackDetails: {\n masterLocale: string;\n };\n collab?: ICollabConfig[\"collab\"];\n}\n\nexport type IExportedConfig = Pick<\n IConfig,\n | \"ssr\"\n | \"enable\"\n | \"cleanCslpOnProduction\"\n | \"stackDetails\"\n | \"clientUrlParams\"\n | \"windowType\"\n | \"hash\"\n | \"editButton\"\n | \"mode\"\n>;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAuDO,IAAK,yBAAL,kBAAKA,4BAAL;AACH,EAAAA,gDAAA,aAAU,KAAV;AACA,EAAAA,gDAAA,aAAU,KAAV;AAFQ,SAAAA;AAAA,GAAA;AAKL,IAAK,yBAAL,kBAAKC,4BAAL;AACH,EAAAA,wBAAA,aAAU;AACV,EAAAA,wBAAA,mBAAgB;AAChB,EAAAA,wBAAA,aAAU;AACV,EAAAA,wBAAA,iBAAc;AAJN,SAAAA;AAAA,GAAA;","names":["ILivePreviewModeConfig","ILivePreviewWindowType"]}
|
|
@@ -80,6 +80,7 @@ declare interface IConfig {
|
|
|
80
80
|
highlightedElement: HTMLElement | null;
|
|
81
81
|
};
|
|
82
82
|
collab: ICollabConfig["collab"];
|
|
83
|
+
enableLivePreviewOutsideIframe: boolean | undefined;
|
|
83
84
|
}
|
|
84
85
|
declare interface IConfigEditInVisualBuilderButton {
|
|
85
86
|
enable: boolean;
|
|
@@ -106,6 +107,7 @@ declare interface IInitData {
|
|
|
106
107
|
editButton: IConfigEditButton;
|
|
107
108
|
editInVisualBuilderButton: IConfigEditInVisualBuilderButton;
|
|
108
109
|
mode: ILivePreviewMode;
|
|
110
|
+
enableLivePreviewOutsideIframe: boolean | undefined;
|
|
109
111
|
}
|
|
110
112
|
declare interface ILivePreviewMessageCommon {
|
|
111
113
|
from: "live-preview";
|
|
@@ -80,6 +80,7 @@ declare interface IConfig {
|
|
|
80
80
|
highlightedElement: HTMLElement | null;
|
|
81
81
|
};
|
|
82
82
|
collab: ICollabConfig["collab"];
|
|
83
|
+
enableLivePreviewOutsideIframe: boolean | undefined;
|
|
83
84
|
}
|
|
84
85
|
declare interface IConfigEditInVisualBuilderButton {
|
|
85
86
|
enable: boolean;
|
|
@@ -106,6 +107,7 @@ declare interface IInitData {
|
|
|
106
107
|
editButton: IConfigEditButton;
|
|
107
108
|
editInVisualBuilderButton: IConfigEditInVisualBuilderButton;
|
|
108
109
|
mode: ILivePreviewMode;
|
|
110
|
+
enableLivePreviewOutsideIframe: boolean | undefined;
|
|
109
111
|
}
|
|
110
112
|
declare interface ILivePreviewMessageCommon {
|
|
111
113
|
from: "live-preview";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/types/types.ts"],"sourcesContent":["import { ICollabConfig } from \"../visualBuilder/types/collab.types\";\nexport declare interface IEditEntrySearchParams {\n hash?: string;\n entry_uid?: string;\n content_type_uid?: string;\n /**\n * @deprecated pass this value as hash instead\n */\n live_preview?: string;\n}\n\nexport declare interface IClientUrlParams {\n protocol: \"http\" | \"https\";\n host: string;\n port: string | number;\n url: string;\n}\n\nexport declare interface IStackSdk {\n live_preview: { [key: string]: any } & Partial<IConfig>;\n [key: string]: any;\n environment: string;\n}\n\nexport declare interface IStackDetails {\n apiKey: string;\n environment: string;\n contentTypeUid: string;\n entryUid: string;\n branch: string;\n /**\n * This locale is currently used by the visual builder to\n * redirect to the correct locale if the no data-cslp tag\n * is present in the HTML to extract the locale.\n */\n locale: string;\n masterLocale: string;\n}\n\nexport declare interface IInitStackDetails {\n apiKey: string;\n environment: string;\n branch: string;\n /**\n * This locale is currently used by the visual builder to\n * redirect to the correct locale if the no data-cslp tag\n * is present in the HTML to extract the locale.\n */\n locale: string;\n}\n\nexport declare type ILivePreviewMode = \"builder\" | \"preview\";\n\n//? We kept it as number so that we could disable only the unrequired features,\n//? since the \"Builder\" mode will contain all the features of the \"Preview\" mode.\nexport enum ILivePreviewModeConfig {\n PREVIEW = 1,\n BUILDER = 2,\n}\n\nexport enum ILivePreviewWindowType {\n PREVIEW = \"preview\",\n PREVIEW_SHARE = \"preview-share\",\n BUILDER = \"builder\",\n INDEPENDENT = \"independent\",\n}\n\nexport declare interface IConfig {\n ssr: boolean;\n enable: boolean;\n /**\n * @default false\n */\n debug: boolean;\n cleanCslpOnProduction: boolean;\n stackDetails: IStackDetails;\n clientUrlParams: IClientUrlParams;\n stackSdk: IStackSdk;\n onChange: () => void;\n runScriptsOnUpdate: boolean;\n windowType: ILivePreviewWindowType;\n hash: string;\n editButton: IConfigEditButton;\n editInVisualBuilderButton: IConfigEditInVisualBuilderButton;\n mode: ILivePreviewModeConfig;\n elements: {\n highlightedElement: HTMLElement | null;\n };\n collab: ICollabConfig[\"collab\"];\n}\n\n\nexport declare interface IConfigEditInVisualBuilderButton {\n enable: boolean;\n position?:\n | \"top-left\"\n | \"top-right\"\n | \"bottom-left\"\n | \"bottom-right\"\n}\n\n\nexport declare interface IConfigEditButton {\n enable: boolean;\n exclude?: (\"insideLivePreviewPortal\" | \"outsideLivePreviewPortal\")[];\n includeByQueryParameter?: boolean;\n position?:\n | \"top\"\n | \"bottom\"\n | \"left\"\n | \"right\"\n | \"top-left\"\n | \"top-right\"\n | \"top-center\"\n | \"bottom-left\"\n | \"bottom-right\"\n | \"bottom-center\";\n}\n\nexport declare interface IInitData {\n ssr: boolean;\n runScriptsOnUpdate: boolean;\n enable: boolean;\n /**\n * @default false\n */\n debug: boolean;\n cleanCslpOnProduction: boolean;\n stackDetails: Partial<IInitStackDetails>;\n clientUrlParams: Partial<Omit<IClientUrlParams, \"url\">>;\n stackSdk: IStackSdk;\n editButton: IConfigEditButton;\n editInVisualBuilderButton: IConfigEditInVisualBuilderButton;\n mode: ILivePreviewMode;\n}\n\n// type PickPartial<T, K extends keyof T> = Partial<Pick<T, K>> & Omit<T, K>;\n\n// export type IInitData =\n// | {\n// ssr?: true;\n// stackSdk?: IStackSdk;\n// runScriptsOnUpdate?: boolean;\n// enable?: boolean;\n// cleanCslpOnProduction?: boolean;\n// stackDetails?: Partial<IInitStackDetails>;\n// clientUrlParams?: Partial<Omit<IClientUrlParams, \"url\">>;\n// editButton?: IConfigEditButton;\n// mode?: \"preview\";\n// }\n// | {\n// ssr?: true;\n// stackSdk?: IStackSdk;\n// runScriptsOnUpdate?: boolean;\n// enable?: boolean;\n// cleanCslpOnProduction?: boolean;\n// stackDetails: PickPartial<IInitStackDetails, \"branch\">;\n// clientUrlParams: PickPartial<\n// Omit<IClientUrlParams, \"url\">,\n// \"port\" | \"protocol\"\n// >;\n// editButton?: IConfigEditButton;\n// mode: \"builder\";\n// }\n// | {\n// ssr: false;\n// runScriptsOnUpdate?: boolean;\n// enable?: boolean;\n// cleanCslpOnProduction?: boolean;\n// stackDetails?: Partial<IInitStackDetails>;\n// clientUrlParams?: Partial<Omit<IClientUrlParams, \"url\">>;\n// stackSdk: IStackSdk;\n// editButton?: IConfigEditButton;\n// mode?: \"preview\";\n// }\n// | {\n// ssr: false;\n// runScriptsOnUpdate?: boolean;\n// enable?: boolean;\n// cleanCslpOnProduction?: boolean;\n// stackDetails: PickPartial<IInitStackDetails, \"branch\">;\n// clientUrlParams: PickPartial<\n// Omit<IClientUrlParams, \"url\">,\n// \"port\" | \"protocol\"\n// >;\n// stackSdk: IStackSdk;\n// editButton?: IConfigEditButton;\n// mode: \"builder\";\n// };\n\n// Post message types\n\nexport declare interface ILivePreviewMessageCommon {\n from: \"live-preview\";\n}\n\nexport declare interface IEditButtonPosition {\n upperBoundOfTooltip: number;\n leftBoundOfTooltip: number;\n}\n\n// end of Post message types\n\nexport interface IVisualBuilderInitEvent {\n windowType: ILivePreviewWindowType;\n stackDetails: {\n masterLocale: string;\n };\n collab?: ICollabConfig[\"collab\"];\n}\n\nexport type IExportedConfig = Pick<\n IConfig,\n | \"ssr\"\n | \"enable\"\n | \"cleanCslpOnProduction\"\n | \"stackDetails\"\n | \"clientUrlParams\"\n | \"windowType\"\n | \"hash\"\n | \"editButton\"\n | \"mode\"\n>;\n"],"mappings":";;;AAuDO,IAAK,yBAAL,kBAAKA,4BAAL;AACH,EAAAA,gDAAA,aAAU,KAAV;AACA,EAAAA,gDAAA,aAAU,KAAV;AAFQ,SAAAA;AAAA,GAAA;AAKL,IAAK,yBAAL,kBAAKC,4BAAL;AACH,EAAAA,wBAAA,aAAU;AACV,EAAAA,wBAAA,mBAAgB;AAChB,EAAAA,wBAAA,aAAU;AACV,EAAAA,wBAAA,iBAAc;AAJN,SAAAA;AAAA,GAAA;","names":["ILivePreviewModeConfig","ILivePreviewWindowType"]}
|
|
1
|
+
{"version":3,"sources":["../../../src/types/types.ts"],"sourcesContent":["import { ICollabConfig } from \"../visualBuilder/types/collab.types\";\nexport declare interface IEditEntrySearchParams {\n hash?: string;\n entry_uid?: string;\n content_type_uid?: string;\n /**\n * @deprecated pass this value as hash instead\n */\n live_preview?: string;\n}\n\nexport declare interface IClientUrlParams {\n protocol: \"http\" | \"https\";\n host: string;\n port: string | number;\n url: string;\n}\n\nexport declare interface IStackSdk {\n live_preview: { [key: string]: any } & Partial<IConfig>;\n [key: string]: any;\n environment: string;\n}\n\nexport declare interface IStackDetails {\n apiKey: string;\n environment: string;\n contentTypeUid: string;\n entryUid: string;\n branch: string;\n /**\n * This locale is currently used by the visual builder to\n * redirect to the correct locale if the no data-cslp tag\n * is present in the HTML to extract the locale.\n */\n locale: string;\n masterLocale: string;\n}\n\nexport declare interface IInitStackDetails {\n apiKey: string;\n environment: string;\n branch: string;\n /**\n * This locale is currently used by the visual builder to\n * redirect to the correct locale if the no data-cslp tag\n * is present in the HTML to extract the locale.\n */\n locale: string;\n}\n\nexport declare type ILivePreviewMode = \"builder\" | \"preview\";\n\n//? We kept it as number so that we could disable only the unrequired features,\n//? since the \"Builder\" mode will contain all the features of the \"Preview\" mode.\nexport enum ILivePreviewModeConfig {\n PREVIEW = 1,\n BUILDER = 2,\n}\n\nexport enum ILivePreviewWindowType {\n PREVIEW = \"preview\",\n PREVIEW_SHARE = \"preview-share\",\n BUILDER = \"builder\",\n INDEPENDENT = \"independent\",\n}\n\nexport declare interface IConfig {\n ssr: boolean;\n enable: boolean;\n /**\n * @default false\n */\n debug: boolean;\n cleanCslpOnProduction: boolean;\n stackDetails: IStackDetails;\n clientUrlParams: IClientUrlParams;\n stackSdk: IStackSdk;\n onChange: () => void;\n runScriptsOnUpdate: boolean;\n windowType: ILivePreviewWindowType;\n hash: string;\n editButton: IConfigEditButton;\n editInVisualBuilderButton: IConfigEditInVisualBuilderButton;\n mode: ILivePreviewModeConfig;\n elements: {\n highlightedElement: HTMLElement | null;\n };\n collab: ICollabConfig[\"collab\"];\n enableLivePreviewOutsideIframe: boolean | undefined;\n}\n\n\nexport declare interface IConfigEditInVisualBuilderButton {\n enable: boolean;\n position?:\n | \"top-left\"\n | \"top-right\"\n | \"bottom-left\"\n | \"bottom-right\"\n}\n\n\nexport declare interface IConfigEditButton {\n enable: boolean;\n exclude?: (\"insideLivePreviewPortal\" | \"outsideLivePreviewPortal\")[];\n includeByQueryParameter?: boolean;\n position?:\n | \"top\"\n | \"bottom\"\n | \"left\"\n | \"right\"\n | \"top-left\"\n | \"top-right\"\n | \"top-center\"\n | \"bottom-left\"\n | \"bottom-right\"\n | \"bottom-center\";\n}\n\nexport declare interface IInitData {\n ssr: boolean;\n runScriptsOnUpdate: boolean;\n enable: boolean;\n /**\n * @default false\n */\n debug: boolean;\n cleanCslpOnProduction: boolean;\n stackDetails: Partial<IInitStackDetails>;\n clientUrlParams: Partial<Omit<IClientUrlParams, \"url\">>;\n stackSdk: IStackSdk;\n editButton: IConfigEditButton;\n editInVisualBuilderButton: IConfigEditInVisualBuilderButton;\n mode: ILivePreviewMode;\n enableLivePreviewOutsideIframe: boolean | undefined; // default: undefined\n}\n\n// type PickPartial<T, K extends keyof T> = Partial<Pick<T, K>> & Omit<T, K>;\n\n// export type IInitData =\n// | {\n// ssr?: true;\n// stackSdk?: IStackSdk;\n// runScriptsOnUpdate?: boolean;\n// enable?: boolean;\n// cleanCslpOnProduction?: boolean;\n// stackDetails?: Partial<IInitStackDetails>;\n// clientUrlParams?: Partial<Omit<IClientUrlParams, \"url\">>;\n// editButton?: IConfigEditButton;\n// mode?: \"preview\";\n// }\n// | {\n// ssr?: true;\n// stackSdk?: IStackSdk;\n// runScriptsOnUpdate?: boolean;\n// enable?: boolean;\n// cleanCslpOnProduction?: boolean;\n// stackDetails: PickPartial<IInitStackDetails, \"branch\">;\n// clientUrlParams: PickPartial<\n// Omit<IClientUrlParams, \"url\">,\n// \"port\" | \"protocol\"\n// >;\n// editButton?: IConfigEditButton;\n// mode: \"builder\";\n// }\n// | {\n// ssr: false;\n// runScriptsOnUpdate?: boolean;\n// enable?: boolean;\n// cleanCslpOnProduction?: boolean;\n// stackDetails?: Partial<IInitStackDetails>;\n// clientUrlParams?: Partial<Omit<IClientUrlParams, \"url\">>;\n// stackSdk: IStackSdk;\n// editButton?: IConfigEditButton;\n// mode?: \"preview\";\n// }\n// | {\n// ssr: false;\n// runScriptsOnUpdate?: boolean;\n// enable?: boolean;\n// cleanCslpOnProduction?: boolean;\n// stackDetails: PickPartial<IInitStackDetails, \"branch\">;\n// clientUrlParams: PickPartial<\n// Omit<IClientUrlParams, \"url\">,\n// \"port\" | \"protocol\"\n// >;\n// stackSdk: IStackSdk;\n// editButton?: IConfigEditButton;\n// mode: \"builder\";\n// };\n\n// Post message types\n\nexport declare interface ILivePreviewMessageCommon {\n from: \"live-preview\";\n}\n\nexport declare interface IEditButtonPosition {\n upperBoundOfTooltip: number;\n leftBoundOfTooltip: number;\n}\n\n// end of Post message types\n\nexport interface IVisualBuilderInitEvent {\n windowType: ILivePreviewWindowType;\n stackDetails: {\n masterLocale: string;\n };\n collab?: ICollabConfig[\"collab\"];\n}\n\nexport type IExportedConfig = Pick<\n IConfig,\n | \"ssr\"\n | \"enable\"\n | \"cleanCslpOnProduction\"\n | \"stackDetails\"\n | \"clientUrlParams\"\n | \"windowType\"\n | \"hash\"\n | \"editButton\"\n | \"mode\"\n>;\n"],"mappings":";;;AAuDO,IAAK,yBAAL,kBAAKA,4BAAL;AACH,EAAAA,gDAAA,aAAU,KAAV;AACA,EAAAA,gDAAA,aAAU,KAAV;AAFQ,SAAAA;AAAA,GAAA;AAKL,IAAK,yBAAL,kBAAKC,4BAAL;AACH,EAAAA,wBAAA,aAAU;AACV,EAAAA,wBAAA,mBAAgB;AAChB,EAAAA,wBAAA,aAAU;AACV,EAAAA,wBAAA,iBAAc;AAJN,SAAAA;AAAA,GAAA;","names":["ILivePreviewModeConfig","ILivePreviewWindowType"]}
|
|
@@ -134,7 +134,7 @@ function FieldLabelWrapperComponent(props) {
|
|
|
134
134
|
const domAncestor = eventDetails.editableElement.closest(`[data-cslp]:not([data-cslp^="${props.fieldMetadata.content_type_uid}"])`);
|
|
135
135
|
if (domAncestor) {
|
|
136
136
|
const domAncestorCslp = domAncestor.getAttribute("data-cslp");
|
|
137
|
-
if (domAncestorCslp) {
|
|
137
|
+
if ((0, import_cslp.isValidCslp)(domAncestorCslp)) {
|
|
138
138
|
const domAncestorDetails = (0, import_cslp.extractDetailsFromCslp)(domAncestorCslp);
|
|
139
139
|
const domAncestorContentTypeUid = domAncestorDetails.content_type_uid;
|
|
140
140
|
const domAncestorContentParent = referenceData?.find((data) => data.contentTypeUid === domAncestorContentTypeUid);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/visualBuilder/components/fieldLabelWrapper.tsx"],"sourcesContent":["import classNames from \"classnames\";\nimport React, { useEffect, useState } from \"preact/compat\";\nimport { extractDetailsFromCslp } from \"../../cslp\";\nimport { CslpData } from \"../../cslp/types/cslp.types\";\nimport { VisualBuilderCslpEventDetails } from \"../types/visualBuilder.types\";\nimport { FieldSchemaMap } from \"../utils/fieldSchemaMap\";\nimport { DisableReason, isFieldDisabled } from \"../utils/isFieldDisabled\";\nimport visualBuilderPostMessage from \"../utils/visualBuilderPostMessage\";\nimport { CaretIcon, CaretRightIcon, InfoIcon } from \"./icons\";\nimport { LoadingIcon } from \"./icons/loading\";\nimport { FieldTypeIconsMap, getFieldIcon } from \"../generators/generateCustomCursor\";\nimport { uniqBy } from \"lodash-es\";\nimport { visualBuilderStyles } from \"../visualBuilder.style\";\nimport { CslpError } from \"./CslpError\";\nimport { hasPostMessageError } from \"../utils/errorHandling\";\nimport { VisualBuilderPostMessageEvents } from \"../utils/types/postMessage.types\";\nimport { ContentTypeIcon } from \"./icons\";\nimport { ToolbarTooltip } from \"./Tooltip\";\nimport { fetchEntryPermissionsAndStageDetails } from \"../utils/fetchEntryPermissionsAndStageDetails\";\nimport { VariantIndicator } from \"./VariantIndicator\";\nimport { handleRevalidateFieldData } from \"../eventManager/useRevalidateFieldDataPostMessageEvent\";\nimport { RESULT_TYPES } from \"../utils/constants\";\n\ninterface ReferenceParentMap {\n [entryUid: string]: {\n contentTypeUid: string;\n contentTypeTitle: string;\n referenceFieldName: string;\n }[]\n}\n\nasync function getFieldDisplayNames(fieldMetadata: CslpData[]) {\n const result = await visualBuilderPostMessage?.send<{\n [k: string]: string;\n }>(VisualBuilderPostMessageEvents.GET_FIELD_DISPLAY_NAMES, fieldMetadata);\n return result;\n}\n\nasync function getContentTypeName(contentTypeUid: string) {\n try {\n const result = await visualBuilderPostMessage?.send<{\n contentTypeName: string;\n }>(VisualBuilderPostMessageEvents.GET_CONTENT_TYPE_NAME, {\n content_type_uid: contentTypeUid,\n });\n return result?.contentTypeName;\n } catch(e) {\n console.warn(\"[getFieldLabelWrapper] Error getting content type name\", e);\n return \"\";\n }\n}\n\nasync function getReferenceParentMap() {\n try {\n const result = await visualBuilderPostMessage?.send<ReferenceParentMap>(VisualBuilderPostMessageEvents.REFERENCE_MAP, {}) ?? {};\n return result;\n } catch(e) {\n console.warn(\"[getFieldLabelWrapper] Error getting reference parent map\", e);\n return {};\n }\n}\n\ninterface FieldLabelWrapperProps {\n fieldMetadata: CslpData;\n eventDetails: VisualBuilderCslpEventDetails;\n parentPaths: string[];\n getParentEditableElement: (cslp: string) => HTMLElement | null;\n}\n\ninterface ICurrentField {\n text: string;\n contentTypeName: string;\n icon: JSX.Element;\n prefixIcon: any;\n disabled: boolean;\n isVariant: boolean;\n isReference: boolean;\n referenceFieldName: string;\n parentContentTypeName: string;\n}\n\nfunction FieldLabelWrapperComponent(\n props: FieldLabelWrapperProps\n): JSX.Element {\n const { eventDetails } = props;\n const [currentField, setCurrentField] = useState<ICurrentField>({\n text: \"\",\n contentTypeName: \"\",\n icon: <CaretIcon />,\n prefixIcon: null,\n disabled: false,\n isVariant: false,\n isReference: false,\n referenceFieldName: \"\",\n parentContentTypeName: \"\",\n });\n const [displayNames, setDisplayNames] = useState<Record<string, string>>(\n {}\n );\n const [dataLoading, setDataLoading] = useState(true);\n const [error, setError] = useState(false);\n const [isDropdownOpen, setIsDropdownOpen] = useState(false);\n\n function calculateTopOffset(index: number) {\n const height = -30; // from bottom\n const offset = (index + 1) * height;\n return `${offset}px`;\n }\n\n useEffect(() => {\n const fetchData = async () => {\n setDataLoading(true);\n const allPaths = uniqBy(\n [\n props.fieldMetadata,\n ...props.parentPaths\n .filter((path) => path)\n .map((path) => {\n return extractDetailsFromCslp(path);\n }),\n ],\n \"cslpValue\"\n );\n const [displayNames, fieldSchema, contentTypeName, referenceParentMap] = await Promise.all([\n getFieldDisplayNames(allPaths),\n FieldSchemaMap.getFieldSchema(\n props.fieldMetadata.content_type_uid,\n props.fieldMetadata.fieldPath\n ),\n getContentTypeName(\n props.fieldMetadata.content_type_uid\n ),\n getReferenceParentMap()\n ]);\n const entryUid = props.fieldMetadata.entry_uid;\n\n const referenceData = referenceParentMap[entryUid];\n const isReference = !!referenceData;\n\n let referenceFieldName = referenceData ? referenceData[0].referenceFieldName : \"\";\n let parentContentTypeName = referenceData ? referenceData[0].contentTypeTitle : \"\";\n\n if(isReference) {\n const domAncestor = eventDetails.editableElement.closest(`[data-cslp]:not([data-cslp^=\"${props.fieldMetadata.content_type_uid}\"])`);\n if(domAncestor) {\n const domAncestorCslp = domAncestor.getAttribute(\"data-cslp\");\n if (domAncestorCslp) {\n const domAncestorDetails = extractDetailsFromCslp(domAncestorCslp);\n const domAncestorContentTypeUid = domAncestorDetails.content_type_uid;\n const domAncestorContentParent = referenceData?.find(data => data.contentTypeUid === domAncestorContentTypeUid);\n if(domAncestorContentParent) {\n referenceFieldName = domAncestorContentParent.referenceFieldName;\n parentContentTypeName = domAncestorContentParent.contentTypeTitle;\n }\n }\n }\n }\n\n if (hasPostMessageError(displayNames) || !fieldSchema) {\n setDataLoading(false);\n setError(true);\n\n return;\n }\n\n const { acl: entryAcl, workflowStage: entryWorkflowStageDetails, resolvedVariantPermissions } =\n await fetchEntryPermissionsAndStageDetails({\n entryUid: props.fieldMetadata.entry_uid,\n contentTypeUid: props.fieldMetadata.content_type_uid,\n locale: props.fieldMetadata.locale,\n variantUid: props.fieldMetadata.variant,\n fieldPathWithIndex: props.fieldMetadata.fieldPathWithIndex,\n });\n const { isDisabled: fieldDisabled, reason } = isFieldDisabled(\n fieldSchema,\n eventDetails,\n resolvedVariantPermissions,\n entryAcl,\n entryWorkflowStageDetails,\n );\n\n const handleLinkVariant = async () => {\n try {\n if (fieldSchema.field_metadata?.canLinkVariant) {\n const result = await visualBuilderPostMessage?.send<{\n type: typeof RESULT_TYPES.SUCCESS | typeof RESULT_TYPES.ERROR;\n message: string;\n }>(\n VisualBuilderPostMessageEvents.OPEN_LINK_VARIANT_MODAL,\n {\n contentTypeUid:\n props.fieldMetadata.content_type_uid,\n }\n );\n\n // If the modal was closed or linking failed, do nothing\n if (!result || result.type === RESULT_TYPES.ERROR) {\n return;\n }\n\n // If linking was successful and requires revalidation, revalidate\n if (result.type === RESULT_TYPES.SUCCESS) {\n await handleRevalidateFieldData();\n }\n }\n } catch (error) {\n console.error(\n \"Error in link variant modal flow:\",\n error\n );\n }\n };\n\n const currentFieldDisplayName =\n displayNames?.[props.fieldMetadata.cslpValue] ??\n fieldSchema.display_name;\n\n const hasParentPaths = !!props?.parentPaths?.length;\n const isVariant = props.fieldMetadata.variant ? true : false;\n\n setCurrentField({\n text: currentFieldDisplayName,\n contentTypeName: contentTypeName ?? \"\",\n icon: fieldDisabled ? (\n <div\n className={classNames(\n visualBuilderStyles()[\n \"visual-builder__tooltip--persistent\"\n ]\n )}\n data-tooltip={!reason?.includes(DisableReason.CanLinkVariant)\n ? reason\n : undefined}\n >\n {reason\n .includes(DisableReason.CanLinkVariant) && (\n <div\n className={visualBuilderStyles()[\"visual-builder__custom-tooltip\"]}\n onClick={handleLinkVariant}\n >\n {(() => {\n const [before, after] = reason.split(\n DisableReason.UnderlinedAndClickableWord\n );\n return (\n <>\n {before}\n <span style={{ textDecoration: \"underline\" }}>{DisableReason.UnderlinedAndClickableWord}</span>\n {after}\n </>\n );\n })()}\n </div>\n )}\n <InfoIcon />\n </div>\n ) : hasParentPaths ? (\n <CaretIcon />\n ) : (\n <></>\n ),\n isReference,\n prefixIcon: getFieldIcon(fieldSchema),\n disabled: fieldDisabled,\n referenceFieldName,\n parentContentTypeName,\n isVariant: isVariant,\n });\n\n if (displayNames) {\n setDisplayNames(displayNames);\n }\n if (Object.keys(displayNames || {})?.length === allPaths.length) {\n setDataLoading(false);\n }\n };\n\n try {\n fetchData();\n } catch(e) {\n console.warn(\"[getFieldLabelWrapper] Error fetching field label data\", e);\n }\n }, [props]);\n\n const onParentPathClick = (cslp: string) => {\n const parentElement = props.getParentEditableElement(cslp);\n if (parentElement) {\n // emulate clicking on the parent element\n parentElement.click();\n }\n };\n\n function getCurrentFieldIcon() {\n if (error) {\n return null;\n } else if (dataLoading) {\n return <LoadingIcon />;\n } else {\n return currentField.icon;\n }\n }\n\n return (\n <div\n className={classNames(\n \"visual-builder__focused-toolbar__field-label-container\",\n visualBuilderStyles()[\n \"visual-builder__focused-toolbar__field-label-container\"\n ]\n )}\n >\n {currentField.isVariant ? <VariantIndicator /> : null}\n <ToolbarTooltip data={{contentTypeName: currentField.parentContentTypeName, referenceFieldName: currentField.referenceFieldName}} disabled={!currentField.isReference || isDropdownOpen}>\n <div\n className={classNames(\n \"visual-builder__focused-toolbar__field-label-wrapper\",\n visualBuilderStyles()[\n \"visual-builder__focused-toolbar__field-label-wrapper\"\n ],\n {\n \"visual-builder__focused-toolbar--field-disabled\":\n currentField.disabled,\n },\n {\n [visualBuilderStyles()[\n \"visual-builder__focused-toolbar--field-disabled\"\n ]]: currentField.disabled,\n },\n {\n \"field-label-dropdown-open\": isDropdownOpen,\n [visualBuilderStyles()[\"field-label-dropdown-open\"]]:\n isDropdownOpen,\n },\n {\n \"visual-builder__focused-toolbar--variant\":\n currentField.isVariant,\n },\n {\n [visualBuilderStyles()[\n \"visual-builder__focused-toolbar--variant\"\n ]]: currentField.isVariant,\n }\n )}\n onClick={() => setIsDropdownOpen((prev) => !prev)}\n data-testid=\"visual-builder__focused-toolbar__field-label-wrapper\"\n data-hovered-cslp={props.fieldMetadata.cslpValue}\n >\n <button\n className={classNames(\n \"visual-builder__focused-toolbar__field-label-wrapper__current-field visual-builder__button visual-builder__button--primary visual-builder__button-loader\",\n visualBuilderStyles()[\n \"visual-builder__focused-toolbar__field-label-wrapper__current-field\"\n ],\n visualBuilderStyles()[\"visual-builder__button\"],\n visualBuilderStyles()[\n \"visual-builder__button--primary\"\n ],\n visualBuilderStyles()[\"visual-builder__button-loader\"],\n error &&\n visualBuilderStyles()[\n \"visual-builder__button-error\"\n ]\n )}\n disabled={dataLoading}\n >\n {\n currentField.isReference && !dataLoading && !error ? \n <div\n className={classNames(\n \"visual-builder__reference-icon-container\",\n visualBuilderStyles()[\"visual-builder__reference-icon-container\"]\n )}\n >\n <div\n className={classNames(\n \"visual-builder__field-icon\",\n visualBuilderStyles()[\n \"visual-builder__field-icon\"\n ]\n )}\n dangerouslySetInnerHTML={{\n __html: FieldTypeIconsMap.reference,\n }}\n data-testid=\"visual-builder__field-icon-caret\"\n />\n <CaretRightIcon />\n </div> : null\n }\n {\n currentField.contentTypeName && !dataLoading && !error ?\n <>\n <ContentTypeIcon />\n <div\n className={classNames(\n \"visual-builder__focused-toolbar__text\",\n visualBuilderStyles()[\n \"visual-builder__focused-toolbar__text\"\n ]\n )}\n data-testid=\"visual-builder__focused-toolbar__ct-name\"\n >\n {currentField.contentTypeName + \" : \"}\n </div>\n </> : null\n }\n {currentField.prefixIcon ? (\n <div\n className={classNames(\n \"visual-builder__field-icon\",\n visualBuilderStyles()[\n \"visual-builder__field-icon\"\n ]\n )}\n dangerouslySetInnerHTML={{\n __html: currentField.prefixIcon,\n }}\n data-testid=\"visual-builder__field-icon\"\n />\n ) : null}\n {currentField.text ? (\n <div\n className={classNames(\n \"visual-builder__focused-toolbar__text\",\n visualBuilderStyles()[\n \"visual-builder__focused-toolbar__text\"\n ]\n )}\n data-testid=\"visual-builder__focused-toolbar__text\"\n >\n {currentField.text}\n </div>\n ) : null}\n {getCurrentFieldIcon()}\n {error ? <CslpError /> : null}\n </button>\n {props.parentPaths.map((path, index) => (\n <button\n key={path}\n className={classNames(\n \"visual-builder__focused-toolbar__field-label-wrapper__parent-field visual-builder__button visual-builder__button--secondary visual-builder__focused-toolbar__text\",\n visualBuilderStyles()[\n \"visual-builder__focused-toolbar__field-label-wrapper__parent-field\"\n ],\n visualBuilderStyles()[\"visual-builder__button\"],\n visualBuilderStyles()[\n \"visual-builder__button--secondary\"\n ],\n visualBuilderStyles()[\n \"visual-builder__focused-toolbar__text\"\n ]\n )}\n data-target-cslp={path}\n style={{ top: calculateTopOffset(index) }}\n onClick={() => onParentPathClick(path)}\n >\n {displayNames[path]}\n </button>\n ))}\n </div>\n </ToolbarTooltip>\n </div>\n );\n}\n\nexport default FieldLabelWrapperComponent;\n"],"mappings":"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","names":["import_icons","visualBuilderPostMessage","displayNames","error","classNames"]}
|
|
1
|
+
{"version":3,"sources":["../../../../src/visualBuilder/components/fieldLabelWrapper.tsx"],"sourcesContent":["import classNames from \"classnames\";\nimport React, { useEffect, useState } from \"preact/compat\";\nimport { extractDetailsFromCslp, isValidCslp } from \"../../cslp\";\nimport { CslpData } from \"../../cslp/types/cslp.types\";\nimport { VisualBuilderCslpEventDetails } from \"../types/visualBuilder.types\";\nimport { FieldSchemaMap } from \"../utils/fieldSchemaMap\";\nimport { DisableReason, isFieldDisabled } from \"../utils/isFieldDisabled\";\nimport visualBuilderPostMessage from \"../utils/visualBuilderPostMessage\";\nimport { CaretIcon, CaretRightIcon, InfoIcon } from \"./icons\";\nimport { LoadingIcon } from \"./icons/loading\";\nimport { FieldTypeIconsMap, getFieldIcon } from \"../generators/generateCustomCursor\";\nimport { uniqBy } from \"lodash-es\";\nimport { visualBuilderStyles } from \"../visualBuilder.style\";\nimport { CslpError } from \"./CslpError\";\nimport { hasPostMessageError } from \"../utils/errorHandling\";\nimport { VisualBuilderPostMessageEvents } from \"../utils/types/postMessage.types\";\nimport { ContentTypeIcon } from \"./icons\";\nimport { ToolbarTooltip } from \"./Tooltip\";\nimport { fetchEntryPermissionsAndStageDetails } from \"../utils/fetchEntryPermissionsAndStageDetails\";\nimport { VariantIndicator } from \"./VariantIndicator\";\nimport { handleRevalidateFieldData } from \"../eventManager/useRevalidateFieldDataPostMessageEvent\";\nimport { RESULT_TYPES } from \"../utils/constants\";\n\ninterface ReferenceParentMap {\n [entryUid: string]: {\n contentTypeUid: string;\n contentTypeTitle: string;\n referenceFieldName: string;\n }[]\n}\n\nasync function getFieldDisplayNames(fieldMetadata: CslpData[]) {\n const result = await visualBuilderPostMessage?.send<{\n [k: string]: string;\n }>(VisualBuilderPostMessageEvents.GET_FIELD_DISPLAY_NAMES, fieldMetadata);\n return result;\n}\n\nasync function getContentTypeName(contentTypeUid: string) {\n try {\n const result = await visualBuilderPostMessage?.send<{\n contentTypeName: string;\n }>(VisualBuilderPostMessageEvents.GET_CONTENT_TYPE_NAME, {\n content_type_uid: contentTypeUid,\n });\n return result?.contentTypeName;\n } catch(e) {\n console.warn(\"[getFieldLabelWrapper] Error getting content type name\", e);\n return \"\";\n }\n}\n\nasync function getReferenceParentMap() {\n try {\n const result = await visualBuilderPostMessage?.send<ReferenceParentMap>(VisualBuilderPostMessageEvents.REFERENCE_MAP, {}) ?? {};\n return result;\n } catch(e) {\n console.warn(\"[getFieldLabelWrapper] Error getting reference parent map\", e);\n return {};\n }\n}\n\ninterface FieldLabelWrapperProps {\n fieldMetadata: CslpData;\n eventDetails: VisualBuilderCslpEventDetails;\n parentPaths: string[];\n getParentEditableElement: (cslp: string) => HTMLElement | null;\n}\n\ninterface ICurrentField {\n text: string;\n contentTypeName: string;\n icon: JSX.Element;\n prefixIcon: any;\n disabled: boolean;\n isVariant: boolean;\n isReference: boolean;\n referenceFieldName: string;\n parentContentTypeName: string;\n}\n\nfunction FieldLabelWrapperComponent(\n props: FieldLabelWrapperProps\n): JSX.Element {\n const { eventDetails } = props;\n const [currentField, setCurrentField] = useState<ICurrentField>({\n text: \"\",\n contentTypeName: \"\",\n icon: <CaretIcon />,\n prefixIcon: null,\n disabled: false,\n isVariant: false,\n isReference: false,\n referenceFieldName: \"\",\n parentContentTypeName: \"\",\n });\n const [displayNames, setDisplayNames] = useState<Record<string, string>>(\n {}\n );\n const [dataLoading, setDataLoading] = useState(true);\n const [error, setError] = useState(false);\n const [isDropdownOpen, setIsDropdownOpen] = useState(false);\n\n function calculateTopOffset(index: number) {\n const height = -30; // from bottom\n const offset = (index + 1) * height;\n return `${offset}px`;\n }\n\n useEffect(() => {\n const fetchData = async () => {\n setDataLoading(true);\n const allPaths = uniqBy(\n [\n props.fieldMetadata,\n ...props.parentPaths\n .filter((path) => path)\n .map((path) => {\n return extractDetailsFromCslp(path);\n }),\n ],\n \"cslpValue\"\n );\n const [displayNames, fieldSchema, contentTypeName, referenceParentMap] = await Promise.all([\n getFieldDisplayNames(allPaths),\n FieldSchemaMap.getFieldSchema(\n props.fieldMetadata.content_type_uid,\n props.fieldMetadata.fieldPath\n ),\n getContentTypeName(\n props.fieldMetadata.content_type_uid\n ),\n getReferenceParentMap()\n ]);\n const entryUid = props.fieldMetadata.entry_uid;\n\n const referenceData = referenceParentMap[entryUid];\n const isReference = !!referenceData;\n\n let referenceFieldName = referenceData ? referenceData[0].referenceFieldName : \"\";\n let parentContentTypeName = referenceData ? referenceData[0].contentTypeTitle : \"\";\n\n if(isReference) {\n const domAncestor = eventDetails.editableElement.closest(`[data-cslp]:not([data-cslp^=\"${props.fieldMetadata.content_type_uid}\"])`);\n if(domAncestor) {\n const domAncestorCslp = domAncestor.getAttribute(\"data-cslp\");\n if (isValidCslp(domAncestorCslp)) {\n const domAncestorDetails = extractDetailsFromCslp(domAncestorCslp);\n const domAncestorContentTypeUid = domAncestorDetails.content_type_uid;\n const domAncestorContentParent = referenceData?.find(data => data.contentTypeUid === domAncestorContentTypeUid);\n if(domAncestorContentParent) {\n referenceFieldName = domAncestorContentParent.referenceFieldName;\n parentContentTypeName = domAncestorContentParent.contentTypeTitle;\n }\n }\n }\n }\n\n if (hasPostMessageError(displayNames) || !fieldSchema) {\n setDataLoading(false);\n setError(true);\n\n return;\n }\n\n const { acl: entryAcl, workflowStage: entryWorkflowStageDetails, resolvedVariantPermissions } =\n await fetchEntryPermissionsAndStageDetails({\n entryUid: props.fieldMetadata.entry_uid,\n contentTypeUid: props.fieldMetadata.content_type_uid,\n locale: props.fieldMetadata.locale,\n variantUid: props.fieldMetadata.variant,\n fieldPathWithIndex: props.fieldMetadata.fieldPathWithIndex,\n });\n const { isDisabled: fieldDisabled, reason } = isFieldDisabled(\n fieldSchema,\n eventDetails,\n resolvedVariantPermissions,\n entryAcl,\n entryWorkflowStageDetails,\n );\n\n const handleLinkVariant = async () => {\n try {\n if (fieldSchema.field_metadata?.canLinkVariant) {\n const result = await visualBuilderPostMessage?.send<{\n type: typeof RESULT_TYPES.SUCCESS | typeof RESULT_TYPES.ERROR;\n message: string;\n }>(\n VisualBuilderPostMessageEvents.OPEN_LINK_VARIANT_MODAL,\n {\n contentTypeUid:\n props.fieldMetadata.content_type_uid,\n }\n );\n\n // If the modal was closed or linking failed, do nothing\n if (!result || result.type === RESULT_TYPES.ERROR) {\n return;\n }\n\n // If linking was successful and requires revalidation, revalidate\n if (result.type === RESULT_TYPES.SUCCESS) {\n await handleRevalidateFieldData();\n }\n }\n } catch (error) {\n console.error(\n \"Error in link variant modal flow:\",\n error\n );\n }\n };\n\n const currentFieldDisplayName =\n displayNames?.[props.fieldMetadata.cslpValue] ??\n fieldSchema.display_name;\n\n const hasParentPaths = !!props?.parentPaths?.length;\n const isVariant = props.fieldMetadata.variant ? true : false;\n\n setCurrentField({\n text: currentFieldDisplayName,\n contentTypeName: contentTypeName ?? \"\",\n icon: fieldDisabled ? (\n <div\n className={classNames(\n visualBuilderStyles()[\n \"visual-builder__tooltip--persistent\"\n ]\n )}\n data-tooltip={!reason?.includes(DisableReason.CanLinkVariant)\n ? reason\n : undefined}\n >\n {reason\n .includes(DisableReason.CanLinkVariant) && (\n <div\n className={visualBuilderStyles()[\"visual-builder__custom-tooltip\"]}\n onClick={handleLinkVariant}\n >\n {(() => {\n const [before, after] = reason.split(\n DisableReason.UnderlinedAndClickableWord\n );\n return (\n <>\n {before}\n <span style={{ textDecoration: \"underline\" }}>{DisableReason.UnderlinedAndClickableWord}</span>\n {after}\n </>\n );\n })()}\n </div>\n )}\n <InfoIcon />\n </div>\n ) : hasParentPaths ? (\n <CaretIcon />\n ) : (\n <></>\n ),\n isReference,\n prefixIcon: getFieldIcon(fieldSchema),\n disabled: fieldDisabled,\n referenceFieldName,\n parentContentTypeName,\n isVariant: isVariant,\n });\n\n if (displayNames) {\n setDisplayNames(displayNames);\n }\n if (Object.keys(displayNames || {})?.length === allPaths.length) {\n setDataLoading(false);\n }\n };\n\n try {\n fetchData();\n } catch(e) {\n console.warn(\"[getFieldLabelWrapper] Error fetching field label data\", e);\n }\n }, [props]);\n\n const onParentPathClick = (cslp: string) => {\n const parentElement = props.getParentEditableElement(cslp);\n if (parentElement) {\n // emulate clicking on the parent element\n parentElement.click();\n }\n };\n\n function getCurrentFieldIcon() {\n if (error) {\n return null;\n } else if (dataLoading) {\n return <LoadingIcon />;\n } else {\n return currentField.icon;\n }\n }\n\n return (\n <div\n className={classNames(\n \"visual-builder__focused-toolbar__field-label-container\",\n visualBuilderStyles()[\n \"visual-builder__focused-toolbar__field-label-container\"\n ]\n )}\n >\n {currentField.isVariant ? <VariantIndicator /> : null}\n <ToolbarTooltip data={{contentTypeName: currentField.parentContentTypeName, referenceFieldName: currentField.referenceFieldName}} disabled={!currentField.isReference || isDropdownOpen}>\n <div\n className={classNames(\n \"visual-builder__focused-toolbar__field-label-wrapper\",\n visualBuilderStyles()[\n \"visual-builder__focused-toolbar__field-label-wrapper\"\n ],\n {\n \"visual-builder__focused-toolbar--field-disabled\":\n currentField.disabled,\n },\n {\n [visualBuilderStyles()[\n \"visual-builder__focused-toolbar--field-disabled\"\n ]]: currentField.disabled,\n },\n {\n \"field-label-dropdown-open\": isDropdownOpen,\n [visualBuilderStyles()[\"field-label-dropdown-open\"]]:\n isDropdownOpen,\n },\n {\n \"visual-builder__focused-toolbar--variant\":\n currentField.isVariant,\n },\n {\n [visualBuilderStyles()[\n \"visual-builder__focused-toolbar--variant\"\n ]]: currentField.isVariant,\n }\n )}\n onClick={() => setIsDropdownOpen((prev) => !prev)}\n data-testid=\"visual-builder__focused-toolbar__field-label-wrapper\"\n data-hovered-cslp={props.fieldMetadata.cslpValue}\n >\n <button\n className={classNames(\n \"visual-builder__focused-toolbar__field-label-wrapper__current-field visual-builder__button visual-builder__button--primary visual-builder__button-loader\",\n visualBuilderStyles()[\n \"visual-builder__focused-toolbar__field-label-wrapper__current-field\"\n ],\n visualBuilderStyles()[\"visual-builder__button\"],\n visualBuilderStyles()[\n \"visual-builder__button--primary\"\n ],\n visualBuilderStyles()[\"visual-builder__button-loader\"],\n error &&\n visualBuilderStyles()[\n \"visual-builder__button-error\"\n ]\n )}\n disabled={dataLoading}\n >\n {\n currentField.isReference && !dataLoading && !error ? \n <div\n className={classNames(\n \"visual-builder__reference-icon-container\",\n visualBuilderStyles()[\"visual-builder__reference-icon-container\"]\n )}\n >\n <div\n className={classNames(\n \"visual-builder__field-icon\",\n visualBuilderStyles()[\n \"visual-builder__field-icon\"\n ]\n )}\n dangerouslySetInnerHTML={{\n __html: FieldTypeIconsMap.reference,\n }}\n data-testid=\"visual-builder__field-icon-caret\"\n />\n <CaretRightIcon />\n </div> : null\n }\n {\n currentField.contentTypeName && !dataLoading && !error ?\n <>\n <ContentTypeIcon />\n <div\n className={classNames(\n \"visual-builder__focused-toolbar__text\",\n visualBuilderStyles()[\n \"visual-builder__focused-toolbar__text\"\n ]\n )}\n data-testid=\"visual-builder__focused-toolbar__ct-name\"\n >\n {currentField.contentTypeName + \" : \"}\n </div>\n </> : null\n }\n {currentField.prefixIcon ? (\n <div\n className={classNames(\n \"visual-builder__field-icon\",\n visualBuilderStyles()[\n \"visual-builder__field-icon\"\n ]\n )}\n dangerouslySetInnerHTML={{\n __html: currentField.prefixIcon,\n }}\n data-testid=\"visual-builder__field-icon\"\n />\n ) : null}\n {currentField.text ? (\n <div\n className={classNames(\n \"visual-builder__focused-toolbar__text\",\n visualBuilderStyles()[\n \"visual-builder__focused-toolbar__text\"\n ]\n )}\n data-testid=\"visual-builder__focused-toolbar__text\"\n >\n {currentField.text}\n </div>\n ) : null}\n {getCurrentFieldIcon()}\n {error ? <CslpError /> : null}\n </button>\n {props.parentPaths.map((path, index) => (\n <button\n key={path}\n className={classNames(\n \"visual-builder__focused-toolbar__field-label-wrapper__parent-field visual-builder__button visual-builder__button--secondary visual-builder__focused-toolbar__text\",\n visualBuilderStyles()[\n \"visual-builder__focused-toolbar__field-label-wrapper__parent-field\"\n ],\n visualBuilderStyles()[\"visual-builder__button\"],\n visualBuilderStyles()[\n \"visual-builder__button--secondary\"\n ],\n visualBuilderStyles()[\n \"visual-builder__focused-toolbar__text\"\n ]\n )}\n data-target-cslp={path}\n style={{ top: calculateTopOffset(index) }}\n onClick={() => onParentPathClick(path)}\n >\n {displayNames[path]}\n </button>\n ))}\n </div>\n </ToolbarTooltip>\n </div>\n );\n}\n\nexport default FieldLabelWrapperComponent;\n"],"mappings":"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","names":["import_icons","visualBuilderPostMessage","displayNames","error","classNames"]}
|
|
@@ -3,7 +3,7 @@ import "../../chunk-5WRI5ZAA.js";
|
|
|
3
3
|
// src/visualBuilder/components/fieldLabelWrapper.tsx
|
|
4
4
|
import classNames from "classnames";
|
|
5
5
|
import { useEffect, useState } from "preact/compat";
|
|
6
|
-
import { extractDetailsFromCslp } from "../../cslp/index.js";
|
|
6
|
+
import { extractDetailsFromCslp, isValidCslp } from "../../cslp/index.js";
|
|
7
7
|
import { FieldSchemaMap } from "../utils/fieldSchemaMap.js";
|
|
8
8
|
import { DisableReason, isFieldDisabled } from "../utils/isFieldDisabled.js";
|
|
9
9
|
import visualBuilderPostMessage from "../utils/visualBuilderPostMessage.js";
|
|
@@ -102,7 +102,7 @@ function FieldLabelWrapperComponent(props) {
|
|
|
102
102
|
const domAncestor = eventDetails.editableElement.closest(`[data-cslp]:not([data-cslp^="${props.fieldMetadata.content_type_uid}"])`);
|
|
103
103
|
if (domAncestor) {
|
|
104
104
|
const domAncestorCslp = domAncestor.getAttribute("data-cslp");
|
|
105
|
-
if (domAncestorCslp) {
|
|
105
|
+
if (isValidCslp(domAncestorCslp)) {
|
|
106
106
|
const domAncestorDetails = extractDetailsFromCslp(domAncestorCslp);
|
|
107
107
|
const domAncestorContentTypeUid = domAncestorDetails.content_type_uid;
|
|
108
108
|
const domAncestorContentParent = referenceData?.find((data) => data.contentTypeUid === domAncestorContentTypeUid);
|