@contentstack/live-preview-utils
Version:
Contentstack provides the Live Preview SDK to establish a communication channel between the various Contentstack SDKs and your website, transmitting live changes to the preview pane.
99 lines (98 loc) • 3.55 kB
JavaScript
import "../../chunk-5WRI5ZAA.js";
// src/visualBuilder/eventManager/useRevalidateFieldDataPostMessageEvent.ts
import { VisualBuilder } from "../index.js";
import { extractDetailsFromCslp } from "../../cslp/index.js";
import { FieldSchemaMap } from "../utils/fieldSchemaMap.js";
import { hideFocusOverlay } from "../generators/generateOverlay.js";
import { handleBuilderInteraction } from "../listeners/mouseClick.js";
async function handleRevalidateFieldData() {
const focusedElement = VisualBuilder.VisualBuilderGlobalState.value.previousSelectedEditableDOM;
const hoveredElement = VisualBuilder.VisualBuilderGlobalState.value.previousHoveredTargetDOM;
const elementCslp = focusedElement?.getAttribute("data-cslp");
const elementCslpUniqueId = focusedElement?.getAttribute("data-cslp-unique-id") || null;
const shouldRefocus = !!focusedElement;
try {
if (shouldRefocus) {
await unfocusElement();
}
const targetElement = hoveredElement || focusedElement;
if (targetElement) {
const cslp = targetElement.getAttribute("data-cslp");
if (cslp) {
const fieldMetadata = extractDetailsFromCslp(cslp);
FieldSchemaMap.clearContentTypeSchema(
fieldMetadata.content_type_uid
);
}
}
FieldSchemaMap.clear();
} catch (error) {
console.error("Error handling revalidate field data:", error);
window.location.reload();
} finally {
if (shouldRefocus && elementCslp) {
await refocusElement(elementCslp, elementCslpUniqueId);
}
}
}
async function unfocusElement() {
const { visualBuilderContainer, overlayWrapper, focusedToolbar } = getVisualBuilderElements();
if (!visualBuilderContainer || !overlayWrapper) return;
const dummyResizeObserver = new ResizeObserver(() => {
});
hideFocusOverlay({
visualBuilderContainer,
visualBuilderOverlayWrapper: overlayWrapper,
focusedToolbar,
resizeObserver: dummyResizeObserver,
noTrigger: true
});
VisualBuilder.VisualBuilderGlobalState.value.previousSelectedEditableDOM = null;
VisualBuilder.VisualBuilderGlobalState.value.isFocussed = false;
}
async function refocusElement(cslp, uniqueId) {
try {
const elementToRefocus = uniqueId && document.querySelector(
`[data-cslp-unique-id="${uniqueId}"]`
) || document.querySelector(`[data-cslp="${cslp}"]`);
if (!elementToRefocus) return;
const { visualBuilderContainer, overlayWrapper, focusedToolbar } = getVisualBuilderElements();
if (!visualBuilderContainer || !overlayWrapper) return;
const syntheticEvent = new MouseEvent("click", {
bubbles: true,
cancelable: true
});
Object.defineProperty(syntheticEvent, "target", {
value: elementToRefocus,
enumerable: true
});
await handleBuilderInteraction({
event: syntheticEvent,
previousSelectedEditableDOM: null,
visualBuilderContainer,
overlayWrapper,
focusedToolbar,
resizeObserver: new ResizeObserver(() => {
})
});
} catch (error) {
console.warn("Could not refocus element after revalidation:", error);
}
}
function getVisualBuilderElements() {
return {
visualBuilderContainer: document.querySelector(
".visual-builder__container"
),
overlayWrapper: document.querySelector(
".visual-builder__overlay__wrapper"
),
focusedToolbar: document.querySelector(
".visual-builder__focused-toolbar"
)
};
}
export {
handleRevalidateFieldData
};
//# sourceMappingURL=useRevalidateFieldDataPostMessageEvent.js.map