diff --git a/src/components/App.tsx b/src/components/App.tsx index 9c2c6a6fa..3158cefac 100644 --- a/src/components/App.tsx +++ b/src/components/App.tsx @@ -7393,6 +7393,30 @@ class App extends React.Component { this.setState({ suggestedBindings }); } + public setSelection(elements: readonly NonDeletedExcalidrawElement[]) { + const selectedElementIds: { [id: string]: true } = {}; + const selectedGroupIds: { [id: string]: true } = {}; + + elements.forEach((ele) => { + if (ele.groupIds.length) { + selectedElementIds[ele.id] = true; + ele.groupIds.forEach((id) => { + selectedGroupIds[id] = true; + }); + } + // exclude bound text elements as we don't mark them as selected when + // container is selected unless in group + else if (!isBoundToContainer(ele)) { + selectedElementIds[ele.id] = true; + } + }); + + this.setState({ + previousSelectedElementIds: this.state.selectedElementIds, + selectedElementIds, + selectedGroupIds, + }); + } private clearSelection(hitElement: ExcalidrawElement | null): void { this.setState((prevState) => ({ selectedElementIds: makeNextSelectedElementIds({}, prevState), diff --git a/src/components/MermaidToExcalidraw.tsx b/src/components/MermaidToExcalidraw.tsx index a15fd6852..9fc504d7a 100644 --- a/src/components/MermaidToExcalidraw.tsx +++ b/src/components/MermaidToExcalidraw.tsx @@ -99,6 +99,9 @@ const MermaidToExcalidraw = ({ app.scene.replaceAllElements([...elements, ...canvasData.elements]); app.addFiles(Object.values(canvasData.files || [])); app.scrollToContent(canvasData.elements); + + app.setSelection(canvasData.elements); + onClose(); }; diff --git a/src/types.ts b/src/types.ts index 303bf50d2..deb4427f2 100644 --- a/src/types.ts +++ b/src/types.ts @@ -527,6 +527,7 @@ export type AppClassProperties = { lastViewportPosition: App["lastViewportPosition"]; scrollToContent: App["scrollToContent"]; addFiles: App["addFiles"]; + setSelection: App["setSelection"]; }; export type PointerDownState = Readonly<{