import { getNonDeletedElements } from "../element"; import { LinearElementEditor } from "../element/linearElementEditor"; import { isLinearElement } from "../element/typeChecks"; import { ExcalidrawLinearElement } from "../element/types"; import { getSelectedElements } from "../scene"; import { register } from "./register"; export const actionToggleLinearEditor = register({ name: "toggleLinearEditor", trackEvent: { category: "element", }, predicate: (elements, appState) => { const selectedElements = getSelectedElements(elements, appState); if (selectedElements.length === 1 && isLinearElement(selectedElements[0])) { return true; } return false; }, perform(elements, appState, _, app) { const selectedElement = getSelectedElements( getNonDeletedElements(elements), appState, true, )[0] as ExcalidrawLinearElement; const editingLinearElement = appState.editingLinearElement?.elementId === selectedElement.id ? null : new LinearElementEditor(selectedElement, app.scene); return { appState: { ...appState, editingLinearElement, }, commitToHistory: false, }; }, contextItemLabel: (elements, appState) => { const selectedElement = getSelectedElements( getNonDeletedElements(elements), appState, true, )[0] as ExcalidrawLinearElement; return appState.editingLinearElement?.elementId === selectedElement.id ? "labels.lineEditor.exit" : "labels.lineEditor.edit"; }, });