fix(editor): fix target element index when creating/adding elements to frames (#11257)
This commit is contained in:
@@ -305,8 +305,88 @@ describe("pasting & frames", () => {
|
||||
|
||||
await waitFor(() => {
|
||||
expect(h.elements.length).toBe(2);
|
||||
expect(h.elements[0].type).toBe(rect.type);
|
||||
expect(h.elements[0].frameId).toBe(frame.id);
|
||||
expect(h.elements[1].id).toBe(frame.id);
|
||||
expect(h.elements[0].index! < frame.index!).toBe(true);
|
||||
});
|
||||
});
|
||||
|
||||
it("should layer pasted elements above the highest frame child", async () => {
|
||||
const frame = API.createElement({
|
||||
type: "frame",
|
||||
width: 100,
|
||||
height: 100,
|
||||
x: 0,
|
||||
y: 0,
|
||||
});
|
||||
const frameChild = API.createElement({
|
||||
id: "frameChild",
|
||||
type: "rectangle",
|
||||
x: 10,
|
||||
y: 10,
|
||||
width: 20,
|
||||
height: 20,
|
||||
frameId: frame.id,
|
||||
});
|
||||
const rect = API.createElement({ type: "rectangle" });
|
||||
|
||||
API.setElements([frameChild, frame]);
|
||||
|
||||
const clipboardJSON = await serializeAsClipboardJSON({
|
||||
elements: [rect],
|
||||
files: null,
|
||||
});
|
||||
|
||||
mouse.moveTo(50, 50);
|
||||
|
||||
pasteWithCtrlCmdV(clipboardJSON);
|
||||
|
||||
await waitFor(() => {
|
||||
expect(h.elements.length).toBe(3);
|
||||
expect(h.elements[1].type).toBe(rect.type);
|
||||
expect(h.elements[1].frameId).toBe(frame.id);
|
||||
expect(h.elements.map((element) => element.id)).toEqual([
|
||||
frameChild.id,
|
||||
h.elements[1].id,
|
||||
frame.id,
|
||||
]);
|
||||
expect(h.elements[1].index! > frameChild.index!).toBe(true);
|
||||
expect(h.elements[1].index! < frame.index!).toBe(true);
|
||||
});
|
||||
});
|
||||
|
||||
it("should preserve denormalized pasted frame child order", async () => {
|
||||
const frame = API.createElement({
|
||||
type: "frame",
|
||||
width: 100,
|
||||
height: 100,
|
||||
x: 0,
|
||||
y: 0,
|
||||
});
|
||||
const frameChild = API.createElement({
|
||||
type: "rectangle",
|
||||
x: 10,
|
||||
y: 10,
|
||||
width: 20,
|
||||
height: 20,
|
||||
frameId: frame.id,
|
||||
});
|
||||
|
||||
const clipboardJSON = await serializeAsClipboardJSON({
|
||||
elements: [frame, frameChild],
|
||||
files: null,
|
||||
});
|
||||
|
||||
mouse.moveTo(200, 200);
|
||||
|
||||
pasteWithCtrlCmdV(clipboardJSON);
|
||||
|
||||
await waitFor(() => {
|
||||
expect(h.elements.length).toBe(2);
|
||||
expect(h.elements[0].type).toBe(frame.type);
|
||||
expect(h.elements[1].type).toBe(frameChild.type);
|
||||
expect(h.elements[1].frameId).toBe(h.elements[0].id);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -379,8 +459,9 @@ describe("pasting & frames", () => {
|
||||
|
||||
await waitFor(() => {
|
||||
expect(h.elements.length).toBe(3);
|
||||
expect(h.elements[1].type).toBe(rect.type);
|
||||
expect(h.elements[1].frameId).toBe(frame.id);
|
||||
expect(h.elements[0].type).toBe(rect.type);
|
||||
expect(h.elements[0].frameId).toBe(frame.id);
|
||||
expect(h.elements[1].id).toBe(frame.id);
|
||||
expect(h.elements[2].type).toBe(rect2.type);
|
||||
expect(h.elements[2].frameId).toBe(null);
|
||||
});
|
||||
@@ -422,10 +503,11 @@ describe("pasting & frames", () => {
|
||||
|
||||
await waitFor(() => {
|
||||
expect(h.elements.length).toBe(3);
|
||||
expect(h.elements[1].type).toBe(rect.type);
|
||||
expect(h.elements[0].type).toBe(rect.type);
|
||||
expect(h.elements[0].frameId).toBe(frame.id);
|
||||
expect(h.elements[1].type).toBe(rect2.type);
|
||||
expect(h.elements[1].frameId).toBe(frame.id);
|
||||
expect(h.elements[2].type).toBe(rect2.type);
|
||||
expect(h.elements[2].frameId).toBe(frame.id);
|
||||
expect(h.elements[2].id).toBe(frame.id);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -473,8 +555,9 @@ describe("pasting & frames", () => {
|
||||
|
||||
await waitFor(() => {
|
||||
expect(h.elements.length).toBe(4);
|
||||
expect(h.elements[1].type).toBe(rect.type);
|
||||
expect(h.elements[1].frameId).toBe(frame.id);
|
||||
expect(h.elements[0].type).toBe(rect.type);
|
||||
expect(h.elements[0].frameId).toBe(frame.id);
|
||||
expect(h.elements[1].id).toBe(frame.id);
|
||||
expect(h.elements[2].type).toBe(rect2.type);
|
||||
expect(h.elements[2].frameId).toBe(h.elements[3].id);
|
||||
expect(h.elements[3].type).toBe(frame2.type);
|
||||
|
||||
Reference in New Issue
Block a user