Переглянути джерело

Reset selectedElementIds when deleting selected elements (#875)

Pete Hunt 5 роки тому
батько
коміт
c89584832d

+ 10 - 2
src/actions/actionDeleteSelected.tsx

@@ -9,9 +9,17 @@ import { register } from "./register";
 export const actionDeleteSelected = register({
   name: "deleteSelectedElements",
   perform: (elements, appState) => {
+    const {
+      elements: nextElements,
+      appState: nextAppState,
+    } = deleteSelectedElements(elements, appState);
     return {
-      elements: deleteSelectedElements(elements, appState),
-      appState: { ...appState, elementType: "selection", multiElement: null },
+      elements: nextElements,
+      appState: {
+        ...nextAppState,
+        elementType: "selection",
+        multiElement: null,
+      },
     };
   },
   contextItemLabel: "labels.delete",

+ 6 - 2
src/components/App.tsx

@@ -180,9 +180,13 @@ export class App extends React.Component<any, AppState> {
       return;
     }
     copyToAppClipboard(elements, this.state);
-    elements = deleteSelectedElements(elements, this.state);
+    const { elements: nextElements, appState } = deleteSelectedElements(
+      elements,
+      this.state,
+    );
+    elements = nextElements;
     history.resumeRecording();
-    this.setState({});
+    this.setState({ ...appState });
     event.preventDefault();
   };
   private onCopy = (event: ClipboardEvent) => {

+ 7 - 1
src/scene/selection.ts

@@ -34,7 +34,13 @@ export function deleteSelectedElements(
   elements: readonly ExcalidrawElement[],
   appState: AppState,
 ) {
-  return elements.filter(el => !appState.selectedElementIds[el.id]);
+  return {
+    elements: elements.filter(el => !appState.selectedElementIds[el.id]),
+    appState: {
+      ...appState,
+      selectedElementIds: {},
+    },
+  };
 }
 
 export function getSelectedIndices(