mirror of
				https://github.com/excalidraw/excalidraw.git
				synced 2025-11-04 12:54:23 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			212 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			212 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
import React from "react";
 | 
						|
import { Excalidraw, mutateElement } from "../index";
 | 
						|
import { act, assertElements, render } from "../tests/test-utils";
 | 
						|
import { API } from "../tests/helpers/api";
 | 
						|
import { actionDeleteSelected } from "./actionDeleteSelected";
 | 
						|
 | 
						|
const { h } = window;
 | 
						|
 | 
						|
describe("deleting selected elements when frame selected should keep children + select them", () => {
 | 
						|
  beforeEach(async () => {
 | 
						|
    await render(<Excalidraw />);
 | 
						|
  });
 | 
						|
 | 
						|
  it("frame only", async () => {
 | 
						|
    const f1 = API.createElement({
 | 
						|
      type: "frame",
 | 
						|
    });
 | 
						|
 | 
						|
    const r1 = API.createElement({
 | 
						|
      type: "rectangle",
 | 
						|
      frameId: f1.id,
 | 
						|
    });
 | 
						|
 | 
						|
    API.setElements([f1, r1]);
 | 
						|
 | 
						|
    API.setSelectedElements([f1]);
 | 
						|
 | 
						|
    act(() => {
 | 
						|
      h.app.actionManager.executeAction(actionDeleteSelected);
 | 
						|
    });
 | 
						|
 | 
						|
    assertElements(h.elements, [
 | 
						|
      { id: f1.id, isDeleted: true },
 | 
						|
      { id: r1.id, isDeleted: false, selected: true },
 | 
						|
    ]);
 | 
						|
  });
 | 
						|
 | 
						|
  it("frame + text container (text's frameId set)", async () => {
 | 
						|
    const f1 = API.createElement({
 | 
						|
      type: "frame",
 | 
						|
    });
 | 
						|
 | 
						|
    const r1 = API.createElement({
 | 
						|
      type: "rectangle",
 | 
						|
      frameId: f1.id,
 | 
						|
    });
 | 
						|
 | 
						|
    const t1 = API.createElement({
 | 
						|
      type: "text",
 | 
						|
      width: 200,
 | 
						|
      height: 100,
 | 
						|
      fontSize: 20,
 | 
						|
      containerId: r1.id,
 | 
						|
      frameId: f1.id,
 | 
						|
    });
 | 
						|
 | 
						|
    mutateElement(r1, {
 | 
						|
      boundElements: [{ type: "text", id: t1.id }],
 | 
						|
    });
 | 
						|
 | 
						|
    API.setElements([f1, r1, t1]);
 | 
						|
 | 
						|
    API.setSelectedElements([f1]);
 | 
						|
 | 
						|
    act(() => {
 | 
						|
      h.app.actionManager.executeAction(actionDeleteSelected);
 | 
						|
    });
 | 
						|
 | 
						|
    assertElements(h.elements, [
 | 
						|
      { id: f1.id, isDeleted: true },
 | 
						|
      { id: r1.id, isDeleted: false, selected: true },
 | 
						|
      { id: t1.id, isDeleted: false },
 | 
						|
    ]);
 | 
						|
  });
 | 
						|
 | 
						|
  it("frame + text container (text's frameId not set)", async () => {
 | 
						|
    const f1 = API.createElement({
 | 
						|
      type: "frame",
 | 
						|
    });
 | 
						|
 | 
						|
    const r1 = API.createElement({
 | 
						|
      type: "rectangle",
 | 
						|
      frameId: f1.id,
 | 
						|
    });
 | 
						|
 | 
						|
    const t1 = API.createElement({
 | 
						|
      type: "text",
 | 
						|
      width: 200,
 | 
						|
      height: 100,
 | 
						|
      fontSize: 20,
 | 
						|
      containerId: r1.id,
 | 
						|
      frameId: null,
 | 
						|
    });
 | 
						|
 | 
						|
    mutateElement(r1, {
 | 
						|
      boundElements: [{ type: "text", id: t1.id }],
 | 
						|
    });
 | 
						|
 | 
						|
    API.setElements([f1, r1, t1]);
 | 
						|
 | 
						|
    API.setSelectedElements([f1]);
 | 
						|
 | 
						|
    act(() => {
 | 
						|
      h.app.actionManager.executeAction(actionDeleteSelected);
 | 
						|
    });
 | 
						|
 | 
						|
    assertElements(h.elements, [
 | 
						|
      { id: f1.id, isDeleted: true },
 | 
						|
      { id: r1.id, isDeleted: false, selected: true },
 | 
						|
      { id: t1.id, isDeleted: false },
 | 
						|
    ]);
 | 
						|
  });
 | 
						|
 | 
						|
  it("frame + text container (text selected too)", async () => {
 | 
						|
    const f1 = API.createElement({
 | 
						|
      type: "frame",
 | 
						|
    });
 | 
						|
 | 
						|
    const r1 = API.createElement({
 | 
						|
      type: "rectangle",
 | 
						|
      frameId: f1.id,
 | 
						|
    });
 | 
						|
 | 
						|
    const t1 = API.createElement({
 | 
						|
      type: "text",
 | 
						|
      width: 200,
 | 
						|
      height: 100,
 | 
						|
      fontSize: 20,
 | 
						|
      containerId: r1.id,
 | 
						|
      frameId: null,
 | 
						|
    });
 | 
						|
 | 
						|
    mutateElement(r1, {
 | 
						|
      boundElements: [{ type: "text", id: t1.id }],
 | 
						|
    });
 | 
						|
 | 
						|
    API.setElements([f1, r1, t1]);
 | 
						|
 | 
						|
    API.setSelectedElements([f1, t1]);
 | 
						|
 | 
						|
    act(() => {
 | 
						|
      h.app.actionManager.executeAction(actionDeleteSelected);
 | 
						|
    });
 | 
						|
 | 
						|
    assertElements(h.elements, [
 | 
						|
      { id: f1.id, isDeleted: true },
 | 
						|
      { id: r1.id, isDeleted: false, selected: true },
 | 
						|
      { id: t1.id, isDeleted: false },
 | 
						|
    ]);
 | 
						|
  });
 | 
						|
 | 
						|
  it("frame + labeled arrow", async () => {
 | 
						|
    const f1 = API.createElement({
 | 
						|
      type: "frame",
 | 
						|
    });
 | 
						|
 | 
						|
    const a1 = API.createElement({
 | 
						|
      type: "arrow",
 | 
						|
      frameId: f1.id,
 | 
						|
    });
 | 
						|
 | 
						|
    const t1 = API.createElement({
 | 
						|
      type: "text",
 | 
						|
      width: 200,
 | 
						|
      height: 100,
 | 
						|
      fontSize: 20,
 | 
						|
      containerId: a1.id,
 | 
						|
      frameId: null,
 | 
						|
    });
 | 
						|
 | 
						|
    mutateElement(a1, {
 | 
						|
      boundElements: [{ type: "text", id: t1.id }],
 | 
						|
    });
 | 
						|
 | 
						|
    API.setElements([f1, a1, t1]);
 | 
						|
 | 
						|
    API.setSelectedElements([f1, t1]);
 | 
						|
 | 
						|
    act(() => {
 | 
						|
      h.app.actionManager.executeAction(actionDeleteSelected);
 | 
						|
    });
 | 
						|
 | 
						|
    assertElements(h.elements, [
 | 
						|
      { id: f1.id, isDeleted: true },
 | 
						|
      { id: a1.id, isDeleted: false, selected: true },
 | 
						|
      { id: t1.id, isDeleted: false },
 | 
						|
    ]);
 | 
						|
  });
 | 
						|
 | 
						|
  it("frame + children selected", async () => {
 | 
						|
    const f1 = API.createElement({
 | 
						|
      type: "frame",
 | 
						|
    });
 | 
						|
    const r1 = API.createElement({
 | 
						|
      type: "rectangle",
 | 
						|
      frameId: f1.id,
 | 
						|
    });
 | 
						|
    API.setElements([f1, r1]);
 | 
						|
 | 
						|
    API.setSelectedElements([f1, r1]);
 | 
						|
 | 
						|
    act(() => {
 | 
						|
      h.app.actionManager.executeAction(actionDeleteSelected);
 | 
						|
    });
 | 
						|
 | 
						|
    assertElements(h.elements, [
 | 
						|
      { id: f1.id, isDeleted: true },
 | 
						|
      { id: r1.id, isDeleted: false, selected: true },
 | 
						|
    ]);
 | 
						|
  });
 | 
						|
});
 |