import { isSomeElementSelected } from "../scene"; import { KEYS } from "../keys"; import { ToolButton } from "../components/ToolButton"; import React from "react"; import { trash } from "../components/icons"; import { t } from "../i18n"; import { register } from "./register"; import { getNonDeletedElements } from "../element"; import { ExcalidrawElement } from "../element/types"; import { AppState } from "../types"; import { newElementWith } from "../element/mutateElement"; import { getElementsInGroup } from "../groups"; const deleteSelectedElements = ( elements: readonly ExcalidrawElement[], appState: AppState, ) => { return { elements: elements.map((el) => { if (appState.selectedElementIds[el.id]) { return newElementWith(el, { isDeleted: true }); } return el; }), appState: { ...appState, selectedElementIds: {}, }, }; }; export const actionDeleteSelected = register({ name: "deleteSelectedElements", perform: (elements, appState) => { let { elements: nextElements, appState: nextAppState, } = deleteSelectedElements(elements, appState); if (appState.editingGroupId) { const siblingElements = getElementsInGroup( getNonDeletedElements(nextElements), appState.editingGroupId!, ); if (siblingElements.length) { nextAppState = { ...nextAppState, selectedElementIds: { [siblingElements[0].id]: true }, }; } } return { elements: nextElements, appState: { ...nextAppState, elementType: "selection", multiElement: null, }, commitToHistory: isSomeElementSelected( getNonDeletedElements(elements), appState, ), }; }, contextItemLabel: "labels.delete", contextMenuOrder: 3, keyTest: (event) => event.key === KEYS.BACKSPACE || event.key === KEYS.DELETE, PanelComponent: ({ elements, appState, updateData }) => ( updateData(null)} visible={isSomeElementSelected(getNonDeletedElements(elements), appState)} /> ), });