@contentstack/live-preview-utils 4.2.1 → 4.4.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 +96 -30
- 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 +3 -1
- package/dist/legacy/livePreview/editButton/editButton.cjs.map +1 -1
- package/dist/legacy/livePreview/editButton/editButton.js +4 -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 +112 -28
- package/dist/legacy/visualBuilder/components/fieldLabelWrapper.cjs.map +1 -1
- package/dist/legacy/visualBuilder/components/fieldLabelWrapper.js +114 -30
- 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/getWorkflowStageDetails.cjs +4 -0
- package/dist/legacy/visualBuilder/utils/getWorkflowStageDetails.cjs.map +1 -1
- package/dist/legacy/visualBuilder/utils/getWorkflowStageDetails.d.cts +8 -1
- package/dist/legacy/visualBuilder/utils/getWorkflowStageDetails.d.ts +8 -1
- package/dist/legacy/visualBuilder/utils/getWorkflowStageDetails.js +4 -0
- package/dist/legacy/visualBuilder/utils/getWorkflowStageDetails.js.map +1 -1
- package/dist/legacy/visualBuilder/utils/isFieldDisabled.cjs +41 -6
- package/dist/legacy/visualBuilder/utils/isFieldDisabled.cjs.map +1 -1
- package/dist/legacy/visualBuilder/utils/isFieldDisabled.d.cts +9 -1
- package/dist/legacy/visualBuilder/utils/isFieldDisabled.d.ts +9 -1
- package/dist/legacy/visualBuilder/utils/isFieldDisabled.js +41 -6
- package/dist/legacy/visualBuilder/utils/isFieldDisabled.js.map +1 -1
- package/dist/legacy/visualBuilder/utils/types/postMessage.types.cjs +1 -0
- package/dist/legacy/visualBuilder/utils/types/postMessage.types.cjs.map +1 -1
- package/dist/legacy/visualBuilder/utils/types/postMessage.types.d.cts +1 -0
- package/dist/legacy/visualBuilder/utils/types/postMessage.types.d.ts +1 -0
- package/dist/legacy/visualBuilder/utils/types/postMessage.types.js +1 -0
- package/dist/legacy/visualBuilder/utils/types/postMessage.types.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/legacy/visualBuilder/visualBuilder.style.cjs +30 -0
- package/dist/legacy/visualBuilder/visualBuilder.style.cjs.map +1 -1
- package/dist/legacy/visualBuilder/visualBuilder.style.d.cts +5 -0
- package/dist/legacy/visualBuilder/visualBuilder.style.d.ts +5 -0
- package/dist/legacy/visualBuilder/visualBuilder.style.js +30 -0
- package/dist/legacy/visualBuilder/visualBuilder.style.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 +3 -1
- package/dist/modern/livePreview/editButton/editButton.cjs.map +1 -1
- package/dist/modern/livePreview/editButton/editButton.js +4 -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 +111 -28
- package/dist/modern/visualBuilder/components/fieldLabelWrapper.cjs.map +1 -1
- package/dist/modern/visualBuilder/components/fieldLabelWrapper.js +113 -30
- 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/getWorkflowStageDetails.cjs +4 -0
- package/dist/modern/visualBuilder/utils/getWorkflowStageDetails.cjs.map +1 -1
- package/dist/modern/visualBuilder/utils/getWorkflowStageDetails.d.cts +8 -1
- package/dist/modern/visualBuilder/utils/getWorkflowStageDetails.d.ts +8 -1
- package/dist/modern/visualBuilder/utils/getWorkflowStageDetails.js +4 -0
- package/dist/modern/visualBuilder/utils/getWorkflowStageDetails.js.map +1 -1
- package/dist/modern/visualBuilder/utils/isFieldDisabled.cjs +40 -6
- package/dist/modern/visualBuilder/utils/isFieldDisabled.cjs.map +1 -1
- package/dist/modern/visualBuilder/utils/isFieldDisabled.d.cts +9 -1
- package/dist/modern/visualBuilder/utils/isFieldDisabled.d.ts +9 -1
- package/dist/modern/visualBuilder/utils/isFieldDisabled.js +40 -6
- package/dist/modern/visualBuilder/utils/isFieldDisabled.js.map +1 -1
- package/dist/modern/visualBuilder/utils/types/postMessage.types.cjs +1 -0
- package/dist/modern/visualBuilder/utils/types/postMessage.types.cjs.map +1 -1
- package/dist/modern/visualBuilder/utils/types/postMessage.types.d.cts +1 -0
- package/dist/modern/visualBuilder/utils/types/postMessage.types.d.ts +1 -0
- package/dist/modern/visualBuilder/utils/types/postMessage.types.js +1 -0
- package/dist/modern/visualBuilder/utils/types/postMessage.types.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/dist/modern/visualBuilder/visualBuilder.style.cjs +30 -0
- package/dist/modern/visualBuilder/visualBuilder.style.cjs.map +1 -1
- package/dist/modern/visualBuilder/visualBuilder.style.d.cts +5 -0
- package/dist/modern/visualBuilder/visualBuilder.style.d.ts +5 -0
- package/dist/modern/visualBuilder/visualBuilder.style.js +30 -0
- package/dist/modern/visualBuilder/visualBuilder.style.js.map +1 -1
- package/package.json +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/visualBuilder/listeners/mouseClick.ts"],"sourcesContent":["import {\n cleanIndividualFieldResidual,\n handleIndividualFields,\n} from \"../utils/handleIndividualFields\";\n\nimport {\n getCsDataOfElement,\n getDOMEditStack,\n} from \"../utils/getCsDataOfElement\";\n\nimport { appendFocusedToolbar } from \"../generators/generateToolbar\";\n\nimport { addFocusOverlay, hideOverlay } from \"../generators/generateOverlay\";\n\nimport visualBuilderPostMessage from \"../utils/visualBuilderPostMessage\";\n\nimport { VisualBuilderPostMessageEvents } from \"../utils/types/postMessage.types\";\n\nimport { VisualBuilder } from \"..\";\nimport { FieldSchemaMap } from \"../utils/fieldSchemaMap\";\nimport { isFieldDisabled } from \"../utils/isFieldDisabled\";\nimport EventListenerHandlerParams from \"./types\";\nimport { toggleHighlightedCommentIconDisplay } from \"../generators/generateHighlightedComment\";\nimport { VB_EmptyBlockParentClass } from \"../..\";\nimport { getFieldVariantStatus } from \"../components/FieldRevert/FieldRevertComponent\";\nimport getXPath from \"get-xpath\";\nimport Config from \"../../configManager/configManager\";\nimport { generateThread } from \"../generators/generateThread\";\nimport { isCollabThread } from \"../generators/generateThread\";\nimport { toggleCollabPopup } from \"../generators/generateThread\";\nimport { fixSvgXPath } from \"../utils/collabUtils\";\nimport { v4 as uuidV4 } from \"uuid\";\nimport { CslpData } from \"../../cslp/types/cslp.types\";\nimport { fetchEntryPermissionsAndStageDetails } from \"../utils/fetchEntryPermissionsAndStageDetails\";\n\nexport type HandleBuilderInteractionParams = Omit<\n EventListenerHandlerParams,\n \"eventDetails\" | \"customCursor\"\n> & { reEvaluate?: boolean };\n\ntype AddFocusOverlayParams = Pick<\n EventListenerHandlerParams,\n \"overlayWrapper\" | \"resizeObserver\"\n> & { editableElement: Element; isFieldDisabled?: boolean };\n\ntype AddFocusedToolbarParams = Pick<\n EventListenerHandlerParams,\n \"eventDetails\" | \"focusedToolbar\"\n> & {\n hideOverlay: () => void;\n isVariant: boolean;\n options?: { isHover?: boolean };\n};\n\nfunction addOverlay(params: AddFocusOverlayParams) {\n if (!params.overlayWrapper || !params.editableElement) return;\n\n addFocusOverlay(\n params.editableElement,\n params.overlayWrapper,\n params.isFieldDisabled\n );\n params.resizeObserver.observe(params.editableElement);\n}\n\nexport function addFocusedToolbar(params: AddFocusedToolbarParams): void {\n const { editableElement } = params.eventDetails;\n\n if (!editableElement || !params.focusedToolbar) return;\n\n appendFocusedToolbar(\n params.eventDetails,\n params.focusedToolbar,\n params.hideOverlay,\n params.isVariant,\n params.options\n );\n}\n\nexport async function handleBuilderInteraction(\n params: HandleBuilderInteractionParams\n): Promise<void> {\n const eventTarget = params.event.target as HTMLElement | null;\n const isAnchorElement = eventTarget instanceof HTMLAnchorElement;\n const elementHasCslp =\n eventTarget &&\n (eventTarget.hasAttribute(\"data-cslp\") ||\n eventTarget.closest(\"[data-cslp]\"));\n\n // if multiple elements with the same cslp element are found,\n // assign a unique ID to each element which we can use to identify\n // them in updateFocussedState and other places where we\n // would have queried the element by data-cslp\n const duplicates = document.querySelectorAll(\n `[data-cslp=\"${eventTarget?.getAttribute(\"data-cslp\")}\"]`\n );\n if (duplicates.length > 1) {\n duplicates.forEach((ele) => {\n if (!ele.hasAttribute(\"data-cslp-unique-id\")) {\n const uniqueId = `cslp-${uuidV4()}`;\n ele.setAttribute(\"data-cslp-unique-id\", uniqueId);\n }\n });\n }\n\n // if the target element is a studio-ui element, return\n // this is currently used for the \"Edit in Studio\" button\n if (eventTarget?.getAttribute(\"data-studio-ui\") === \"true\") {\n return;\n }\n\n if (params.event.altKey) {\n if (isAnchorElement) {\n params.event.preventDefault();\n params.event.stopPropagation();\n }\n return;\n }\n // prevent default behavior for anchor elements and elements with cslp attribute\n if (\n isAnchorElement ||\n (elementHasCslp && !eventTarget.closest(\".visual-builder__empty-block\"))\n ) {\n params.event.preventDefault();\n params.event.stopPropagation();\n }\n\n const config = Config.get();\n\n if (config?.collab.enable === true) {\n if (config?.collab.pauseFeedback) return;\n const xpath = fixSvgXPath(getXPath(eventTarget));\n if (!eventTarget) return;\n\n const rect = eventTarget.getBoundingClientRect();\n const relativeX = (params.event.clientX - rect.left) / rect.width;\n const relativeY = (params.event.clientY - rect.top) / rect.height;\n\n if (!isCollabThread(eventTarget)) {\n params.event.preventDefault();\n params.event.stopPropagation();\n }\n\n if (isCollabThread(eventTarget)) {\n Config.set(\"collab.isFeedbackMode\", false);\n } else if (config?.collab.isFeedbackMode) {\n generateThread(\n { xpath, relativeX, relativeY },\n {\n isNewThread: true,\n updateConfig: true,\n }\n );\n } else {\n toggleCollabPopup({ threadUid: \"\", action: \"close\" });\n Config.set(\"collab.isFeedbackMode\", true);\n }\n return;\n }\n\n const eventDetails = getCsDataOfElement(params.event);\n\n // Send mouse click post message\n sendMouseClickPostMessage(eventDetails);\n\n if (\n !eventDetails ||\n !params.overlayWrapper ||\n !params.visualBuilderContainer\n ) {\n return;\n }\n\n const { editableElement, fieldMetadata } = eventDetails;\n const variantStatus = await getFieldVariantStatus(fieldMetadata);\n const isVariant = variantStatus\n ? Object.values(variantStatus).some((value) => value === true)\n : false;\n\n // Clean residuals if necessary\n cleanResidualsIfNeeded(params, editableElement);\n\n // Return if the selected element is an empty block\n if (isEmptyBlockElement(editableElement)) {\n return;\n }\n\n // when previous and current selected element is same, return.\n // this also avoids inserting psuedo-editable field (field data is\n // not equal to text content in DOM) when performing mouse\n // selections in the content editable\n const previousSelectedElement =\n VisualBuilder.VisualBuilderGlobalState.value\n .previousSelectedEditableDOM;\n if (\n isSameSelectedElement(previousSelectedElement, editableElement, params)\n ) {\n return;\n }\n\n VisualBuilder.VisualBuilderGlobalState.value.previousSelectedEditableDOM =\n editableElement;\n\n // Add overlay and focused toolbar\n addOverlayAndToolbar(params, eventDetails, editableElement, isVariant);\n\n const { cslpValue } = fieldMetadata;\n\n toggleHighlightedCommentIconDisplay(cslpValue, false);\n\n // Handle field schema and individual fields\n await handleFieldSchemaAndIndividualFields(\n params,\n eventDetails,\n fieldMetadata,\n editableElement,\n previousSelectedElement\n );\n\n // Observe changes to the editable element\n observeEditableElementChanges(params, editableElement);\n}\n\nfunction sendMouseClickPostMessage(eventDetails: any) {\n visualBuilderPostMessage\n ?.send(VisualBuilderPostMessageEvents.MOUSE_CLICK, {\n cslpData: eventDetails?.cslpData,\n fieldMetadata: eventDetails?.fieldMetadata,\n })\n .catch((err) => {\n console.warn(\"Error while sending post message\", err);\n });\n}\nfunction cleanResidualsIfNeeded(\n params: HandleBuilderInteractionParams,\n editableElement: Element\n) {\n const previousSelectedElement =\n VisualBuilder.VisualBuilderGlobalState.value\n .previousSelectedEditableDOM;\n if (\n (previousSelectedElement &&\n previousSelectedElement !== editableElement) ||\n params.reEvaluate\n ) {\n cleanIndividualFieldResidual({\n overlayWrapper: params.overlayWrapper!,\n visualBuilderContainer: params.visualBuilderContainer,\n focusedToolbar: params.focusedToolbar,\n resizeObserver: params.resizeObserver,\n });\n }\n}\nfunction isEmptyBlockElement(editableElement: Element): boolean {\n return (\n editableElement.classList.contains(VB_EmptyBlockParentClass) ||\n editableElement.classList.contains(\"visual-builder__empty-block\")\n );\n}\n\nfunction isSameSelectedElement(\n previousSelectedElement: Element | null,\n editableElement: Element,\n params: HandleBuilderInteractionParams\n): boolean {\n return !!(\n previousSelectedElement &&\n previousSelectedElement === editableElement &&\n !params.reEvaluate\n );\n}\n\nfunction addOverlayAndToolbar(\n params: HandleBuilderInteractionParams,\n eventDetails: any,\n editableElement: Element,\n isVariant: boolean\n) {\n VisualBuilder.VisualBuilderGlobalState.value.isFocussed = true;\n addOverlay({\n overlayWrapper: params.overlayWrapper,\n resizeObserver: params.resizeObserver,\n editableElement: editableElement,\n });\n\n addFocusedToolbar({\n eventDetails: eventDetails,\n focusedToolbar: params.focusedToolbar,\n hideOverlay: () => {\n hideOverlay({\n visualBuilderContainer: params.visualBuilderContainer,\n visualBuilderOverlayWrapper: params.overlayWrapper,\n focusedToolbar: params.focusedToolbar,\n resizeObserver: params.resizeObserver,\n });\n },\n isVariant,\n });\n}\nasync function handleFieldSchemaAndIndividualFields(\n params: HandleBuilderInteractionParams,\n eventDetails: any,\n fieldMetadata: CslpData,\n editableElement: Element,\n previousSelectedElement: Element | null\n) {\n const {\n content_type_uid,\n entry_uid,\n fieldPath,\n locale,\n variant: variantUid,\n fieldPathWithIndex,\n } = fieldMetadata;\n const fieldSchema = await FieldSchemaMap.getFieldSchema(\n content_type_uid,\n fieldPath\n );\n const { acl: entryAcl, workflowStage: entryWorkflowStageDetails, resolvedVariantPermissions } =\n await fetchEntryPermissionsAndStageDetails({\n entryUid: entry_uid,\n contentTypeUid: content_type_uid,\n locale,\n variantUid,\n fieldPathWithIndex,\n });\n\n if (fieldSchema) {\n const { isDisabled } = isFieldDisabled(\n fieldSchema,\n eventDetails,\n resolvedVariantPermissions,\n entryAcl,\n entryWorkflowStageDetails\n );\n if (isDisabled) {\n addOverlay({\n overlayWrapper: params.overlayWrapper,\n resizeObserver: params.resizeObserver,\n editableElement: editableElement,\n isFieldDisabled: true,\n });\n }\n }\n\n visualBuilderPostMessage?.send(VisualBuilderPostMessageEvents.FOCUS_FIELD, {\n DOMEditStack: getDOMEditStack(editableElement),\n });\n\n await handleIndividualFields(eventDetails, {\n visualBuilderContainer: params.visualBuilderContainer!,\n resizeObserver: params.resizeObserver,\n lastEditedField: previousSelectedElement,\n });\n}\nfunction observeEditableElementChanges(\n params: HandleBuilderInteractionParams,\n editableElement: Element\n) {\n const focusElementObserver = new MutationObserver((mutations) => {\n mutations.forEach((mutation) => {\n if (\n mutation.type === \"attributes\" &&\n mutation.attributeName === \"data-cslp\"\n ) {\n focusElementObserver?.disconnect();\n VisualBuilder.VisualBuilderGlobalState.value.focusElementObserver =\n null;\n handleBuilderInteraction({ ...params, reEvaluate: true });\n }\n });\n });\n\n VisualBuilder.VisualBuilderGlobalState.value.focusElementObserver =\n focusElementObserver;\n focusElementObserver.observe(editableElement, { attributes: true });\n}\n\nexport default handleBuilderInteraction;\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../../../src/visualBuilder/listeners/mouseClick.ts"],"sourcesContent":["import {\n cleanIndividualFieldResidual,\n handleIndividualFields,\n} from \"../utils/handleIndividualFields\";\n\nimport {\n getCsDataOfElement,\n getDOMEditStack,\n} from \"../utils/getCsDataOfElement\";\nimport { isValidCslp } from \"../../cslp\";\n\nimport { appendFocusedToolbar } from \"../generators/generateToolbar\";\n\nimport { addFocusOverlay, hideOverlay } from \"../generators/generateOverlay\";\n\nimport visualBuilderPostMessage from \"../utils/visualBuilderPostMessage\";\n\nimport { VisualBuilderPostMessageEvents } from \"../utils/types/postMessage.types\";\n\nimport { VisualBuilder } from \"..\";\nimport { FieldSchemaMap } from \"../utils/fieldSchemaMap\";\nimport { isFieldDisabled } from \"../utils/isFieldDisabled\";\nimport EventListenerHandlerParams from \"./types\";\nimport { toggleHighlightedCommentIconDisplay } from \"../generators/generateHighlightedComment\";\nimport { VB_EmptyBlockParentClass } from \"../..\";\nimport { getFieldVariantStatus } from \"../components/FieldRevert/FieldRevertComponent\";\nimport getXPath from \"get-xpath\";\nimport Config from \"../../configManager/configManager\";\nimport { generateThread } from \"../generators/generateThread\";\nimport { isCollabThread } from \"../generators/generateThread\";\nimport { toggleCollabPopup } from \"../generators/generateThread\";\nimport { fixSvgXPath } from \"../utils/collabUtils\";\nimport { v4 as uuidV4 } from \"uuid\";\nimport { CslpData } from \"../../cslp/types/cslp.types\";\nimport { fetchEntryPermissionsAndStageDetails } from \"../utils/fetchEntryPermissionsAndStageDetails\";\n\nexport type HandleBuilderInteractionParams = Omit<\n EventListenerHandlerParams,\n \"eventDetails\" | \"customCursor\"\n> & { reEvaluate?: boolean };\n\ntype AddFocusOverlayParams = Pick<\n EventListenerHandlerParams,\n \"overlayWrapper\" | \"resizeObserver\"\n> & { editableElement: Element; isFieldDisabled?: boolean };\n\ntype AddFocusedToolbarParams = Pick<\n EventListenerHandlerParams,\n \"eventDetails\" | \"focusedToolbar\"\n> & {\n hideOverlay: () => void;\n isVariant: boolean;\n options?: { isHover?: boolean };\n};\n\nfunction addOverlay(params: AddFocusOverlayParams) {\n if (!params.overlayWrapper || !params.editableElement) return;\n\n addFocusOverlay(\n params.editableElement,\n params.overlayWrapper,\n params.isFieldDisabled\n );\n params.resizeObserver.observe(params.editableElement);\n}\n\nexport function addFocusedToolbar(params: AddFocusedToolbarParams): void {\n const { editableElement } = params.eventDetails;\n\n if (!editableElement || !params.focusedToolbar) return;\n\n appendFocusedToolbar(\n params.eventDetails,\n params.focusedToolbar,\n params.hideOverlay,\n params.isVariant,\n params.options\n );\n}\n\nexport async function handleBuilderInteraction(\n params: HandleBuilderInteractionParams\n): Promise<void> {\n const eventTarget = params.event.target as HTMLElement | null;\n const isAnchorElement = eventTarget instanceof HTMLAnchorElement;\n const elementHasCslp =\n eventTarget &&\n (eventTarget.hasAttribute(\"data-cslp\") ||\n eventTarget.closest(\"[data-cslp]\"));\n\n // if multiple elements with the same cslp element are found,\n // assign a unique ID to each element which we can use to identify\n // them in updateFocussedState and other places where we\n // would have queried the element by data-cslp\n const eventTargetCslp = eventTarget?.getAttribute(\"data-cslp\");\n if (isValidCslp(eventTargetCslp)) {\n const duplicates = document.querySelectorAll(\n `[data-cslp=\"${eventTargetCslp}\"]`\n );\n if (duplicates.length > 1) {\n duplicates.forEach((ele) => {\n if (!ele.hasAttribute(\"data-cslp-unique-id\")) {\n const uniqueId = `cslp-${uuidV4()}`;\n ele.setAttribute(\"data-cslp-unique-id\", uniqueId);\n }\n });\n }\n }\n\n // if the target element is a studio-ui element, return\n // this is currently used for the \"Edit in Studio\" button\n if (eventTarget?.getAttribute(\"data-studio-ui\") === \"true\") {\n return;\n }\n\n if (params.event.altKey) {\n if (isAnchorElement) {\n params.event.preventDefault();\n params.event.stopPropagation();\n }\n return;\n }\n // prevent default behavior for anchor elements and elements with cslp attribute\n if (\n isAnchorElement ||\n (elementHasCslp && !eventTarget.closest(\".visual-builder__empty-block\"))\n ) {\n params.event.preventDefault();\n params.event.stopPropagation();\n }\n\n const config = Config.get();\n\n if (config?.collab.enable === true) {\n if (config?.collab.pauseFeedback) return;\n const xpath = fixSvgXPath(getXPath(eventTarget));\n if (!eventTarget) return;\n\n const rect = eventTarget.getBoundingClientRect();\n const relativeX = (params.event.clientX - rect.left) / rect.width;\n const relativeY = (params.event.clientY - rect.top) / rect.height;\n\n if (!isCollabThread(eventTarget)) {\n params.event.preventDefault();\n params.event.stopPropagation();\n }\n\n if (isCollabThread(eventTarget)) {\n Config.set(\"collab.isFeedbackMode\", false);\n } else if (config?.collab.isFeedbackMode) {\n generateThread(\n { xpath, relativeX, relativeY },\n {\n isNewThread: true,\n updateConfig: true,\n }\n );\n } else {\n toggleCollabPopup({ threadUid: \"\", action: \"close\" });\n Config.set(\"collab.isFeedbackMode\", true);\n }\n return;\n }\n\n const eventDetails = getCsDataOfElement(params.event);\n\n // Send mouse click post message\n sendMouseClickPostMessage(eventDetails);\n\n if (\n !eventDetails ||\n !params.overlayWrapper ||\n !params.visualBuilderContainer\n ) {\n return;\n }\n\n const { editableElement, fieldMetadata } = eventDetails;\n const variantStatus = await getFieldVariantStatus(fieldMetadata);\n const isVariant = variantStatus\n ? Object.values(variantStatus).some((value) => value === true)\n : false;\n\n // Clean residuals if necessary\n cleanResidualsIfNeeded(params, editableElement);\n\n // Return if the selected element is an empty block\n if (isEmptyBlockElement(editableElement)) {\n return;\n }\n\n // when previous and current selected element is same, return.\n // this also avoids inserting psuedo-editable field (field data is\n // not equal to text content in DOM) when performing mouse\n // selections in the content editable\n const previousSelectedElement =\n VisualBuilder.VisualBuilderGlobalState.value\n .previousSelectedEditableDOM;\n if (\n isSameSelectedElement(previousSelectedElement, editableElement, params)\n ) {\n return;\n }\n\n VisualBuilder.VisualBuilderGlobalState.value.previousSelectedEditableDOM =\n editableElement;\n\n // Add overlay and focused toolbar\n addOverlayAndToolbar(params, eventDetails, editableElement, isVariant);\n\n const { cslpValue } = fieldMetadata;\n\n toggleHighlightedCommentIconDisplay(cslpValue, false);\n\n // Handle field schema and individual fields\n await handleFieldSchemaAndIndividualFields(\n params,\n eventDetails,\n fieldMetadata,\n editableElement,\n previousSelectedElement\n );\n\n // Observe changes to the editable element\n observeEditableElementChanges(params, editableElement);\n}\n\nfunction sendMouseClickPostMessage(eventDetails: any) {\n visualBuilderPostMessage\n ?.send(VisualBuilderPostMessageEvents.MOUSE_CLICK, {\n cslpData: eventDetails?.cslpData,\n fieldMetadata: eventDetails?.fieldMetadata,\n })\n .catch((err) => {\n console.warn(\"Error while sending post message\", err);\n });\n}\nfunction cleanResidualsIfNeeded(\n params: HandleBuilderInteractionParams,\n editableElement: Element\n) {\n const previousSelectedElement =\n VisualBuilder.VisualBuilderGlobalState.value\n .previousSelectedEditableDOM;\n if (\n (previousSelectedElement &&\n previousSelectedElement !== editableElement) ||\n params.reEvaluate\n ) {\n cleanIndividualFieldResidual({\n overlayWrapper: params.overlayWrapper!,\n visualBuilderContainer: params.visualBuilderContainer,\n focusedToolbar: params.focusedToolbar,\n resizeObserver: params.resizeObserver,\n });\n }\n}\nfunction isEmptyBlockElement(editableElement: Element): boolean {\n return (\n editableElement.classList.contains(VB_EmptyBlockParentClass) ||\n editableElement.classList.contains(\"visual-builder__empty-block\")\n );\n}\n\nfunction isSameSelectedElement(\n previousSelectedElement: Element | null,\n editableElement: Element,\n params: HandleBuilderInteractionParams\n): boolean {\n return !!(\n previousSelectedElement &&\n previousSelectedElement === editableElement &&\n !params.reEvaluate\n );\n}\n\nfunction addOverlayAndToolbar(\n params: HandleBuilderInteractionParams,\n eventDetails: any,\n editableElement: Element,\n isVariant: boolean\n) {\n VisualBuilder.VisualBuilderGlobalState.value.isFocussed = true;\n addOverlay({\n overlayWrapper: params.overlayWrapper,\n resizeObserver: params.resizeObserver,\n editableElement: editableElement,\n });\n\n addFocusedToolbar({\n eventDetails: eventDetails,\n focusedToolbar: params.focusedToolbar,\n hideOverlay: () => {\n hideOverlay({\n visualBuilderContainer: params.visualBuilderContainer,\n visualBuilderOverlayWrapper: params.overlayWrapper,\n focusedToolbar: params.focusedToolbar,\n resizeObserver: params.resizeObserver,\n });\n },\n isVariant,\n });\n}\nasync function handleFieldSchemaAndIndividualFields(\n params: HandleBuilderInteractionParams,\n eventDetails: any,\n fieldMetadata: CslpData,\n editableElement: Element,\n previousSelectedElement: Element | null\n) {\n const {\n content_type_uid,\n entry_uid,\n fieldPath,\n locale,\n variant: variantUid,\n fieldPathWithIndex,\n } = fieldMetadata;\n const fieldSchema = await FieldSchemaMap.getFieldSchema(\n content_type_uid,\n fieldPath\n );\n const { acl: entryAcl, workflowStage: entryWorkflowStageDetails, resolvedVariantPermissions } =\n await fetchEntryPermissionsAndStageDetails({\n entryUid: entry_uid,\n contentTypeUid: content_type_uid,\n locale,\n variantUid,\n fieldPathWithIndex,\n });\n\n if (fieldSchema) {\n const { isDisabled } = isFieldDisabled(\n fieldSchema,\n eventDetails,\n resolvedVariantPermissions,\n entryAcl,\n entryWorkflowStageDetails\n );\n if (isDisabled) {\n addOverlay({\n overlayWrapper: params.overlayWrapper,\n resizeObserver: params.resizeObserver,\n editableElement: editableElement,\n isFieldDisabled: true,\n });\n }\n }\n\n visualBuilderPostMessage?.send(VisualBuilderPostMessageEvents.FOCUS_FIELD, {\n DOMEditStack: getDOMEditStack(editableElement),\n });\n\n await handleIndividualFields(eventDetails, {\n visualBuilderContainer: params.visualBuilderContainer!,\n resizeObserver: params.resizeObserver,\n lastEditedField: previousSelectedElement,\n });\n}\nfunction observeEditableElementChanges(\n params: HandleBuilderInteractionParams,\n editableElement: Element\n) {\n const focusElementObserver = new MutationObserver((mutations) => {\n mutations.forEach((mutation) => {\n if (\n mutation.type === \"attributes\" &&\n mutation.attributeName === \"data-cslp\"\n ) {\n focusElementObserver?.disconnect();\n VisualBuilder.VisualBuilderGlobalState.value.focusElementObserver =\n null;\n handleBuilderInteraction({ ...params, reEvaluate: true });\n }\n });\n });\n\n VisualBuilder.VisualBuilderGlobalState.value.focusElementObserver =\n focusElementObserver;\n focusElementObserver.observe(editableElement, { attributes: true });\n}\n\nexport default handleBuilderInteraction;\n"],"mappings":"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","names":[]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { IMentionedList, IMentionItem, ICommentState, IMessageDTO, IUserState, IUserDTO } from '../types/collab.types.cjs';
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* Generates the title for the thread based on the number of comments.
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { IMentionedList, IMentionItem, ICommentState, IMessageDTO, IUserState, IUserDTO } from '../types/collab.types.js';
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* Generates the title for the thread based on the number of comments.
|
|
@@ -36,7 +36,7 @@ function getCsDataOfElement(event) {
|
|
|
36
36
|
return;
|
|
37
37
|
}
|
|
38
38
|
const cslpData = editableElement.getAttribute("data-cslp");
|
|
39
|
-
if (!cslpData) {
|
|
39
|
+
if (!(0, import_cslpdata.isValidCslp)(cslpData)) {
|
|
40
40
|
return;
|
|
41
41
|
}
|
|
42
42
|
const fieldMetadata = (0, import_cslpdata.extractDetailsFromCslp)(cslpData);
|
|
@@ -65,7 +65,7 @@ function getDOMEditStack(ele) {
|
|
|
65
65
|
let curr = ele.closest(`[${import_constants.DATA_CSLP_ATTR_SELECTOR}]`);
|
|
66
66
|
while (curr) {
|
|
67
67
|
const cslp = curr.getAttribute(import_constants.DATA_CSLP_ATTR_SELECTOR);
|
|
68
|
-
if (!cslp) {
|
|
68
|
+
if (!(0, import_cslpdata.isValidCslp)(cslp)) {
|
|
69
69
|
curr = (_a = curr.parentElement) == null ? void 0 : _a.closest(`[${import_constants.DATA_CSLP_ATTR_SELECTOR}]`);
|
|
70
70
|
continue;
|
|
71
71
|
}
|
|
@@ -78,7 +78,7 @@ function getDOMEditStack(ele) {
|
|
|
78
78
|
}
|
|
79
79
|
curr = (_b = curr.parentElement) == null ? void 0 : _b.closest(`[${import_constants.DATA_CSLP_ATTR_SELECTOR}]`);
|
|
80
80
|
}
|
|
81
|
-
return cslpSet.filter(
|
|
81
|
+
return cslpSet.filter(import_cslpdata.isValidCslp).map((cslp) => (0, import_cslpdata.extractDetailsFromCslp)(cslp));
|
|
82
82
|
}
|
|
83
83
|
// Annotate the CommonJS export names for ESM import in node:
|
|
84
84
|
0 && (module.exports = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/visualBuilder/utils/getCsDataOfElement.ts"],"sourcesContent":["import { CslpData } from \"../../cslp/types/cslp.types\";\nimport { VisualBuilderCslpEventDetails } from \"../types/visualBuilder.types\";\nimport { extractDetailsFromCslp } from \"../../cslp/cslpdata\";\nimport { DATA_CSLP_ATTR_SELECTOR } from \"./constants\";\n\n/**\n * Returns the CSLP data of the closest ancestor element with a `data-cslp` attribute\n * to the target element of a mouse event.\n * @param event - The mouse event.\n * @returns The CSLP data of the closest ancestor element with a `data-cslp` attribute,\n * along with metadata and schema information for the corresponding field.\n */\nexport function getCsDataOfElement(\n event: MouseEvent\n): VisualBuilderCslpEventDetails | undefined {\n const targetElement = event.target as HTMLElement;\n if (!targetElement) {\n return;\n }\n const editableElement = targetElement.closest(\"[data-cslp]\");\n\n if (!editableElement) {\n return;\n }\n const cslpData = editableElement.getAttribute(\"data-cslp\");\n if (!cslpData) {\n return;\n }\n const fieldMetadata = extractDetailsFromCslp(cslpData);\n\n return {\n editableElement: editableElement,\n cslpData,\n fieldMetadata,\n };\n}\n\nfunction getPrefix(cslp: string): string {\n let prefix;\n if (cslp.startsWith(\"v2:\")) {\n // v2: prefix is added to cslp in variant cases\n const variantPrefix = cslp.split(\":\")[1];\n const content_type_uid = variantPrefix.split(\".\")[0];\n const euid = variantPrefix.split(\".\")[1].split(\"_\")[0]; //page.blt7a1e5b297a97bd12_cs8171e34d92207334.en-us\n const locale = variantPrefix.split(\".\")[2];\n prefix = `${content_type_uid}.${euid}.${locale}`;\n } else {\n prefix = cslp;\n }\n return prefix.split(\".\").slice(0, 3).join(\".\");\n}\n\nexport function getDOMEditStack(ele: Element): CslpData[] {\n const cslpSet: string[] = [];\n let curr: any = ele.closest(`[${DATA_CSLP_ATTR_SELECTOR}]`);\n while (curr) {\n const cslp = curr.getAttribute(DATA_CSLP_ATTR_SELECTOR);\n if (!cslp) {\n curr = curr.parentElement?.closest(`[${DATA_CSLP_ATTR_SELECTOR}]`);\n continue;\n }\n const entryPrefix = getPrefix(cslp);\n const hasSamePrevPrefix = getPrefix(cslpSet.at(0) || \"\").startsWith(\n entryPrefix\n );\n if (!hasSamePrevPrefix) {\n cslpSet.unshift(cslp);\n }\n curr = curr.parentElement?.closest(`[${DATA_CSLP_ATTR_SELECTOR}]`);\n }\n return cslpSet.filter(
|
|
1
|
+
{"version":3,"sources":["../../../../src/visualBuilder/utils/getCsDataOfElement.ts"],"sourcesContent":["import { CslpData } from \"../../cslp/types/cslp.types\";\nimport { VisualBuilderCslpEventDetails } from \"../types/visualBuilder.types\";\nimport { extractDetailsFromCslp, isValidCslp } from \"../../cslp/cslpdata\";\nimport { DATA_CSLP_ATTR_SELECTOR } from \"./constants\";\n\n/**\n * Returns the CSLP data of the closest ancestor element with a `data-cslp` attribute\n * to the target element of a mouse event.\n * @param event - The mouse event.\n * @returns The CSLP data of the closest ancestor element with a `data-cslp` attribute,\n * along with metadata and schema information for the corresponding field.\n */\nexport function getCsDataOfElement(\n event: MouseEvent\n): VisualBuilderCslpEventDetails | undefined {\n const targetElement = event.target as HTMLElement;\n if (!targetElement) {\n return;\n }\n const editableElement = targetElement.closest(\"[data-cslp]\");\n\n if (!editableElement) {\n return;\n }\n const cslpData = editableElement.getAttribute(\"data-cslp\");\n if (!isValidCslp(cslpData)) {\n return;\n }\n const fieldMetadata = extractDetailsFromCslp(cslpData);\n\n return {\n editableElement: editableElement,\n cslpData,\n fieldMetadata,\n };\n}\n\nfunction getPrefix(cslp: string): string {\n let prefix;\n if (cslp.startsWith(\"v2:\")) {\n // v2: prefix is added to cslp in variant cases\n const variantPrefix = cslp.split(\":\")[1];\n const content_type_uid = variantPrefix.split(\".\")[0];\n const euid = variantPrefix.split(\".\")[1].split(\"_\")[0]; //page.blt7a1e5b297a97bd12_cs8171e34d92207334.en-us\n const locale = variantPrefix.split(\".\")[2];\n prefix = `${content_type_uid}.${euid}.${locale}`;\n } else {\n prefix = cslp;\n }\n return prefix.split(\".\").slice(0, 3).join(\".\");\n}\n\nexport function getDOMEditStack(ele: Element): CslpData[] {\n const cslpSet: string[] = [];\n let curr: any = ele.closest(`[${DATA_CSLP_ATTR_SELECTOR}]`);\n while (curr) {\n const cslp = curr.getAttribute(DATA_CSLP_ATTR_SELECTOR);\n if (!isValidCslp(cslp)) {\n curr = curr.parentElement?.closest(`[${DATA_CSLP_ATTR_SELECTOR}]`);\n continue;\n }\n const entryPrefix = getPrefix(cslp);\n const hasSamePrevPrefix = getPrefix(cslpSet.at(0) || \"\").startsWith(\n entryPrefix\n );\n if (!hasSamePrevPrefix) {\n cslpSet.unshift(cslp);\n }\n curr = curr.parentElement?.closest(`[${DATA_CSLP_ATTR_SELECTOR}]`);\n }\n return cslpSet.filter(isValidCslp).map((cslp) => extractDetailsFromCslp(cslp));\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,sBAAoD;AACpD,uBAAwC;AASjC,SAAS,mBACZ,OACyC;AACzC,QAAM,gBAAgB,MAAM;AAC5B,MAAI,CAAC,eAAe;AAChB;AAAA,EACJ;AACA,QAAM,kBAAkB,cAAc,QAAQ,aAAa;AAE3D,MAAI,CAAC,iBAAiB;AAClB;AAAA,EACJ;AACA,QAAM,WAAW,gBAAgB,aAAa,WAAW;AACzD,MAAI,KAAC,6BAAY,QAAQ,GAAG;AACxB;AAAA,EACJ;AACA,QAAM,oBAAgB,wCAAuB,QAAQ;AAErD,SAAO;AAAA,IACH;AAAA,IACA;AAAA,IACA;AAAA,EACJ;AACJ;AAEA,SAAS,UAAU,MAAsB;AACrC,MAAI;AACJ,MAAI,KAAK,WAAW,KAAK,GAAG;AAExB,UAAM,gBAAgB,KAAK,MAAM,GAAG,EAAE,CAAC;AACvC,UAAM,mBAAmB,cAAc,MAAM,GAAG,EAAE,CAAC;AACnD,UAAM,OAAO,cAAc,MAAM,GAAG,EAAE,CAAC,EAAE,MAAM,GAAG,EAAE,CAAC;AACrD,UAAM,SAAS,cAAc,MAAM,GAAG,EAAE,CAAC;AACzC,aAAS,GAAG,gBAAgB,IAAI,IAAI,IAAI,MAAM;AAAA,EAClD,OAAO;AACH,aAAS;AAAA,EACb;AACA,SAAO,OAAO,MAAM,GAAG,EAAE,MAAM,GAAG,CAAC,EAAE,KAAK,GAAG;AACjD;AAEO,SAAS,gBAAgB,KAA0B;AApD1D;AAqDI,QAAM,UAAoB,CAAC;AAC3B,MAAI,OAAY,IAAI,QAAQ,IAAI,wCAAuB,GAAG;AAC1D,SAAO,MAAM;AACT,UAAM,OAAO,KAAK,aAAa,wCAAuB;AACtD,QAAI,KAAC,6BAAY,IAAI,GAAG;AACpB,cAAO,UAAK,kBAAL,mBAAoB,QAAQ,IAAI,wCAAuB;AAC9D;AAAA,IACJ;AACA,UAAM,cAAc,UAAU,IAAI;AAClC,UAAM,oBAAoB,UAAU,QAAQ,GAAG,CAAC,KAAK,EAAE,EAAE;AAAA,MACrD;AAAA,IACJ;AACA,QAAI,CAAC,mBAAmB;AACpB,cAAQ,QAAQ,IAAI;AAAA,IACxB;AACA,YAAO,UAAK,kBAAL,mBAAoB,QAAQ,IAAI,wCAAuB;AAAA,EAClE;AACA,SAAO,QAAQ,OAAO,2BAAW,EAAE,IAAI,CAAC,aAAS,wCAAuB,IAAI,CAAC;AACjF;","names":[]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import "../../chunk-5WRI5ZAA.js";
|
|
2
2
|
|
|
3
3
|
// src/visualBuilder/utils/getCsDataOfElement.ts
|
|
4
|
-
import { extractDetailsFromCslp } from "../../cslp/cslpdata.js";
|
|
4
|
+
import { extractDetailsFromCslp, isValidCslp } from "../../cslp/cslpdata.js";
|
|
5
5
|
import { DATA_CSLP_ATTR_SELECTOR } from "./constants.js";
|
|
6
6
|
function getCsDataOfElement(event) {
|
|
7
7
|
const targetElement = event.target;
|
|
@@ -13,7 +13,7 @@ function getCsDataOfElement(event) {
|
|
|
13
13
|
return;
|
|
14
14
|
}
|
|
15
15
|
const cslpData = editableElement.getAttribute("data-cslp");
|
|
16
|
-
if (!cslpData) {
|
|
16
|
+
if (!isValidCslp(cslpData)) {
|
|
17
17
|
return;
|
|
18
18
|
}
|
|
19
19
|
const fieldMetadata = extractDetailsFromCslp(cslpData);
|
|
@@ -42,7 +42,7 @@ function getDOMEditStack(ele) {
|
|
|
42
42
|
let curr = ele.closest(`[${DATA_CSLP_ATTR_SELECTOR}]`);
|
|
43
43
|
while (curr) {
|
|
44
44
|
const cslp = curr.getAttribute(DATA_CSLP_ATTR_SELECTOR);
|
|
45
|
-
if (!cslp) {
|
|
45
|
+
if (!isValidCslp(cslp)) {
|
|
46
46
|
curr = (_a = curr.parentElement) == null ? void 0 : _a.closest(`[${DATA_CSLP_ATTR_SELECTOR}]`);
|
|
47
47
|
continue;
|
|
48
48
|
}
|
|
@@ -55,7 +55,7 @@ function getDOMEditStack(ele) {
|
|
|
55
55
|
}
|
|
56
56
|
curr = (_b = curr.parentElement) == null ? void 0 : _b.closest(`[${DATA_CSLP_ATTR_SELECTOR}]`);
|
|
57
57
|
}
|
|
58
|
-
return cslpSet.filter(
|
|
58
|
+
return cslpSet.filter(isValidCslp).map((cslp) => extractDetailsFromCslp(cslp));
|
|
59
59
|
}
|
|
60
60
|
export {
|
|
61
61
|
getCsDataOfElement,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/visualBuilder/utils/getCsDataOfElement.ts"],"sourcesContent":["import { CslpData } from \"../../cslp/types/cslp.types\";\nimport { VisualBuilderCslpEventDetails } from \"../types/visualBuilder.types\";\nimport { extractDetailsFromCslp } from \"../../cslp/cslpdata\";\nimport { DATA_CSLP_ATTR_SELECTOR } from \"./constants\";\n\n/**\n * Returns the CSLP data of the closest ancestor element with a `data-cslp` attribute\n * to the target element of a mouse event.\n * @param event - The mouse event.\n * @returns The CSLP data of the closest ancestor element with a `data-cslp` attribute,\n * along with metadata and schema information for the corresponding field.\n */\nexport function getCsDataOfElement(\n event: MouseEvent\n): VisualBuilderCslpEventDetails | undefined {\n const targetElement = event.target as HTMLElement;\n if (!targetElement) {\n return;\n }\n const editableElement = targetElement.closest(\"[data-cslp]\");\n\n if (!editableElement) {\n return;\n }\n const cslpData = editableElement.getAttribute(\"data-cslp\");\n if (!cslpData) {\n return;\n }\n const fieldMetadata = extractDetailsFromCslp(cslpData);\n\n return {\n editableElement: editableElement,\n cslpData,\n fieldMetadata,\n };\n}\n\nfunction getPrefix(cslp: string): string {\n let prefix;\n if (cslp.startsWith(\"v2:\")) {\n // v2: prefix is added to cslp in variant cases\n const variantPrefix = cslp.split(\":\")[1];\n const content_type_uid = variantPrefix.split(\".\")[0];\n const euid = variantPrefix.split(\".\")[1].split(\"_\")[0]; //page.blt7a1e5b297a97bd12_cs8171e34d92207334.en-us\n const locale = variantPrefix.split(\".\")[2];\n prefix = `${content_type_uid}.${euid}.${locale}`;\n } else {\n prefix = cslp;\n }\n return prefix.split(\".\").slice(0, 3).join(\".\");\n}\n\nexport function getDOMEditStack(ele: Element): CslpData[] {\n const cslpSet: string[] = [];\n let curr: any = ele.closest(`[${DATA_CSLP_ATTR_SELECTOR}]`);\n while (curr) {\n const cslp = curr.getAttribute(DATA_CSLP_ATTR_SELECTOR);\n if (!cslp) {\n curr = curr.parentElement?.closest(`[${DATA_CSLP_ATTR_SELECTOR}]`);\n continue;\n }\n const entryPrefix = getPrefix(cslp);\n const hasSamePrevPrefix = getPrefix(cslpSet.at(0) || \"\").startsWith(\n entryPrefix\n );\n if (!hasSamePrevPrefix) {\n cslpSet.unshift(cslp);\n }\n curr = curr.parentElement?.closest(`[${DATA_CSLP_ATTR_SELECTOR}]`);\n }\n return cslpSet.filter(
|
|
1
|
+
{"version":3,"sources":["../../../../src/visualBuilder/utils/getCsDataOfElement.ts"],"sourcesContent":["import { CslpData } from \"../../cslp/types/cslp.types\";\nimport { VisualBuilderCslpEventDetails } from \"../types/visualBuilder.types\";\nimport { extractDetailsFromCslp, isValidCslp } from \"../../cslp/cslpdata\";\nimport { DATA_CSLP_ATTR_SELECTOR } from \"./constants\";\n\n/**\n * Returns the CSLP data of the closest ancestor element with a `data-cslp` attribute\n * to the target element of a mouse event.\n * @param event - The mouse event.\n * @returns The CSLP data of the closest ancestor element with a `data-cslp` attribute,\n * along with metadata and schema information for the corresponding field.\n */\nexport function getCsDataOfElement(\n event: MouseEvent\n): VisualBuilderCslpEventDetails | undefined {\n const targetElement = event.target as HTMLElement;\n if (!targetElement) {\n return;\n }\n const editableElement = targetElement.closest(\"[data-cslp]\");\n\n if (!editableElement) {\n return;\n }\n const cslpData = editableElement.getAttribute(\"data-cslp\");\n if (!isValidCslp(cslpData)) {\n return;\n }\n const fieldMetadata = extractDetailsFromCslp(cslpData);\n\n return {\n editableElement: editableElement,\n cslpData,\n fieldMetadata,\n };\n}\n\nfunction getPrefix(cslp: string): string {\n let prefix;\n if (cslp.startsWith(\"v2:\")) {\n // v2: prefix is added to cslp in variant cases\n const variantPrefix = cslp.split(\":\")[1];\n const content_type_uid = variantPrefix.split(\".\")[0];\n const euid = variantPrefix.split(\".\")[1].split(\"_\")[0]; //page.blt7a1e5b297a97bd12_cs8171e34d92207334.en-us\n const locale = variantPrefix.split(\".\")[2];\n prefix = `${content_type_uid}.${euid}.${locale}`;\n } else {\n prefix = cslp;\n }\n return prefix.split(\".\").slice(0, 3).join(\".\");\n}\n\nexport function getDOMEditStack(ele: Element): CslpData[] {\n const cslpSet: string[] = [];\n let curr: any = ele.closest(`[${DATA_CSLP_ATTR_SELECTOR}]`);\n while (curr) {\n const cslp = curr.getAttribute(DATA_CSLP_ATTR_SELECTOR);\n if (!isValidCslp(cslp)) {\n curr = curr.parentElement?.closest(`[${DATA_CSLP_ATTR_SELECTOR}]`);\n continue;\n }\n const entryPrefix = getPrefix(cslp);\n const hasSamePrevPrefix = getPrefix(cslpSet.at(0) || \"\").startsWith(\n entryPrefix\n );\n if (!hasSamePrevPrefix) {\n cslpSet.unshift(cslp);\n }\n curr = curr.parentElement?.closest(`[${DATA_CSLP_ATTR_SELECTOR}]`);\n }\n return cslpSet.filter(isValidCslp).map((cslp) => extractDetailsFromCslp(cslp));\n}\n"],"mappings":";;;AAEA,SAAS,wBAAwB,mBAAmB;AACpD,SAAS,+BAA+B;AASjC,SAAS,mBACZ,OACyC;AACzC,QAAM,gBAAgB,MAAM;AAC5B,MAAI,CAAC,eAAe;AAChB;AAAA,EACJ;AACA,QAAM,kBAAkB,cAAc,QAAQ,aAAa;AAE3D,MAAI,CAAC,iBAAiB;AAClB;AAAA,EACJ;AACA,QAAM,WAAW,gBAAgB,aAAa,WAAW;AACzD,MAAI,CAAC,YAAY,QAAQ,GAAG;AACxB;AAAA,EACJ;AACA,QAAM,gBAAgB,uBAAuB,QAAQ;AAErD,SAAO;AAAA,IACH;AAAA,IACA;AAAA,IACA;AAAA,EACJ;AACJ;AAEA,SAAS,UAAU,MAAsB;AACrC,MAAI;AACJ,MAAI,KAAK,WAAW,KAAK,GAAG;AAExB,UAAM,gBAAgB,KAAK,MAAM,GAAG,EAAE,CAAC;AACvC,UAAM,mBAAmB,cAAc,MAAM,GAAG,EAAE,CAAC;AACnD,UAAM,OAAO,cAAc,MAAM,GAAG,EAAE,CAAC,EAAE,MAAM,GAAG,EAAE,CAAC;AACrD,UAAM,SAAS,cAAc,MAAM,GAAG,EAAE,CAAC;AACzC,aAAS,GAAG,gBAAgB,IAAI,IAAI,IAAI,MAAM;AAAA,EAClD,OAAO;AACH,aAAS;AAAA,EACb;AACA,SAAO,OAAO,MAAM,GAAG,EAAE,MAAM,GAAG,CAAC,EAAE,KAAK,GAAG;AACjD;AAEO,SAAS,gBAAgB,KAA0B;AApD1D;AAqDI,QAAM,UAAoB,CAAC;AAC3B,MAAI,OAAY,IAAI,QAAQ,IAAI,uBAAuB,GAAG;AAC1D,SAAO,MAAM;AACT,UAAM,OAAO,KAAK,aAAa,uBAAuB;AACtD,QAAI,CAAC,YAAY,IAAI,GAAG;AACpB,cAAO,UAAK,kBAAL,mBAAoB,QAAQ,IAAI,uBAAuB;AAC9D;AAAA,IACJ;AACA,UAAM,cAAc,UAAU,IAAI;AAClC,UAAM,oBAAoB,UAAU,QAAQ,GAAG,CAAC,KAAK,EAAE,EAAE;AAAA,MACrD;AAAA,IACJ;AACA,QAAI,CAAC,mBAAmB;AACpB,cAAQ,QAAQ,IAAI;AAAA,IACxB;AACA,YAAO,UAAK,kBAAL,mBAAoB,QAAQ,IAAI,uBAAuB;AAAA,EAClE;AACA,SAAO,QAAQ,OAAO,WAAW,EAAE,IAAI,CAAC,SAAS,uBAAuB,IAAI,CAAC;AACjF;","names":[]}
|
|
@@ -31,7 +31,7 @@ function getEntryIdentifiersInCurrentPage() {
|
|
|
31
31
|
const uniqueEntriesMap = /* @__PURE__ */ new Map();
|
|
32
32
|
elementsWithCslp.forEach((element) => {
|
|
33
33
|
const cslpValue = element.getAttribute("data-cslp");
|
|
34
|
-
if (!cslpValue) return;
|
|
34
|
+
if (!(0, import_cslpdata.isValidCslp)(cslpValue)) return;
|
|
35
35
|
const cslpData = (0, import_cslpdata.extractDetailsFromCslp)(cslpValue);
|
|
36
36
|
uniqueEntriesMap.set(
|
|
37
37
|
cslpData.entry_uid,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/visualBuilder/utils/getEntryIdentifiersInCurrentPage.ts"],"sourcesContent":["import { extractDetailsFromCslp } from \"../../cslp/cslpdata\";\n\ntype EntryIdentifiers = {\n entriesInCurrentPage: {\n entryUid: string;\n contentTypeUid: string;\n locale: string;\n }[];\n}\n\nexport function getEntryIdentifiersInCurrentPage(): EntryIdentifiers {\n const elementsWithCslp = Array.from(\n document.querySelectorAll(\"[data-cslp]\")\n );\n const uniqueEntriesMap = new Map<string, { entryUid: string, contentTypeUid: string, locale: string}>();\n elementsWithCslp.forEach((element) => {\n const cslpValue = element.getAttribute(\"data-cslp\");\n if (!cslpValue) return;\n const cslpData = extractDetailsFromCslp(cslpValue);\n uniqueEntriesMap.set(cslpData.entry_uid, \n { \n entryUid: cslpData.entry_uid, \n contentTypeUid: cslpData.content_type_uid, \n locale: cslpData.locale \n }\n );\n });\n \n const uniqueEntriesArray = Array.from(uniqueEntriesMap.values());\n\n return {\n entriesInCurrentPage: uniqueEntriesArray,\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,
|
|
1
|
+
{"version":3,"sources":["../../../../src/visualBuilder/utils/getEntryIdentifiersInCurrentPage.ts"],"sourcesContent":["import { extractDetailsFromCslp, isValidCslp } from \"../../cslp/cslpdata\";\n\ntype EntryIdentifiers = {\n entriesInCurrentPage: {\n entryUid: string;\n contentTypeUid: string;\n locale: string;\n }[];\n}\n\nexport function getEntryIdentifiersInCurrentPage(): EntryIdentifiers {\n const elementsWithCslp = Array.from(\n document.querySelectorAll(\"[data-cslp]\")\n );\n const uniqueEntriesMap = new Map<string, { entryUid: string, contentTypeUid: string, locale: string}>();\n elementsWithCslp.forEach((element) => {\n const cslpValue = element.getAttribute(\"data-cslp\");\n if (!isValidCslp(cslpValue)) return;\n const cslpData = extractDetailsFromCslp(cslpValue);\n uniqueEntriesMap.set(cslpData.entry_uid, \n { \n entryUid: cslpData.entry_uid, \n contentTypeUid: cslpData.content_type_uid, \n locale: cslpData.locale \n }\n );\n });\n \n const uniqueEntriesArray = Array.from(uniqueEntriesMap.values());\n\n return {\n entriesInCurrentPage: uniqueEntriesArray,\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sBAAoD;AAU7C,SAAS,mCAAqD;AACjE,QAAM,mBAAmB,MAAM;AAAA,IAC3B,SAAS,iBAAiB,aAAa;AAAA,EAC3C;AACA,QAAM,mBAAmB,oBAAI,IAAyE;AACtG,mBAAiB,QAAQ,CAAC,YAAY;AAClC,UAAM,YAAY,QAAQ,aAAa,WAAW;AAClD,QAAI,KAAC,6BAAY,SAAS,EAAG;AAC7B,UAAM,eAAW,wCAAuB,SAAS;AACjD,qBAAiB;AAAA,MAAI,SAAS;AAAA,MAC1B;AAAA,QACI,UAAU,SAAS;AAAA,QACnB,gBAAgB,SAAS;AAAA,QACzB,QAAQ,SAAS;AAAA,MACrB;AAAA,IACJ;AAAA,EACJ,CAAC;AAED,QAAM,qBAAqB,MAAM,KAAK,iBAAiB,OAAO,CAAC;AAE/D,SAAO;AAAA,IACH,sBAAsB;AAAA,EAC1B;AACJ;","names":[]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import "../../chunk-5WRI5ZAA.js";
|
|
2
2
|
|
|
3
3
|
// src/visualBuilder/utils/getEntryIdentifiersInCurrentPage.ts
|
|
4
|
-
import { extractDetailsFromCslp } from "../../cslp/cslpdata.js";
|
|
4
|
+
import { extractDetailsFromCslp, isValidCslp } from "../../cslp/cslpdata.js";
|
|
5
5
|
function getEntryIdentifiersInCurrentPage() {
|
|
6
6
|
const elementsWithCslp = Array.from(
|
|
7
7
|
document.querySelectorAll("[data-cslp]")
|
|
@@ -9,7 +9,7 @@ function getEntryIdentifiersInCurrentPage() {
|
|
|
9
9
|
const uniqueEntriesMap = /* @__PURE__ */ new Map();
|
|
10
10
|
elementsWithCslp.forEach((element) => {
|
|
11
11
|
const cslpValue = element.getAttribute("data-cslp");
|
|
12
|
-
if (!cslpValue) return;
|
|
12
|
+
if (!isValidCslp(cslpValue)) return;
|
|
13
13
|
const cslpData = extractDetailsFromCslp(cslpValue);
|
|
14
14
|
uniqueEntriesMap.set(
|
|
15
15
|
cslpData.entry_uid,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/visualBuilder/utils/getEntryIdentifiersInCurrentPage.ts"],"sourcesContent":["import { extractDetailsFromCslp } from \"../../cslp/cslpdata\";\n\ntype EntryIdentifiers = {\n entriesInCurrentPage: {\n entryUid: string;\n contentTypeUid: string;\n locale: string;\n }[];\n}\n\nexport function getEntryIdentifiersInCurrentPage(): EntryIdentifiers {\n const elementsWithCslp = Array.from(\n document.querySelectorAll(\"[data-cslp]\")\n );\n const uniqueEntriesMap = new Map<string, { entryUid: string, contentTypeUid: string, locale: string}>();\n elementsWithCslp.forEach((element) => {\n const cslpValue = element.getAttribute(\"data-cslp\");\n if (!cslpValue) return;\n const cslpData = extractDetailsFromCslp(cslpValue);\n uniqueEntriesMap.set(cslpData.entry_uid, \n { \n entryUid: cslpData.entry_uid, \n contentTypeUid: cslpData.content_type_uid, \n locale: cslpData.locale \n }\n );\n });\n \n const uniqueEntriesArray = Array.from(uniqueEntriesMap.values());\n\n return {\n entriesInCurrentPage: uniqueEntriesArray,\n };\n}\n"],"mappings":";;;AAAA,SAAS,
|
|
1
|
+
{"version":3,"sources":["../../../../src/visualBuilder/utils/getEntryIdentifiersInCurrentPage.ts"],"sourcesContent":["import { extractDetailsFromCslp, isValidCslp } from \"../../cslp/cslpdata\";\n\ntype EntryIdentifiers = {\n entriesInCurrentPage: {\n entryUid: string;\n contentTypeUid: string;\n locale: string;\n }[];\n}\n\nexport function getEntryIdentifiersInCurrentPage(): EntryIdentifiers {\n const elementsWithCslp = Array.from(\n document.querySelectorAll(\"[data-cslp]\")\n );\n const uniqueEntriesMap = new Map<string, { entryUid: string, contentTypeUid: string, locale: string}>();\n elementsWithCslp.forEach((element) => {\n const cslpValue = element.getAttribute(\"data-cslp\");\n if (!isValidCslp(cslpValue)) return;\n const cslpData = extractDetailsFromCslp(cslpValue);\n uniqueEntriesMap.set(cslpData.entry_uid, \n { \n entryUid: cslpData.entry_uid, \n contentTypeUid: cslpData.content_type_uid, \n locale: cslpData.locale \n }\n );\n });\n \n const uniqueEntriesArray = Array.from(uniqueEntriesMap.values());\n\n return {\n entriesInCurrentPage: uniqueEntriesArray,\n };\n}\n"],"mappings":";;;AAAA,SAAS,wBAAwB,mBAAmB;AAU7C,SAAS,mCAAqD;AACjE,QAAM,mBAAmB,MAAM;AAAA,IAC3B,SAAS,iBAAiB,aAAa;AAAA,EAC3C;AACA,QAAM,mBAAmB,oBAAI,IAAyE;AACtG,mBAAiB,QAAQ,CAAC,YAAY;AAClC,UAAM,YAAY,QAAQ,aAAa,WAAW;AAClD,QAAI,CAAC,YAAY,SAAS,EAAG;AAC7B,UAAM,WAAW,uBAAuB,SAAS;AACjD,qBAAiB;AAAA,MAAI,SAAS;AAAA,MAC1B;AAAA,QACI,UAAU,SAAS;AAAA,QACnB,gBAAgB,SAAS;AAAA,QACzB,QAAQ,SAAS;AAAA,MACrB;AAAA,IACJ;AAAA,EACJ,CAAC;AAED,QAAM,qBAAqB,MAAM,KAAK,iBAAiB,OAAO,CAAC;AAE/D,SAAO;AAAA,IACH,sBAAsB;AAAA,EAC1B;AACJ;","names":[]}
|
|
@@ -51,7 +51,7 @@ function getVisualBuilderRedirectionUrl() {
|
|
|
51
51
|
let localeToUse = locale;
|
|
52
52
|
if (elementWithDataCslp) {
|
|
53
53
|
const cslpData = elementWithDataCslp.getAttribute("data-cslp");
|
|
54
|
-
if (cslpData) {
|
|
54
|
+
if ((0, import_cslp.isValidCslp)(cslpData)) {
|
|
55
55
|
const { locale: cslpLocale } = (0, import_cslp.extractDetailsFromCslp)(cslpData);
|
|
56
56
|
localeToUse = cslpLocale;
|
|
57
57
|
}
|
|
@@ -60,7 +60,7 @@ function getVisualBuilderRedirectionUrl() {
|
|
|
60
60
|
searchParams.set("locale", localeToUse);
|
|
61
61
|
}
|
|
62
62
|
const completeURL = new URL(
|
|
63
|
-
`/#!/stack/${apiKey}/visual-
|
|
63
|
+
`/#!/stack/${apiKey}/visual-editor?${searchParams.toString()}`,
|
|
64
64
|
appUrl
|
|
65
65
|
);
|
|
66
66
|
return completeURL;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/visualBuilder/utils/getVisualBuilderRedirectionUrl.ts"],"sourcesContent":["import Config from \"../../configManager/configManager\";\nimport { extractDetailsFromCslp } from \"../../cslp\";\n\n/**\n * Returns the redirection URL for the Visual builder.\n * @returns {URL} The redirection URL.\n */\nexport default function getVisualBuilderRedirectionUrl(): URL {\n const { stackDetails, clientUrlParams } = Config.get();\n const { branch, apiKey, environment, locale } = stackDetails;\n const { url: appUrl } = clientUrlParams;\n\n const searchParams = new URLSearchParams();\n if (branch) {\n searchParams.set(\"branch\", branch);\n }\n if (environment) {\n searchParams.set(\"environment\", environment);\n }\n\n searchParams.set(\"target-url\", window.location.href);\n\n // get the locale from the data cslp attribute\n const elementWithDataCslp = document.querySelector(`[data-cslp]`);\n let localeToUse = locale;\n\n if (elementWithDataCslp) {\n const cslpData = elementWithDataCslp.getAttribute(\"data-cslp\");\n if (cslpData) {\n const { locale: cslpLocale } = extractDetailsFromCslp(cslpData);\n localeToUse = cslpLocale;\n }\n }\n\n if (localeToUse) {\n searchParams.set(\"locale\", localeToUse);\n }\n\n const completeURL = new URL(\n `/#!/stack/${apiKey}/visual-
|
|
1
|
+
{"version":3,"sources":["../../../../src/visualBuilder/utils/getVisualBuilderRedirectionUrl.ts"],"sourcesContent":["import Config from \"../../configManager/configManager\";\nimport { extractDetailsFromCslp, isValidCslp } from \"../../cslp\";\n\n/**\n * Returns the redirection URL for the Visual builder.\n * @returns {URL} The redirection URL.\n */\nexport default function getVisualBuilderRedirectionUrl(): URL {\n const { stackDetails, clientUrlParams } = Config.get();\n const { branch, apiKey, environment, locale } = stackDetails;\n const { url: appUrl } = clientUrlParams;\n\n const searchParams = new URLSearchParams();\n if (branch) {\n searchParams.set(\"branch\", branch);\n }\n if (environment) {\n searchParams.set(\"environment\", environment);\n }\n\n searchParams.set(\"target-url\", window.location.href);\n\n // get the locale from the data cslp attribute\n const elementWithDataCslp = document.querySelector(`[data-cslp]`);\n let localeToUse = locale;\n\n if (elementWithDataCslp) {\n const cslpData = elementWithDataCslp.getAttribute(\"data-cslp\");\n if (isValidCslp(cslpData)) {\n const { locale: cslpLocale } = extractDetailsFromCslp(cslpData);\n localeToUse = cslpLocale;\n }\n }\n\n if (localeToUse) {\n searchParams.set(\"locale\", localeToUse);\n }\n\n const completeURL = new URL(\n `/#!/stack/${apiKey}/visual-editor?${searchParams.toString()}`,\n appUrl\n );\n return completeURL;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,2BAAmB;AACnB,kBAAoD;AAMrC,SAAR,iCAAuD;AAC1D,QAAM,EAAE,cAAc,gBAAgB,IAAI,qBAAAA,QAAO,IAAI;AACrD,QAAM,EAAE,QAAQ,QAAQ,aAAa,OAAO,IAAI;AAChD,QAAM,EAAE,KAAK,OAAO,IAAI;AAExB,QAAM,eAAe,IAAI,gBAAgB;AACzC,MAAI,QAAQ;AACR,iBAAa,IAAI,UAAU,MAAM;AAAA,EACrC;AACA,MAAI,aAAa;AACb,iBAAa,IAAI,eAAe,WAAW;AAAA,EAC/C;AAEA,eAAa,IAAI,cAAc,OAAO,SAAS,IAAI;AAGnD,QAAM,sBAAsB,SAAS,cAAc,aAAa;AAChE,MAAI,cAAc;AAElB,MAAI,qBAAqB;AACrB,UAAM,WAAW,oBAAoB,aAAa,WAAW;AAC7D,YAAI,yBAAY,QAAQ,GAAG;AACvB,YAAM,EAAE,QAAQ,WAAW,QAAI,oCAAuB,QAAQ;AAC9D,oBAAc;AAAA,IAClB;AAAA,EACJ;AAEA,MAAI,aAAa;AACb,iBAAa,IAAI,UAAU,WAAW;AAAA,EAC1C;AAEA,QAAM,cAAc,IAAI;AAAA,IACpB,aAAa,MAAM,kBAAkB,aAAa,SAAS,CAAC;AAAA,IAC5D;AAAA,EACJ;AACA,SAAO;AACX;","names":["Config"]}
|
|
@@ -2,7 +2,7 @@ import "../../chunk-5WRI5ZAA.js";
|
|
|
2
2
|
|
|
3
3
|
// src/visualBuilder/utils/getVisualBuilderRedirectionUrl.ts
|
|
4
4
|
import Config from "../../configManager/configManager.js";
|
|
5
|
-
import { extractDetailsFromCslp } from "../../cslp/index.js";
|
|
5
|
+
import { extractDetailsFromCslp, isValidCslp } from "../../cslp/index.js";
|
|
6
6
|
function getVisualBuilderRedirectionUrl() {
|
|
7
7
|
const { stackDetails, clientUrlParams } = Config.get();
|
|
8
8
|
const { branch, apiKey, environment, locale } = stackDetails;
|
|
@@ -19,7 +19,7 @@ function getVisualBuilderRedirectionUrl() {
|
|
|
19
19
|
let localeToUse = locale;
|
|
20
20
|
if (elementWithDataCslp) {
|
|
21
21
|
const cslpData = elementWithDataCslp.getAttribute("data-cslp");
|
|
22
|
-
if (cslpData) {
|
|
22
|
+
if (isValidCslp(cslpData)) {
|
|
23
23
|
const { locale: cslpLocale } = extractDetailsFromCslp(cslpData);
|
|
24
24
|
localeToUse = cslpLocale;
|
|
25
25
|
}
|
|
@@ -28,7 +28,7 @@ function getVisualBuilderRedirectionUrl() {
|
|
|
28
28
|
searchParams.set("locale", localeToUse);
|
|
29
29
|
}
|
|
30
30
|
const completeURL = new URL(
|
|
31
|
-
`/#!/stack/${apiKey}/visual-
|
|
31
|
+
`/#!/stack/${apiKey}/visual-editor?${searchParams.toString()}`,
|
|
32
32
|
appUrl
|
|
33
33
|
);
|
|
34
34
|
return completeURL;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/visualBuilder/utils/getVisualBuilderRedirectionUrl.ts"],"sourcesContent":["import Config from \"../../configManager/configManager\";\nimport { extractDetailsFromCslp } from \"../../cslp\";\n\n/**\n * Returns the redirection URL for the Visual builder.\n * @returns {URL} The redirection URL.\n */\nexport default function getVisualBuilderRedirectionUrl(): URL {\n const { stackDetails, clientUrlParams } = Config.get();\n const { branch, apiKey, environment, locale } = stackDetails;\n const { url: appUrl } = clientUrlParams;\n\n const searchParams = new URLSearchParams();\n if (branch) {\n searchParams.set(\"branch\", branch);\n }\n if (environment) {\n searchParams.set(\"environment\", environment);\n }\n\n searchParams.set(\"target-url\", window.location.href);\n\n // get the locale from the data cslp attribute\n const elementWithDataCslp = document.querySelector(`[data-cslp]`);\n let localeToUse = locale;\n\n if (elementWithDataCslp) {\n const cslpData = elementWithDataCslp.getAttribute(\"data-cslp\");\n if (cslpData) {\n const { locale: cslpLocale } = extractDetailsFromCslp(cslpData);\n localeToUse = cslpLocale;\n }\n }\n\n if (localeToUse) {\n searchParams.set(\"locale\", localeToUse);\n }\n\n const completeURL = new URL(\n `/#!/stack/${apiKey}/visual-
|
|
1
|
+
{"version":3,"sources":["../../../../src/visualBuilder/utils/getVisualBuilderRedirectionUrl.ts"],"sourcesContent":["import Config from \"../../configManager/configManager\";\nimport { extractDetailsFromCslp, isValidCslp } from \"../../cslp\";\n\n/**\n * Returns the redirection URL for the Visual builder.\n * @returns {URL} The redirection URL.\n */\nexport default function getVisualBuilderRedirectionUrl(): URL {\n const { stackDetails, clientUrlParams } = Config.get();\n const { branch, apiKey, environment, locale } = stackDetails;\n const { url: appUrl } = clientUrlParams;\n\n const searchParams = new URLSearchParams();\n if (branch) {\n searchParams.set(\"branch\", branch);\n }\n if (environment) {\n searchParams.set(\"environment\", environment);\n }\n\n searchParams.set(\"target-url\", window.location.href);\n\n // get the locale from the data cslp attribute\n const elementWithDataCslp = document.querySelector(`[data-cslp]`);\n let localeToUse = locale;\n\n if (elementWithDataCslp) {\n const cslpData = elementWithDataCslp.getAttribute(\"data-cslp\");\n if (isValidCslp(cslpData)) {\n const { locale: cslpLocale } = extractDetailsFromCslp(cslpData);\n localeToUse = cslpLocale;\n }\n }\n\n if (localeToUse) {\n searchParams.set(\"locale\", localeToUse);\n }\n\n const completeURL = new URL(\n `/#!/stack/${apiKey}/visual-editor?${searchParams.toString()}`,\n appUrl\n );\n return completeURL;\n}\n"],"mappings":";;;AAAA,OAAO,YAAY;AACnB,SAAS,wBAAwB,mBAAmB;AAMrC,SAAR,iCAAuD;AAC1D,QAAM,EAAE,cAAc,gBAAgB,IAAI,OAAO,IAAI;AACrD,QAAM,EAAE,QAAQ,QAAQ,aAAa,OAAO,IAAI;AAChD,QAAM,EAAE,KAAK,OAAO,IAAI;AAExB,QAAM,eAAe,IAAI,gBAAgB;AACzC,MAAI,QAAQ;AACR,iBAAa,IAAI,UAAU,MAAM;AAAA,EACrC;AACA,MAAI,aAAa;AACb,iBAAa,IAAI,eAAe,WAAW;AAAA,EAC/C;AAEA,eAAa,IAAI,cAAc,OAAO,SAAS,IAAI;AAGnD,QAAM,sBAAsB,SAAS,cAAc,aAAa;AAChE,MAAI,cAAc;AAElB,MAAI,qBAAqB;AACrB,UAAM,WAAW,oBAAoB,aAAa,WAAW;AAC7D,QAAI,YAAY,QAAQ,GAAG;AACvB,YAAM,EAAE,QAAQ,WAAW,IAAI,uBAAuB,QAAQ;AAC9D,oBAAc;AAAA,IAClB;AAAA,EACJ;AAEA,MAAI,aAAa;AACb,iBAAa,IAAI,UAAU,WAAW;AAAA,EAC1C;AAEA,QAAM,cAAc,IAAI;AAAA,IACpB,aAAa,MAAM,kBAAkB,aAAa,SAAS,CAAC;AAAA,IAC5D;AAAA,EACJ;AACA,SAAO;AACX;","names":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/visualBuilder/utils/getWorkflowStageDetails.ts"],"sourcesContent":["import { VisualBuilderPostMessageEvents } from \"./types/postMessage.types\";\nimport visualBuilderPostMessage from \"./visualBuilderPostMessage\";\n\nexport async function getWorkflowStageDetails({\n entryUid,\n contentTypeUid,\n locale,\n variantUid,\n}: {\n entryUid: string;\n contentTypeUid: string;\n locale: string;\n variantUid?: string | undefined;\n}): Promise<WorkflowStageDetails> {\n try {\n const result =\n await visualBuilderPostMessage?.send<WorkflowStageDetails>(\n VisualBuilderPostMessageEvents.GET_WORKFLOW_STAGE_DETAILS,\n {\n entryUid,\n contentTypeUid,\n locale,\n variantUid,\n }\n );\n if (result) {\n return result;\n }\n } catch (e) {\n console.debug(\n \"[Visual Builder] Error fetching workflow stage details\",\n e\n );\n }\n // allow editing when things go wrong,\n return {\n stage: {\n name: \"Unknown\",\n },\n permissions: {\n entry: {\n update: true,\n },\n },\n };\n}\n\nexport interface WorkflowStageDetails {\n stage:\n | {\n name: string;\n }\n | undefined;\n permissions: {\n entry: {\n update: boolean;\n };\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,yBAA+C;AAC/C,sCAAqC;AAErC,eAAsB,wBAAwB;AAAA,EAC1C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACJ,GAKkC;AAblC;AAcI,MAAI;AACA,UAAM,SACF,QAAM,qCAAAA,YAAA,mBAA0B;AAAA,MAC5B,kDAA+B;AAAA,MAC/B;AAAA,QACI;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACJ;AAAA;AAER,QAAI,QAAQ;AACR,aAAO;AAAA,IACX;AAAA,EACJ,SAAS,GAAG;AACR,YAAQ;AAAA,MACJ;AAAA,MACA;AAAA,IACJ;AAAA,EACJ;AAEA,SAAO;AAAA,IACH,OAAO;AAAA,MACH,MAAM;AAAA,IACV;AAAA,IACA,aAAa;AAAA,MACT,OAAO;AAAA,QACH,QAAQ;AAAA,MACZ;AAAA,IACJ;AAAA,EACJ;AACJ;","names":["visualBuilderPostMessage"]}
|
|
1
|
+
{"version":3,"sources":["../../../../src/visualBuilder/utils/getWorkflowStageDetails.ts"],"sourcesContent":["import { VisualBuilderPostMessageEvents } from \"./types/postMessage.types\";\nimport visualBuilderPostMessage from \"./visualBuilderPostMessage\";\n\nexport async function getWorkflowStageDetails({\n entryUid,\n contentTypeUid,\n locale,\n variantUid,\n}: {\n entryUid: string;\n contentTypeUid: string;\n locale: string;\n variantUid?: string | undefined;\n}): Promise<WorkflowStageDetails> {\n try {\n const result =\n await visualBuilderPostMessage?.send<WorkflowStageDetails>(\n VisualBuilderPostMessageEvents.GET_WORKFLOW_STAGE_DETAILS,\n {\n entryUid,\n contentTypeUid,\n locale,\n variantUid,\n }\n );\n if (result) {\n return result;\n }\n } catch (e) {\n console.debug(\n \"[Visual Builder] Error fetching workflow stage details\",\n e\n );\n }\n // allow editing when things go wrong,\n return {\n stage: {\n name: \"Unknown\",\n },\n permissions: {\n entry: {\n update: true,\n },\n },\n requestEditAccess: {\n canRequest: false,\n hasPending: false,\n },\n };\n}\n\n/** Mirrors visual-editor GET_WORKFLOW_STAGE_DETAILS payload (QuickForm / canvas alignment). */\nexport interface WorkflowStageRequestEditAccess {\n canRequest: boolean;\n hasPending: boolean;\n}\n\nexport interface WorkflowStageDetails {\n stage:\n | {\n name: string;\n }\n | undefined;\n permissions: {\n entry: {\n update: boolean;\n };\n };\n /** Present when returned by visual-editor; omitted in legacy SDK-only fallbacks. */\n requestEditAccess?: WorkflowStageRequestEditAccess;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,yBAA+C;AAC/C,sCAAqC;AAErC,eAAsB,wBAAwB;AAAA,EAC1C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACJ,GAKkC;AAblC;AAcI,MAAI;AACA,UAAM,SACF,QAAM,qCAAAA,YAAA,mBAA0B;AAAA,MAC5B,kDAA+B;AAAA,MAC/B;AAAA,QACI;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACJ;AAAA;AAER,QAAI,QAAQ;AACR,aAAO;AAAA,IACX;AAAA,EACJ,SAAS,GAAG;AACR,YAAQ;AAAA,MACJ;AAAA,MACA;AAAA,IACJ;AAAA,EACJ;AAEA,SAAO;AAAA,IACH,OAAO;AAAA,MACH,MAAM;AAAA,IACV;AAAA,IACA,aAAa;AAAA,MACT,OAAO;AAAA,QACH,QAAQ;AAAA,MACZ;AAAA,IACJ;AAAA,IACA,mBAAmB;AAAA,MACf,YAAY;AAAA,MACZ,YAAY;AAAA,IAChB;AAAA,EACJ;AACJ;","names":["visualBuilderPostMessage"]}
|
|
@@ -4,6 +4,11 @@ declare function getWorkflowStageDetails({ entryUid, contentTypeUid, locale, var
|
|
|
4
4
|
locale: string;
|
|
5
5
|
variantUid?: string | undefined;
|
|
6
6
|
}): Promise<WorkflowStageDetails>;
|
|
7
|
+
/** Mirrors visual-editor GET_WORKFLOW_STAGE_DETAILS payload (QuickForm / canvas alignment). */
|
|
8
|
+
interface WorkflowStageRequestEditAccess {
|
|
9
|
+
canRequest: boolean;
|
|
10
|
+
hasPending: boolean;
|
|
11
|
+
}
|
|
7
12
|
interface WorkflowStageDetails {
|
|
8
13
|
stage: {
|
|
9
14
|
name: string;
|
|
@@ -13,6 +18,8 @@ interface WorkflowStageDetails {
|
|
|
13
18
|
update: boolean;
|
|
14
19
|
};
|
|
15
20
|
};
|
|
21
|
+
/** Present when returned by visual-editor; omitted in legacy SDK-only fallbacks. */
|
|
22
|
+
requestEditAccess?: WorkflowStageRequestEditAccess;
|
|
16
23
|
}
|
|
17
24
|
|
|
18
|
-
export { type WorkflowStageDetails, getWorkflowStageDetails };
|
|
25
|
+
export { type WorkflowStageDetails, type WorkflowStageRequestEditAccess, getWorkflowStageDetails };
|
|
@@ -4,6 +4,11 @@ declare function getWorkflowStageDetails({ entryUid, contentTypeUid, locale, var
|
|
|
4
4
|
locale: string;
|
|
5
5
|
variantUid?: string | undefined;
|
|
6
6
|
}): Promise<WorkflowStageDetails>;
|
|
7
|
+
/** Mirrors visual-editor GET_WORKFLOW_STAGE_DETAILS payload (QuickForm / canvas alignment). */
|
|
8
|
+
interface WorkflowStageRequestEditAccess {
|
|
9
|
+
canRequest: boolean;
|
|
10
|
+
hasPending: boolean;
|
|
11
|
+
}
|
|
7
12
|
interface WorkflowStageDetails {
|
|
8
13
|
stage: {
|
|
9
14
|
name: string;
|
|
@@ -13,6 +18,8 @@ interface WorkflowStageDetails {
|
|
|
13
18
|
update: boolean;
|
|
14
19
|
};
|
|
15
20
|
};
|
|
21
|
+
/** Present when returned by visual-editor; omitted in legacy SDK-only fallbacks. */
|
|
22
|
+
requestEditAccess?: WorkflowStageRequestEditAccess;
|
|
16
23
|
}
|
|
17
24
|
|
|
18
|
-
export { type WorkflowStageDetails, getWorkflowStageDetails };
|
|
25
|
+
export { type WorkflowStageDetails, type WorkflowStageRequestEditAccess, getWorkflowStageDetails };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/visualBuilder/utils/getWorkflowStageDetails.ts"],"sourcesContent":["import { VisualBuilderPostMessageEvents } from \"./types/postMessage.types\";\nimport visualBuilderPostMessage from \"./visualBuilderPostMessage\";\n\nexport async function getWorkflowStageDetails({\n entryUid,\n contentTypeUid,\n locale,\n variantUid,\n}: {\n entryUid: string;\n contentTypeUid: string;\n locale: string;\n variantUid?: string | undefined;\n}): Promise<WorkflowStageDetails> {\n try {\n const result =\n await visualBuilderPostMessage?.send<WorkflowStageDetails>(\n VisualBuilderPostMessageEvents.GET_WORKFLOW_STAGE_DETAILS,\n {\n entryUid,\n contentTypeUid,\n locale,\n variantUid,\n }\n );\n if (result) {\n return result;\n }\n } catch (e) {\n console.debug(\n \"[Visual Builder] Error fetching workflow stage details\",\n e\n );\n }\n // allow editing when things go wrong,\n return {\n stage: {\n name: \"Unknown\",\n },\n permissions: {\n entry: {\n update: true,\n },\n },\n };\n}\n\nexport interface WorkflowStageDetails {\n stage:\n | {\n name: string;\n }\n | undefined;\n permissions: {\n entry: {\n update: boolean;\n };\n };\n}\n"],"mappings":";;;AAAA,SAAS,sCAAsC;AAC/C,OAAO,8BAA8B;AAErC,eAAsB,wBAAwB;AAAA,EAC1C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACJ,GAKkC;AAblC;AAcI,MAAI;AACA,UAAM,SACF,QAAM,qDAA0B;AAAA,MAC5B,+BAA+B;AAAA,MAC/B;AAAA,QACI;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACJ;AAAA;AAER,QAAI,QAAQ;AACR,aAAO;AAAA,IACX;AAAA,EACJ,SAAS,GAAG;AACR,YAAQ;AAAA,MACJ;AAAA,MACA;AAAA,IACJ;AAAA,EACJ;AAEA,SAAO;AAAA,IACH,OAAO;AAAA,MACH,MAAM;AAAA,IACV;AAAA,IACA,aAAa;AAAA,MACT,OAAO;AAAA,QACH,QAAQ;AAAA,MACZ;AAAA,IACJ;AAAA,EACJ;AACJ;","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../../../src/visualBuilder/utils/getWorkflowStageDetails.ts"],"sourcesContent":["import { VisualBuilderPostMessageEvents } from \"./types/postMessage.types\";\nimport visualBuilderPostMessage from \"./visualBuilderPostMessage\";\n\nexport async function getWorkflowStageDetails({\n entryUid,\n contentTypeUid,\n locale,\n variantUid,\n}: {\n entryUid: string;\n contentTypeUid: string;\n locale: string;\n variantUid?: string | undefined;\n}): Promise<WorkflowStageDetails> {\n try {\n const result =\n await visualBuilderPostMessage?.send<WorkflowStageDetails>(\n VisualBuilderPostMessageEvents.GET_WORKFLOW_STAGE_DETAILS,\n {\n entryUid,\n contentTypeUid,\n locale,\n variantUid,\n }\n );\n if (result) {\n return result;\n }\n } catch (e) {\n console.debug(\n \"[Visual Builder] Error fetching workflow stage details\",\n e\n );\n }\n // allow editing when things go wrong,\n return {\n stage: {\n name: \"Unknown\",\n },\n permissions: {\n entry: {\n update: true,\n },\n },\n requestEditAccess: {\n canRequest: false,\n hasPending: false,\n },\n };\n}\n\n/** Mirrors visual-editor GET_WORKFLOW_STAGE_DETAILS payload (QuickForm / canvas alignment). */\nexport interface WorkflowStageRequestEditAccess {\n canRequest: boolean;\n hasPending: boolean;\n}\n\nexport interface WorkflowStageDetails {\n stage:\n | {\n name: string;\n }\n | undefined;\n permissions: {\n entry: {\n update: boolean;\n };\n };\n /** Present when returned by visual-editor; omitted in legacy SDK-only fallbacks. */\n requestEditAccess?: WorkflowStageRequestEditAccess;\n}\n"],"mappings":";;;AAAA,SAAS,sCAAsC;AAC/C,OAAO,8BAA8B;AAErC,eAAsB,wBAAwB;AAAA,EAC1C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACJ,GAKkC;AAblC;AAcI,MAAI;AACA,UAAM,SACF,QAAM,qDAA0B;AAAA,MAC5B,+BAA+B;AAAA,MAC/B;AAAA,QACI;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACJ;AAAA;AAER,QAAI,QAAQ;AACR,aAAO;AAAA,IACX;AAAA,EACJ,SAAS,GAAG;AACR,YAAQ;AAAA,MACJ;AAAA,MACA;AAAA,IACJ;AAAA,EACJ;AAEA,SAAO;AAAA,IACH,OAAO;AAAA,MACH,MAAM;AAAA,IACV;AAAA,IACA,aAAa;AAAA,MACT,OAAO;AAAA,QACH,QAAQ;AAAA,MACZ;AAAA,IACJ;AAAA,IACA,mBAAmB;AAAA,MACf,YAAY;AAAA,MACZ,YAAY;AAAA,IAChB;AAAA,EACJ;AACJ;","names":[]}
|
|
@@ -52,9 +52,12 @@ var DisableReason = {
|
|
|
52
52
|
WorkflowStagePermission: ({ stageName }) => `You do not have Edit access to this entry on the '${stageName}' workflow stage`,
|
|
53
53
|
EntryUpdateRestrictedRoleAndWorkflowStage: ({
|
|
54
54
|
stageName
|
|
55
|
-
}) => `Editing is restricted for your role or by the rules for the '${stageName}' stage. Contact your admin for edit access
|
|
55
|
+
}) => `Editing is restricted for your role or by the rules for the '${stageName}' stage. Contact your admin for edit access.`,
|
|
56
|
+
WorkflowStageRequestEdit: ({ stageName }) => `You do not have the edit access to this entry on the '${stageName}' workflow stage.`,
|
|
57
|
+
WorkflowStageRequestPending: ({ stageName }) => `You do not have the edit access to this entry on the '${stageName}' workflow stage. Your request has been sent and is awaiting approval.`
|
|
56
58
|
};
|
|
57
59
|
var getDisableReason = (flags, params) => {
|
|
60
|
+
var _a;
|
|
58
61
|
if (flags.updateRestrictDueToRole) return DisableReason.ReadOnly;
|
|
59
62
|
if (flags.updateRestrictDueToNonLocalizableFields)
|
|
60
63
|
return DisableReason.LocalizedEntry;
|
|
@@ -76,8 +79,23 @@ var getDisableReason = (flags, params) => {
|
|
|
76
79
|
return DisableReason.EntryUpdateRestricted;
|
|
77
80
|
}
|
|
78
81
|
if (flags.updateRestrictDueToWorkflowStagePermission) {
|
|
82
|
+
const stageName = (params == null ? void 0 : params.stageName) ? params.stageName : "Unknown";
|
|
83
|
+
const req = (_a = params == null ? void 0 : params.entryWorkflowStageDetails) == null ? void 0 : _a.requestEditAccess;
|
|
84
|
+
const entryAllowsUpdate = (params == null ? void 0 : params.entryPermissions) == null || params.entryPermissions.update === true;
|
|
85
|
+
if (entryAllowsUpdate && !flags.updateRestrictDueToEntryUpdateRestriction && req) {
|
|
86
|
+
if (req.hasPending) {
|
|
87
|
+
return DisableReason.WorkflowStageRequestPending({
|
|
88
|
+
stageName
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
if (req.canRequest) {
|
|
92
|
+
return DisableReason.WorkflowStageRequestEdit({
|
|
93
|
+
stageName
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
}
|
|
79
97
|
return DisableReason.WorkflowStagePermission({
|
|
80
|
-
stageName
|
|
98
|
+
stageName
|
|
81
99
|
});
|
|
82
100
|
}
|
|
83
101
|
if (flags.updateRestrictDueToResolvedVariantPermissions) {
|
|
@@ -129,10 +147,27 @@ var isFieldDisabled = (fieldSchemaMap, eventFieldDetails, resolvedVariantPermiss
|
|
|
129
147
|
}
|
|
130
148
|
}
|
|
131
149
|
const isDisabled = Object.values(flags).some(Boolean);
|
|
132
|
-
const
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
150
|
+
const getDisableReasonParams = {};
|
|
151
|
+
if (((_d = entryWorkflowStageDetails == null ? void 0 : entryWorkflowStageDetails.stage) == null ? void 0 : _d.name) !== void 0) {
|
|
152
|
+
getDisableReasonParams.stageName = entryWorkflowStageDetails.stage.name;
|
|
153
|
+
}
|
|
154
|
+
if (entryWorkflowStageDetails !== void 0) {
|
|
155
|
+
getDisableReasonParams.entryWorkflowStageDetails = entryWorkflowStageDetails;
|
|
156
|
+
}
|
|
157
|
+
if (entryPermissions !== void 0) {
|
|
158
|
+
getDisableReasonParams.entryPermissions = entryPermissions;
|
|
159
|
+
}
|
|
160
|
+
const reason = getDisableReason(flags, getDisableReasonParams);
|
|
161
|
+
let workflowRequestUi;
|
|
162
|
+
if (flags.updateRestrictDueToWorkflowStagePermission && !flags.updateRestrictDueToEntryUpdateRestriction && (entryPermissions == null || entryPermissions.update === true) && (entryWorkflowStageDetails == null ? void 0 : entryWorkflowStageDetails.requestEditAccess)) {
|
|
163
|
+
const req = entryWorkflowStageDetails.requestEditAccess;
|
|
164
|
+
if (req.hasPending) {
|
|
165
|
+
workflowRequestUi = "pending";
|
|
166
|
+
} else if (req.canRequest) {
|
|
167
|
+
workflowRequestUi = "request";
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
return workflowRequestUi !== void 0 ? { isDisabled, reason, workflowRequestUi } : { isDisabled, reason };
|
|
136
171
|
};
|
|
137
172
|
// Annotate the CommonJS export names for ESM import in node:
|
|
138
173
|
0 && (module.exports = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/visualBuilder/utils/isFieldDisabled.ts"],"sourcesContent":["import Config from \"../../configManager/configManager\";\nimport { ISchemaFieldMap } from \"./types/index.types\";\nimport { VisualBuilder } from \"..\";\nimport { FieldDetails } from \"../components/FieldToolbar\";\nimport { EntryPermissions } from \"./getEntryPermissions\";\nimport { WorkflowStageDetails } from \"./getWorkflowStageDetails\";\nimport { ResolvedVariantPermissions } from \"./getResolvedVariantPermissions\";\n\nexport const DisableReason = {\n ReadOnly: \"You have only read access to this field\",\n LocalizedEntry: \"Editing this field is restricted in localized entries\",\n ResolvedVariantPermissions: \"This field does not exist in the selected variant\",\n UnlinkedVariant:\n \"This field is not editable as it is not linked to the selected variant.\",\n CanLinkVariant: \"Click here to link a variant\",\n UnderlinedAndClickableWord: \"here\",\n CannotLinkVariant: \"Contact your stack admin or owner to link it.\",\n AudienceMode:\n \"To edit an experience, open the Audience widget and click the Edit icon.\",\n DisabledVariant:\n \"This field is not editable as it doesn't match the selected variant\",\n UnlocalizedVariant: \"This field is not editable as it is not localized\",\n None: \"\",\n EntryUpdateRestricted: \"You do not have permission to edit this entry\",\n WorkflowStagePermission: ({ stageName }: { stageName: string }) =>\n `You do not have Edit access to this entry on the '${stageName}' workflow stage`,\n EntryUpdateRestrictedRoleAndWorkflowStage: ({\n stageName,\n }: {\n stageName: string;\n }) =>\n `Editing is restricted for your role or by the rules for the '${stageName}' stage. Contact your admin for edit access.`,\n} as const;\n\ninterface FieldDisableState {\n isDisabled: boolean;\n reason: string;\n}\n\nconst getDisableReason = (\n flags: Record<string, boolean>,\n params?: Record<string, any>\n) => {\n if (flags.updateRestrictDueToRole) return DisableReason.ReadOnly;\n if (flags.updateRestrictDueToNonLocalizableFields)\n return DisableReason.LocalizedEntry;\n if (flags.updateRestrictDueToUnlocalizedVariant)\n return DisableReason.UnlocalizedVariant;\n if (flags.updateRestrictDueToUnlinkVariant) {\n return flags.canLinkVariant\n ? `${DisableReason.UnlinkedVariant} ${DisableReason.CanLinkVariant} `\n : `${DisableReason.UnlinkedVariant} ${DisableReason.CannotLinkVariant}`;\n }\n if (flags.updateRestrictDueToAudienceMode)\n return DisableReason.AudienceMode;\n if (flags.updateRestrictDueToDisabledVariant)\n return DisableReason.DisabledVariant;\n if (\n flags.updateRestrictDueToEntryUpdateRestriction &&\n flags.updateRestrictDueToWorkflowStagePermission\n ) {\n return DisableReason.EntryUpdateRestrictedRoleAndWorkflowStage({\n stageName: params?.stageName ? params.stageName : \"Unknown\",\n });\n }\n if (flags.updateRestrictDueToEntryUpdateRestriction) {\n return DisableReason.EntryUpdateRestricted;\n }\n if (flags.updateRestrictDueToWorkflowStagePermission) {\n return DisableReason.WorkflowStagePermission({\n stageName: params?.stageName ? params.stageName : \"Unknown\",\n });\n }\n if(flags.updateRestrictDueToResolvedVariantPermissions) {\n return DisableReason.ResolvedVariantPermissions;\n }\n return DisableReason.None;\n};\n\nexport const isFieldDisabled = (\n fieldSchemaMap: ISchemaFieldMap,\n eventFieldDetails: FieldDetails,\n resolvedVariantPermissions?: ResolvedVariantPermissions,\n entryPermissions?: EntryPermissions,\n entryWorkflowStageDetails?: WorkflowStageDetails,\n): FieldDisableState => {\n const { editableElement, fieldMetadata } = eventFieldDetails;\n const masterLocale = Config.get().stackDetails.masterLocale || \"en-us\";\n const { locale: cmsLocale, variant } =\n VisualBuilder.VisualBuilderGlobalState.value;\n\n const flags: Record<string, boolean> = {\n updateRestrictDueToRole: Boolean(\n fieldSchemaMap?.field_metadata?.updateRestrict\n ),\n updateRestrictDueToUnlinkVariant: Boolean(\n fieldSchemaMap?.field_metadata?.isUnlinkedVariant\n ),\n canLinkVariant: Boolean(fieldSchemaMap?.field_metadata?.canLinkVariant),\n updateRestrictDueToUnlocalizedVariant: Boolean(\n variant && fieldMetadata.locale !== cmsLocale\n ),\n updateRestrictDueToNonLocalizableFields: Boolean(\n fieldSchemaMap?.non_localizable &&\n masterLocale !== fieldMetadata.locale\n ),\n updateRestrictDueToResolvedVariantPermissions: resolvedVariantPermissions ? Boolean(\n !resolvedVariantPermissions.update\n ) : false,\n updateRestrictDueToAudienceMode: false,\n updateRestrictDueToDisabledVariant: false,\n };\n\n if (entryPermissions && !entryPermissions.update) {\n flags.updateRestrictDueToEntryUpdateRestriction = true;\n }\n\n if (\n entryWorkflowStageDetails &&\n !entryWorkflowStageDetails.permissions.entry.update\n ) {\n flags.updateRestrictDueToWorkflowStagePermission = true;\n }\n\n if(VisualBuilder.VisualBuilderGlobalState.value.audienceMode\n && editableElement.classList.contains(\"visual-builder__lower-order-variant-field\")) {\n // If resolvedVariantPermissions errors out for any reason, we need to disable editing\n // for lower order (priority) variant fields with updateRestrictDueToDisabledVariant's message\n flags.updateRestrictDueToDisabledVariant = resolvedVariantPermissions ? !!resolvedVariantPermissions.error : false;\n }\n\n if (\n VisualBuilder.VisualBuilderGlobalState.value.audienceMode &&\n !editableElement.classList.contains(\"visual-builder__variant-field\") &&\n !editableElement.classList.contains(\"visual-builder__base-field\")\n ) {\n if (\n editableElement.classList.contains(\n \"visual-builder__disabled-variant-field\"\n )\n ) {\n flags.updateRestrictDueToDisabledVariant = true;\n } else {\n flags.updateRestrictDueToAudienceMode = true;\n }\n }\n\n const isDisabled = Object.values(flags).some(Boolean);\n const reason = getDisableReason(flags, {\n stageName: entryWorkflowStageDetails?.stage?.name,\n });\n\n return { isDisabled, reason };\n};\n"],"mappings":"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","names":["Config"]}
|
|
1
|
+
{"version":3,"sources":["../../../../src/visualBuilder/utils/isFieldDisabled.ts"],"sourcesContent":["import Config from \"../../configManager/configManager\";\nimport { ISchemaFieldMap } from \"./types/index.types\";\nimport { VisualBuilder } from \"..\";\nimport { FieldDetails } from \"../components/FieldToolbar\";\nimport { EntryPermissions } from \"./getEntryPermissions\";\nimport { WorkflowStageDetails } from \"./getWorkflowStageDetails\";\nimport { ResolvedVariantPermissions } from \"./getResolvedVariantPermissions\";\n\nexport const DisableReason = {\n ReadOnly: \"You have only read access to this field\",\n LocalizedEntry: \"Editing this field is restricted in localized entries\",\n ResolvedVariantPermissions: \"This field does not exist in the selected variant\",\n UnlinkedVariant:\n \"This field is not editable as it is not linked to the selected variant.\",\n CanLinkVariant: \"Click here to link a variant\",\n UnderlinedAndClickableWord: \"here\",\n CannotLinkVariant: \"Contact your stack admin or owner to link it.\",\n AudienceMode:\n \"To edit an experience, open the Audience widget and click the Edit icon.\",\n DisabledVariant:\n \"This field is not editable as it doesn't match the selected variant\",\n UnlocalizedVariant: \"This field is not editable as it is not localized\",\n None: \"\",\n EntryUpdateRestricted: \"You do not have permission to edit this entry\",\n WorkflowStagePermission: ({ stageName }: { stageName: string }) =>\n `You do not have Edit access to this entry on the '${stageName}' workflow stage`,\n EntryUpdateRestrictedRoleAndWorkflowStage: ({\n stageName,\n }: {\n stageName: string;\n }) =>\n `Editing is restricted for your role or by the rules for the '${stageName}' stage. Contact your admin for edit access.`,\n WorkflowStageRequestEdit: ({ stageName }: { stageName: string }) =>\n `You do not have the edit access to this entry on the '${stageName}' workflow stage.`,\n WorkflowStageRequestPending: ({ stageName }: { stageName: string }) =>\n `You do not have the edit access to this entry on the '${stageName}' workflow stage. Your request has been sent and is awaiting approval.`,\n} as const;\n\nexport interface FieldDisableState {\n isDisabled: boolean;\n reason: string;\n /** Canvas: workflow stage lock with request-edit UX (see fieldLabelWrapper). */\n workflowRequestUi?: \"request\" | \"pending\";\n}\n\nconst getDisableReason = (\n flags: Record<string, boolean>,\n params?: {\n stageName?: string;\n entryWorkflowStageDetails?: WorkflowStageDetails;\n entryPermissions?: EntryPermissions;\n },\n) => {\n if (flags.updateRestrictDueToRole) return DisableReason.ReadOnly;\n if (flags.updateRestrictDueToNonLocalizableFields)\n return DisableReason.LocalizedEntry;\n if (flags.updateRestrictDueToUnlocalizedVariant)\n return DisableReason.UnlocalizedVariant;\n if (flags.updateRestrictDueToUnlinkVariant) {\n return flags.canLinkVariant\n ? `${DisableReason.UnlinkedVariant} ${DisableReason.CanLinkVariant} `\n : `${DisableReason.UnlinkedVariant} ${DisableReason.CannotLinkVariant}`;\n }\n if (flags.updateRestrictDueToAudienceMode)\n return DisableReason.AudienceMode;\n if (flags.updateRestrictDueToDisabledVariant)\n return DisableReason.DisabledVariant;\n if (\n flags.updateRestrictDueToEntryUpdateRestriction &&\n flags.updateRestrictDueToWorkflowStagePermission\n ) {\n return DisableReason.EntryUpdateRestrictedRoleAndWorkflowStage({\n stageName: params?.stageName ? params.stageName : \"Unknown\",\n });\n }\n if (flags.updateRestrictDueToEntryUpdateRestriction) {\n return DisableReason.EntryUpdateRestricted;\n }\n if (flags.updateRestrictDueToWorkflowStagePermission) {\n const stageName = params?.stageName ? params.stageName : \"Unknown\";\n const req = params?.entryWorkflowStageDetails?.requestEditAccess;\n const entryAllowsUpdate =\n params?.entryPermissions == null ||\n params.entryPermissions.update === true;\n if (\n entryAllowsUpdate &&\n !flags.updateRestrictDueToEntryUpdateRestriction &&\n req\n ) {\n if (req.hasPending) {\n return DisableReason.WorkflowStageRequestPending({\n stageName,\n });\n }\n if (req.canRequest) {\n return DisableReason.WorkflowStageRequestEdit({\n stageName,\n });\n }\n }\n return DisableReason.WorkflowStagePermission({\n stageName,\n });\n }\n if(flags.updateRestrictDueToResolvedVariantPermissions) {\n return DisableReason.ResolvedVariantPermissions;\n }\n return DisableReason.None;\n};\n\nexport const isFieldDisabled = (\n fieldSchemaMap: ISchemaFieldMap,\n eventFieldDetails: FieldDetails,\n resolvedVariantPermissions?: ResolvedVariantPermissions,\n entryPermissions?: EntryPermissions,\n entryWorkflowStageDetails?: WorkflowStageDetails,\n): FieldDisableState => {\n const { editableElement, fieldMetadata } = eventFieldDetails;\n const masterLocale = Config.get().stackDetails.masterLocale || \"en-us\";\n const { locale: cmsLocale, variant } =\n VisualBuilder.VisualBuilderGlobalState.value;\n\n const flags: Record<string, boolean> = {\n updateRestrictDueToRole: Boolean(\n fieldSchemaMap?.field_metadata?.updateRestrict\n ),\n updateRestrictDueToUnlinkVariant: Boolean(\n fieldSchemaMap?.field_metadata?.isUnlinkedVariant\n ),\n canLinkVariant: Boolean(fieldSchemaMap?.field_metadata?.canLinkVariant),\n updateRestrictDueToUnlocalizedVariant: Boolean(\n variant && fieldMetadata.locale !== cmsLocale\n ),\n updateRestrictDueToNonLocalizableFields: Boolean(\n fieldSchemaMap?.non_localizable &&\n masterLocale !== fieldMetadata.locale\n ),\n updateRestrictDueToResolvedVariantPermissions: resolvedVariantPermissions ? Boolean(\n !resolvedVariantPermissions.update\n ) : false,\n updateRestrictDueToAudienceMode: false,\n updateRestrictDueToDisabledVariant: false,\n };\n\n if (entryPermissions && !entryPermissions.update) {\n flags.updateRestrictDueToEntryUpdateRestriction = true;\n }\n\n if (\n entryWorkflowStageDetails &&\n !entryWorkflowStageDetails.permissions.entry.update\n ) {\n flags.updateRestrictDueToWorkflowStagePermission = true;\n }\n\n if(VisualBuilder.VisualBuilderGlobalState.value.audienceMode\n && editableElement.classList.contains(\"visual-builder__lower-order-variant-field\")) {\n // If resolvedVariantPermissions errors out for any reason, we need to disable editing\n // for lower order (priority) variant fields with updateRestrictDueToDisabledVariant's message\n flags.updateRestrictDueToDisabledVariant = resolvedVariantPermissions ? !!resolvedVariantPermissions.error : false;\n }\n\n if (\n VisualBuilder.VisualBuilderGlobalState.value.audienceMode &&\n !editableElement.classList.contains(\"visual-builder__variant-field\") &&\n !editableElement.classList.contains(\"visual-builder__base-field\")\n ) {\n if (\n editableElement.classList.contains(\n \"visual-builder__disabled-variant-field\"\n )\n ) {\n flags.updateRestrictDueToDisabledVariant = true;\n } else {\n flags.updateRestrictDueToAudienceMode = true;\n }\n }\n\n const isDisabled = Object.values(flags).some(Boolean);\n\n const getDisableReasonParams: {\n stageName?: string;\n entryWorkflowStageDetails?: WorkflowStageDetails;\n entryPermissions?: EntryPermissions;\n } = {};\n if (entryWorkflowStageDetails?.stage?.name !== undefined) {\n getDisableReasonParams.stageName = entryWorkflowStageDetails.stage.name;\n }\n if (entryWorkflowStageDetails !== undefined) {\n getDisableReasonParams.entryWorkflowStageDetails =\n entryWorkflowStageDetails;\n }\n if (entryPermissions !== undefined) {\n getDisableReasonParams.entryPermissions = entryPermissions;\n }\n\n const reason = getDisableReason(flags, getDisableReasonParams);\n\n let workflowRequestUi: \"request\" | \"pending\" | undefined;\n if (\n flags.updateRestrictDueToWorkflowStagePermission &&\n !flags.updateRestrictDueToEntryUpdateRestriction &&\n (entryPermissions == null || entryPermissions.update === true) &&\n entryWorkflowStageDetails?.requestEditAccess\n ) {\n const req = entryWorkflowStageDetails.requestEditAccess;\n if (req.hasPending) {\n workflowRequestUi = \"pending\";\n } else if (req.canRequest) {\n workflowRequestUi = \"request\";\n }\n }\n\n return workflowRequestUi !== undefined\n ? { isDisabled, reason, workflowRequestUi }\n : { isDisabled, reason };\n};\n"],"mappings":"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","names":["Config"]}
|
|
@@ -26,11 +26,19 @@ declare const DisableReason: {
|
|
|
26
26
|
readonly EntryUpdateRestrictedRoleAndWorkflowStage: ({ stageName, }: {
|
|
27
27
|
stageName: string;
|
|
28
28
|
}) => string;
|
|
29
|
+
readonly WorkflowStageRequestEdit: ({ stageName }: {
|
|
30
|
+
stageName: string;
|
|
31
|
+
}) => string;
|
|
32
|
+
readonly WorkflowStageRequestPending: ({ stageName }: {
|
|
33
|
+
stageName: string;
|
|
34
|
+
}) => string;
|
|
29
35
|
};
|
|
30
36
|
interface FieldDisableState {
|
|
31
37
|
isDisabled: boolean;
|
|
32
38
|
reason: string;
|
|
39
|
+
/** Canvas: workflow stage lock with request-edit UX (see fieldLabelWrapper). */
|
|
40
|
+
workflowRequestUi?: "request" | "pending";
|
|
33
41
|
}
|
|
34
42
|
declare const isFieldDisabled: (fieldSchemaMap: ISchemaFieldMap, eventFieldDetails: FieldDetails, resolvedVariantPermissions?: ResolvedVariantPermissions, entryPermissions?: EntryPermissions, entryWorkflowStageDetails?: WorkflowStageDetails) => FieldDisableState;
|
|
35
43
|
|
|
36
|
-
export { DisableReason, isFieldDisabled };
|
|
44
|
+
export { DisableReason, type FieldDisableState, isFieldDisabled };
|