Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
import { render, waitFor, cleanup } from "@testing-library/preact";
import FieldLabelWrapperComponent from "../../fieldLabelWrapper";
import visualBuilderPostMessage from "../../../utils/visualBuilderPostMessage";
import { VisualBuilderPostMessageEvents } from "../../../utils/types/postMessage.types";
import React from "preact/compat";
import { mockFieldMetadata } from "./fieldLabelWrapper.mocks";

vi.mock("../../../utils/visualBuilderPostMessage", () => ({
default: { send: vi.fn().mockResolvedValue({}) },
}));

vi.mock("../../../utils/fieldSchemaMap", () => ({
FieldSchemaMap: {
getFieldSchema: vi.fn().mockResolvedValue({
display_name: "Title",
data_type: "text",
field_metadata: {},
uid: "title",
}),
},
}));

vi.mock("../../../utils/fetchEntryPermissionsAndStageDetails", () => ({
fetchEntryPermissionsAndStageDetails: vi.fn().mockResolvedValue({}),
}));

// class names only; generating the real stylesheet slows jsdom down test after test
vi.mock("../../../visualBuilder.style", () => ({
visualBuilderStyles: () =>
new Proxy({}, { get: (_target, name) => String(name) }),
}));

describe("FieldLabelWrapperComponent - reference map request", () => {
afterEach(() => {
cleanup();
vi.clearAllMocks();
});

test("names the hovered field's entry so the editor can skip building the whole map", async () => {
render(
<FieldLabelWrapperComponent
fieldMetadata={mockFieldMetadata}
eventDetails={{
editableElement: document.createElement("div"),
cslpData: "",
fieldMetadata: mockFieldMetadata,
}}
parentPaths={[]}
getParentEditableElement={() => document.createElement("div")}
/>
);

await waitFor(() =>
expect(visualBuilderPostMessage!.send).toHaveBeenCalledWith(
VisualBuilderPostMessageEvents.REFERENCE_MAP,
{
entry_uid: mockFieldMetadata.entry_uid,
content_type_uid: mockFieldMetadata.content_type_uid,
locale: mockFieldMetadata.locale,
}
)
);
});
});
12 changes: 9 additions & 3 deletions src/visualBuilder/components/fieldLabelWrapper.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -50,9 +50,15 @@ async function getContentTypeName(contentTypeUid: string) {
}
}

async function getReferenceParentMap() {
// Naming the hovered entry lets the editor answer without building the whole
// map, e.g. at once for the page entry. Older editors ignore the payload.
async function getReferenceParentMap(fieldMetadata: CslpData) {
try {
const result = await visualBuilderPostMessage?.send<ReferenceParentMap>(VisualBuilderPostMessageEvents.REFERENCE_MAP, {}) ?? {};
const result = await visualBuilderPostMessage?.send<ReferenceParentMap>(VisualBuilderPostMessageEvents.REFERENCE_MAP, {
entry_uid: fieldMetadata.entry_uid,
content_type_uid: fieldMetadata.content_type_uid,
locale: fieldMetadata.locale,
}) ?? {};
return result;
} catch(e) {
console.warn("[getFieldLabelWrapper] Error getting reference parent map", e);
Expand Down Expand Up @@ -240,7 +246,7 @@ function FieldLabelWrapperComponent(
getContentTypeName(
props.fieldMetadata.content_type_uid
),
getReferenceParentMap()
getReferenceParentMap(props.fieldMetadata)
]);
const entryUid = props.fieldMetadata.entry_uid;

Expand Down
Loading